전체 글

전체 글

    [Spring] 스프링 Feign Client 적용하기 (Spring Cloud OpenFeign)

    [Spring] 스프링 Feign Client 적용하기 (Spring Cloud OpenFeign)

    📌 Feign Client 란? 본래 Netflix (그 넷플릭스 맞음) 에서 오픈 소스 일부로 개발되어 사용중인 경량 REST 클라이언트 현재는 Spring Cloud 프레임워크의 일부가 되었다. 인터페이스로 정의된 API를 기반으로 RESTful 서비스를 호출한다. 이를 통해 코드 가독성과 유지 보수성이 늘어남을 기대할 수 있다. 📚 Dependency implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign', version: '3.1.1' implementation 'io.github.openfeign:feign-jackson:12.1' 🔨 @EnableFeignClient Feign 을 사용하기..

    [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..

    [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..