Skip to content
@nhnacademy-be4-ckin

CKIN

NHN Academy: CKIN (Book Store)

Hits

📖 CKIN


🌎 Repository


🚩 Table of Contents

📄 About the Project

프로젝트 기간 : 2024.02.07. ~ 2024.03.28

스프링 부트와 클라우드 서비스를 활용한 온라인 도서 쇼핑몰 프로젝트입니다.

개발 환경

개발 도구

  • Intellij IDEA - Ultimate

Language

Build Tools

  • Maven

Develop

  • Spring Framework : 5.x
  • Spring Boot : 2.7.18
  • Spring Cloud Config, Gateway, Netflix Eureka
  • Spring Data JPA, Querydsl
  • Spring Security
  • Spring Rest Docs
  • Spring Batch

Test

  • Junit5
  • AssertJ
  • Mockito
  • SonarQube

Database

  • MySQL : 8.x
  • Redis

Search Engine

  • Elastic Search : 7.x

ERD

  • ERDCloud

NHN Cloud

  • Instance
  • Secure Key Manager
  • Object Storage
  • Load Balancer

ETC.

  • Dooray Hook Sender
  • Toast UI

Technologies

Develop

Apache Maven Java Spring Spring Boot Spring Batch Spring Eureka Spring Cloud Gateway MySQL JWT Redis ElasticSearch

Thymeleaf Bootstrap JavaScript jQuery

CI/CD

Jenkins GitHub Actions Linux Ubuntu Docker Nginx

Environment & Tools

IntelliJ IDEA Git GitHub SonarQube SonarLint Postman

ER-Diagram

CKIN ERD : https://www.erdcloud.com/d/9aZQ5oDB87BGD2v8k

  • ERDCloud 활용

image

Architecture

architecture

CI/CD

image

Project Management

Github에서 제공하는 Projects를 활용하여 프로젝트 관리

Scrum

  • 주마다 Scurm Master를 변경하는 방식으로 진행
  • 매일 진행 예정 사항과 특이사항을 정리하여 체계적인 프로젝트 진행

image

일정관리

  • Road Map, Kanban 활용
  • 일정 관리 및 진행 사항 공유

Road Map image

Kanban image

Test Coverage

  • 정적 코드 분석 도구인 SonarQube를 활용하였습니다.
  • 목표 : Coverage 80%

API

image

Coupon

image

Spring Rest Docs

image

image

기술 공유

CKIN Study Materials : https://github.com/nhnacademy-be4-ckin/study-materials

  • 프로젝트를 진행하면서 학습 내용 공유 저장소를 이용하여 습득한 기술을 공유하였습니다.
  • 또한, Issue, Discussion을 통해 해결하기 어려운 문제, 버그를 고친 방법 등을 팀원들과 공유하였습니다.

Conventions & Strategy

🎨 Features

주문

관련 PR : 주문 생성 | 주문 취소

  • 회원/비회원 주문 처리
  • 회원 주문
    • 포인트, 쿠폰 사용 가능
    • 적용할 수 있는 쿠폰
  • 포장 가능한 도서인 경우 포장지 선택 가능
  • 배송지 입력 (Daum Postcode API)
  • 주문 상세 내역 조회

주문 취소

  • 주문 배송 상태가 배송 중(IN_PROGRESS) 인 경우에만 주문 취소 가능
  • 결제 완료된 주문
    • Toss Payment API를 통한 결제 취소
  • 회원 주문 취소
    • 사용 포인트, 적립금 고려하여 처리

결제

관련 PR : 토스 페이먼츠 API 연동 | 결제 - 생성

  • 주문 완료 후 Toss Payment API를 통한 결제 진행
  • 결제 성공/실패에 따른 처리
    • 결제 완료 시 API 서버에 결제 정보 저장
    • 또한, 결제 완료된 주문의 결제 상태를 완료(PAID)로 변경
  • @Transactional의 propagation 옵션을 통해 트랜잭션 처리

포인트

관련 Discussion : 결제 완료시 포인트 적립 처리를 어떻게 해야될까?

  • 회원 가입 시 포인트 적립 정책에 따른 포인트 적립
  • 주문시 사용한 포인트 차감 및 포인트 내역 생성
  • 결제시 회원 등급에 따른 포인트 적립
  • 회원의 포인트 적립/차감 내역 조회

etc.

관련 기술 공유 내용 : Spring Cloud Netflix Eureka 도입 + 무중단 배포

  • Spring Cloud Netflix Eureka
    • 서비스 디스커버리 및 로드밸런싱
    • API Server 무중단 배포 구축
  • NHN Cloud Load Balancer
    • Front Server 무중단 배포 구축
  • Spring AOP 활용 - @Member 어노테이션을 통한 Model 객체에 회원 정보 주입
  • @ExceptionHandler를 통한 전역 예외 처리
  • 배송비 정책 관리
  • 포인트 적립 정책 관리
  • 포장 정책 관리

장바구니

관련 Issue : 장바구니 커스텀 알럿 추가 | 상품 수량 조작 시 검증 안되는 버그 | [BUG] RedirectAttributes의 addFlashAttribute 사용시 주의

  • 장바구니 데이터 Redis 저장 및 분리
    • Interceptor 를 이용한 Key(CART_ID(UUID)) 기존 DB 및 사용자 쿠키에 저장
    • 로그인시 회원 장바구니 불러오는 기능 구현
  • 회원/비회원에 따른 쿠키 유효기간 설정
    • 회원 - Access token 유효기간과 동일하게 유지 및 갱신, 로그아웃 시 삭제
    • 비회원 - 2일 (정책)
  • 주문할 도서 담기 담기, 수량 조절 및 삭제 처리
    • 검증 및 상품이 이미 존재하는 경우 예외 처리
  • MSA 에 따른 주문 시 주문 페이지로 정보 전달 로직 구현
  • (Front) 선택 주문, 총 합계 금액 등 JS를 통한 동적 스크립트 작성 및 구현

검색

관련 PR : 검색 필터링 기능 추가(검색 대상)

  • Elasticsearch 기술 사용, 검색 기능 구현
    • 검색 우선순위에 따른 가중치 설정
    • 필드의 특성을 고려한 인덱스 구성(analyzer, filter, tokenizer)
    • Dictionary 사용한 동의어/유의어 검색 처리
  • 검색 필터링 기능으로 검색된 도서 필터링
    • 검색 필터(책 제목, 저자, 출판사, 도서 설명), 카테고리 필터 적용
  • Logstash 기술 사용, 추가 및 변경된 도서 특정 시점에 elasticsearch에 저장
    • 일대다 속성들(Category, Author, Tag)에 따른 적절한 집계 쿼리 작성
    • @EntityListeners 사용하여 Book Entity 추가 및 수정 시점에 modifiedAt 컬럼 최신화
  • Kibana 기술 사용, 검색 관련 정보 시각화

태그

  • 관리자 페이지에서 태그 관리(CRUD)
    • 한 도서에 여러개의 태그 추가 가능

etc.

관련 기술 공유 내용 : Spring Cloud Gateway | Secure Key Manager

  • Spring Cloud Gateway

    • 마이크로서비스 기반 API Gateway 환경 구현
  • Secure Key Manager

    • Cloud 기반 Secure Key Manager 환경 구현
    • 암호화 필요한 데이터 관리 및 인증서 관리
  • Spring Rest Docs

    • 환경 설정 및 기술 공유
  • 중복 로직 및 응답 공통화

    • Pagination 관련 응답 PagedResponse 로 공통화(front, backend)
    • Exception 발생시 Response 공통화
    • 커스텀 Alert 유틸 로직 공통화(front)

멤버

  • Spring Security
    • 회원의 권한에 따른 페이지 인가
    • 로그인/로그아웃
    • 페이코 연동을 이용하여 소셜 로그인
    • JWT를 이용하여 자격증명 및 서버통신
    • Redis를 이용하여 매핑된 회원 정보 조회
    • Gateway에서 Backend과 통신하기 전, 인증/인가
    • 인증된 정보를 이용하여 JWT 발급/재발급 (CKIN-Auth)
  • 회원가입
    • 계정 중복검사 및 비밀번호 유효성 검사
    • Dooray Hook을 이용한 SMS 인증
  • 마이페이지를 통하여 회원 정보 조회, 수정, 탈퇴

주소

  • DAUM 주소 API를 사용하여 회원의 주소 등록
  • 마이페이지를 통하여 회원의 주소 관리 (CRUD)

등급

  • 관리자페이지에서 등급 관리 (CRUD)
  • 마이페이지에서 회원의 등급 조회 및 등급 정책 확인

상품

  • 관리자 페이지에서 상품 등록, 수정, 삭제
  • 상품 등록 시 editor 적용(toast ui)
  • 썸네일 수정 기능

저자

  • 저자 등록, 수정, 삭제

카테고리

  • 카테고리 생성, 수정, 조회
  • 부모 카테고리, 자식 카테고리로 이뤄진 3depth 형태
  • 메인페이지의 카테고리 캐싱(Redis)

파입업로드

  • Object Storage 저장

마이페이지 리뷰

  • 마이페이지에서 해당 유저가 작성한 리뷰 조회 및 수정

쿠폰

  • 생일쿠폰, 웰컴쿠폰, 도서쿠폰, 카테고리쿠폰 발급
  • 쿠폰 정책, 쿠폰 템플릿, 쿠폰 생성, 조회, 수정, 삭제

웰컴쿠폰 지급

  • 회원가입시 웰컴쿠폰 자동 지급
  • 웰컴쿠폰 지급이 실패해도 회원가입은 성공하도록 처리

Spring Batch로 생일쿠폰 매달 1일에 지급

  • JPA(Hibernate), JDBC Templates, MyBatis 중 bulk insert가 가능하고 기본키 전략을 사용하지 않는 Mybatis 선택
  • MyBatisPagingItemReader 사용

리뷰

  • 리뷰 등록
  • 리뷰 이미지 다중화를 통해 한 리뷰에 여러 이미지를 등록할 수 있도록 처리
  • 주문한 도서에 대해서만 리뷰를 작성할 수 있도록 처리
  • 사용기술 : Spring Data JPA, Query DSL, Thymeleaf, javascript 등

도서 캐싱

  • 접속 빈도가 높은 메인페이지의 도서를 Redis에 저장
  • 만료시간을 하루로 설정하고 갱신하여 처리
  • 사용기술: Redis

공통 작업

  • JUnit5를 활용한 테스트 코드 작성
  • Spring Rest Docs를 활용한 API 문서화
  • CI/CD 환경 구성 (Jenkins, GitHub Actions)
  • SonarQube를 통한 정적 코드 분석

Pinned Loading

  1. .github .github Public

Repositories

Showing 10 of 10 repositories
  • ckin-api Public
    nhnacademy-be4-ckin/ckin-api’s past year of commit activity
    Java 0 0 3 0 Updated May 30, 2024
  • nhnacademy-be4-ckin/ckin-front’s past year of commit activity
    HTML 0 0 8 0 Updated May 2, 2024
  • nhnacademy-be4-ckin/ckin-batch’s past year of commit activity
    Java 0 0 1 0 Updated May 2, 2024
  • nhnacademy-be4-ckin/ckin-coupon’s past year of commit activity
    Java 0 0 1 0 Updated May 2, 2024
  • .github Public
    nhnacademy-be4-ckin/.github’s past year of commit activity
    0 0 0 0 Updated Apr 15, 2024
  • study-materials Public

    프로젝트 진행 간 학습 내용 공유 저장소

    nhnacademy-be4-ckin/study-materials’s past year of commit activity
    0 0 0 0 Updated Apr 3, 2024
  • nhnacademy-be4-ckin/ckin-auth’s past year of commit activity
    Java 0 0 0 0 Updated Mar 26, 2024
  • nhnacademy-be4-ckin/ckin-gateway’s past year of commit activity
    Java 0 0 0 0 Updated Mar 26, 2024
  • nhnacademy-be4-ckin/ckin-eureka’s past year of commit activity
    Java 0 0 0 0 Updated Feb 20, 2024
  • nhnacademy-be4-ckin/ckin-management’s past year of commit activity
    0 0 11 0 Updated Feb 7, 2024

Top languages

Loading…

Most used topics

Loading…