Spring

    [Slack] 슬랙 봇 설정 및 슬랙 OAuth Token 발급받기

    [Slack] 슬랙 봇 설정 및 슬랙 OAuth Token 발급받기

    스프링에서 Slack API 를 사용하기 위해서는 슬랙 웹훅 토큰이 필요하다. 따라서 슬랙 토큰을 발급받고 슬랙 봇을 등록하는 과정을 알아보자. 1. 워크스페이스 및 슬랙 APP 생성 https://api.slack.com/apps Slack API: Applications | Slack Your Apps Don't see an app you're looking for? Sign in to another workspace. api.slack.com 해당 작업 이전에 Slack 워크스페이스를 생성해두어야 합니다. 이후 슬랙 APP 을 생성하기 위해 Slack API 사이트에 접속합니다. 오른쪽 상단 Create New App App 이름 지어주고 이 앱을 등록할 워크스페이스를 지정합니다. 이후 Create..

    [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 요청을 시도해야..

    [Spring] 스프링 스케쥴러 사용해서 일정 주기로 메소드 실행하기 (Scheduler)

    [Spring] 스프링 스케쥴러 사용해서 일정 주기로 메소드 실행하기 (Scheduler)

    프로젝트 개발 중 엔티티를 생성한지 3일 이후에 자동으로 해당 엔티티 필드를 갱신해 만료 상태로 만드는 로직이 필요했다 PostgreSQL 에서는 내장 스케쥴러가 없다는 말도 있고 스케쥴러 사용하는 법이 까다로워서 로깅도 같이 하기 위해 그냥 스프링 내장 스케쥴러를 사용하기로 했다 ⚙️ Dependency @Scheduler 는 Spring Boot Starter 에서 기본으로 제공하는 어노테이션이다 🔨 전역 설정 📝 MyApplication @EnableScheduling //scheduler 사용 @EnableJpaAuditing //jpa entity 자동 감시 @SpringBootApplication public class MyApplication { public static void main(S..