대학생과 신진 작가를 위한 미술 작품 중개 서비스를 개발하였습니다.😀
졸업 전시 후 버려지는 작품들에 대한 문제성을 인식하고,
소비자의 합리적인 가격대의 미술품 및 인테리어의 수요를 충족하자는 아이디어에서 시작하여
해당 서비스를 기획•개발하게 되었습니다.
성명 | 역할 |
---|---|
양준모 | 멘토님 |
정동현 | 서비스 총괄 & 팀장 |
김한서 | Frontend |
이하연 | Backend |
허지혜 | Cloud Server & BE보조 |
카카오 로그인 경로로 리다이렉트하여 로그인 완료 시 액세스 토큰을 가져옵니다.
회원가입이 아직 되지 않은 상태라면 회원가입 페이지로 리다이렉트받으며,
일반 유저와 작가로 모드를 나누어 회원가입을 진행하며, 모드에 따라 다른 경로로 회원가입 API를 요청합니다.
또한 UnivCert 및 국세청 사업자등록정보 API를 통해 학생 작가나 사업자 등록된 신진 작가를 검증했습니다.
탠스택 쿼리의 useSuspenseInfiniteQuery를 호출하여 다양한 작품 이미지를 한눈에 볼 수 있게 화면을 제공합니다.
사용자가 작품이나 작가, 찾고 싶은 작품의 키워드를 입력하면 검색 결과를 페칭합니다.
최근 검색어, 검색 결과 정렬, 통합/작품/작가 검색 결과를 볼 수 있게 UI를 구성하여 UX를 고려하였습니다.
판매자(작가)와 수요자가 플랫폼 내에서 편리하게 연락을 주고받을 수 있도록 채팅을 구현했습니다.
SockJS를 사용하여 웹소켓을 연결하고, STOMP 프로토콜 통신을 구현했습니다.
자신의 프로필을 확인 할 수 있습니다. 그리고 자신이 찜한 목록 및 팔로우 목록을 볼 수 있습니다.
카카오 로그인을 통해 간편하게 회원등록을 할 수 있습니다.
작가로 등록하여 상품을 등록하고 판매하고 싶은 사용자는 사업자번호 또는 관련학과 전공자 인증을 통해 작가 프로필을 개선할 수 있습니다.
작가는 상품 등록과 수정 삭제를 할 수 있습니다.
상품 사진으로 10MB이하이고 확장자가 jpg,jpeg,png인 파일을 등록할 수 있습니다.
사용자는 마음에 드는 작품을 '찜' 기능을 사용하여 설정할 수 있습니다.
사용자는 본인의 찜목록을 확인할 수 있습니다.
사용자는 작품을 보고 감상평을 남길 수 있습니다.
사용자는 구매를 원하는 작품의 작가에게 채팅으로 구매의사를 표현할 수 있습니다.
해시태그, 작가명, 상품명을 구분하여 검색할 수 있습니다.
백엔드 역할 분담
- 검색 - 이하연
- 로그인 및 회원 가입 + 작가 + 팔로우 - 이하연
- 채팅 + 파일 - 허지혜
- 상품(피드), 좋아요, 감상평 - 정동현
- 인프라(ci/cd, https, 모니터링) - 이하연
CI/CD 및 인프라 구축
CI/CD 과정 - GitHub Actions를 활용한 배포 프로세스
- GitHub Actions 트리거
- Master 브랜치에 코드가 푸시되면 GitHub Action이 자동으로 동작합니다.
- 도커 이미지 생성 및 업로드
- 프로젝트를 빌드하고, 도커 이미지를 생성한 후 도커 허브에 이미지를 업로드합니다.
- 배포 스크립트 실행
- EC2-1 서버에 접속하여 배포 스크립트(
deploy.sh
)를 실행합니다.
- EC2-1 서버에 접속하여 배포 스크립트(
(deploy.sh 스크립트 동작)
- 백엔드 서버의 포트 검사
- EC2-1, EC2-2에서 현재 동작 중인 백엔드 서버(도커 컨테이너)가 사용 중인 포트(8080 또는 8081)를 검사합니다.
- 사용하지 않는 포트(8081 또는 8080)를 확인합니다.
- 새 서버 컨테이너 배포
- 도커 허브에서 최신 이미지를 PULL하여, EC2-1, EC2-2의 사용 가능한 포트에 새 백엔드 서버(도커 컨테이너)를 실행합니다.
- 헬스 체크 수행
- 새로운 서버의 정상 동작을 확인하기 위해
/actuator/health
엔드포인트로 헬스 체크를 수행합니다. - 이 과정에서 DB 연결 상태도 함께 확인합니다.
- 새로운 서버의 정상 동작을 확인하기 위해
- 트래픽 분산 대상 변경 (Blue-Green 배포)
- 헬스 체크가 성공하면 NGINX 설정을 업데이트하여 트래픽을 새 서버로 분산합니다.
- BLUE-GREEN 방식으로 무중단 배포를 수행합니다.
- NGINX 리로드
- 변경된 NGINX 설정을 적용하기 위해 NGINX를 리로드합니다.
- 기존 서버 종료 및 삭제
- 기존에 EC2-1, EC2-2에서 실행 중이던 컨테이너를 종료하고 삭제하여 이전 서버를 정리합니다.
인프라 구성 - EC2 서버 구성 및 모니터링
EC2 - 1
- 백엔드 서버1 (도커 컨테이너)
- Nginx - 80 포트로 들어오는 요청을 백엔드 서버 1, 2에 대해 로드밸런싱
- MySQL - 백엔드 서버 1, 2가 참조하는 DB
- Prometheus - 백엔드 서버 1, 2의 메트릭 수집
- Grafana - Prometheus가 수집한 메트릭 시각화 (URL: http://golden-ratio.duckdns.org:3000/) (admin/admin)
- Dozzle - EC2-1, EC2-2의 도커 컨테이너 로그 시각화 (URL: http://golden-ratio.duckdns.org:7070/)
EC2 - 2
- 백엔드 서버2 (도커 컨테이너)
- Dozzle - (Agent) EC2-2의 도커 컨테이너 로그를 EC2-1의 Dozzle에게 전달
서버 1개일 때 vs 2개일 때(LB 적용) TPS 간단 비교 (Swagger GET 기준)
- TPS 테스트 결과: 두 개의 서버로 로드밸런싱 적용 시 성능이 향상됨
EC2 인스턴스 생성 - Terraform 이용
- Terraform을 이용한 EC2 인스턴스 생성
- Terraform 스크립트를 사용해 AWS에서 EC2 인스턴스를 생성하고, 관련 리소스(보안 그룹, VPC, 서브넷, 키 페어 등)를 설정하였습니다.