- git clone
- application-secret.yml.default -> 2. application-secret.yml 파일명 변경/환경변수 세팅
- docker-compose.yml (카프카 관련) 기본값(host : localhost, port : 9092)
- 직접 데이터베이스 생성 CREATE DATABASE ${DATABASE_NAME}; USE ${DATABASE_NAME};
- 로컬 레디스 실행
- docker-compose up -d (카프카 실행)
- 실행
옷을 고르는 일은 즐겁지만 때때로 까다롭고 시간이 많이 소요될 수 있습니다. 수많은 선택지 중에서 마음에 드는 한 두 벌의 옷을 찾아내는 것은 실제로 상당히 어려운 일입니다.
그럼에도 불구하고, 이미 우리가 좋아하는 스타일이나 코디가 명확하다면, 이러한 과정은 훨씬 더 빠르고 쉽게 진행될 수 있습니다. 이런 생각에서 출발하여, 사용자가 원하는 스타일과 유사한 제품을 추천해주는 패션 거래 시스템을 기획하게 되었습니다.
이렇게 하면, 사용자는 수많은 제품 중에서 직접 골라야 하는 불편함을 줄일 수 있으며, 각자의 개인적인 스타일에 맞는 아이템을 더욱 빠르게 찾아낼 수 있을 것입니다.
트렌드픽은 사용자 가입 시 지정한 선호 태그를 활용하여 맞춤형 상품 추천을 제공합니다. 이런 방식은 사용자에게 보다 효율적이고 개인화된 쇼핑 경험을 제공하는 데 초점을 맞추고 있습니다.
사용자가 선호하는 스타일과 코디에 기반하여, 우리의 서비스는 그들에게 가장 적합한 상품들을 추천합니다. 이를 통해 고객은 어떤 상품을 선택하고 구매할지에 대해 더욱 신중하고 효과적으로 결정할 수 있습니다. 이러한 방식은 고객의 쇼핑 경험을 더욱 즐겁고 만족스럽게 만들 것입니다.
HTML5, CSS3, JavaScript, Thymeleaf
Java17, Gradle, SpringBoot 3.x. Spring Data JPA, MYSQL, OAuth2.0, Spring Security, Spring Data Redis, Spring Batch, Spring Kafka, JUnit5, Mockito
Apache JMeter-CLI
Naver Clound Platform - Server(EC2), Object Storage(S3), Cloud DB for MYSQL(RDS),
Kubernates, Docker, NGINX, Github Action, Pinpoint, Confluent Kafka
Git, Discord, Notion
![image](https://private-user-images.githubusercontent.com/26915908/279438012-2385acb6-f9d4-4048-83c0-bb5f8a9e8755.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjU5ODQ5MjksIm5iZiI6MTcyNTk4NDYyOSwicGF0aCI6Ii8yNjkxNTkwOC8yNzk0MzgwMTItMjM4NWFjYjYtZjlkNC00MDQ4LTgzYzAtYmI1ZjhhOWU4NzU1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEwVDE2MTAyOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY3MWY0ZjZiYTI1MDAzN2NiOTE2NGEzMWM4ZjViZGIzNmQwYTY4Y2NjNGMyNzAxOGRlZGVjYjUxMTIwOTY0NDImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rm2o7VIxUIVQ9UBQikvHF8DDDykuD2EDJ8-FgNnBZM8)
문제 이해
: 처음으로 문제를 정의하고 이해하는 단계입니다. 패션 이커머스 시스템을 개발하려는 목표를 설정하고 그에 따른 대략적인 요구사항을 도출합니다.사용자와의 상호작용
: 다음으로 사용자의 입장에서 시스템을 어떻게 사용할지 고민합니다. 사용자의 필요한 기능을 파악하고 이를 시스템의 요구사항으로 변환합니다.세부 요구사항 도출
: 각 요구사항의 세부사항을 정의합니다. 예를 들어, 상품에 대한 요구사항을 정의하면서 상품 리스트, 상품 검색, 상품 상세페이지 등의 세부 요구사항을 도출합니다.요구사항 검토 및 확정
: 도출한 요구사항을 검토하고 수정, 보완한 뒤 최종적으로 확정합니다. 이 과정에서 각 요구사항이 시스템의 목표와 잘 부합하는지, 사용자의 요구를 충족시키는지 등을 검토합니다.요구사항 문서화
: 마지막으로 도출한 요구사항을 문서화합니다. 이 문서는 개발 과정에서 참조할 수 있도록 구체적이고 명확해야 합니다.
요구사항 명세서
RQ-ID | 화면 명 | 요구사항 명 | 요구사항 내용 | 날짜 | 진행사항 | 버전명 | 우선순위 |
---|---|---|---|---|---|---|---|
RQ-0001 | 공통 | 회원 가입 | 회원을 등록한다. 관리자/판매자/고객 | 미반영 | 0.0.1 | 1 | |
RQ-0002 | 공통 | 로그인 | 회원이 로그인을 한다. | 미반영 | 0.0.1 | 1 | |
RQ-0003 | 관리자 | 상품 등록 | 판매자가 상품을 등록한다. 사진, 상품 명, 단가, 상세페이지, 태그가 포함된다. |
미반영 | 0.0.1 | 1 | |
RQ-0004 | 관리자 | 상품 내용 변경 | 판매자가 상품의 내용을 수정한다. | 미반영 | 0.0.1 | 2 | |
RQ-0005 | 관리자 | 상품 삭제 | 판매자가 상품을 삭제한다. | 미반영 | 0.0.1 | 3 | |
RQ-0006 | 메인 | 상품 진열 | 등록된 전체 상품을 보여준다 태그 기반으로 추천된 상품의 리스트를 표시한다. (페이징) |
미반영 | 0.0.1 | 1 | |
RQ-0007 | 상품페이지 | 상품 상세 | 등록된 상품의 내용을 보여준다. (상세페이지 포함) | 미반영 | 0.0.1 | 1 | |
상품페이지 | 주문 및 장바구니 | 상품 옵션 선택 및 즉시 주문/ 장바구니 | 1 | ||||
상품페이지 | 리뷰 및 평점 | 하단에 해당 상품의 후기를 작성하고 볼 수 있도록 한다 | 2 | ||||
상품페이지 | Q&A | - Q&A를 남길 수 있도록 한다. (브랜드 Q&A) | 3 | ||||
RQ-0008 | 메인 | 검색 | 검색창을 통해 검색을 하면 해당하는 상품을 보여준다 | 미반영 | 0.0.1 | 2 | |
메인 | 정렬 | 최신순, 오래된순, 평점높은순, 평점낮은순, 구매높은순 정렬 기준을 선택하면 상품이 정렬되어 리스팅된다. 카테고리를 선택하면 해당 카테고리에 포함된 상품만 리스팅된다. (대→소) |
2 | ||||
RQ-0009 | 메인 | 상품 재고 | 상품 진열창이나, 상세 페이지에서 어느정도 미만의 재고가 남았을시, 재고를 표시한다. | 미반영 | 0.0.1 | 3 | |
RQ-0010 | 장바구니 | 상품 목록 | 장바구니에 추가한 상품들의 수량과 단가가 표시된다. 하단에 전체 주문 금액과 결제 버튼이 표시된다. |
미반영 | 0.0.1 | 1 | |
RQ-0011 | 장바구니 | 상품 주문 | 장바구니에서 상품을 주문한다. (일부선택가능) 기본으로 전체 선택 되어 있게 한다 |
미반영 | 0.0.1 | 1 | |
RQ-0012 | 결제 | 성공 | 주문시에 추가한 상품들의 결제가 성공한다. 토스 페이먼츠를 활용한다. 필요한 데이터: 주문자, 주문 상품명, 지불 방법, 지불 금액 결제가 성공한 상품들의 재고가 줄어든다. 주문 태그가 포함된 상품들의 추천 점수가 올라간다. |
미반영 | 0.0.1 | 1 | |
RQ-0013 | 주문 | 주문취소 | 고객이 주문을 취소한다. 필요한 데이터: 결제번호, 취소 사유 결제를 취소하고 환불을 진행한다. 결제가 취소된 상품들의 재고가 추가된다. |
||||
미반영 | 0.0.1 | 1 | |||||
RQ-0014 | 마이페이지 | 주문 내역 | 주문 내역이 보여진다. 진행 중인 주문의 경우 배송 상태가 보여진다 주문 취소가 가능한 단계인 상품의 경우 주문 취소가 가능하다r |
미반영 | 0.0.1 | 1 | |
RQ-0015 | 마이페이지 - 주문 내역 | 배송상태 | 배송 상태를 보여준다. | 미반영 | 0.0.1 | 3 | |
RQ-0016 | 마이페이지 - 주문 내역 | 환불 | 주문 내역에 대해 일정기간 내에 환불을 할 수 있어야 한다. 주문 내역 하단에 환불 버튼이 있다. 관리자에게 환불 요청 내역이 전달된다 |
미반영 | 0.0.1 | 1 | |
RQ-0017 | 마이페이지 | 개인 정보 수정 | 회원은 개인정보를 변경할 수 있다. 배송지를 관리할 수 있다. 비밀번호를 변경할 수 있다. 환불계좌를 설정할 수 있다. |
미반영 | 0.0.1 | 2 | |
RQ-0018 | 고객센터(트렌드픽 관리자) | 게시판 | 관리자는 질문이 많은 주제에 대해 FAQ를 정리하여 보여준다. | 미반영 | 0.0.1 | 3 | |
RQ-0019 | 고객센터(트렌드픽 관리자) | 게시판 | 관리자는 고객센터 게시판에 적힌 질문에 대한 답변을 빠르게 작성해서 보여준다. | 미반영 | 0.0.1 | 2 | |
RQ-0020 | 고객센터 | 게시판 | 회원은 게시판의 사이트에 관련한 질문을 남길 수 있다. 질문이 게시된 날짜가 포함되어야 한다. |
미반영 | 0.0.1 | 2 | |
RQ-0021 | 고객센터 | 게시판 | 회원은 본인이 남긴 질문의 답변을 확인 한다. | 미반영 | 0.0.1 | 2 | |
RQ-0022 | 메인 | 알림 | 회원은 본인의 주문의 대한 알림, 사이트의 대한 알림을 받는다. | 미반영 | 0.01 | 3 |
API 명세서
Git 컨벤션
main / development / feat, refactor, …/이슈번호_기능명
development 브랜치에서 실제 개발을 완료하여, 최종 배포코드를 main에 Pull Request
메소드 별로 issue생성
브랜치 명 : feat, refactor, …/issue번호_issue명
PR 생성 명 : [Feat, Refactor, …/issue번호] 이슈 내용
Commit 메세지 구조
Message Type : Subject // 작업 내용을 간단하게 요약해서 기술합니다.
Body // 왜, 무엇을 변경하였는지 기술합니다. 작성하지 않아도 괜찮습니다.
Footer // issue tracker를 사용하는 경우 참조한 issue tracker ID를 기술합니다. 작성하지 않아도 됩니다.
코딩 컨벤션
개별 패키지 구조
도메인 → controller, service, repository, (domain→ entity, dto), exception
인텔리제이 네이버 코딩 컨벤션
그라운드룰
💡 1. 사소한 것이라도 말을 하자!
💡 2. 나만 아는 지식이 없도록 하자!
💡 3. 어떠한 것을 하고자 할 때는 동료들에게 근거를 제시하자!
💡 4. 지각하지 말자!
💡 5. 타인의 발언을 존중하자!
💡 6. 시간은 모두에게나 중요하다. 약속에 늦지말자!
💡 7. 개발중인 부분을 모두 공유하자!
![image](https://private-user-images.githubusercontent.com/26915908/280212007-d9fe821e-8b74-4081-b145-847e6d701ed2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjU5ODQ5MjksIm5iZiI6MTcyNTk4NDYyOSwicGF0aCI6Ii8yNjkxNTkwOC8yODAyMTIwMDctZDlmZTgyMWUtOGI3NC00MDgxLWIxNDUtODQ3ZTZkNzAxZWQyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEwVDE2MTAyOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTViZjM2MTgzZjc1ZTk4NzAzYWMyYTRlNTg1Y2U4OTJlMTI0MGUwY2I5OTBhMGRlOTI3YTAzOTk4Mjk5YTg5NjImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.bTdllZwpZ0odxwb24bdAeZAF_3h-9M0XDWS641n1L94)
- 회원가입/로그인
- 핵심 기능: 선호태그 기반 상품 추천
- 상품 검색
- 상품 메인/서브 카테고리
- 전체 관리자일 경우
- 출금 승인/취소
- 브랜드 관리자일 경우
- 상품 등록, 수정, 삭제/ 할인 적용/ 쿠폰 발급 / 정산 데이터 생성/ 출금 신청
- 일반 유저일 경우
- 구매 / 리뷰 작성 / 개인 회원 정보 관리
쇼핑몰은 이벤트나 타임 세일 등 어떤 기간 동안 갑자기 사용자가 몰리는 경우, 최대 몇 명의 사용자들이 서버를 사용할 수 있는지 상황을 확인하고 대비하고자 부하 테스트를 진행하여 로직을 개선해보고자 했습니다.
테스트 시나리오: 상품 2000건에 대한 요청 처리
부하 조건: 초당 트래픽 1000, 총 테스트 기간 300초
이를 개선하고자 상품 별로 캐시를 적용하고 상품의 값이 자주 바뀌는 특성 상 수정이나 삭제 로직 수행 시 캐시의 내용도 변경되도록 했습니다.
캐시 변경 시에도 요청 시간이 그대로인지, 늘어났는지 상황을 부여하여 확인했고 멤버 email에 DB인덱싱을 적용하여 개선을 이끌어내고자 했습니다. 전체적으로는 필요한 데이터만 받으면서 최적화된 데이터 전송을 하도록 반환 값들을 dto 객체로 수정했습니다.
- 카프카와 Redis를 활용한 재고에 대한 동시성 처리기 - 1 / 이수호
- 카프카를 활용한 재고에 대한 동시성 처리기 - 2 / 이수호
- 카프카와 레디스를 활용한 재고에 대한 동시성 처리기 - 3 / 이수호
- CI/CD 구축 시 방식에 대한 고민(Jenkins, Github Actions) / 이수호
이수호 | 권혜영 | 이재준 | 제문경 |