본문 바로가기

프로젝트/booktalk(책 중고 거래 서비스)

최종 완성

깃허브  주소 : https://github.com/junyeong237/booktalk

 

GitHub - junyeong237/booktalk

Contribute to junyeong237/booktalk development by creating an account on GitHub.

github.com

 

프로젝트 기간 : 2024년 1월 4일 → 2024년 2월 8일

🏗 아키텍쳐

📑 주요 기능

  • 중고 거래 상품 등록
  • 외부 상품과의 가격 비교 기능
  • 거래를 위한 채팅 기능
  • 거래 후 판매자 평점 & 상품 리뷰 기능
  • 채팅과 리뷰를 위한 알림 기능
  • 회원 신고 기능
  • 백오피스 관리자 기능

사용 기술


  • BackEnd
    • Java 17
    • Spring Boot 3.2.1
    • Spring Security 6.2.1
    • JWT 0.11.5
    • Gradle 8.5
    • QueryDSL 5.0.0
    • Spring Data JPA 3.2.1
    • Spring Data Redis 3.2.1
    • WebSocket 3.2.1
    • STOMP
    • KAKAO Open API
    • OAuth 2.0
    • JUnit 5.10.1
    • SSE
  • FrontEnd
    • HTML
    • CSS
    • JavaScript (jQuery)
    • AJAX
    • Bootstrap 5.3.0
    • Thymeleaf 3.1.2
  • DB
    • MySQL 8.2.0
    • Redis
    • H2 2.2.224
  • Infra
    • AWS
      • EC2
      • S3
      • RDS
      • CodeDeploy
    • GitHub Actions
  • Docs
    • JMeter 5.6.3

🍀 주요 기술 설명


  • QueryDSL
    • 컴파일 시점에 쿼리 문법 오류 확인 가능
    • 동적 쿼리 작성 및 최적화 가능
    • JPQL과 유사한 형태로 작성하여 쉬운 적응 가능
  • WebSocket & STOMP
    • 채팅 기능을 위한 WebSocket 사용
    • WebSocket 통신을 효율적으로 다루기 위해 STOMP 사용
    • 양방향 통신 및 실시간 데이터 전송 가능
  • SSE
    • 알림 기능 구현을 위한 Server-Sent Events 사용
    • 실시간 데이터 일방적 전송 가능
  • Redis
    • AccessToken 재발급을 위한 RefreshToken 관리
    • 메모리 기반 데이터베이스로 빠른 응답 속도 제공
    • 캐시로 사용하여 반복적인 쿼리 성능 개선
  • GitHub Actions
    • CI/CD 자동화 도구
    • AWS와 연동하여 배포 자동화
    • 다양한 환경과 언어 지원
  • AWS
    • 안정적이고 확장 가능한 클라우드 인프라 제공
    • 다양한 서비스로 애플리케이션 호스팅 및 데이터 보관 가능
  • Kakao Open API
    • 중고 책 검색을 위한 API 사용
    • 국내 및 해외 도서 정보 제공

🗣️ 기술적 의사결정


  • Repository 의존 + default Method 사용
    • 코드 중복 최소화를 위해 Repository에 의존하되, default Method로 중복 제거
  • WebSocket & STOMP 사용
    • 채팅 기능 구현을 위해 양방향 통신을 제공하는 WebSocket 사용
    • WebSocket 통신을 효율적으로 다루기 위해 STOMP 사용
  • Redis Cache 사용
    • 반복되는 쿼리 성능 개선을 위해 캐싱 사용
    • Look-Aside 및 Write-Around 전략으로 캐시 구현
  • 프런트 배포 방식 - 타임리프 & Ajax
    • 서버 사이드 렌더링과 비동기 데이터 처리를 위해 타임리프와 Ajax 사용
    • 백엔드와 프런트엔드를 함께 배포하여 모노리틱 아키텍처 유지
  • 인증과 인가
    • JWT를 사용한 토큰 기반 인증
    • Refresh Token을 활용한 AccessToken 갱신
    • 직접 구현한 인증 매커니즘으로 유연한 제어 가능
  • QueryDSL 사용
    • 동적인 쿼리 작성과 최적화를 위해 QueryDSL 사용
    • 쿼리 최적화를 위해 스케줄러를 활용하여 채팅 기록 자동 삭제

🛠 트러블슈팅


  • EC2 메모리 부족현상
    • 스왑 메모리 설정으로 메모리 부족 문제 해결
  • S3 이미지 리사이징
    • 서버리스(Lambda) 대신 백엔드에서 이미지 처리를 선택
    • 관리 용이성과 성능 향상을 위한 결정
  • fetchJoin 사용시 페이징 처리 문제
    • fetchJoin 후 페이징 처리 시 HHH000104 로그 발생
    • 일반적인 SQL IN 절로 데이터 가져와 페이징 처리
  • WebSocket 연결 시 Cross-Origin 문제
    • 설정을 통해 Cross-Origin 문제 해결
    • 보안 상의 이슈 고려하여 원천 차단

🚀 배포


  • AWS CodeDeploy
    • GitHub Actions과 AWS CodeDeploy 연동하여 배포 자동화
    • 특정 브랜치에 푸시 시 테스트 및 배포 자동 진행
  • 인프라 as Code (IaC)
    • Terraform을 사용하여 인프라 자동화
    • 인프라 수정이 필요할 때마다 수동으로 조정하지 않고 코드로 관리

⚙️ 백오피스


  • 관리자 페이지
    • 회원 관리 및 상품 관리
    • 회원 신고 및 차단 관리
    • 통계 및 분석 기능 제공

💡 기대효과


  • 성능 향상
    • Redis를 활용한 캐싱으로 반복적인 쿼리 성능 향상
    • WebSocket과 SSE를 통한 실시간 데이터 처리
  • 보안 강화
    • JWT와 OAuth 2.0을 활용한 인증 및 인가 강화
    • WebSocket 보안 강화를 통한 취약점 방지
  • 사용자 경험 향상
    • WebSocket과 STOMP를 활용한 실시간 채팅 기능 제공
    • SSE를 활용한 실시간 알림 기능 제공
  • 운영 효율성
    • CI/CD 자동화를 통한 배포 시간 단축
    • 인프라 자동화로 운영 및 유지보수 비용 절감
  • 확장성 및 유연성
    • AWS 클라우드 기반으로 확장 가능한 아키텍처 제공
    • 코드 수정 없이 인프라 조정 가능한 IaC 활용

'프로젝트 > booktalk(책 중고 거래 서비스)' 카테고리의 다른 글

1/26  (0) 2024.02.26
1/22  (0) 2024.02.26
1/19  (0) 2024.02.26
1/18  (0) 2024.02.26
1/17  (0) 2024.02.26