- 프로젝트주제및선정배경(기획의도등)
- 프로젝트개요(프로젝트구현내용, 컨셉, 훈련내용과의관련성등)
- 활용장비및재료(개발환경등)
- 프로젝트구조
- 기대효과
프로젝트 주제 및 선정배경
저희 도깨비팀의 프로젝트인 금나와라 뚝딱은 이벤트 주최자가 만든 선물을 수령하는 프로젝트입니다.
다수의 친구나 지인들에게 선물(ex 기프티콘)을 줄때 일일히 한명 한명 전달해주거나 전화번호를 물어봐야했던 경험이 있으신가요? 금나와라 뚝딱은 이러한 불편함을 없애고 선물을 편하고 재미있게 전달하면 어떨까? 라는 물음에서 탄생했습니다.
그리고 기술적인 의도 또한 포함되어 있습니다.
금나와라 뚝딱에는 선착순&랜덤으로 사용자가 선물을 받을 수 있습니다. 이때 선착순의 경우 한번에 사용자가 몰리기 때문에 동시성 제어와 트래픽 처리에 관련된 기술적인 접근이 필요합니다. 이번 프로젝트 기간에는 지금까지 훈련과정에서 배운 내용을 심도 깊게 적용해 볼 수 있는 좋은 기회라고 생각했고 해당 주제를 선정하게 되었습니다.
프로젝트 구조(백엔드)

Spring boot
백엔드 서버는 교육 과정에서 학습한 Java기반의 Spring Boot 애플리케이션으로 제작했습니다.
Github & Docker
버전 관리 툴로 Git과 Github를 사용했고 GithubAction과 Docker를 사용해서 CI/CD를 구축하였습니다.
EC2
교육 과정에서 배운 AWS 클라우드 서비스를 적극 사용하여 백엔드 서버는 EC2로 구축하고 EC2위에 docker를 구동시켜서 EC2 경량화를 시도했고 Spring Boot 서버와 Redis가 동작하도록 했습니다.
또한 선물 이미지를 저장하기 위해 AWS의 S3를 사용하여 이미지를 저장하고 받아오도록 했습니다.
RDS & MySQL & Redis
데이터베이스는 MySQL을 사용하였고 AWS의 RDS를 사용하여 MySQL Server를 구축하였습니다.
동시성 처리를 위해서는 DB의 트랜잭션을 최소화할 필요가 있었고 이를 위해 Redis 서버를 구축하여 메모리 기반의 빠른 처리를 유도 했습니다.
프로젝트 수행 결과
이번 프로젝트는 단순 API 개발이 아닌 API 개발 후 성능 개선에 초점을 두었습니다.

그래서 스트레스 테스트를 위한 환경을 조정하기 위해 DB에 더미데이터를 넣어놓고
스트레스 테스트 툴인 artillery를 사용하여 결과를 도출했습니다.

아무런 성능 개선 처리를 거치지 않은 경우 기본적으로 평균 1,400ms의 지연시간이 발생했습니다.

Redis를 적용하여 DB의 트랜잭션을 최소한으로 줄이고 메모리 기반의 빠른 입출력을 유도했습니다.

결과적으로 평균 1,400ms에서 평균 500ms로 지연시간이 줄어들었고 기존 대비 약 180%의 성능을 향상 시키는 결과를 도출했습니다.

프로젝트 팀 구성 및 구성원 역할
훈련생 | 역할 | 담당 업무 |
한맹희 | 팀장 | - Jwt 토큰및 oauth2 기반의 소셜 로그인 기능 구현
- QueryDSL을 활용한 이벤트 & 선물 조건 검색 기능 구현
- 선착순 & 랜덤 선물 받기 서비스 구현 |
최영권 | 팀원 | - S3와 http Form-data를 활용한 이미지 bulk Insert 기능 구현
- 이벤트 생성 서비스 구현
- Git SubModule을 활용한 설정파일 분리 |
신언주 | 팀원 | - 이벤트 & 선물 상세 조회 기능 구현
- 이벤트 당첨자 목록 조회 기능 구현
- 이벤트 Soft delete 기능 구현 |