🚀 프로젝트

    [DuDoong] 두둥 프로젝트 관련 글 정리

    [DuDoong] 두둥 프로젝트 관련 글 정리

    📚 사용 언어 / 프레임워크 Java + Spring Boot MySQL Redis Docker JUnit5 Spring Batch Spring Cloud Feign 📝 관련 포스팅 Custom Enum Validator 구현하기 (Enum 값 JSON Parse Error 해결) Reflection 을 이용하여 Enum Validator 개선하기 Custom Enum Deserializer 구현하여 Enum 에 없는 값 null 로 파싱하기 스프링 날짜 타입 JSON 변환 및 포맷팅하기 - @JsonFormat, @JacksonAnnotationsInside Incoming WebHooks 로 슬랙봇 생성 및 슬랙 메세지 전송하기 500 내부 에러 발생 시 Slack 알림 전송하기 (슬랙 봇) ✨ 웹 ..

    [Spring] 스프링 500 에러 발생 시 Slack 알림 전송하기 (슬랙 봇)

    [Spring] 스프링 500 에러 발생 시 Slack 알림 전송하기 (슬랙 봇)

    지난 글에 이은, 본격적으로 500 내부 서버 에러 발생 시 슬랙으로 알림을 전송해주는 봇을 만들어보는 글이다. Slack API 를 활용하여 이러한 알림 서비스를 구현할 수 있다. ⚙️ Dependency implementation 'com.slack.api:slack-api-client:1.27.2' 다음과 같은 의존성을 build.gradle 에 추가해준다. 🚀 Slack API 사용하기 위한 설정 📝 SlackApiConfig @Configuration public class SlackApiConfig { @Value("${slack.webhook.token}") private String token; @Bean public MethodsClient getClient() { Slack slackC..

    [Spring] 스프링 Slack 메세지 전송하기 (Incoming WebHooks 활용하여 슬랙봇 만들기)

    [Spring] 스프링 Slack 메세지 전송하기 (Incoming WebHooks 활용하여 슬랙봇 만들기)

    개발 중 로컬 서버에서 발생한 에러는 바로 탐지가 가능하지만, 배포 서버에서 실행 중일 때 발생한 에러는 바로 탐지가 어렵다. 그래서 에러 발생 시 메세지를 띄워주면 좋겠다고 누구나 한 번 쯤은 생각해보았을 것이다. Slack API 를 활용하여 알림을 보낸다면 이러한 알림 서비스를 구현하고 활용할 수 있다. 다만 이 파트에서는 에러 자동 탐지 알림 대신 사용자 편의를 의한 단순 메세지 발송에 대해서만 적었다. 500 서버 에러 탐지 알림은 아래 다른 게시글에 올려두었다. https://gengminy.tistory.com/53 [Spring] 스프링 500 에러 발생 시 Slack 알림 전송하기 (슬랙 봇) 지난 글에 이은, 본격적으로 500 내부 서버 에러 발생 시 슬랙으로 알림을 전송해주는 봇을 만..

    [Spring] 스프링 날짜 타입 JSON 변환 및 포맷팅하기 - @JsonFormat, @JacksonAnnotationsInside

    [Spring] 스프링 날짜 타입 JSON 변환 및 포맷팅하기 - @JsonFormat, @JacksonAnnotationsInside

    개발을 하다보면 좋든 싫든 항상 날짜에 대한 포맷팅을 마주하게 된다. 이 글에서는 그 과정에서 공부했던, @JsonFormat 을 활용하여 LocalDateTime 등 날짜에 대한 JSON 직렬화하기와 또 날짜 포맷팅, Jackson 을 활용한 커스텀 어노테이션까지 적어보았다. 💥 LocalDateTime 형식 { "name": "hello", "startAt": "2023-02-26T15:12:17.536Z", "endAt": "2023-02-26T15:12:17.536Z" } LocalDateTime 같은 경우에는 기본적으로 중간에 알파벳 등이 섞여있어 응답 시 같이 내보내게 된다. { "name": "hello", "startAt": "2023.03.20 12:00", "endAt": "2023.0..

    [Spring] 스프링 Custom Enum Deserializer 구현으로 JSON Enum null 로 파싱하기

    [Spring] 스프링 Custom Enum Deserializer 구현으로 JSON Enum null 로 파싱하기

    https://gengminy.tistory.com/48 [Spring] 스프링 Enum Validator Reflection 으로 개선 및 구현하기 https://gengminy.tistory.com/47 [Spring] 스프링에서 Enum 클래스 Validation 추가하기 (Enum JSON parse error 해결) 스프링에서 일반적으로 RequestBody 의 값을 Validation 하는 방법 스프링 MVC 에서 @Valid 어노테이션을 gengminy.tistory.com 앞서 스프링에서 Custom Enum Constraint Validator 를 Reflection 으로까지 구현했다. 하지만 딱 한 가지가 남았는데.... 보기 싫었던 다음과 같은 반복적인 코드가 있다. // Enum V..

    [Spring] 스프링 Enum Validator Reflection 으로 개선 및 구현하기

    [Spring] 스프링 Enum Validator Reflection 으로 개선 및 구현하기

    https://gengminy.tistory.com/47 [Spring] 스프링에서 Enum 클래스 Validation 추가하기 (Enum JSON parse error 해결) 스프링에서 일반적으로 RequestBody 의 값을 Validation 하는 방법 스프링 MVC 에서 @Valid 어노테이션을 명시해주면 컨트롤러에서 해당 값에 대해 미리 Validation 해줘서 값이 들어오게 된다. JAVAX 에서 @Not gengminy.tistory.com 앞서 작성한 스프링에서 Custom Enum Constraint Validator 구현하기 이 글에서 @Enum 이라는 커스텀 어노테이션을 만들었고 Request 필드에서 적용해보았다. @Schema(defaultValue = "OPEN", descri..

    [Spring] 스프링에서 Enum 클래스 Validation 구현하기 (Enum JSON parse error 해결)

    [Spring] 스프링에서 Enum 클래스 Validation 구현하기 (Enum JSON parse error 해결)

    스프링에서 일반적으로 RequestBody 의 값을 Validation 하는 방법 스프링 MVC 에서 @Valid 어노테이션을 명시해주면 컨트롤러에서 해당 값에 대해 미리 Validation 해줘서 값이 들어오게 된다. JAVAX 에서 @NotBlank, @NotNull, @Positive 등등 원시 타입에 대해서는 여러 가지 기본 검증을 지원한다. 하지만 Enum 클래스에 대한 Validation 은 기본으로 지원하지 않는다. 그러면 어떤 식으로 처리해야 할까? 📌 Enum Validation 처리를 하지 않았을 경우 Enum 필드에 대해 Validation 처리하지 않는다면 Enum 클래스에 속하지 않은 값이 Request 필드에 포함되면 JSON 값을 Enum 으로 올바르게 파싱하지 못하여 위 처럼..

    [Spring] RefreshToken + Redis 사용해서 자동 로그인 + 로그아웃 구현하기

    [Spring] RefreshToken + Redis 사용해서 자동 로그인 + 로그아웃 구현하기

    모바일 어플리케이션 또는 일부 웹 앱을 사용하다 보면 보통 자동 로그인 체크 옵션이 있다. 또는 이런 옵션이 없어도 앱을 키면 이미 로그인 되어있는 경우가 많다. 카카오톡, 토스 등등 과연 어떻게 구현하는 것일까? 세션 방식과 토큰 방식에서 물론 차이가 있지만 내가 선호하는 방법인 토큰 방식으로 구현을 해보았다. 이 포스팅은 Spring Security, JWT, Redis 관련 세팅이 이미 되어있다고 가정하고 코드를 작성했습니다. 📌 자동 로그인 인증 과정 1) 유저가 성공적으로 로그인 했을 경우 리프레시 토큰과 엑세스 토큰을 응답받는다. 2) 유저는 이를 보관하고 사용하다가, 엑세스 토큰이 만료되는 시점이 올 것이다. 3) 유저의 서버 API 요청시 401 응답을 받으면 reissue 요청을 시도해야..