본문 바로가기

Spring7

멀티인스턴스 & Blue-Green 배포 환경에서 @Scheduled 사용 시 주의사항 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 1. @Scheduled 란? 특정 로직을 주기적으로 실행하고 싶을 때 Spring boot 기반 애플리케이션에서 사용할 수 있는 선택지다. cron, fixedDelay, fixedRate 등 스케쥴스케줄 주기를 지정할 수 있는 다양한 표현 방법을 지원하고 스케줄 로직을 실행하기 위한 스레드 풀 설정 및 등록을 편리하게 할 수 있는 기능을 지원한다. 스케줄 주기나 실행할 스레드에 대한 관리는 해당 애플리케이션 인스턴스 범위 내에서만 이루어진다. 2. 멀티인스턴스에서 주의사항과 해결책(분산락) 스케쥴 주기나 실행할 스레드에 대한 관리는 해당 애플리케이션 인스턴스 범위 내에서만 이루어진다. 위 말을 곱씹어보면, .. 2023. 8. 19.
feign client 파헤쳐보기 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 지금까지 feign client를 많이 사용해 왔지만 제대로 알고 사용하고 있다는 생각이 안 들어서 한번 파헤쳐봐야겠다는 생각이 들었다. feign client 동작에 대한 핵심적인 흐름은 SynchronousMethodHandler의 invoke 메서드와 executeAndDecode 메서드를 보면 알 수 있다. 그전에 먼저 SynchronousMethodHandler에 정의된 필드들을 살펴보자. private final MethodMetadata metadata; private final Target target; private final Client client; private final Retryer r.. 2023. 6. 10.
Spring logging 동시성 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 모니터링을 위해 로깅은 필수적이다. spring에서는 @SLF4J를 사용하면 알아서 적절한 로그 구현체를 찾아준다. 회사에서 요구사항을 구현할 때에도 @SLF4J와 log.info(~~~)를 사용하여 로그를 남기고 장애 발생 시 모니터링 정보로 활용하고 있다. 습관적으로 로그를 남기다가 문득 아래와 같은 생각이 들었다. 로깅은 결국 File write(콘솔 출력이 아니라 별도의 파일에 남기는 것을 가정) 우리의 WAS 는 멀티스레드 환경 트래픽이 몰릴 때 로깅 코드에 동시에 수많은 스레드가 접근하여 로그를 찍을 것임 이때 로그 파일 순서 관련해서 동시성 문제가 발생할 법 함 근데 나는 로그 파일 보면서 로그 파.. 2022. 4. 16.
Data Transfer Object 의 필요성 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 1. DTO 만들자 VS DTO 만들지 말자 최근 API 개발을 하면서 DTO 가 꼭 필요하다 vs DTO를 꼭 만들어야만 하냐 사이에서 작은 논쟁이 있었습니다. DTO 를 만들 필요가 없다는 분들의 주장은 아래와 같았습니다. 굳이 별도의 객체를 하나 더 만들어야 하기 때문에 관리 포인트가 증가한다. DTO의 수가 늘어날수록 DTO Entity 메핑 코드가 불필요하게 반복되고 Entity 만 있을 때 보다 메모리를 불필요하게 많이 차지한다. 습관적으로 DTO를 만들어 왔었을 뿐 왜 DTO를 만들어야만 하는지 깊게 고민해 보지 않았기 때문에 DTO의 필요성에 대해 확실하게 반론하지 못하는 스스로를 발견하게 되어 .. 2022. 4. 12.