스프링
어제 만들었던 로그 추적기는 Trace(HTTP 트랜잭션(?)의 ID, Level)의 동기화를 Trace 클래스를
관리하는 클래스 내부에서 한 것이 아닌 Controller, Service, Repository에서 관리 클래스가 제공하는
메소드를 직접 호출해 동기화를 진행했다.
하지만, 위의 경우 관리 클래스 내부적으로 변경이 있거나(심지어 더 좋게하는 변경일지라도) Trace 자체가 변경이 되었을 때
Controller, Service, Repository 전부에서 관련된 코드를 수정해주어야 하는 불편함이 있었다.
만약, 인터페이스가 관련되어 있다면 작업된 코드가 커질수록 고쳐야 할 것은 산더미로 불어날 것이다.
따라서, 동기화를 관리 클래스 내부에서 진행하여 Controller, Service, Repository에서 해당 부분에
더 이상 관여하지 않도록 코드를 수정하는 부분에 관해 공부했다.
하지만, 위 문제도 해당 관리 클래스를 단순하게 빈으로 등록하여 싱글톤 객체로 관리시키면
로그 추적기의 내부 자원에 Race Condition처럼 접근하여 동시성 문제가 생기는 문제가 발생한다.
따라서, Thread마다 내부 지역 저장소에 저장할 수 있도록 도와주는 ThreadLocal을 통해
해당 문제를 해결했다. 하지만, 모든 작업이 끝난 뒤 ThreadLocal에 저장된 자원을 제거해주지 않으면
스레드 풀을 사용하는 WAS 서버에서 재사용된 스레드에 해당 자원의 정보가 남아있게 되는 문제가 발생할 수 있다.
따라서, 꼭 사용을 종료한 뒤에는 ThreadLocal의 자원을 해결하는 부분에 관하여 학습했다.
(관련 내용은 포스팅 중이나 아직 다 완성하지 못해서 내일 포스팅하지 않을까 싶다.)
Jenkins
- AWS Cloud 환경 구성(AWS Linux OS를 처음 접해 봄)
- Termius라는 좋은 툴을 알게 되었다.
- 이미지를 이용해 AWS EC2 구성(처음 접해 봄)
- 모든 ICMP 가능(같은 보안 그룹 내에서) <- 이것 또한 처음 접해 봄
- AWS EC2에 Jenkins 구성
- AWS EC2에 Docker 구성
- AWS EC2에 Tomcat 구성
- AWS EC2에 Ansible 구성
알고리즘
'개발 기록' 카테고리의 다른 글
2024-07-26 학습일기 (0) | 2024.07.26 |
---|---|
2024-07-25 학습기록 (0) | 2024.07.25 |
2024-07-23 학습일기 (0) | 2024.07.23 |
정보처리기사 합격 (2024.06.18) (0) | 2024.06.25 |
2024-05-26(배포, docker-compose, Spring Cloud, Github Actions) (0) | 2024.05.26 |