Coder Social home page Coder Social logo

goods-for-you's Introduction

Goods-For-You

K-POP 스타뿐만 아니라 인플루언서 및 스포츠스타들의 굿즈 등을 간단하고 쉽게 판매 등록 및 구매,교환 할 수 있도록 구축한 플랫폼입니다.

🛑 Goods-For-You 서버는 서버 비용 문제로 (23-07-05)이후로 서버 운영을 중지 했습니다. 🛑

🎯 프로젝트 목표

코드 컨벤션

  • Naver Code Style을 적용해, 준수합니다
  • Check Style 플러그인을 적용해 코드 컨벤션을 유지합니다.

대용량 트래픽과 고가용성을 고려한 서버 구조 설계

  • 단순히 기능 구현만을 하는것이 아닌, 현재 개발하는 서비스가 성장하여 대용량 트래픽을 견뎌야 할 상황을 고려 해 서버 구조를 설계하려 노력했습니다.

재사용과 유지보수에 용이한 구조를 설계하고 코드를 작성하려 합니다.

  • Layered Architecture의 단점을 보완하기 위해 Hexagonal Architecture를 적용하여, 외부 환경의 변화에 애플리케이션 코드가 영향을 받지 않도록 구현하려 했습니다.

테스트의 중요성

  • 테스트의 중요성을 깨닫기 위해, 프로젝트에서는 테스트 커버리지를 70% 이상을 유지하기 위해, Jacoco와 Github Action을 이용해, 테스트 커버리지가 70% 이상을 유지하지 못할 시, 해당 코드는 빌드 실패하도록 Github Action을 설정했습니다.
  • 유닛 테스트 코드를 꼼꼼하게 작성함으로써, 서비스의 기능이 추가되고 수정됨에 따라 생길 수 있는 사이드 이펙트를 최소화 시켰습니다.
  • 테스트 커버리지를 유지하고, 테스트 코드를 작성하면서 테스트에 대해 개인적인 생각을 정리한 블로그 입니다.링크

프로젝트 문서화

  • 프로젝트를 진행하면서 작성한 부가적인 내용들을 위키에 정리하였습니다.
  • 해당 링크를 참고해주세요😊

프로젝트를 진행하면서 발생한 이슈에 대한 고민과 해결 과정

Github Action을 통한 CI/CD

  • Github Action을 통한 CI/CD를 구축함으로써, 자동으로 Push된 코드를 테스트 하고, 배포하는 과정을 구축했습니다

🛠사용 기술

  • Java17
  • SpringBoot 3
  • Gradle
  • Mysql
  • Mybatis
  • Redis
  • Docker-Compose
  • Naver Cloud Platform

프로젝트 화면 구성

  • 카카오 오븐으로 구성한 화면 프로토 타입입니다 상세한 내용은 Wiki를 참고해주세요

0105114308696542

유즈 케이스

goods-for-you's People

Contributors

aorri2 avatar f-lab-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

aorri2 soon83

goods-for-you's Issues

액세스 로그 수정

목표

  • 현재 access log의 포맷으로는 사용자의 요청과 응답에 대한 정보가 부족해 포맷을 수정합니다.

요구사항

  • 사용자가 처음 요청했을 때 부터 response 가 내려갈때까지 정보를 한줄에 표시하도록 구현
  • 액세스 로그 포맷 예시
{“traceId”: “request1234”,“status”: 500,“requestTime”: “xxxx-xxx”,“elapseTime”: “100ms”,“reqHeader”: {},“requestBody”: {},“body”: {“WrappedResponseStatusInFilter”: 200,“createUser”: “{}.{}() elapsed time {} ms”,“statusCode in Interceptor”: 201, “ResponseMessage”: “INTERNAL_SERVER_ERR”}}
  • log4j2.xml 파일에 액세스 로그를 기록하는 로거 추가

참고 자료

로그 적용

목표

  • 프로젝트에 로그를 적용함으로써, 병목 지점이나, 요청과 응답에 대한 값, 그리고 예외발생 원인을 확인 합니다.

요구사항

  • 프로젝트에서 병목지점이 될만한 부분에 로그 작성
  • 요청과 응답에 대해 로그 작성
  • 예외 발생 지점에 대해 로그 작성

상품 이미지 모듈 삭제

목표

  • 현재 서버 비용 문제로, object storage를 사용하지 못하고 있어 잠시, 상품 이미지 모듈을 삭제합니다.

예외처리시 예상치 않은 예외 값이 반환됨

목표

TradeControllerAdvice를 사용하여 예외를 처리할 때 예상 값과 다른 예외 값이 반환되는 것을 확인했습니다. 이로 인해 애플리케이션에서 예기치 않은 값이 반환되어 해당 이슈를 해결하고자 합니다.

요구사항

예외 처리시 예상한 값이 반환되도록 예외 처리 관련 코드를 수정합니다.

상품 이미지 업로드 구현

목표

  • 상품 등록 시, 상품 이미지 업로드를 구현

요구사항

  • NCP의 Object Storage의 AWS S3 SDK를 이용해, 상품 이미지 업로드를 구현합니다.

@Transactional 프로젝트 코드에 적용

목표

해당 작업의 목적과 목표에 대해 간략히 설명 합니다.

  • @Transactional 어노테이션을 코드에 적용해, 스프링에서 제공하는 트랜잭션 처리를 적용 합니다.

요구사항

해당 작업에 관한 요구사항에 대해 정리 합니다.

  • @Transactional 어노테이션 적용

데이터 모델링하기

  • 프로토 타입 화면을 토대로 엔티티와 속성 식별
  • 엔티티간의 관계 식별
  • 식별된 유스케이스와 액터를 토대로 도메인 모델링 작성
  • ERD를 그리는 이유 에 대해 고민해보기

상품 조회 구현

목표

해당 작업의 목적과 목표에 대해 간략히 설명 합니다.

  • 등록된 상품의 ID 값을 통해, 상품을 조회할 수 있도록 합니다

요구사항

해당 작업에 관한 요구사항에 대해 정리 합니다.

  • 상품 ID를 통한 상품 조회 시, ID값이 정상적이지 않을 경우, 예외를 던집니다.
  • 상품 ID값이 정상적일 경우, ID값에 해당하는 상품을 반환합니다.

거래 등록 기능

목표

  • 거래 등록 기능에 대해 구현

요구사항

  • 거래의 상태로는 거래 전,거래 진행 중, 거래 완료가 있다.
  • 거래 상품은 거래 상품 수량이라는 값을 가진다
  • #66
  • 구매를 원하는 상품을 구매하기를 선택 해 구매 요청을 한다.
  • 구매자는 거래 전, 구매 가능 상태의 상품만 구매 요청을 할 수 있다.
  • 구매자는 구입을 원하는 상품의 수량을 정한뒤 구매할 상품의 거래를 진행한다.
  • 상품 거래 신청 시, 해당 상품의 거래 진행 상태를 거래 전으로 등록한다.

참고 자료

거래 시나리오

유저 모듈 jpa 적용

목표

  • User 모듈에 JPA를 적용합니다.

요구사항

해당 작업에 관한 요구사항에 대해 정리 합니다.

참고 자료

  • 해당 작업 진행 시, 참고했던 자료에 대해 기재합니다.(ex 기능 별 사진)

로깅 라이브러리 적용

목표

로깅 라이브러리인 Log4j2를 프로젝트에 적용합니다

요구사항

Log4j2를 프로젝트에 적용

회원 가입 시 Validation 적용

  • 회원 가입 시, 적용 할 Validation 방법으로 어떤것들이 있는지 조사
  • 조사한 내용을 토대로 어떤 방식을 프로젝트에 적용할 지
  • 프로젝트에 선택한 Validation 방법 적용

상품, 유저 캐싱 구현

목표

해당 작업의 목적과 목표에 대해 간략히 설명 합니다.

  • 상품 데이터와 유저 데이터 조회 시, 캐싱을 통해 조회 성능을 개선합니다

요구사항

해당 작업에 관한 요구사항에 대해 정리 합니다.

  • 상품 데이터 캐싱 처리
  • 유저 데이터 캐싱 처리

참고 자료

  • 해당 작업 진행 시, 참고했던 자료에 대해 기재합니다.(ex 기능 별 사진)

에러 로그 추가

목표

  • 서버 내부에서 발생하는 에러를 확인하기 위해, 에러 로그를 추가 합니다.

요구사항

  • 서버 내부 에러에 대해 로그를 남긴다.
  • error 로그에는 stackTrace와, tradeId를 남긴다.

프로토 타입 화면 수정

  • 프로토타입 화면 수정(카카오 Oven 이용)
  • 프로토 타입 화면 버전별 snapshot으로 관리를 하기 위해 프로토 타입 화면 wiki로 이동

배포 스크립트 수정

목표

해당 작업의 목적과 목표에 대해 간략히 설명 합니다.

  • 부하 분산 처리에 따른, 배포 스크립트를 수정 합니다.

요구사항

해당 작업에 관한 요구사항에 대해 정리 합니다.

  • 배포 스크립트 과정 중, NCP 웹 서버 인스턴스에 배포하도록 변경

상품 목록 조회 API

목표

해당 작업의 목적과 목표에 대해 간략히 설명 합니다.

  • 상품 목록 조회 Api 구현

요구사항

해당 작업에 관한 요구사항에 대해 정리 합니다.

  • 상품 목록 조회 API 구현
    • 상품 목록 조회 시, 10개씩 조회
    • 상품 목록 페이징 처리 시, noOffSet으로 처리
  • 상품 목록은 최신 순(등록일자 기준) 정렬

상품 목록 응답 (json 예시)

{
 "resultCode" : "SUCCESS",
  "result": [
      {
        id : 0,
        categoryId: 1,
        title: "상품1",
        price: 10000,
        productStatus: "TRADABLE",
        createdAt: "2023-06-10",
      }]
}

참고 자료

  • image

프로젝트 컨벤션 정하기

☑️ TODO List

  • Issue 컨벤션 정하기
  • Pull Request Rule 정하기
  • Commit 컨벤션 정하기
  • Branch 전략 정하기
    • GitFlow 전략을 사용

유저 모듈 리팩토링 진행

목표

해당 작업의 목적과 목표에 대해 간략히 설명 합니다.

  • 유저 모듈의 코드 수준 부터 패키지 수준까지 리팩토링을 진행합니다.

요구사항

해당 작업에 관한 요구사항에 대해 정리 합니다.

  • 유저 프로덕션 코드 리팩토링
  • 유저 테스트 코드 리팩토링
  • 유저 프로덕션,테스트 패키지 구조 리팩토링

Github Action을 통한 CI/CD 구축

작업 목표

  • Github Action을 통해, main branch로 코드가 merge 가 되면 Github action이 자동으로 CD 프로세스를 작동시키도록 하는것이 목표

할일

  • Naver Cloud Platform 서버 생성
  • github action을 통한 CI/CD 구축 방법 서칭
  • CD 적용

참고자료

로그인 설계

✔ TODO

  • 세션 VS 토큰 방식
  • 세션 관리 방법의 여러가지 솔루션 및 장단점 파악
  • #27
  • #33
  • #36

예외 처리 리팩토링

목표

해당 작업의 목적과 목표에 대해 간략히 설명 합니다.

  • 예외 처리와 관련된 코드를 리팩토링 합니다

요구사항

해당 작업에 관한 요구사항에 대해 정리 합니다.

  • ErrorResult 객체에서, 에러 코드도 관리하도록 변경
  • GlobalControllerAdvice 에서, GoodsForYouException 과, 그 외 Exception 처리하도록 변경

api 기능 테스트를 위한 regression test 작성

목표

  • 서비스의 기능이 추가되거나 변경됨에 따라 새로운 버그가 발생하거나 이전에 작동하던 기능이 작동을 중지하지 않도록 하기위해
    regression test를 작성합니다.

요구사항

  • api 기능에 대한 regreesion Test 작성

프로젝트 구성도 작성

✔ TODO

  • Scale in / Scale Out 과 High availability(고 가용성)을 중점적으로 고려해서 구성도 초기 버전 작성.
  • **Elastic Load Balancer(ELB)**와 Nginx그리고 두개와 관련된 키워드에 대해 학습.
  • 프로젝트 구성도 작성 시, ELBNginx 중 한 개만 사용할 것인지, 둘다 사용할 것인지 또는 다른 솔루션을 사용할 것인지에 대해서도 고민.
  • 회원 인증 설계 관련 내용 프로젝트에 구현 후 구성도에 추가

exception 구조 계층 구조로 변경

  • 동일한 핸들링 방식인데 일일히 exception 마다 만들어 줘야 하는 불편함이 있어 현재의 exception 구조를 계층화 시키는 방향으로 변경 할 예정.

Todo

  • Exception 계층도 설계
  • Exception 계층도 적용

프로젝트 설정

  • Spring initializer 사용하지 않고 프로젝트 생성하기 및 의존성 라이브러리 설정하기
  • 프로젝트 설정 중 모르는 키워드가 나오면 학습

로그인 체크 기능 구현

목표

  • 공통 관심사인 로그인 체크 기능에 대해 구현

요구사항

  • 로그인이 요구되는 기능에 대해, 로그인 여부를 체크하는 공통 관심사에 해당하는 기능을 구현

참고 자료

추후 추가 예정

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.