미리보기
기본 정보

안녕하세요! 끊임없이 질문하고 성장하는 개발자 최영우입니다. Java, Spring을 주로 사용하며 이 외에도 Python, JavaScript, React도 사용해 본 경험이 있습니다. 도메인에 대해 이해하고 객체지향적인 설계를 하는 것을 좋아합니다. 눈 앞에 있는 요구사항만 보지 않고, 항상 더 넓은 시야로 확장성을 고려하면서 개발하고자 노력합니다.
기술 스택
Java, Python, Spring, AWS, Spring Boot, MySQL, JPA, webflux, aws-rds, websocket
프로젝트
Nomadic
개인
2023.10. ~ 진행 중
Nomadic은 여행을 도와주는 서비스로, 숙소 예약, 여행지 추천, 계획 생성 등 여러 여행에 도움이 되는 기능을 제공합니다.
자주 사용하던 Triple이라는 서비스를 보고 이러한 서비스는 어떻게 만들 수 있고 더 나아가 어떻게 개선할 수 있을까에서 시작된 프로젝트입니다.
좋아요 기능 성능 개선 - nGrinder를 사용한 성능 테스트,
만약 ‘좋아요’ 이벤트와 같은 대용량 트래픽이 발생하거나,
여러 번 ‘좋아요’를 의도적으로 반복적으로 눌렀을 때, 장애가 발생할 것으로 예상되어 진행한 성능 개선
좋아요 로직이 실행될 때마다 DB 커넥션이 사용되어 DB 커넥션 부족 오류 발생 →
DB 커넥션을 최대한 줄이기 위해 Bulk 연산 사용
좋아요 성능 vuser 1000명 기준 TPS 2000 → 7000으로 향상
좋아요 성능 vuser 1000명 기준 MTT 470 → 90으로 향상
Spring Actuator + Prometheus + Grafana를 사용한 모니터링
성능 개선한 좋아요 기능의 CPU 사용량이 기능 중요도에 비해 너무 높아 Bucket4J 트래픽 처리율 제한을 통한 CPU 사용량 낮추기 40% → 10%
⠀⠀⠀⠀⠀→ https://youngs-java-study.tistory.com/28
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
사용자 응답 값으로 Entity를 그대로 반환함으로 발생한 순환 참조 문제 → DTO 사용 해결
⠀⠀→ https://youngs-java-study.tistory.com/30
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
숙소 전체 조회의 여러 가지 복잡한 검색 조건들에 대한 동적 퀴리 생성에 있어 Native Query를 사용하기엔 코드의 복잡성이 증가하고 유지 보수가 쉽지 않아 Querydsl 사용으로 변경하여 보다 더 효율적인 동적 쿼리 생성
책임 주도 설계를 통한 객체 지향적인 도메인 설계를 통해 확장에 유연하고 유지보수가 쉬운 프로젝트 설계
Docker와 Jenkins를 이용한 자동 CI/CD 구현
No offset Pagination을 사용하여 전체 조회에 따른 리소스 감소
Stock-simulation
개인
2024.03. ~ 2024.11.
“지금은 돈이 없어서 주식은 못하지만, 만약 주식을 시작한다면, 나는 잘할까?”라는 의문에서 시작된 실제 주식 정보를 토대로 하는 모의 주식 투자 프로젝트입니다.
WebFlux를 사용하여 Reactive Programming 패러다임 적용, 주식 가격을 비동기적으로 실시간 변경
⠀⠀→ https://github.com/piedra-de-flor/stock-simulation/pull/17
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
FireBase RealTime DB를 사용하여 주식 가격을 실시간으로 제공함으로써 서버 부하 감소 및 빠르게 변동하는 실시간 주식 가격을 사용자가 빠르게 접근할 수 있게 됨으로써 UX 향상
(주식 30개 기준) 실시간 가격 조회 및 실시간 가격 업데이트
CPU 사용량 13% → 3%
⠀⠀⠀→ https://youngs-java-study.tistory.com/34⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
동시 매수 혹은 동시 매도 상황에서의 동시성 문제를 해결하기 위해, Pessimistic Lock을 사용한 동시성 문제 해결
⠀⠀→ https://youngs-java-study.tistory.com/33
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
WebSocket을 사용하여 KIS(한국투자증권) API를 통한 실시간 주식 정보 받아오기 및 클라이언트에게 실시간으로 정보 보여주기
더 완벽한 객체지향을 구현하기 위해 OOP 구조 변경
Guardia
경기대학교 심화캡스톤 디자인 (졸업작품)
2024.03. ~ 2024.06.
최근 실종 아동 혹은 실종 노인들의 수가 급격히 늘어나고, 이태원 참사와 같은 밀집 지역에 대한 주의가 필요하다고 판단되어, CCTV와 AI를 사용한 미아 방지와 인구 혼잡도 조회 서비스입니다.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
2명의 AI 개발자와 1명의 클라우드 개발자, 1명의 프론트 개발자, 2명의 백엔드 개발자로 구성된 팀에서 풀스택 개발를 담당했습니다.
RTSP를 사용한 CCTV 관련 Spring 서버, 데이터 처리를 위한 Spring 서버, AI model 실행을 위한 Flask 서버로 서비스의 분리를 통해 성능 향상 및 연쇄 장애 대처
인구 혼잡도 통계를 위한 시간별, 일별, 주간별, 월별 데이터 계산 성능을 높이고자 Spring Batch 사용
CCTV를 IaaS를 통해 사용하도록 하기 위해 인프라 학습
교내 캡스톤 디자인 금상 수상
교육
경기대학교
대학교(학사) | 컴퓨터공학과
2020.03. ~ 2025.02. | 졸업
자격증
정보처리기사
기사 | 한국산업인력공단
2024.12.