[ 모니터링 ] 그라파나 알림 설정
·
Spring
그라파나 알림시스템이 예기치 못한 사유로 동작하지 않을 때 알람을 통해서 원인을 쉽게 찾기 위해서 사용 폴링 / Webhook출처: 블로그 폴링: 클라이언트가 지속적으로 API 호출하여 서버에 이벤트가 발생 했는지 응답 확인웹훅: 서버에 해당 이벤트가 발생하면 서버가 응답 모니터링 알람은 서버에 문제가 발생하면 알려주는 웹훅 방식을 사용합니다. 디스코드 웹훅 등록 디스코드 설정 창에서 연동을 클릭하고 웹훅 URL을 생성 합니다. 웹훅을 생성한 후 생성된 URL 복사 합니다. 그라파나 알림 룰에 들어가서 Contact points를 클릭하여 어디로 알림을 전송할지 설정합니다. 알림 등록 Alert rules를 클릭하여 새로운 알림을 등록합니다.운영 환경에서 톰캣 스레드가 고갈된다면 위험 상황이기 때문..
[ Spring ] 트랜잭션과 synchronized
·
Spring
synchronized자바의 synchronized는 동시성 상황에서 정합성을 지키기 위해 사용됩니다.하지만 트랜잭션 환경에서 같이 쓰인다면 정합성을 보장할 수 없습니다.먼저 동시성 문제의 간단한 예시를 알아보겠습니다. Count 도메인수를 저장하는 Count 도메인 입니다.현재 자신의 수에서 1을 더하는 도메인 로직이 있습니다.@Getter@Entitypublic class Count { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private int count; protected Count() { } public Count(int count) { this.coun..
@Async 메일 전송 개선하기
·
Spring
📌 주의: 해당 글은 잘못된 내용이 포함 되어 있을 수 있습니다.혹시 잘못된 내용을 발견 하신다면 댓글로 알려주시면 감사 합니다! [ 🌱 회원 가입 ] 스터디 관리 플랫폼 Wibby 에서는 회원 가입할 때 이메일 인증 후 가입이 가능 합니다. 인증 버튼을 누르면 해당 이메일로 인증 번호를 전송 후 인증을 진행 합니다. 그런데 인증 버튼을 누르면 3 ~ 4 초 이후에 인증 번호 체크 창이 뜨는 문제가 있습니다.왜 이런 문제가 발생 하는지 간단한 메일 전송 API를 통해 테스트 해보겠습니다.[ 🌱 메일 전송 ] 인증코드를 이메일로 전송 하는 코드 입니다.@Slf4j@RequiredArgsConstructor@Servicepublic class MailService { private final ..
[ Spring ] Swagger 415 Unsupported Media Type
·
Spring
📌 주의: 해당 글은 잘못된 내용이 포함 되어 있을 수 있습니다.혹시 잘못된 내용을 발견 하신다면 댓글로 알려주시면 감사 합니다! 🌱 [ 배경 ]스웨거를 통해 스터디 생성 API를 multipart/form-data 형식으로 요청했을 때 오류가 발생 하였습니다 🌱 [ 원인 ]요청시 Content-Type 명시 되지 않아 application/octet-stream 타입으로 요청이 되었습니다.하지만 스프링은 이 타입을 처리할 수 있는 메시지 컨버터가 없어서 바인딩에 실패 했습니다.🌱 [ 해결 ][ 요청 JSON - DTO 바인딩 필요 ]스프링에서 body 값을 객체로 바인딩 할 때 HttpMessageConverter를 사용 합니다.하지만 기존 Json 컨버터는 application/json 타입만..
[ Spring ] Enum Type 검증
·
Spring
🌱 [ 문제 상황 ] 회원가입을 할 때, 성별(Gender)을 입력 해야 합니다.성별의 타입은 Enum 타입 입니다. ( "FEMALE", "MALE" )성별에 바인딩 되지 않는 값( "test")은 Json parse 실패 합니다.잘못된 성별을 입력 했을때 성별을 잘못 입력 했다고 알려줄 수 없을까요?🌱 [ 해결 방안 ] 잘못된 Json 값을 null로 바인딩 하자.검증을 도입 하여 null 혹은 잘못된 값일 경우, 예외 메시지를 전달 하자.🌱 [ 잘못된 값은 null로 바인딩 하자 ]잘못된 값이 생겼을 경우 바인딩에 실패 하며 Json parse 실패 문구를 보게 됩니다.잘못된 값은 null로 바인딩 해보겠습니다. 📝 [ @JsonCreator ] Json 데이터를 String to Enum ..
[Spring] @ExceptionHandler API 에러 핸들링
·
Spring
🎉@ExceptionHandler 예외 상황이 발생 했을 때 예외를 처리 하고 Json 오류 안내를 해주거나 오류페이지로 이동 할수 있게 해주는ExceptionResolver의 한 종류 입니다.  📝 간단한 API컨트롤러는 Json 타입으로 상품 이름과 가격을 입력 받습니다.@RequestBody는 받은 Json을 한번에 orderDto에 매핑을 시도 합니다.이때 int 값인 price에 String 값을 받게 되면 어떻게 될까요? 정상 값정상적인 경우 받은 이름과 가격을 그대로 Json으로 반환 합니다. 실패 값실패한 경우 Json으로 결과 값을 받게 됩니다. 오류 처리 흐름1. 컨트롤러에서 예외가 발생 합니다.2. ExceptionResolver 우선순위에 따라 처리 할수 있는 resolver를 ..