Spring (5) 썸네일형 리스트형 도메인 객체에서 Bean 객체의 기능을 필요로 해 수행한 코드 개선기 발단 * 코드는 샘플입니다. 실제 개선사항과는 조금의 차이가 있습니다. 이런 프로세스를 생성하는데 dday 가 특정일 (공휴일이나 주말 같은) 날 일 경우 그런 특별한 날이 아닌 날까지 밀거나 당기는 기능이 필요했습니다. '특별한 날' 은 어떤 API 를 통해 매년 DataBase 에 적재시켜놓고 있었고, 밀고 당기는 기능도 존재하는 상황이었습니다. 사실상 유틸성 클래스지만, 빈으로 제공되고 메서드들이 static 으로 제공되지 않고 있어 도메인 내부에서 참조할 수 없었습니다. 또 isSpecialDay 는 불필요하게 매번 모든 데이터를 가져오고 있습니다. 이 클래스를 사용하여 Service Layer 에서 Process 를 생성하는 매 메서드 마다 데이터를 조회하고, pull 을 호출하는 코드를 매번 .. SpringBoot + Redis 를 이용한 글로벌 캐시 Cache? 요청에 대한 응답을 저장해두었다가, 그 값을 반환하는것 일반적으로 영구적인 데이터 저장을 하는경우, RDBMS 와 같은 디스크에 데이터를 쓰는 저장소를 사용합니다. 보통 캐시는 디스크 저장소보다 훨씬 빠른 Redis 나 Memcached 와 같은 메모리 기반의 저장소에 저장하여 성능향상을 도모합니다. When Cache? 결과 값이 잘 변하지 않는, 일반적으로 같은 응답을 주는 경우가 많은 경우에 용이합니다. 데이터 변경이 잦은 경우, 오히려 실제 데이터와 캐시까지 두번 변경해주어야 하므로 서버에는 더 부담을 안겨주게 됩니다. 서버에 들어온 요청중에서 캐시에 저장된 데이터를 조회한 비율을 캐시 히트율 이라고 하는데, 이 캐시 히트율이 높을수록 캐싱이 성능에 좋은 영향을 주고있다는 것을 의미합.. TestContainer 로 테스트환경 셋업하기 기존의 레거시 서버들의 테스트 환경에서는 1. 특정 테스트용 스키마를 이용하여 테스트 2. In-Memory DB (H2) 를 이용하여 테스트 2가지 방법으로 동작되고 있었습니다. 하지만 이로 인해 많은 파생되는 문제들을 겪었는데요. 1. 특정 테스트용 스키마를 이용하여 테스트 의 경우 멱등성있는 환경을 유지하기가 어려웠고. 2. In-Memory DB (H2) 를 이용하여 테스트는 운영에서 사용하는 RDBMS 와 다른 환경으로 인한 차이로 인한 오류를 잡지 못하고 운영에 배포되거나, 반대로 리얼에서는 돌아가나 테스트를 실패하는 경우가 존재할 수 있다는 문제점이 있었습니다. 또한, 다양한 3rd Party 서비스를 사용하고 있었지만 대부분 Mocking을 통한 테스트 혹은 제대로 테스트가 되지 않은 케이.. Enum 을 BeanProvider로 사용해보기 대략 이런 구조의 여러개의 도메인 루트들이 여러 셋팅 값들의 집합인 Mapper 라는 엔티티를 도메인 루트로 지니는 도메인과 의존성을 맺고 있다고 예시를 들겠습니다. 이때, 각 루트 엔티티의 ID 로 Mapper 의 ID 를 조회하는 API 가 필요하다는 요구사항이 있었습니다. 단순히 생각하면, 3개의 API 를 생성하는것으로 해결할 수 있지만, 다른 방법을 찾고 싶었고 아래와 같이 어떤 도메인인지 Enum 을 받아 처리하는 API 를 구현하기로 했습니다. GET /settings/owners/{owner}/{id} ex) /settings/owners/PROJECT/50a10f9e-32b5-4a0d-8773-fa2413cd0a75 처음엔 단순히 구현해봅니다. @RequiredArgsConstructor.. Spring Bean LifeCycle 스프링 빈 생명주기 1. Spring Bean 라이프 사이클 스프링 빈은 다음과 같은 생명주기를 갖는다. 1. XML 설정 혹은 ComponetScan 을 통해 빈 정의를 스캔하여 등록 2. 등록된 빈들의 인스턴스 생성 3. 의존관계 주입 4. Aware Inteface 가 구현되어 있다면 Aware Interface 콜 [BeanNameAware -> BeanClassLoaderAware -> ApplicationContextAware] 5. 초기화 6. 소멸 여기서 포스팅으로 다룰만한 내용은 Aware Interface 와 초기화 소멸 단계인데, 생명주기에서 상세히 다룰 내용이 아닌 Aware Interfcae 는 다른 포스팅에서 작성하도록 하고 초기화와 소멸 단계에 대해 상세히 알아보자. 2. Bean Initiali.. 이전 1 다음