개발일지 5

kafka 성능 개선기 (feat. 배치 리스너)

들어가며 최근 사용자들의 행동 로그를 활용해 추천 서비스 기업에 관련 데이터를 보내는 프로젝트를 진행했었다. 아직 어리둥절한 신입에게 다소 무서웠던 프로젝트였지만, 어찌저찌 잘 해결해나가고 있었다.해당 프로젝트를 진행하며 처음으로 kafka를 활용했었고, 현재 회사 내 다른 프로젝트에서 사용하고 있는 설정법을 보며 똑같이 설정을 했었다.서비스 기업에서 어느날 피드백이 왔었는데, 지금 데이터들이 20시간가량 밀려있다고 해서, 확인을 했었는데, 잘못된 kafka 사용으로 인해 lag가 14,500,000개 정도 쌓여있었다. 이를 해결하기 위해 했던 과정들을 기록하고자 한다. 문제 원인1. consumer와 producer의 차이 현재 회사의 로그 관련한 서비스 구조는 다음과 같다. 기존에 추천 서비스 기업을..

개발일지 2024.09.02

[Git] SubModule에 대해서

들어가기 앞서 최근에 프로젝트에 투입되어 Github에 있는 code를 다운로드하여 확인하는 도중 특정 module 하위에 아무런 코드가 존재하지 않아 컴파일 에러가 나 당황했던 적이 있습니다. 동료에게 물어보고 도움을 받을 때 간단한 코드 두줄만에 해결이 되었습니다. git submodule init git submodule update 그 당시 github에서 제공하는 submodule에 대해 몰랐었고, 이러한 부분들에 대해 정리를 해 보고자 합니다. SubModule이란 무엇인가? git의 공식 홈페이지에는 다음과 같이 정의되어 있습니다. 프로젝트를 수행하다 보면 다른 프로젝트를 함께 사용해야 하는 경우가 종종 있다. 함께 사용할 다른 프로젝트는 외부에서 개발한 라이브러리라던가 내부 여러 프로젝트에..

개발일지 2024.04.16

커플 재결합 관련 Code Refactoring

들어가기 앞서 현재 커플 기반 다이어리 서비스를 제작하고 있습니다. 커플 끊기와, 커플 재결합 기능을 맡아 개발을 진행했습니다. 그와 관련되어 코드를 리팩터링 하게 된 일화에 대해서 다뤄보려고 합니다. 처음에는 간단하게 API를 세개를 두고, 커플 끊기, 커플 재결합 로직을 구현했습니다. [DELETE] /v1/couples/{coupleId} => 커플 끊기 API [POST] /v1/couples/recouple/{coupleId} => 커플 재결합 신청 API [POST] /v1/couples/recouple-decide/{recoveryId} => 커플 재결합 결정 API 각 API에 대한 처리 로직은 다음과 같았습니다. 커플 끊기 Couple Entity에 @SQLDelete 어노테이션을 사용해..

개발일지 2023.11.22

asciidoc를 통해 생성된 html이 jar에 포함되지 않은 이유는 무엇일까?

문제 상황 현재 진행하고 있는 프로젝트에서 Restdocs를 사용해 API문서화를 진행하도록 결정했습니다. ./gradlew clean build 명령어를 통해 API 문서가 지정한 경로에 제대로 생성되는 것을 확인했었습니다. build된 jar 파일을 EC2에 전달 후 nohup 명령어를 통해 WAS를 띄운 후 http://{ec2주소}/docs/index.html 을 했을 때 404 Not Found 응답이 났습니다. 무엇이 문제일까? 문제의 build.gralde plugins { id 'org.asciidoctor.jvm.convert' version '3.3.2' } configurations { asciidoctorExt } dependencies { implementation 'org.spr..

개발일지 2023.11.03

[Spring] Github Actions 테스트 시 credential 값 설정하는 방법

프로젝트 환경 : Java, Spring SVN : Github 문제 상황 : Sonar Cloud의 Actions 동작 중 문제 발생 문제 발생 상황 프로젝트를 진행하며 이미지 파일을 AWS의 S3 버킷에 올려하는 상황이 생겼습니다. S3에 업로드하기 위해서는 S3의 버킷 이름, IAM의 ACCESS-KEY, SECRET-KEY가 필요합니다. 앞서 언급한 정보들은 github에 올라가는 경우 악용할 수 있어 보통 credential yaml 파일을 생성하고, github에는 올리지 않고 로컬, 배포 환경 서버에 yaml 파일을 두고 다음과 같이 yaml 파일을 include 해 사용합니다. spring: profiles: active: local # 기본 환경 include: credential # 비..

개발일지 2023.10.26