[241104 TIL]
프로젝트 준비 및 설정
기본 설정
- Language: Java
- Build system: Gradle - Groovy
- JDK: 17
Dependencies
- Lombok
- Validation
- Spring Security
- Spring Web
- Spring Data JPA
- MySQL Driver
- Thymeleaf
build.gradle
- JWT, json
// JWT
compileOnly group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'
// json
implementation 'org.json:json:20230227'
application.properties
- mysql, jpa , jwt 설정
spring.datasource.url=jdbc:mysql://localhost:3306/shop
spring.datasource.username=root
spring.datasource.password={비밀번호}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
jwt.secret.key=7Iqk7YyM66W07YOA7L2U65Sp7YG065+9U3ByaW5n6rCV7J2Y7Yqc7YSw7LWc7JuQ67mI7J6F64uI64ukLg==
Database
- shop
- user
- product
- folder
- product_folder
Open API
- NAVER 쇼핑 API
요구사항 및 기능 정리
요구사항
- 상품 검색 ( naver )
- 탐색하기 - 키워드로 상품 정보 검색
- 네이버 API 이용 - 상품 이름(title), 링크 URL (link), 이미지 URL (image), 최저가(lprice)
- 관심 상품
- 관심 상품 등록
- DB 에 상품 정보 입력 (insert)
- 상품 이름(title), 링크 URL (link), 이미지 URL (image), 최저가(lprice)
- 희망 최저가 (myprice) → 0원 설정
- DB 에 상품 정보 입력 (insert)
- 관심 상품의 희망 최저가 설정
- DB 업데이트 (update)
- 등록된 관심 상품의 희망 최저가 (myprice) 만 업데이트
- DB 업데이트 (update)
- 모아보기 - 관심 상품 조회
- DB 조회 (select)
- 등록된 모든 관심 상품 정보 조회
- UI 에 최저가 표시 조건 - 희망하는 최저가보다 실제 최저가가 낮은 경우
- DB 조회 (select)
- 관심 상품 등록
- 탐색하기 - 키워드로 상품 정보 검색
- Scheduler
- 매일 새벽 1시에 관심 상품 목록 제목으로 검색해서, 최저가 정보를 업데이트
- 회원
- 회원가입 - username, password, email, role(EunmType)
- RoleEnum - User, Admin
- JWT 로그인 인증 처리 (Filter)
- Spring Security
- 회원별 상품
- 상품 : 회원 = N : 1 (단방향 연관관계)
- Admin - 모든 상품 조회 가능
- 상품 페이징 및 정렬
- 페이징
- page: 조회할 페이지 번호 (1부터 시작)
- size: 한 페이지에 보여줄 상품 개수 (10개로 고정)
- 정렬
- sortBy (정렬항목)
- id(Product 테이블의 id), title, lprice
- isAsc (오름차순)
- sortBy (정렬항목)
- 페이징
- 상품 폴더 설계/생성
- 폴더 설계
- 폴더 테이블
- name(폴더명) - 회원이 등록한 폴더 이름을 저장
- user(회원ID) - 폴더를 등록한 회원의 ID 를 저장(A 가 생성한 폴더는 A 에게만 보여야 함)
- 상품_폴더 테이블
- 연관관계
- 폴더 : 회원 = N : 1 (단방향 연관관계)
- 폴더 : 상품 = N : M (다대다 관계)
- 폴더 : 상품_폴더(관계 x) = 1 : N = 상품 : 상품_폴더(양방향 연관관계)
- 폴더 테이블
- 폴더 생성
- 회원별 폴더를 추가할 수 있음
- 폴더를 추가할 때 1 ~ N 개를 한번에 추가할 수 있음
- 폴더 설계
- 관심 상품에 폴더 추가
- 관심 상품에 폴더는 N개 설정 가능
- 관심 상품은 생성한 폴더를 선택하여 추가 가능
- 폴더 별 관심 상품 조회
- 회원은 폴더 별로 관심 상품 조회 가능
- '전체' 클릭 - 폴더와 상관없이 저장한 모든 관심 상품 조회
- '폴더명' 클릭 - 폴더 별 저장된 관심 상품 조회
- 회원은 폴더 별로 관심 상품 조회 가능
- 카카오 로그인
- Spring AOP
- 테스트
- API 예외 처리
- AWS 적용
API
기능 | Method | URL (API) | 함수명 | Request | Response | 설명 |
키워드로 상품검색 | GET | /api/search?query=검색어 | searchItems | @RequestParam String qeury | List<ItemDto> | |
관심 상품 등록 | POST | /api/products | createProduct | @RequestBody ProductRequestDto requestDto | ProductResponseDto | |
관심 상품 희망 최저가 업데이트 | PUT | @PathVariablLong id @RequestBody ProductRequestDto requestDto |
ProductResponseDto | |||
관심 상품 조회 | GET | /api/products | getProducts | List<ProductResponseDto> | ||
로그인 페이지 | GET | /api/user/login-page | loginPage | String | 로그인 페이지 호출(View ) - templates>login.html | |
회원가입 페이지 | GET | /api/user/signup | signupPage | String | 회원가입 페이지 호출(View) - templates>signup.html | |
회원가입 | POST | /api/user/signup | signup | @Valid SignupRequestDto requestDto,BindingResult bindingResult | String | 회원가입 |
회원 정보 요청 | GET | /api/user-info | getUserInfo | @AuthenticationPrincipal UserDetailsImpl userDetails | UserInfoDto | 회원 관련 정보 받기 |
로그인 | /api/user/login | |||||
Admin 조회 | /api/admin/products | getAllProducts | List<ProductResponseDto> | |||
회원의 폴더생성 | POST | /api/folders | addFolders | |||
회원의 폴더조회 | GET | /api/user-folder | ||||
폴더 전체 조회 | GET | /api/folders | ||||
폴더 추가 | POST | /api/products/{productId}/folder | ||||
폴더 별 상품조회 | GET | /api/folders/{folderId}/products |
Entity
- Product
컬럼명 | 컬럼타입 | 중복허용 | 설명 |
id | Long | X | 테이블 ID (PK) |
title | String | 상품명 | |
link | String | 상품 URL | |
image | String | 이미지 URL | |
lprice | int | 최저가 | |
myprice | int | 희망 최저가 |
- User
컬럼명 | 컬럼타입 | 중복허용 | 설명 |
id | Long | X | user 테이블 ID (PK) |
username | String | X | 유저명 |
password | String | O | 비밀번호 |
String | X | 이메일 |
|
role | String | O | 권한 |
'[내일배움캠프] AI 를 활용한 백엔드 아카데미 심화 과정 > TIL' 카테고리의 다른 글
[트러블슈팅] 중복된 값이 삽입 시 발생 오류 해결 (1) | 2024.11.13 |
---|---|
[트러블슈팅] POSTMAN POST (0) | 2024.11.12 |
[Github] IntelliJ 에서 Git Branch 생성하고 Merge 하기 (0) | 2024.11.11 |
S.A (Starting Assignments) 작성 (2) | 2024.11.07 |
자바 스프링 백엔드 개발 - My Select Shop 프로젝트 (0) | 2024.11.05 |