미리보기
기본 정보

- 안녕하세요! 백엔드 개발자가 되고싶은 유명한입니다. - 알고리즘 및 CS 스터디 등의 팀 활동을 하면서 함께 성장하는 것을 지향합니다. - 성장하기 위해 발생 했던 이슈와 해결 과정을 꾸준하게 기록합니다. - 팀의 개발 생산성을 향상시키기 위해 자동화된 인프라 구축을 추구합니다.
기술 스택
Java, Spring Boot, JPA, GitHub, MySQL
프로젝트
coffee-meet
팀 프로젝트
2023.10. ~ 진행 중
깃 주소 : https://bit.ly/4aYyewm
상세 설명 : https://bit.ly/420y8QV
- 타 부서 직원들과의 커피챗을 위한, 회사 기반 실시간 랜덤 매칭 플랫폼
- 캐시 적용을 통한 이전 채팅방 메세지 조회 API 성능
61.8ms → 11.6ms로 81.2% 개선- 이전 채팅방 메세지는 3일 동안 유지되며, 조회 빈도가 높고, 데이터의 변동이 없어 정합성 문제가 발생하지 않기 때문에 캐시를 적용하여 서버 부하를 최소화함
- JDBC 벌크 연산 적용을 통한 채팅방 백업 API 성능
10272ms → 1886.6ms로 81.6% 향상- 백업 성능을 개선하기 위해 데이터를 하나씩 백업하는 방식에서
벌크 사이즈만큼 백업하는 방식으로 개선 - 이 과정에서 스레드의 기본 스택 크기 분석 및 StackOverflow 오류 해결
- 더 나아가, 다양한 벌크사이즈 설정에 따른 성능 비교 분석을 통해
최적의 벌크 사이즈 도출
- 백업 성능을 개선하기 위해 데이터를 하나씩 백업하는 방식에서
- 커서 기반의 페이징 기법과 인덱스를 활용한 신고 목록 조회 쿼리 성능 195ms → 63.5ms로 67.4% 개선
- 신고 목록 조회 페이지의 특성을 고려하여, Page 방식 대신
Slice 방식의 무한 스크롤 기법이 적절하다고 판단 - 인덱스를 활용하여 조회 성능을 최적화
- 신고 목록 조회 페이지의 특성을 고려하여, Page 방식 대신
- 코드의 안정성을 위해 단위 테스트 작성 및 테스트 커버리지 80% 이상 유지
- 코드의 동작 보장을 위해 정상 케이스 뿐만 아니라 엣지 케이스에 대한
테스트 코드도 작성
- 코드의 동작 보장을 위해 정상 케이스 뿐만 아니라 엣지 케이스에 대한
- 의존성이 단방향으로 흐르도록 아키텍처 구조 개선 및 순환 참조 문제 해결
- service 계층에서 발생한 빈번한 순환 참조 문제를 해결하기 위해 implement 계층을 추가해서 의존성이 단방향으로 흐르도록 구조 개선
- Gradle 정보를 캐싱 처리하여 CI/CD 소요 시간
5m 1s → 3m 34s로 단축시키며, 팀의 개발 생산성 향상 - 실시간 통신을 위해 웹 소켓 및 STOMP를 활용한 채팅 기능 구현
- AWS EC2, Docker, GitHub Actions를 활용한 CI/CD 파이프라인 구축
- 캐시 적용을 통한 이전 채팅방 메세지 조회 API 성능
back-log
팀 프로젝트
2023.08. ~ 2023.09.
깃 주소 : https://bit.ly/47zSKAL
상세 설명 : https://bit.ly/3vBeJtJ
- Velog 플랫폼 클론 코딩
- 게시물 도메인 CRUD 기능 구현
- 지속적인 게시물 상세 조회 요청 시, 조회수가 무한하게 증가하는 문제 해결
- XSS 공격을 방지하기 위해 API 응답 데이터에 대한
HTML Escaping 처리 적용
포트폴리오
교육
프로그래머스
사설 교육 | 클라우드 기반 백엔드 엔지니어링 4기
2023.06. ~ 2023.12. | 졸업
경기대학교
대학교(학사) | 컴퓨터공학부
2018.03. ~ 2024.01. | 졸업
숭실고등학교
고등학교 | 이과
2015.03. ~ 2018.02. | 졸업
대외활동
SW 상상기업 프로그램 경진대회 우수상
경기대학교
깃 주소 : https://github.com/yumyeonghan/another-art
대학교에서 주최한 SW 상상 기업 프로그램에 참여하면서 another-art 프로젝트팀의 팀장으로서 활동했습니다. 효율적인 협업을 위해 Jira와 같은 협업 도구를 적극적으로 활용하여 팀원들의 업무를 효과적으로 관리하고 진행했습니다. 코드 컨벤션과 Git 브랜치 전략을 수립하고, 팀원들에게 교육을 진행하여 혼란을 방지하고 프로젝트를 원활하게 진행할 수 있도록 했습니다. 그뿐만 아니라 팀원 각자의 역량을 비교 분석하여 업무를 체계적으로 분담함으로써 효율적인 팀 협업을 끌어냈습니다. 이런 노력의 결과로 프로그램에서 우수상을 받는 성과를 이루었습니다.
이를 통해 개개인의 역량뿐만 아니라, 조직 전체에서의 성과를 달성하기 위해서는 기본과 원칙도 매우 중요하다는 것을 깨달았습니다.
자격증
정보처리기사
기사 | 산업인력관리공단
2023.06.
자기소개
저는 Spring 프레임워크와 자바 프로그래밍 언어를 활용하여 다양한 웹 애플리케이션을 개발하고, 해당 애플리케이션의 배포 및 운영에 대한 경험이 있습니다. 특히, 최근에 참여한 coffee-meet 프로젝트에서는 AWS를 활용한 배포를 통해 실제 서비스 운영 및 성능 테스트를 진행하며, 사용자 경험을 향상시키기 위해 다양한 기능에 대한 성능 개선을 수행했습니다.
첫째로, 채팅방 백업 성능 개선입니다.
사용자가 현재 진행 중인 매칭을 종료하면 활성화된 채팅방이 종료되고 동시에 백업이 진행됩니다. 그러나 이때 10,000개의 채팅 메세지를 백업하는데 10초라는 큰 시간이 소요되는 성능 문제가 발생했습니다.
이 문제를 해결하기 위해, 기존 JPA를 활용해 각각의 채팅 메세지를 저장하는 방식 대신에 JDBC를 활용한 벌크 연산(INSERT)을 도입하여 한 번에 채팅 메세지를 저장하는 방식으로 변경했습니다. 하지만 10,000개의 채팅 메세지를 한 번에 백업하는 과정에서 Stack Overflow 오류가 발생했습니다. 이 오류의 원인은 채팅 메세지를 백업하고 기존 메세지를 삭제하는 과정에서 발생한 벌크 연산(DELETE)에 있었습니다. JPA의 deleteAllInBatch()가 실행되면, 10,000개의 채팅 메세지의 식별자(Id) 값을 HQL에서 SQL로 파싱하는 과정에서 내부적으로 재귀 호출이 발생해 Stack Overflow가 발생한 것이었습니다.
이 문제를 해결하기 위해 스택의 기본 크기가 수용할 수 있는 최대 채팅 메세지 개수를 약 5,000개로 분석한 후, 10,000개의 채팅 메세지를 5,000개씩 2번에 나눠 백업하는 로직을 작성하여 문제를 극복했습니다. 더 나아가 어떤 벌크 사이즈가 가장 효율적일지에 대한 의문이 들었고, 이에 대한 비교 분석을 통해 10,000개의 데이터를 1,000개씩 10번에 나눠 백업하는 방식이 가장 효율적이라는 결론을 도출하였습니다. 이로써 채팅 메세지에 대한 백업 성능은 평균 10,272ms에서 1,886.6ms로 약 81.6% 향상되었습니다.
둘째로, DB 인덱스를 활용한 신고 목록 조회 쿼리 성능 개선입니다.
기존에 사용 중이던 관리자의 신고 목록 조회 API에서 발생한 성능 저하 문제를 해결하기 위해 인덱스를 활용해 쿼리를 개선했습니다. 초기에는 풀 테이블 스캔을 수반하는 오프셋 기반의 페이징 기법을 활용하고 있었으나, 이로 인해 대량의 데이터를 처리할 때 응답 시간이 길어지는 문제가 발생했습니다. 분석을 위해 1,000,000개의 테스트 더미 데이터를 삽입하고 성능 테스트를 진행했으며 특히, 풀 테이블 스캔을 최소화하고자 인덱스 레인지 스캔을 하는 커서 기반의 슬라이싱 기법을 도입함으로써 쿼리 성능을 향상시켰습니다. 이에 따라 조회 응답 시간이 평균 195ms에서 63.5ms로 약 67.4% 향상되었습니다.
마지막으로, 캐시 적용을 통한 이전 채팅방의 메세지 조회 처리 성능 최적화 및 서버 부하 경감입니다.
서비스 특성상 이전 채팅방의 메세지 조회는 3일 동안만 유지되며, 사용 빈도가 높고 데이터의 변동이 없어 정합성 문제를 고려하지 않아도 됐습니다. 이에 따라 캐시를 적용하여 서버 부하를 최소화했습니다. Scale Out 환경에서의 확장성을 고려하여 글로벌 캐시를 고려했고, 특히 다양한 데이터 타입을 저장할 수 있는 Redis를 도입하여, 이전 채팅방 메세지 조회 결과를 메모리에 보관함으로써 데이터베이스로의 접근 및 애플리케이션 서버의 연산을 효율적으로 최소화하였습니다. 결과적으로 1,000,000개의 이전 채팅 메세지에 대한 조회 성능이 평균 61.8ms에서 11.6ms로 약 81.2% 향상되었습니다.