본문 바로가기

스프링5

[Spring] Event로 느슨한 결합 찍먹하기 0. 이 글을 쓰게 된 이유 이번 프로젝트를 진행하며 Event를 활용하여 요구사항을 해결한 적이 있다. 그 과정을 기록하고자 이 글을 쓰게 되었다. 1. 쉽지 않은 요구사항 로드맵을 생성하는 로직이 있다. 이 로드맵은 각 단계가 있고, 각 단계에 사진 파일이 여러개 저장될 수 있다. 이 로직은 간단해보이지만 다음과 같은 문제점이 있다. 1. I/O가 실패하여 사진이 없어도 로드맵 생성 자체는 되어야한다라는 요구사항이 있다. 2. I/O중 예외가 발생하면 로드맵 생성 자체가 롤백된다. 3. 각 사진 파일은 I/O가 발생한다. 한 요청에 파일 I/O가 10번이상 발생할 수 있으니 트랜잭션이 굉장히 길게 걸린다. 4. 파일 I/O 후 경로와 같은 메타 데이터를 DB에 저장해야한다. 즉, 파일 I/O하는 서브.. 2023. 8. 29.
[Spring] 커스텀한 multipart/form-data 요청 받기 0. 이 글을 쓰게 된 이유 프로젝트를 진행하며 쉽지 않은 요구사항을 기술적으로 해결한 사례에 대해서 기록하고자 이 글을 쓰게 되었다. 1. 쉽지 않은 요구사항 로드맵을 생성하는 API를 만들어야하는데 다음과 같은 특이한 요구사항이 있다. 요구사항을 정리하면 다음과 같다. 1. 로드맵은 여러개의 단계를 가질 수 있다. 단계의 수는 가변적이다. 2. 각 단계는 0~2개의 사진 파일을 가질 수 있다. 즉, 사진의 수도 가변적이다. 3. 로드맵 생성에 필요한 다른 데이터는 json 형식으로 넘어온다. 4. 위 요구사항을 하나의 API로 해결해야한다. 2. 고려한 방법들 다음과 같은 방법들을 고려했었다. 2.1 API 분리 처음에는 이 정도로 큰 요청은 분리를 하는게 맞다고 생각했다. 애초에 API 설계가 잘못.. 2023. 8. 29.
[Spring] 필터(Filter)와 인터셉터(Interceptor) 0. 이 글을 쓰게 된 이유 스프링은 개발자가 비즈니스 코드에 더 집중할 수 있게 여러 기능들을 숨기고있다. 대표적으로 AOP, Filter, Interceptor라는 기술을 사용한다. AOP는 스프링의 대표 기술로써 프록시를 이용해 코드를 숨겨주는 기능을 한다는 것은 대부분 알고 있을 것이다. 그렇다면 Filter와 Interceptor는 무엇일까? 그 차이와 용도에 대해서 알아보자. 1. Filter 필터는 스프링의 기술이 아닌 JavaEE 표준 스펙 기능으로써 톰캣과 같은 WAS가 가지고있는 기술이다. JavaEE 필터 공식문서를 보면 필터는 요청이나 응답 또는 둘 다에 대해 필터링을 수행하는 객체라고 소개한다. 즉, Web Context 단에서 Spring으로 요청을 보내기 전과 응답이 온 후로 .. 2023. 4. 19.
[Spring] Layered-Architecture(계층형 아키텍처) 0. 이 글을 쓰게된 이유 Spring을 사용하면 Layered-Architecture를 사용하게 된다. Layered-Architecture의 컨셉에 대해서 확실하게 정리하기 위해 이 글을 쓰데 되었다. 1. Layered-Architecture란? Layered-Architecture는 사실 상의 Java EE 표준인만큼 가장 널리 사용되고 유명한 아키텍처 패턴이다. 다른 말로 N-tier Architecture이라고 불린다. Layered-Architecture의 각 계층은 수직적인 구조를 가지고있다. 각각의 계층은 특정 역할을 가지게 된다(예 -> presentation 로직, business로직). 하지만 계층의 개수나 역할은 정해져 있지않다. 구조를 설계하는 사람이 정하기 나름이다. 보통의 경.. 2023. 4. 14.
[Spring] @(Rest)ControllerAdvice 활용 0. 이 글을 쓰게된 이유 미션을 진행하며 (Rest)ControllerAdvice를 사용하여 예외를 처리하였다. 원래 (Rest)ControllerAdvice가 예외를 처리할 때에만 사용하는줄 알았는데 활용할 수 있는 부분이 많은 기능이었다. 그 부분에 대해 알아보기 위해 이 글을 쓰게 되었다. 1. @(Rest)ControllerAdvice란? Spring 공식 문서에 따르면 @(Rest)ControllerAdvice가 붙은 빈은 모든 @Controller이 붙은 빈에서 사용하는 @ExceptionHandler, @InitBinder, @ModelAttribute(글 쓰기 쉽게 세가지 기능이라고 부르겠다.)가 붙은 메소드들을 한번에 처리할 수 있도록 해주는 기능이다. Controller에서 @Exce.. 2023. 4. 13.