미리보기
기본 정보
목표 성취를 위해 다른 사람과 함께 일하는 것을 좋아하며 여러 프로젝트에서 주로 리더를 맡아 프로젝트를 이끌었으며 때론 주변 상황을 따라가는 유연함을 갖추기 위해 노력합니다. 또한 기록의 중요성을 알고있기에 공부한 것들에 대해서 노션, 깃허브에 기록하는 습관을 가지고 있습니다. SpringBoot를 사용해 개발하는 것과 DevOps에 관심이 많습니다.
기술 스택
Java, Kotlin, MySQL, Spring Boot, JPA, Docker, junit5, Mockito
프로젝트
Juso
대덕소프트웨어마이스터고등학교
2023.10. ~ 2024.01.
Daum 우편번호 서비스가 다운됐을 경우를 대비한 우편번호 조회 서비스입니다. 3명으로 구성된 BE 팀에서 SpringBoot(Kotlin)와 JPA를 사용해 주소 검색 및 초성 검색 API를 개발했습니다. 도로명주소 DB에서 주소 데이터를 받기 위해 Zip File을 압축 해제하여 파일로 다운로드하는 로직을 구현했으며 SpringBatch Tasklet 방식을 이용해 약 1300만건의 데이터를 다뤘습니다. 또한 MySQL의 FullText 인덱스 설계 및 querydsl에서 적용시켜 검색 성능을 최적화 했습니다.
Index를 통한 쿼리 실행 시간 98% 단축
약 30만건 데이터에서 주소, 지번 조회 위해 관리번호 통한 Self Join 쿼리 작성중
→ ON절에 사용되는 관리번호에 인덱스가 존재하지 않았고 쿼리 실행시 약 28초 소요관리번호 컬럼 인덱스 생성을 통해 쿼리 실행 시간을 약 0.6초(98% 단축)로 최적화
Persistable 구현 통한 쿼리 수 절반 감소
JPA에서 PK에 UUID(0, 0)을 넣었을 때 persist가 아닌 merge로 동작
→ 불필요한 select 쿼리가 나가 배치 작업 실행 시간이 2배 이상 걸리는 문제 발생Persistable의 isNew 메소드를 재정의 → insert 쿼리만 나가도록 해결
Batch 작업시 OutOfMemory 해결
대량의 데이터를 한 번에 save 시킬 때 메모리에 모든 데이터가 올라가 OOM 발생
saveAllAndFlush 메소드 사용 후 entityManager를 clear하도록 하여 OOM 해결
XQUARE
대덕소프트웨어마이스터고등학교
2023.03. ~ 2024.03.
교내 여러 서비스들을 원앱으로 통합한 서비스입니다.
3명으로 구성된 BE 팀 및 MSA 환경에서 버그제보, 급식, 시간표 등 도메인을 맡아 SpringBoot(Kotlin, Java), JPA를 사용하여 API 개발 및 성능 개선, Sentry, Slack을 사용하여 발생하는 이슈에 빠르게 대응 가능한 환경을 구축했습니다. 또한 기존 Cloudflare Record, AWS RDS 등의 리소스를 Terraform으로 마이그레이션 했습니다. 또한 9명 규모의 팀에서 PM을 맡아 회의를 주도하고 팀원들의 의견을 조율하며 프로젝트를 이끌었습니다.
PiCK
대덕소프트웨어마이스터고등학교
2023.03. ~ 2024.03.
교내 수기로 관리되어 불편함이 있던 출결관리를 온라인으로 변경한 서비스입니다. 5명으로 구성된 BE 팀에서 SpringBoot(Kotlin)와 JPA를 사용해 출결 상태, 외출자 목록, 반 별 출결 조회 등의 API 개발 및 유지보수와 (프로젝트 절반 이상 기여) 600줄 이상의 코드 리팩토링을 했습니다. 또한 5명 규모 팀에서 UX 작성 리딩을 맡아보며 클라이언트에 대한 이해도를 높였습니다.