본문 바로가기

SpringBoot4

[Spring Boot] Autoconfiguration 만들기 자동 빈 주입은 스프링 부트의 가장 편리한 기능중 하나다. 직접 본인이 라이브러리를 만들고 여기에 auto configuration을 적용할 수 있다고 한다. @AutoConfiguration@ConditionalOnProperty(name = "my", havingValue = "on")public class MyAutoConfig { @Bean public MyFinder myFinder() { return new MyFinder(); } @Bean public MyController myController() { return new MyController(myFinder()); }} 해당 my가 on 이라는 값을 가질때 auto config를.. 2024. 9. 1.
Design Pattern - singleton Singleton Pattern은 애플리케이션 내에서 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 패턴입니다 싱글톤 패턴을 사용하면 전역에서 해당 클래스의 인스턴스에 접근 가능하고 리소스를 절약하고 객체 간의 상태를 공유할 수 있습니다 보통 패턴을 사용하지 않는 경우, 아래와 같이 클래스를 생성합니다 public class NotSingleton { // Singleton 패턴을 사용하지 않고 일반적인 클래스 public NotSingleton() {} } 패턴을 사용하는 경우는 아래와 같이 클래스 내부에서 해당 객체가 null인 경우에만 생성하고 null이 아닌 경우에는 생성된 객체를 반환하도록 클래스를 생성합니다 public class Singleton { private static Si.. 2024. 4. 7.
Design Pattern - Builder Springboot에서 자주 사용하는 Builder Pattern은 객체를 생성하는 복잡한 과정을 추상화하고 객체 생성 과정을 쉽게 만들어주는 디자인패턴으로 많은 수의 매개변수를 가진 객체를 생성하는데 사용합니다. 해당 패턴을 사용하면 가독성이 향상되고 프로그램 유지 보수가 간편해집니다. 그러면 어떻게 가독성과 유지 보수가 간편해 지는지 아래 예제 코드를 한 번 확인해보겠습니다. builder pattern을 사용하지 않은 경우 //사용자 응답 클래스 public class UserResponse { private String email; private String name; private String pwd; private LocalDateTime createAt; public UserResponse(.. 2024. 3. 31.
CacheEvict key 패턴과 매치되는 경우 제거 사이드 프로젝트를 진행하면서 캐시를 적용해야 할 일이 생겼다. 그런데 폴더상세뷰를 구현하면서 key가 userId, folderName, pageSize, pageNumber의 일련의 조합이 되면서 컨텐츠 CRUD 또는 폴더 CRUD가 일어날 경우 해당 캐시를 evict 해야하는 상황에 key 값으로 userId만 넘겨주다 보니 정상적으로 캐시가 제거되지 않는 현상이 발생했다. 물론 CacheEvict의 condition 기능을 활용할 수 있지 않을까 생각했지만 해당 경우는 파라미터로 넘어온값에 대해 조건을 걸어 구현하는것이기에 불가능했다. 그래서 다른 방법을 찾다가 AOP를 적용할 수 있다는 사실을 알게되어 적용후 서비스에 반영하였다. 코드는 다음과 같다. 우선 Annotaion을 만들어줬다. @Tar.. 2024. 2. 25.