Contact.
anna.jin.6848@gmail.com
경기도 성남시 분당구
Channel.
LinkedIn. www.linkedin.com/in/anna-jin-3b7041228
Introduction.
안녕하세요! 어제보다 오늘, 오늘보다 내일 한걸음 더 나아가고자 하는 성장지향형 백엔드 개발자입니다.
더 나아가는 개발자
지속적으로 새로운 기술에 대한 호기심을 가지고 탐구하여, 이를 실제 프로젝트에 적용해왔습니다.
•
Deprecated된 RestTemplate을 비동기 통신 구현을 위해 WebClient로 전환 및 모듈화
•
장애 대응을 위해 Kakfa를 도입
•
Git Actions에서 Gitlab CI/CD로 마이그레이션 및 Docs 작성으로 팀의 프로젝트의 버전 및 코드 관리의 효율성 향상
•
Nginx와 Docker를 사용하여 서버 관리의 효율화
함께하는 개발자
발자취를 남기고, 다함께 성장하는 개발자를 지향합니다.
•
현재까지 약 200여 개의 게시글과 월 평균 조회수 약 4,300회을 보유한 블로그를 운영
•
꾸준한 멘토링 활동으로 개발 지망생들에게 성장의 기회를 제공하고 함께 성장하는 환경 구성
Work Experience.
스마트 체크인 및 체크아웃, 100% 자동예약 시스템 등 호스피탈리티 산업의 디지털 서비스를 제공하는 스타트업으로, 카카오챗봇 및 국내 최초 Oracle PMS(Property Management Solution) - Opera 연동
Project Member
예약 서비스 담당
2023.08 ~ 진행중
파르나스 호텔 부킹 HUB 및 CRS(Channel Reservation Service) 개발
Skills. JAVA Spring boot MySQL JPA WebClient
Link. 부킹 사이트
•
OWS(Opera Web Service) API를 사용하여 Opera System(이하 Opera)과의 연동 개발
◦
예약 등록/취소, 재고/요금 조회, 프로필 생성 및 멤버십 등록 등의 API 연동
•
WebClient를 사용한 비동기 통신
◦
OWS를 사용하는 3개의 호텔로의 요청을 비동기로 처리하기 위해 WebClient의 비동기 통신을 활용
◦
WebClient의 concatMap() 메소드를 사용하여 한번의 Request에 3개 ~ 5개의 요청을 순차적으로 처리하되 비동기로 동작하게 함으로써 성능과 응답 시간에 영향을 주지 않도록 고려함. 또한 추후 n개의 호텔이 추가 되더라도 확장이 용이하도록 구현
•
예약 모니터링을 위한 알림 전송(WebHook) 구현
◦
WebClient를 사용한 비동기 처리로, 응답 속도에 영향을 주지 않고 실시간으로 서버의 상황을 모니터링할 수 있도록 알림 전송 기능 구현
•
Factory Method Pattern을 Java로 구현하여 공통 부분 분리
◦
OWS API의 XML Request Body의 공통 부분을 정의하고, 동적으로 생성할 부분은 Interface를 상속받아 구현하도록 하여 유지보수 및 확장성을 용이하게 하면서 공통 부분의 규칙에는 강제성을 부여함.
•
대용량 데이터 처리 시간 약 70% 개선
▪
Before: 약 600s
JPA의 단일 쿼리 실행 방식은 네트워크 지연과 자원 소모가 큰 문제가 있었고, 로직상의 문제로 pessimisticlockexception 이 발생하는 이슈가 있었음.
▪
After: 약 180s
대량의 데이터를 처리하는데 필요한 시간과 자원을 줄이기 위해 JDBC Batch Update 도입
적절한 배치 크기를 설정한 후 transaction을 commit하여 메모리 사용 최적 화 및 처리 속도 향상.
Project Member
Gitlab 담당
2023.09 ~ 2023.11
GitLab Runner를 이용한 CI/CD 및 무중단 배포 환경 구축
Skills. AWS Linux Nignx Gitlab Shell Script
•
Server
◦
Nginx를 사용한 리버스 프록시 및 무중단 배포 환경 구축
▪
무중단 배포 script에서 docker와 Nginx를 위한 파일을 동적으로 생성하여 간단하게 배포할 수 있도록 구현
•
GItlab
◦
공통 Repository에서 .gitlab-ci.yml 파일 및 공통 파일을 관리하여 사용자가 더욱 간편하게 Gitlab cicd를 사용할 수 있도록 구축
◦
Github to Gitlab Migration Docs 작성
▪
기존 Github project를 Gitlab으로 Migration할 수 있는 가이드를 작성하여 팀 전체에 공유
Project Leader
예약 서비스 담당
2023.06 ~ 2023.08
외부 CMS 서비스 연동
Skills. JAVA Spring boot MySQL JPA WebClient
연동 서비스. Agoda, Hotelstroy
•
외부 CMS의 API를 호출하기 위한 XML Format의 RequestBody를 통일화하고 유지보수성을 높이기 위해 Factory Method Pattern를 Java를 사용하여 구현
•
기존 on duplicate key update 로 되어있던 JPA Native 쿼리를 JDBC Template의 Batch Update를 활용하여 대용량 데이터 처리 개선
•
대용량 데이터 처리 시간 약 95% 개선
▪
Before: 약 3000 ~ 4000ms
JPA Native 쿼리에 on duplicate key update 를 사용하여 단 건씩 데이터 처리
약 1800개의 요청을 3초간격으로 5회 요청 받았을 때, 데이터를 처리하는 과정에서 DeadlockLoserDataAccessException 이슈가 발생.
▪
After: 약 200 ~ 300ms
기존 JPA Native를 JDBC Template의 Batch Update로 변경하여 bulk insert / update 구현
on duplicate key update 를 사용하는 대신 서비스 레이어에서 데이터를 가공하도록 변경.
Project Leader
1인 프로젝트
2022.12 ~ 2023.08
CMS(Channel Management Service) 및 어드민 페이지 개발
Skills. JAVA Spring boot MySQL JPA WebClient HTML CSS JQuery Thymeleaf
•
서비스 기획 / 설계 / 개발 / 운영 등 전반적인 업무 담당
•
OWS API를 이용한 PMS(Property Management System) 통신 환경 구축
◦
WebClient를 사용하여 비동기 통신 구현
•
단 건으로 OWS API 호출 및 데이터 가공 시간 약 92.2% 개선
▪
Before: 약 1m 30s
중첩된 3중 for문을 사용해 깊게 중첩된 리스트들을 하나씩 처리하는 로직
▪
After: 약 700ms
List를 특정한 Map으로 인덱싱하여 중첩된 for문을 사용하지 않고도 Key를 통해 빠르게 데이터에 접근할 수 있도록 개선.
•
어플리케이션 재 설계를 통한 엑셀 다운로드 성능 개선
▪
문제점
외부 API 성능 이슈로 인해 엑셀 다운로드 기능 개발 시 속도 및 성능 저하 이슈 발생.
실시간 데이터를 받아서 처리해야했기 때문에 Spring Batch로 처리할 경우 데이터가 상이한 이슈 발생
▪
개선 - 어플리케이션 재설계
기존에 모든 데이터를 다운로드하는 방식 대신, 특정 데이터만 다운로드 하도록 View를 구성하여 목적에 맞는 데이터를 소분화 시킬 수 있게 유도함.
•
JQuery와 Thymeleaf를 이용하여 페이지별로 모듈화 된 View 개발
Project Member
카카오 싱크/로그인 담당
2022.10 ~ 2022.12
숙박/레저 예약 관련 서비스를 제공하는 카카오 챗봇 개발
Skills. JAVA Spring boot MySQL JPA
•
SQL Query 개선으로 챗봇 내 API 호출 속도 80% 이상 개선
◦
Before: 약 3000ms
◦
After: 약 600ms
•
OAuth2를 이용한 카카오 일반 로그인과 카카오 싱크 플러그인을 이용한 카카오 싱크 로그인 구현
Project Leader
총괄
2022.09 ~ 2022.10
단순/루틴 업무를 핸들링을 위한 백오피스 시스템 구축
Skills. JAVA Spring boot MySQL JPA WebClient
•
운영팀에서 개발팀에게 요청하는 단순 처리 업무 시간을 주당 10시간 이상 단축
◦
Before: 약 2시간/일
◦
After: 없음
Projects.
채찍-PT
ChatGPT를 이용한 AI 면접 멘토링 서비스
Skills. OpenAI(ChatGPT) Spring Boot MySQL JPA Django Kafka
’23.09.16~‘23.09.23 (1주)
2023 항해커톤
•
Kafka를 이용한 Message Queue 구현
◦
데이터를 디스크에 유지하고, 보관하는 특징을 갖는 Kafka를 이용하여 갑작스러운 서버 장애로 인한 요청 누락 문제를 해결하고자함.
▪
Before - 도입 전
서버로 요청을 보냈으나 응답 서버에 장애가 발생한 상태이면 해당 요청은 처리되지 못하고 사라짐.
▪
After - 도입 후
Kafka를 이용하여 요청 서버(Producer)는 이벤트를 발행하고, 응답 서버(Consumer)는 구독한 토픽에서 이벤트를 가져와 처리함. 이렇게 구성된 시스템은 서버 장애 시에도 복구된 이후에 이벤트를 처리할 수 있어 데이터의 안정성과 신뢰성을 보장할 수 있음.
◦
Trouble Shooting
▪
문제 - 제한된 성능의 서버에서 Zookeeper 사용 시, 메세지를 처리하지 못하는 이슈 발생
▪
해결 - Zookeeper에서 Kraft모드로 마이그레이션하여 리소스 절약과 더불어 확장성을 높이고 운영 복잡성을 낮춤
•
로그인 인증/인가 및 어플리케이션 보안 환경 구축
◦
Spring Security + JWT를 사용하여 보안과 유저 편의성을 모두 잡음
◦
인증/인가 예외처리 및 토큰 검증 구현
▪
AuthenticationEntryPoint - 인증 실패 시 적절한 예외를 처리
▪
AccessDeniedHandler - 인증된 사용자에게 접근 권한이 없는 경우 예외를 처리
▪
AuthenticationFilter - 토큰의 유효성 검증 수행
배슐랭 (Bae-Chelin)
사회적 교통약자를 위한 Barrier-free 가게 검색 플랫폼
Skills. Spring Boot MySQL JPA Spring Security JWT OAuth2.0
’22.03.10~‘22.04.12 (5주)
항해99
•
Spring Security + JWT + OAuth2.0을 활용한 소셜 로그인 구현 및 어플리케이션 보안 환경 구축
•
Full Text Search 방식을 이용하여 가게 검색 기능 구현
◦
MySQL의 MATCH AGAINST 사용하여 LIKE 를 사용했을 때에 비해 약 80%의 검색 성능 개선
◦
Ngram parser를 사용하여 검색어가 일부 단어만 포함 되어도 검색이 가능하도록 정확도 및 사용자 경험 개선
◦
Trouble Shooting
•
데이터 파이프라인 구축 플로우 기획
◦
데이터 파이프라인
•
QureyDSL을 이용한 태그 및 카테고리 필터링 로직 구현
•
•
펫퓰러 (Petpular)
집사들의, 집사들에 의한, 집사들을 위한 반려동물 커뮤니티
Skills. Spring Boot MySQL MyBatis WebClient JSP HTML CSS
‘22.06.24~‘22.08.01 (6주)
메가 IT아카데미
•
Deprecated된 RestTemplate 대신 WebClient를 이용하여 Open API 호출 구현
◦
Trouble Shooting
•
반려동물과 커뮤니티 페이지 CRUD 구현
•
Session 방식으로 로그인 구현
◦
소규모의 프로젝트에서 로그인 데이터의 안정성을 고려하여 Token 대신 Session 방식 선택
◦
Trouble Shooting
▪
문제 - Token 방식은 탈취의 위험과 짧은 유효기간으로 사용자 경험이 떨어질 수 있다는 단점을 고려해야했음.
▪
해결 - Scale out이 필요하지 않은 소규모의 프로젝트임을 고려하여 Token 대신 상대적으로 보안적으로 안전한 Session 방식을 채택하여 로그인을 구현.
•
JSP + JQuery를 이용하여 페이지별 모듈화 구현
◦
JSP의 Include를 사용하여 nav, haeder 및 footer를 제외한 페이지만 동적으로 변경되도록 구현
Skills.
Language
•
Java
•
Python
•
JavaScript
Frameworks & Tools
•
Spring boot - MyBatis, JPA
•
JQuery, Selenium, Kafka, OpenAI
Database
•
MySQL
Infra
•
Docker, Nginx, AWS
Collaboration
•
GitHub - Git Actions
•
GitLab