HOME
Resume
🌱

진유진(Anna) | Backend Engineer

Contact.

  anna.jin.6848@gmail.com
  경기도 성남시 분당구

Channel.

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
OWS(Opera Web Service) API를 사용하여 Opera System(이하 Opera)과의 연동 개발
예약 등록/취소, 재고/요금 조회, 프로필 생성 및 멤버십 등록 등의 API 연동
WebClient 모듈화
WebClient 객체를 매번 새로 생성하지 않고 Bean으로 등록하여 사용하기 위해 Method Chaining 방식으로 모듈화 구현 - 모듈화1, 모듈화2
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 항해커톤
OpenAI의 ChatGPT API를 이용한 프롬프트 엔지니어링 설계
GPT 구현 Repository - Github
관련 내용 포스팅 - Blog
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를 사용하여 검색어가 일부 단어만 포함 되어도 검색이 가능하도록 정확도 및 사용자 경험 개선
데이터 파이프라인 구축 플로우 기획
데이터 파이프라인
QureyDSL을 이용한 태그 및 카테고리 필터링 로직 구현
팀 리더로서 팀원들 간의 원활한 커뮤니케이션을 위해 팀 Notion 제작 및 스크럼 진행

펫퓰러 (Petpular)

집사들의, 집사들에 의한, 집사들을 위한 반려동물 커뮤니티
Skills. Spring Boot MySQL MyBatis WebClient JSP HTML CSS
‘22.06.24~‘22.08.01 (6주)
메가 IT아카데미
Deprecated된 RestTemplate 대신 WebClient를 이용하여 Open API 호출 구현
반려동물과 커뮤니티 페이지 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

Experience.

‘24.03.16
‘23.09.16 ~ ‘23.09.23
프라임닷
항해99

Education.

‘23.08.23 ~ ’23.08.24
‘22.05 ~ ‘22.08
‘21.10 ~ ‘22.04
‘16.03 ~ ‘21.08
AWS Container Bootcamp for Startups 교육 이수
항해99 7기 수료 - Project
웹프로그래밍 과정 수료 - Project
호텔경영학과 졸업
AWS Startup
항해99
메가 IT아카데미
전주대학교