미리보기
기본 정보
Java/Spring, NetsJS를 사용하는 백엔드 개발자 원주연입니다. 문제해결을 위해 고민하고 사람들과 기술적인 커뮤니케이션을 나누는데 흥미가 있습니다. 정기적인 스터디모임을 통해 지식을 공유하고 의견을 공유하는 것을 좋아합니다. 가독성과 유지보수성이 좋은 클린 코드를 지향합니다.
기술 스택
DBMS/RDBMS, TypeScript, Spring Boot, NestJS, AWS, Redis, Kafka
경력
아우토크립트 주식회사
팀원 | V2G개발그룹
2022.10. ~ 2024.06. (1년 9개월)
[Auth 서버 이중화를 통한 고가용성 보장]
로드밸런싱을 통해
Auto Failover
를 설정하여 active서버에 장애가 발생했을시 passive서버를 통해 무중단 서비스서버가 장애가 생겼을 시
CloudWatch Alarm
을 통해 알람 메일 설정Auto Scaling
을 통해EC2 인스턴스
자동 생성
JWT
를 활용한 토큰 발급
[애플리케이션 충전 서비스 리팩토링]
충전기 메세지 충전기의 메세지별 대응로직 추가
충전기 메세지 핸들러 추상화를 통해 각 메세지에 맞는 구현체를 상속받아 구현
전략 패턴
을 사용하여 메세지 타입에 맞는 메세지 핸들러 구현체가 호출되도록 구현
NFC 충전카드 태깅 및 충전기능 리팩토링
충전기에 대한 의존성 제거
충전기 결함, 정전 등 제어 불가능한 케이스에 대해 어플리케이션 장애 발생
충전기에서 메세지를 보내지 않은 경우
Scheduler
를 통해 강제종료 처리Firebase
를 이용하여 강제종료 후 유저에게 푸시알림Event
로 전송 처리
충전기 동시성 이슈 해결
기존 충전기에 대한 Lock이 걸려있지 않은 상황
한 유저가 충전기를 이용해 충전 시도 시 다른 유저가 같은 충전기에 대해 원격으로 충전을 거는 이슈 발생
해당 동시성 이슈가 간혹적으로 발생하는 근거를 들어
낙관적 락
적용
비정상적 충전기 선점 문제 해결
사용자가 충전소를 가기 전 미리 어플리케이션으로 충전기를 인식하여 선점하는 문제 발생
결제 후 5분내 충전을 시도하지 않으면 충전취소 및 환불로직 수행
기존 40% 이슈율을 1%이하로 개선
[공지사항 이미지 저장방식 개선]
기존 공지글과 이미지를 한번에 올리는 API 구조
이미지 업로드, 공지글 작성 API 분리를 통한 성능 개선
사용자가 이미지 첨부 시 바로 이미지 업로드 API를 요청하도록 개선하여 응답글 작성시 응답속도 개선
DB에 Base64URL을 그대로 저장하는 구조
AWS S3 Bucket
을 통하여 저장하도록 로직 개선공지사항 내용 DB 용량 40% 이상 감소
공지사항 작성, 공지사항 조회 응답시간 50% 이상 개선
[캐시 및 스케줄러를 활용한 DB 부하 감소 및 성능 최적화]
충전단가 조회 캐시 적용
크게 변동이 없는 충전단가 조회에 대해
Spring Local Cache
적용충전단가의 부하가 바뀌는 시간마다
@CacheEvict
를 적용하여 캐시를 제거하고 갱신된 데이터를 반영
충전소 조회 시 충전소마다 조회횟수 통계로직 변경
기존 사용자가 충전소를 조회할 때마다 DB에 대해 업데이트 수행
Map을 통해 충전소별 조회횟수를 저장
Scheduler
를 통해 10분에 한번씩 조회횟수를 한번에 업데이트
프로젝트
토이 프로젝트: 콘서트 예매 시스템
개인
2024.06. ~ 2024.08.
프로젝트 진행하게 된 계기
Redis
,Kafka
등 대규모 트래픽 처리에 대한 경험에 대한 갈증Lock
을 통한 동시성 문제 제어TDD
,Clean Architecture
를 통한 설계와 구현능력 상승 기대Event
를 통한 외부 API 의존성 제거
개발 내용
Clean Architecture + Layered Architecture
방식으로 설계비즈니스 로직 보호와 도메인 중심의 설계
API 계층이 비즈니스 로직을 의존하도록 설계
Facade 계층을 도입하여 서비스 간 상호참조 방지
Redis
를 통한 대기열 방식 구현토큰 조회를 DB에서 Redis로 이전시킴으로써 DB에 대한 부하를 줄여 DB 성능 및 안정성 향상
Redis
의 인메모리 특성으로 유저 토큰 조회 응답속도를 빠르게 개선Redis
의 클러스터링 기능을 활용하여 유저 토큰 관리 기능의 확장성을 보장
결제 기능
Kafka
로 구현예약 완료시 유저의 잔액 차감 Kafka 이벤트로 처리
예약 기능과 결제 기능의 의존 분리
DB Lock을 활용한 동시성 이슈 제어
유저 포인트 충전/조회에 대해 낙관적 락 적용
비정상적 충전/조회 API 요청이 동시에 들어올 경우를 대비하여 방어로직
콘서트 좌석에 대해 비관적 락 적용
충돌이 잦은 콘서트 좌석에 대해 낙관적 락 대신 비관적 락 적용
교육
한국공학대학교
대학교(학사) | 게임공학부 게임공학과
2013.03. ~ 2022.02. | 졸업
스타르타코딩클럽
사설 교육 | 항해99 백엔드 플러스 5기
2024.06. ~ 2024.08. | 졸업
자격증
정보처리기사
한국산업인력공단
2021.11.
SQLD
한국데이터산업진흥원
2024.04.