
1. 개요스프링부트 서버가 기동 될 때 Spring Context(Bean) 이 초기화 되는 순서 관련 문제가 발생해서 위 문제를 해결하기 위해서 해답을 찾던 중 스프링 생명주기 이벤트에 대한 내용을 알게되서 알게된 내용을 정리해보았다. 2. 본론스프링 생명주기 이벤트란 무엇일까?Springboot 서버가 기동되는 종료되는 과정에서 발생하는 이벤트를 스프링 생명주기 이벤트 라고 한다 스프링 생명주기 사이클 및 동작 순서를 알고 있으면 더욱 더 스프링 프레임워크를 잘 활용해서 사용할 수 있을 것이라고 생각한다 왜 사용할까?위 생명주기 이벤트를 잘 활용해서 이점을 보기 좋은 부분은 요구사항에 의해 특정 시점에 비즈니스 로직에 변동을 줘야할 때 때 라고 생각한다Example초기 데이터 insertCache특정..

개요실무에서 가끔 java.io.IOException: Connection reset by peer 메시지를 본적이 있다 위 메시지를 조사해보다가 결국 나온 답은 애플리케이션 커넥션 풀 점검 이였다 커넥션 풀에서 오래된 연결을 재사용하지 않도록 설정했는지HikariCP, Tomcat pool의 타임아웃 설정 확인위 2가지 위주를 보기 위해서 내용들을 찾아보았고, 찾아보면서 공부해본 내용을 공유해보려고 한다본론개발환경: SpringBoot3.3, Jdk17, MySQL, JPA 를 실무에서 사용하고 있다 0. 기본 세팅첫번째로 찾아본 내용은 springboot 자체에서 DataSource 를 찾아서 모니터링을 하는 것이다 Springboot 는 내장 톰캣을 이용하고 커넥션 풀을 사용하여 데이터베이스 커넥션..

1. 개요spring 에서는 쉽게 카프카를 사용하기 위해서 kafka 인터페이스를 제공한다그리고 우리는 위 kafka 를 springboot 에서 원활하게 사용하기 위해서 producer, consumer 설정을 잡아줘야 한다 위 설정에서 가장 중요한 message 발행 및 소비시에 필요한 key,value 직렬화 & 역직렬화설정에 대하여 알아보려고 한다 일반적인 카프카 사용시 데이터 흐름을 서버 아키텍쳐로 보면 아래와 같다(간단하게만 그려본 것이다)User --> LB --> WAS --> Kafka --> ConsumerUser 가 서버에 데이터를 보낼 때 보통은 Http Body 에 값을 넣어서 보내고는 한다 kafka 가 아니더라도 일반적인 Http 프로토콜을 사용하여 통신을 할 때 또한 Htt..
실무에서 가끔 ThreadLocal 자료구조를 사용하였고, 위 자료구조에 대해서 자세하게 공부를 해보았다 1. 동작 구조ThreadLocal은 각 스레드마다 독립적인 변수 복사본을 제공하는 자료구조 이다 각 Thread 객체는 ThreadLocalMap 내부 Map 를 가지고 있다. 즉 ThreadLocal 객체가 키(key)가 되고, 저장하려는 값이 값(value)이 된다 실제 사용은 Thread.currentThread().threadId() 통해 현재 스레드의 맵에 접근한다 // ThreadLocal.get() 메서드의 동작public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (ma..

개발 환경springboot3.5, jdk21, mysql8.0, Docker 1. 들어가며 보통 개발자들은 서비스 운영을 위해서 필수적으로 어플리케이션에 메시지(기록)을 남겨야 한다.그 메시지는 개발 용어에서는 로그 라고 부른다 결국 로그는 어플리케이션이 동작한 흔적들이고, 나중에 이슈 발생시 흔적들을 찾아가며 트래킹을 할 수 있어야 한다. Java/Springboot 환경에서는 안정적인 로그 시스템을 사용하기 위해서는 보통 Lombok 을 @Slf4j 를 사용할 것이라고 생각한다 위 어노테이션을 클래스 상단에 선언하면 그 클래스에서는 로그를 자유롭게 사용할 수 있다Lombok 을 사용하지 않는다면 아래와 같은 방법으로 사용할 수 있다.private static final Logger log = Log..
1. 들어가며회사에서 비용 절감 차원에서 가끔 테스트 쪽 서버 몇가지를 시간을 정해서 운영한 적이 있었다 19:00 ~ 09:00 까지는 테스트 서버 몇개는는 운영하지 않았고, 서버가 다운됨에 따라, 다운된 서버에 의존하는 스프링 어플리케이션은 java.net.SocketException 을 30초 주기로 계속 발생했다org.springframework.data.redis.RedisConnectionFailureException:Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379Caused by: java.net.ConnectExce..