채용공고 올리기

Dongyuen Kim님을 응원해보세요!

지금 만족하고 있어요
혁신적
창의적
협업 지향
솔루션 지향
리더십

미리보기

기본 정보

이름
Dongyuen Kim
직업
백엔드 개발자
간단 소개

우아한 테크 코스 5기에서 백엔드 과정을 수료하였습니다. 해당 과정에서 행록 프로젝트를 진행하며 패키지간 의존성 분리, 여행 조회 및 경비 조회의 쿼리 성능 개선 
등을 담당하였습니다. 또한 서버 분리 및 로드 밸런싱을 통해 불필요한 서버 자원을 정리하고 효율적으로 scale out한 경험이 
있습니다. 마피아 투게더 프로젝트를 진행하면서 애그리거트 정의 및 패키지 의존성 분리, Redis를 통한 Repository 
구현, CI/CD 구축을 담당하였습니다.

기술 스택

기술 스택

Java, Spring, Spring Boot, aws-ec2, grafana, Prometheus, MySQL, Jenkins, Redis

프로젝트

프로젝트명

마피아 투게더

소속/기관명

개인

프로젝트 기간

2024.04. ~ 진행 중

프로젝트 내용

About


웹을 통해 실시간으로 온라인 마피아 게임을 즐길수 있는 서비스입니다.
로그인이나 어플 설치 없이 실시간으로 게임을 즐길 수 있습니다.

개발 인원 : 6 ( BE : 3, FE : 1, DESIGN : 2
2024.4 ~ 2024.5 ( MVP 개발 ), 2024.5 ~
BE : 3, FE : 1, Design : 2
Java, Spring Boot, Nginx, Docker, AWS EC2, Redis, Jenkins, Github Action

SiteLink : https://mafia-together.com
Github : https://github.com/mafia-together/

기능 구현


  • 채팅 조회 및 전송 기능 구현

  • 투표기능 구현

  • 플레이어 직업 구현

  • 투표 조기 종료 기능 구현

  • 상태 변경 로직 설계 및 구현

  • 방 상태 확인 API 구현

어그리거트 분리 및 패키지 분리


[문제 상황]
Room이 모든 객체에 의존성을 가지고 있어 유지 보수성에 문제가 발생

[해결]
분리한 패키지에서 서로 강한 의존성을 가지고 있음
양방향 의존과 직접 객체를 참조하여 강한 의존성을 가지고 있다고 판단
패키지 간 참조를 간접 참조로 바꾸어 의존성을 약화 시킴
논리적으로 의존이 필요한 경우 event를 발행하여 양방향 의존을 해결
패키지간 의존성 분리

Redis 도입


[문제 상황]
게임의 데이터가 Spring 서버에 위치하고 있어 SPOF에 취약하고 
Scale out, 무중단 배포시 문제가 있을 것으로 예상
유저가 많아질 수록 많은 메모리가 필요하게 될 것인데 스프링과 같이 관리할 경우 메모리 부족
게임 데이터를 JVM으로 관리하고 있는 것이 원인이라 판단

[해결]
Redis를 도입, Game, Room, Chat, Vote, Job의 저장소를 구현

인프라


[CI/CD]
Jenkins, Github Action, Github, Docker Hub를 활용하여 파이프라인 작성

프로젝트명

행록 - 위치기반 여행 기록 서비스

소속/기관명

우아한테크코스

프로젝트 기간

2023.06. ~ 2023.11.

프로젝트 내용

About


여행에서 느꼇던 설렘과 추억을 장소 기반으로 기록할 수 있도록 도와주는 서비스 입니다
여행의 흐름과 경비, 사진 메모 등을 한눈에 확인할 수 있습니다.
원한다면 나의 여행을 링크, 커뮤니티 등을 통해 타인과 공유할 수 있습니다.

2023.07 ~2023.11
BE : 5, FE : 3
Java, Spring Boot, Spring Data JPA, Rest Assured, Nginx, Docker, AWS EC2, Grafana, K6, Oauth2.0, JWT, MySQL, Jenkins, Github Action
SiteLink : https://hanglog.com
Github : https://github.com/woowacourse-teams/2023-hang-log

기능 구현


  • 소셜 로그인

  • 사용자 단일 여행 경비 조회

  • 공공 환율 api 조회 및 저장

  • 공유 상태 수정

  • 커뮤니티 전체 여행 조회 기능 구현

  • 커뮤니티 단일 여행 조회

  • 커뮤니티 단일 여행 경비 조회

패키지간 의존성 분리


[문제 상황]
엔티티간 의존성이 높아 분리할 필요성을 느낌

[해결]
타 패키지의 엔티티간의 참조가 있을 경우 id를 참조하게 하여 간접 참조로 분리
로직적으로 분리가 불가능할 경우 event 발행

TPS(Transtaion Per Second) 성능 개선


[문제 상황]
API요청 별 중복되거나 불필요한 쿼리 발생

[해결 방안]

JPA N+1 문제
단일 여행 조회 쿼리를 Fetch Join으로 수정하여 요청당 6회에서 3의로 개선
Static한 고정값 조회
경비 조회의 특정 고정값들을 메모리에 Static하게 관리하여 요청당 6회에서 4회로 개선

서버 분리 및 로드 밸런싱


[문제 상황]
각 EC2의 서버 용량이 불필요하게 큼
단일 운영서버로 인해 단일 장애점이 발생시 대체가 불가능하다는 점을 인식
무중단 배포를 위해 운영서버를 확보하기로 함

[해결]
단일 장애점(SPOF)를 피하기 위하여 Nginx를 통해 운영서버를 스케일 아웃
기존 prod, dev의 t2.small 서버 → micro 서버 pord1, prod2, dev, LB 서버로 스케일 아웃

인프라


[서버 모니터링 구축]
Grafana, Prometheus, Loki 등을 통해 서버 모니터링 구축

[부하 테스트]

K6를 통한 부하 테스트 진행
Tomcat과 HikariCP 최적화 진행

포트폴리오

첨부파일

첨부파일명

김동연_이력서.pdf

첨부파일명

김동연_포트폴리오.pdf

댓글