미리보기
기본 정보
자기소개
문제의 근본적 원인을 파악하고, 합리적으로 해결하기 위해 노력합니다.
단순히 문제를 풀어나가기보다 현재 상황에 가장 적합한 방법이 무엇인지 트레이드 오프를 거쳐 신중히 고민합니다.
불편했던 워크 플로우를 코드로 개선해나가는 것을 즐깁니다.
빌드/배포 시스템, 실시간 에러 알림 시스템 구축을 통해 팀원들이 더욱 개발에 집중할 수 있는 환경을 만드는 것에 기여합니다.
기술 스택
Java, Spring Boot, JPA, MySQL, C, Git
경력
B1ND (교내 전공 동아리)
팀원 | 서비스 파트 | 재직 중
2023.03. ~ 재직 중 (1년 8개월)
서비스 개발 / 서버 관리
도담도담 API 개발/운영 주 담당 (Java, Spring Boot, JPA, MySQL)
실시간 서버 에러 알림 시스템 구축 (Java, Discord WebHook)
빌드/배포 시스템 구축(NCP, GitHub Actions)
프로젝트
도담도담 - 불편했던 워크플로우 개선
B1ND
2024.06. ~ 2024.06.
서버 배포, 실시간 에러 알림 자동화로 백엔드 팀의 개발 생산성 향상
<기존>
서버 배포를 위한 번거로운 Gradle, Docker 명령어 작업 때문에 개발 흐름이 끊겨 전체적인 작업 효율이 저하됨.
<개선>
GitHub Actions를 사용해 master 브랜치에 변경 사항이 감지될 때마다, 자동으로 Naver Cloud 서버에 배포되도록 구현함.
<기존>
수동으로 에러를 파악하는 기존 플로우 때문에 장애 대응 시간이 길어지는 문제가 발생함. (사용자 제보 -> 서버 로그 확인)
<개선>
팀 메신저인 Discord의 WebHook 기능을 이용해 실시간으로 서버 에러 정보를 알려주도록 구현함. (에러 발생 시각, Endpoint, Stack Trace 등)
도담도담 - 귀가 버스 신청 데이터 정합성 보장
B1ND
2024.06. ~ 2024.06.
귀가 버스 최대 신청 인원 초과 문제 해결을 위해 JPA로 비관적 락 적용
<기존>
버스 레코드에 여러 트랜잭션이 동시에 접근하여 데이터 정합성 문제가 발생함.
이로 인해 신청자 수가 버스 최대 좌석 수를 초과하여 신청했음에도 버스에 탑승하지 못하는 학생들이 생김.
<개선>
서비스 특성 상 신청한 순서대로 학생들을 탑승시켜야했고, 몇 천~만건의 동시 요청이 발생하는 상황이 아니었기에 비관적 락을 적용함.
JPA에서 제공하는 @Lock(PESSIMISTIC_LOCK)을 사용하여 버스 조회 시점에 X-Lock을 걸어 트랜잭션 실행 순서를 보장함.
도담도담 - 토큰 서버 성능 최적화
B1ND
2024.06. ~ 2024.07.
NodeJS -> Spring WebFlux 전환으로 서비스 성능 병목 지점인 토큰 서버 성능 개선
<기존>
메인 서버와 OAuth 서버가 토큰 서버에 강하게 결합하는 구조였음. 한꺼번에 많은 요청이 들어올 경우, 토큰 서버의 레이턴시가 높아져 전체 서비스에 성능 문제가 발생함.
비용적, 복잡성의 문제로 스케일업/아웃의 한계가 있었음. 따라서, 서버 자원을 최대한 효율적으로 사용하도록 개선 작업이 필요했음.
<개선>
토큰 서버를 Spring WebFlux로 전환함.
멀티 스레드 기반 Non-Blocking I/O의 이점을 최대한으로 활용하기 위해 기존의 Blocking 작업을 Non-Blocking하게 변경함.
jjwt 라이브러리를 사용하던 중, jwt id를 설정하기 위해 Java SecureRandom으로 난수를 생성하는 과정에서 엔트로피 풀 부족 이슈로 Blocking 호출이 발생한다는 것을 파악함.
별도 스레드 풀에서 실행시켜 Event Loop 스레드의 Blocking을 막는 방법이 있었지만, Java Security 독스를 통해 Non-Blocking하게 난수를 생성하는 알고리즘(NativePRNGNonBlocking)을 찾아 적용함. 이를 통해 추가 오버헤드 없이 Non-Blocking을 구현함.
부하 테스트 결과 : p50 레이턴시 69% 개선 (300ms -> 92ms), TPS 188% 개선 (2813/s -> 8114/s)
도담도담 - API 서버 코드 재작성
B1ND
2024.07. ~ 2024.08.
코드 관리 및 확장의 효율성을 위해 Gradle 멀티 모듈 도입
<기존>
단일 모듈 프로젝트에서 패키지 구조만 나누어도 의존성 분리가 가능하지만, 개발 과정에서 실수로 의존 방향이 무너질 수 있는 리스크가 존재함.
배치 시스템과 같은 어플리케이션을 추가하려면 도메인 로직을 중복 작성하는 번거로움이 있었음.
<1차 개선>
Gradle 기반 멀티 모듈 구조를 도입해 어플리케이션 모듈이 코어 모듈을 의존하는 형태로 변경함.
새로운 어플리케이션을 추가하려면 코어 모듈을 의존하는 새로운 모듈을 만들면 되기에 코드 재사용성이 높아짐.
1차 개선된 모듈 구조 : api, core, infra
<2차 개선>
미래에 새로운 어플리케이션이 여러 개 추가된다면, 코어 모듈이 가지는 책임이 비대해질 수 있었음.
기존 모듈들을 책임을 기준으로 세분화하여 필요한 의존성만을 조립할 수 있는 구조로 변경함.
기능 수정, 코드 리팩토링 등의 작업에서 영향 범위를 파악하는데 훨씬 용이해짐.
2차 개선된 모듈 구조 : dodam-application, dodam-system-core, dodam-system-domain, dodam-in-system-available
포트폴리오
대외활동
알고리즘 문제 풀이 스터디
대구소프트웨어마이스터고등학교
뛰어난 문제 정의/해결력을 갖추길 희망하는 고등학교 3학년 학우들과 알고리즘 문제 풀이 스터디를 진행 중입니다.
하루에 최소 1개의 알고리즘 문제를 풀고 있으며, 어려워서 모르는 문제들을 집단지성으로 해결하며 사고를 확장시키고
있습니다.
GitHub : https://github.com/boj-dgsw/ps
백준 프로필 : https://solved.ac/profile/suwon3274
교내 컨퍼런스 백엔드 챕터 발표
대구소프트웨어마이스터고등학교
고등학교 1~2학년 후배들을 대상으로 OAuth2.0 동작 방식과 도담도담의 OAuth 서비스에 대해 소개했습니다. 수십 명의 사람 앞에서 발표하는 것이 처음이어서 많이 떨렸지만, 이를 계기로 발표에 대한 자신감을 가질 수 있었습니다.
국립 대구 디딤센터 코딩 교육 봉사
대구소프트웨어마이스터고등학교
국립 대구 디딤센터에서 손선풍기/RC카 Arduino Kit 조립/코딩 교육 봉사를 진행했습니다.
초등학생부터 고등학생까지 다양한 나이대의 학생들에 수준을 맞춰 활동에 잘 참여하도록 보조했습니다.
기사 : https://www.veritas-a.com/news/articleView.html?idxno=413042
자격증
TOEIC
720점 | 한국TOEIC위원회
2024.02.
정보처리산업기사
한국산업인력공단
2023.12.
TOEIC 브릿지
98점 | 한국TOEIC위원회
2024.12.
TOPCIT
3수준 | 정보통신기획평가원
2023.05.
SQLD
한국데이터산업진흥원
2023.04.
교육
대구소프트웨어마이스터고등학교
고등학교 | 임베디드SW개발과
2022.03. ~ 현재 | 재학 중
외국어
영어
일상 회화 가능