채용공고 올리기

백정광님을 응원해보세요!

지금 만족하고 있어요

미리보기

기본 정보

이름
백정광
직업
백엔드 개발자
간단 소개

안녕하세요, 백엔드 개발자 백정광입니다. Seed 단계에 있는 스타트업에 합류해 Pre-A, TIPS 선정, 매출 증가의 성과에 기여했습니다.

자기소개

자기소개
빠른 개발 일정 속에도 최소한의 코드 품질을 위해 노력합니다.

스타트업의 특성상 빠른 기능 개발이 요구됩니다. 빠른 개발만 하다보면 코드의 품질은 놓치기 쉬운데, 모든 테스트를 하는 게 아닌 중요한 비즈니스 로직만 테스트 코드를 작성해 최소한의 코드 품질을 유지하고자 노력했습니다.

이를 위해 중요한 비즈니스 로직은 도메인 패키지에 집중시켜 순수 자바 코드로만 구성했습니다. 제어할 수 없는 값은 가장 먼저 요청을 받는 컨트롤러 레이어에서 생성하여 도메인까지 의존성 주입하여, 컨트롤러 테스트는 어렵지믄 서비스와 도메인 테스트는 용이하게 만들었습니다. 이러한 노력 때문에 빠른 개발 속도에도 도메인 패키지 내 비즈니스 로직은 테스트 커버리지 100%를 유지할 수 있었습니다.

다양한 인프라 경험을 해봤습니다.

기본적인 프로젝트의 서버 설정을 직접 해봄으로 서버에 대한 이해와 배포 환경에 대한 기초적인 지식을 얻을 수 있었습니다. 리눅스 명령어를 사용해보고, 빠른 배포가 필요할 때는 scp 명령어를 통해 로컬에서 서버로 JAR 파일을 전송하여 배포한 경험이 있습니다. Docker 컨테이너 구동 로직을 bash 스크립트로 작성하고 이를 CI/CD 파이프라인에 적용하여 자동으로 실행되도록 설정해봤습니다.

기술 스택

기술 스택

Java, Spring, MariaDB, JPA

경력

회사명

주식회사키우소(KiwoosoCorp.)

직급 | 부서 | 근무 유형

개발자 | 개발팀 | 재직 중

근무 기간

2023.10. ~ 재직 중 (1년 3개월)

담당 업무
  • 만 명의 회원을 대상으로 15분 이상 소요되는 푸시 전송 로직을 1s로 개선

  • 기존 회사 앱의 소통방 프로젝트를 일임하여 레거시를 신규 프로젝트로 이관하는 업무 달성

  • 테스트 케이스가 없는 프로젝트의 도메인 레이어 테스트 커버리지 100% 달성

프로젝트

프로젝트명

등급 결제 API 설계

소속/기관명

키우소

프로젝트 기간

2024.10. ~ 2024.11.

프로젝트 내용
프로젝트명

사내 Firebase Cloud Messaging 푸시 전송 개선

소속/기관명

키우소

프로젝트 기간

2024.01. ~ 2024.04.

프로젝트 내용
푸시 히스토리 저장 개선

기존 레거시 코드에서는 푸시 전송 히스토리를 남길 때 두 개의 테이블에 저장했습니다. 저장 로직은 Jpa Repository의 saveAll 메소드로 저장하고 있었습니다. 만약 대략 10,000 명의 회원에게 푸시 전송한다면 데이터베이스에 저장하는 과정에서 약 12.8s가 소요되고 있었습니다.

JPA를 고집하지 않고 JDBC Template의 batchUpdate로 한 번의 쿼리에 1천개의 insert문을 적재하여 n번 호출하도록 개선하였습니다. 개선 이후 0.67s으로 성능 개선되었습니다.

푸시 전송 개선

기존 푸시를 전송할 때 Retrofit 라이브러리를 사용하여 단건식 푸시 요청을 보냈습니다. 만약 1만건의 푸시 요청이라면 반복문으로 1만번 요청을 보내던 형식입니다.

이런 부분을 Firebase Admin SDK를 사용하여 500개의 FCM 토큰을 한 번의 벌크 요청으로 전송하도록 개선하였습니다. 또 라이브러리에서 자체적으로 제공하는 비동기 처리 메소드를 사용하여 전송 시간을 개선하였습니다. 이를 통해 1만번의 구글 서버 요청을 푸시요청 n번 / 500으로 개선하였고 푸시 전송 시간을 약 16분에서 0.9s로 개선하였습니다.

쓰레드풀 설정

배포 이후 푸시를 전송하는 도커 컨테이너가 메모리 2.5gb를 점유하는 것을 확인했습니다. 평균 프로젝트당 500mb의 점유인 것을 감안하면 약 4배 이상 높은 수치였습니다.

스레드 덤프로 확인 결과 푸시 전송 1만건의 요청이 들어올 때 5천개의 쓰레드가 갑자기 생성되는 것을 확인했습니다. 라이브러리 코드를 분석하니 라이브러리에서 제공하는 비동기 푸시 전송 메소드를 호출하는 부분이 문제였습니다. Fcm Admin SDK는 개발자가 자체적으로 스레드풀을 설정하지 않으면 비동기 메소드에서 사용하는 스레드풀로 Executors.newCachedThreadPool();을 사용하고 있었습니다.

따라서 쓰레드풀의 코어 사이즈를 5개로, 맥스를 10개로 설정하여 적용하였고, 모니터링 결과 메모리 점유 500mb와 800mb 사이로 순항하는 것을 확인했습니다.

포트폴리오

URL

link

현재 블로그

URL 링크
link

예전 블로그

티스토리
댓글