본문 바로가기

전체 글59

그럼에도 불구하고 Lombok을 도입해야하는 이유? 오늘은 Lombok이 도입되어 있지 않은 레거시 프로젝트에 롬복 라이브러리를 도입시도를 하며 경험했던 이야기를 해보려고 합니다. Lombok은 Java를 기반으로한 프로젝트에서 당연시 되는 라이브러리입니다. 하지만 제가 이번에 요구사항을 반영하고 코드 수정이 필요했던 프로젝트는 워낙 오래된 Spring  프로젝트이기도 했고 히스토리를 들어보니 Lombok을 도입하면 발생할 수 있는 사이드 이펙트에 대한 고민때문에 Lombok이 도입되어 있지 않은 상태였습니다. 그러면 왜 이제? 잘돌아 가는거 냅두면 되지 왜 롬복을 추가하냐 라는 점을 생각해 보았는데결국 제가 생각할 수 있던 이유는 생산성이였습니다. public class MemberDto {        private String name;    pri.. 2024. 10. 27.
스프링 서버가 우아하게 죽는법 "Graceful Shutdown" 제가 속해있던 회사에서는 백엔드 어플레이케이션 서버는 Spring Framework를 사용했었고 Github marster 브렌치 머지 -> Github Action -> Aws ecr -> Aws ecs -> Aws ec2 CI/CD환경으로 구성되어 있었습니다. 다만 ec2에 새롭게 업데이트된 버전으로 docker container를 시작 시킬때는 꼭 ecs를 통해 자동으로 실행하는것이 아닌 개발자가 직접 베스찬 서버를 통해 프라이빗 네트워크의 ec2 하나하나 직접 접근하여 무중단 배포 롤링 방식으로 서버를 리스타트하는 정책으로 진행했었습니다. 추후 블루/그린, 카나리까지 염두하고 있었지만, 아직 서비스가 많이 크지 않았기 때문에 크게 문제 되는 배포 방식은 아녔습니다. 개발자로 첫 업무를 시작한 지 .. 2024. 9. 10.
섹션 8-4 [외부 설정을 이용한 자동 구성] 프로퍼티 클래스의 분리 @Value값 디폴트 설정하기@MyAutoConfiguration @ConditionalMyOnClass("org.apache.catalina.startup.Tomcat") public class TomcatWebServerConfig { @Value("${contextPath:/}") String contextPath; @Bean("tomcatWebServerFactory") public ServletWebServerFactory servletWebServerFactory() { TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(); factory.setContextPath(this.contextPath); return .. 2024. 7. 26.
섹션 8-3 [외부 설정을 이용한 자동 구성] @Value와 PropertySourcesPlaceholderConfigurer @Value와 PropertySourcesPlaceholderConfigurer@MyAutoConfiguration @ConditionalMyOnClass("org.apache.catalina.startup.Tomcat") public class TomcatWebServerConfig { @Value("${contextPath}") String contextPath; @Bean("tomcatWebServerFactory") public ServletWebServerFactory servletWebServerFactory() { TomcatServletWebServerFactory factory = new TomcatServletWebServe.. 2024. 7. 26.
섹션 8-2 [외부 설정을 이용한 자동 구성] 자동 구성에 Enviroment 프로퍼티 적용 Enviroment 우선순위@MySpringBootApplication public class TobyspringbootApplication { @Bean ApplicationRunner applicationRunner(Environment environment) { return args -> { String name = environment.getProperty("my.name"); System.out.println("my name: " + name); }; } public static void main(String[] args) { SpringApplication.run.. 2024. 7. 26.
섹션 8-1 [외부 설정을 이용한 자동 구성] Enviroment 추상화와 프로퍼티 Enviroment 추상화와 프로퍼티스프링 부트는 외부 설정 정보를 이용해서 생성된 빈 오브젝트의 프로퍼티값을 수정할 수 있습니다.대부분 자동 구성에 의해서 만들어지는 빈 오브젝트는 대부분 디폴트값이 들어가 있습니다. 예시로 스프링 부트의 톰켓 포트번호를 지정하지 않아도 8080포트로 서블릿이 설정되는 부분이 있습니다.서블릿을 구성할때 직접 톰캣 구성정보를 등록하여 커스텀 빈 등록을 하여 사용할 수도 있지만 기술적으로 여러 지식이 필요한 기술 빈들이 존재하여 한두가지 설정을 변경하기 위해 직접 커스텀빈으로 생성하는 작업을 직접 작상한다는 것은 오류가 발생할 여기도 있고 굉장히 번거로운 일입니다.따라서 Spring boot는 Spring boot가 제공하는 자동 구성 Configuration클래스에 다양한.. 2024. 7. 26.