일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- deleteById
- Effetive Java
- Effective Java
- 플라이웨이트
- Spring Boot
- @ControllerAdvice
- NotEmpty
- SQL 삽입 공격
- @Valid
- Connection Pool
- JPA
- java
- multi module
- @SpyBean
- Item04
- Web
- springboot
- NotBlank
- Firebase
- restTemplate
- db
- Proxy Patter
- 디자인 패턴
- FCM
- 데이터베이스
- @MockBean
- Service Locator
- 이펙티브 자바
- Service Locator 패턴
- 트랜잭션
- Today
- Total
목록SpringBoot (16)
NoTimeForDawdling
푸시 알림은 Server에서 유저의 device로 정보를 보내는 것을 말한다. 구글이 제공하는 Firebase Cloud Messaging(FCM)을 이용하면, 서버와 같은 외부에서 내가 소유한 앱이 설치된 기기로 1개 이상의 메시지를 전송할 수 있다. FCM은 완전히 무제한으로 무료 제공된다. 크로스 플랫폼을 지원하여 Android, iOS, Chrome 기기에 메시지를 전송할 수 있다. 이번 포스팅에서는 Spring Boot 기반 프로젝트에서 FCM을 이용한 메시지 전송 방법을 적어보려 한다. Firebase 설정 Firebase에서 앱 서버로 푸시를 보내려면 Access Token을 발급받아야 한다. 우선 Firebase 콘솔에 접속하여 메시지를 전송할 앱을 선택한다. 없다면 앱을 새로 만들어야 한..
최근에 토이 프로젝트를 진행하면서 멀티 모듈을 적용해봤다. 모듈은 다음과 같이 분리했다. core - 시스템의 핵심 도메인 기능을 제공하는 모듈 - Repository와 밀접한 중심 도메인을 다루는 계층 - 서비스에 대한 로직을 모름. common - 각 모듈의 공통된 기능을 제공하는 모듈 - common모듈은 다른 모듈에 대한 의존성이 없어야 한다. - ex) common exception, utill class web - api, service 관련 기능을 제공하는 모듈 event - event 처리 모듈 자 그럼 이제 모듈을 생성해주자. 모듈을 생성하려면 기존 프로젝트에서 New -> Module을 선택해서 생성하면 된다. 이후 Gradle 선택 -> Java -> 모듈명을 입력하면 끝난다. 모듈을..
Bean이란? Bean이란 Spring IoC 컨테이너가 관리하는 자바 객체이다. 이때 Bean의 Scope를 지정할 수 있고, Singleton과 Prototype으로 지정할 수 있다. proptotype은 객체 호출 시 매번 새롭게 생성하게 된다. 그렇다면 Bean을 어떻게 만들고 Spring IoC컨테이너에 등록할 수 있을까? 지금부터 한번 알아보도록 하자. Bean 만드는 방법 개발자가 Bean을 만드는 방법은 크게 두 가지가 있다. @Component어노테이션을 이용하는 방법과 @Bean어노테이션을 이용하는 방법이다. @Component @Component어노테이션은 클래스에 명시해 주면 된다. @Component public class ComponentClazz { private final S..
Spring Boot를 사용할 때 Junit을 이용해 테스트 코드를 작성하다 보면 보통 여러 레파지토리와 비즈니스 로직이 함께 있어 테스트 환경을 설정하는데 많은 시간을 사용하고 테스트 대상에 집중하는데 어려움을 느낄 수 있습니다. 이러한 문제를 해결하기 위해 테스트 더블 이라는 것이 나왔습니다. 테스트 더블은 목적에 따라 비슷하면서도 다른 객체를 사용하는 모든 행위를 말합니다. Java에서는 대표적으로 Mockito가 있습니다. Mockito에는 다양한 어노테이션이 있는데 이중에서 @MockBean과 @SpyBean에 대해 알아보겠습니다. @MockBean @MockBean은 기존에 사용되던 Bean의 껍데기만 가져오고 내부 구현은 모두 사용자에게 위임하는 형태입니다. 즉, 해당 Bean의 어떤 메서드..
이벤트 사용방법을 알아보기 전에 이벤트에 대해 간단히 알아보자. 이벤트(Event)란? 이벤트는 '과거에 벌어진 어떤 것'을 뜻한다. 예로, 주문을 취소했다면 '주문을 취소했음 이벤트'가 발생했다고 할 수 있다. 이벤트가 발생한다는 것은 상태가 변경됐다는 것을 의미한다. 즉, '주문 취소 이벤트'가 발생한 이유는 주문이 취소 상태로 바뀌었기 때문이다. 이벤트가 발생하면 그 이벤트에 반응하여 원하는 동작을 수행하는 기능을 구현하면 된다. 이벤트 필요성 강결합 문제 어느 쇼핑몰에서 구매를 취소하면 환불을 처리해야 한다. 이때 주문을 취소하는 로직과 환불을 위한 로직이 모두 섞이게 된다. 이렇게 서로 강한 결합으로 묶여있으면 코드도 복잡해지고, 나중에 유지보수가 힘들어질 수 있다. 트랜잭션 처리 문제 환불 기..
API를 요청할 때 request body로 들어는 paramter에 대해 문자열 검증하는 방법으로 @NotNull, @NotEmpty, @NotBlank가 있습니다. 이 3가지 Annotation은 비슷해 보이지만 조금씩 다릅니다. 오늘은 이 3가지 Annotation의 차이점에 대해 확실하게 알고 넘어가 보겠습니다. 해당 포스트에서 사용할 DTO는 다음과 같습니다. @Getter @NoArgsConstructor public class ValidationDto { @NotNull private String notNull; @NotEmpty private String notEmpty; @NotBlank private String notBlank; } @NotNull @NotNull은 말 그대로 null..
오늘은 Swagger에 Authorization header를 설정하는 방법을 알아보겠습니다. Swagger에 header를 설정하는 방법을 2가지가 있습니다. 각각의 API에 Header 정보를 추가하는 방법 전역으로 관리하는 방법 두 가지 방법을 모두 알아보겠습니다. 참고로 이번 포스트는 JWT 토큰을 통해 로그인 처리를 한다고 가정하고 진행합니다. 1. 각각의 API에 Header 정보를 추가하는 방법 @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { ParameterBuilder parameterBuilder = new ParameterBuilder(); parameterBuilder.nam..
오늘은 @ControllerAdvice를 이용해서 @Valid시 발생하는 에러를 처리해보겠습니다. @Valid 사용법은 여기에 자세히 나와있습니다. @ControllerAdvice란? @ControllerAdvice는 @Controller 전역에서 발생할 수 있는 예외를 잡아 처리해주는 애너테이션입니다. 자 그럼 이제 코드를 통해 알아보겠습니다. ExceptionController.class @RestControllerAdvice public class ExceptionController { @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity handelValidationExceptions(MethodArgument..