목록개발기록 (16)
제리의 배움 기록
최근 spring boot 2.7 OSS EOL 이 예정되어 (Ends in 3 months and 4 weeks (18 Nov 2023) 3.1로 버전 업그레이드 작업을 하였습니다. 의존하는 라이브러리들도 함께 버전 업그레이드가 되었고, 그 과정에서 기존과 다르게 동작하여 대응이 필요한 것들이 있었습니다. 오늘은 그 중에 Hibernate6로 업그레이드되면서 기존에 mysql의 field function 사용에 오류가 발생한 케이스를 공유하고자 합니다. DB에서 데이터를 정렬해서 가져올때, 일반적으로 특정 칼럼의 오름차순/내림차순 혹은 어떤 연산을 하고 그 값을 기준으로 데이터를 정렬하는 방식을 많이 사용합니다. 하지만 실무 비즈니스 로직을 구현하다 보면 외부에서 이미 특정 정렬 기준을 세워놓고 해당 ..
요약 로컬 개발환경에서 docker로 mysql 컨테이너 생성하기 로컬 개발환경에서 도커로 db를 사용하면 좋은 점 대부분의 회사가 요즘은 MSA를 지향하면서 서비스별 프로젝트와 DB가 분리되어 있습니다. 로컬에서 개발환경을 셋팅할때도 각 서비스의 DB를 개별 컨테이너화 해서 사용하면 관리가 유용합니다. 특히나, 서비스별 사용하는 DB 버전이 다른 경우에도 서로간 충돌이 없는 점도 큰 장점입니다. 개인적으로 토이프로젝트나 학습을 위한 프로젝트를 진행할 때도 위와 같은 이점으로 서로간 종속성 없이 개발할 수 있습니다. 도커로 myql 셋팅하기 1. 도커 이미지 레시피 작성 도커 이미지 생성을 위한 레시피를 작성합니다. vi docker-compose.yml [참고] 서비스가 하나인 경우 Dockerfile..
목표 : 만료된 SSL 인증서 갱신 수행 환경 Spring Boot 내장 Tomcat 서버 사용 Let's Encrypt 무료 SSL 인증서 사용 Let's Encrypt 인증서 발급및 관리를 위해 Certbot 사용 인증서 만료 문제 발견 며칠 전, 서비스 모니터링을 위해 브라우저로 접속해보니 다음과 같이 인증서가 만료되어 있었습니다. Let's Encrypt 인증서의 경우 무료인 대신 유효기간이 3개월로 짧습니다. 서비스 최초 오픈을 2021.11.24에 했기 때문에 3개월이 지나, 2022.02.22에 만료가 되었습니다. 인증서는 자동 갱신됨 짧은 유효기간 때문에 Certbot은 인증서를 하나라도 발급하게 되면 갱신을 위한 스케쥴을 OS에 자동으로 등록합니다. (OS에 따라 자동으로 스케쥴이 등록되..
목표 프로젝트 CD 자동화 하기 : CI -> CD -> 재기동 까지 프로세스를 자동화 합니다. [참고] 실무에서는 CI 후 CD로 바로 이어지지 않을 수도 있고, CD 후 바로 재기동이 이어지지 않을 수도 있습니다. 지난 포스팅에 이어서, 이번에는 CD 자동화를 구축해보겠습니다. [CI-CD 자동화 하기] - Github - Jenkins로 CI 자동화 하기 요약 프로젝트의 CI 자동화하기 세부 과정 로컬에서 gitHub repository에 코드를 push github webhook을 통해 jenkins 서버로 이벤트를 발생 jenkins는 github로부터 webhook trigger 이벤트를 받아 소스코드를 가.. jerry92k.tistory.com 세부 과정 CI 과정으로 생성된 jar를 운영..
목표 프로젝트의 CI 자동화하기 세부 과정 로컬에서 gitHub repository에 코드를 push github webhook을 통해 jenkins 서버로 이벤트를 발생 jenkins는 github로부터 webhook trigger 이벤트를 받아 소스코드를 가져오고 가져온 소스코드 기준으로 빌드를 실행 빌드 후, 결과를 slack으로 알림 1. docker로 jenkins 설치 및 실행 docker를 이용하면 jenkins 서버를 간편하게 구축할 수 있습니다. 아래 명령어를 터미널에서 입력하여 jenkins를 설치하고 실행합니다. jenkins 컨테이너가 설치되어있지 않은 경우 docker hub에서 자동으로 다운로드 부터 해줍니다. sudo docker run -d -p 32769:8080 --nam..
요약 HTTP 메시지의 응답 body를 필터나 인터셉터에서 로깅 하기 위해선 ContentCachingResponseWrapper를 이용하여 HttpServletResponse 객체를 래핑해야 합니다. 이번 포스팅에서는 웹 API를 개발하면서 HTTP response의 body를 로깅하는 과정에서 겪은 경험을 공유하고자 합니다. 아래 예제 코드들은, 겪은 문제를 간소화하여 구성한 코드입니다. 서비스를 운영할 때 클라이언트의 요청에 대해 응답이 반환되었는지 확인해보고 싶은 경우가 있습니다. 아래와 같이 로깅 인터셉터를 만들어서 "response 객체의 body를 어떻게 추출하는 방법이 있지 않을까?" 로 접근할 수 있을 텐데요, HttpServletResponse의 기본 구현체(ResponseFacade)..
요약 싱글톤 객체(ex. 스프링 빈의 싱글톤 방식 생성)를 멀티스레드가 사용하는 경우, 각 스레드 별 관리하고 싶은 정보는 ThreadLocal을 사용하자. 지난 포스팅에서는 스프링 배치를 활용해 Chunk 단위로 외부 API를 가져와서 영속화한 것을 다루었습니다. [Spring Batch + Quartz] 외부 API를 이용하는 데이터 적재 배치 구현하기 요약 : 목표 구현 1. Spring Batch를 활용하여 배치 job 구현 2. Quartz를 활용하여 job을 스케줄링 구현 이번 포스팅에선 토이프로젝트로 진행하고 있는 요소수맵에 스프링 배치와 쿼츠를 적용해본 경험 jerry92k.tistory.com 이번 포스팅에서는 Chunk 단위로 처리 결과를 로깅하기 위해 스레드 로컬을 사용한 것을 공유하..
요약 : 구현 목표 1. Spring Batch를 활용하여 배치 job 구현 2. Quartz를 활용하여 job을 스케줄링 구현 이번 포스팅에선 토이프로젝트로 진행하고 있는 요소수맵에 스프링 배치와 쿼츠를 적용해본 경험을 공유하고자 합니다. 배치 프로그램과 스케줄러 보통 배치라는 표현 안에는 스케줄링이 포함되지만, 세부적으로는 다음과 같이 나눠서 생각해 볼 수 있습니다. 배치 프로그램 주기적으로 처리해야할 필요성이 있는 작업을 구현합니다. 배치 프로그램은 특별한 프레임워크나 규약에 종속되는 개념은 아닙니다. 일정한 주기별로 처리해야할 작업을 정의한 것이고 반복적으로 실행될 수 있는 프로그램이라면 배치 프로그램이라고 할 수 있습니다. 스케줄러 정의한 배치 프로그램이 원하는 주기마다 동작할 수 있도록 스케줄..