[내일배움캠프 Spring 심화] 2024.07.30 TIL

박상훈·2024년 7월 31일

[내일배움캠프] TIL

목록 보기
1/20

사전 강의를 들으며 My Select Shop 프로젝트를 수행했다.

요구 사항


  1. 키워드로 상품의 정보 검색

    1. 네이버 쇼핑 API 이용
    2. 상품 이름 (title), 링크 URL (link), 이미지 URL (image), 최저가 (lprice)
  2. 관심 상품 등록하기

    1. DB 에 상품정보 입력 (Insert)
      1. 상품 이름 (title), 링크 URL (link), 이미지 URL (image), 최저가 (lprice)
      2. 희망 최저가 (myprice) → 0원으로 설정
  3. 관심 상품의 "희망 최저가" 설정하기

    1. DB 업데이트 (Update)
        1. 등록된 관심상품의 "희망 최저가" (myprice) 만 업데이트
  4. 관심 상품 조회하기

    1. DB 조회 (Select)
      1. 등록된 모든 관심상품 정보 조회
    2. UI 에 '최저가' 표시 조건
      1. 희망하는 최저가보다 실제 최저가가 낮은 경우
  5. 폴더 생성

    1. 회원별 폴더를 추가할 수 있다.
    2. 폴더를 추가할 때 1개~N개를 한번에 추가할 수 있다.
  6. 관심상품에 폴더 설정

    1. 관심상품에 폴더는 N개 설정할 수 있다.

    2. 관심상품이 등록되는 시점에는 어느 폴더에도 저장되지 않는다.

    3. 관심상품 별로 1번에서 생성한 폴더를 선택하여 추가할 수 있다.

  7. 폴더 별 조회

    1. 회원은 폴더 별로 관심상품 조회가 가능하다.
    2. 조회 방법
      1. '전체' 클릭 시: 폴더와 상관 없이 회원이 저장한 전체 관심상품들을 조회 가능
      2. '폴더명' 클릭 시: 폴더별 저장된 관심상품들을 조회 가능
  8. 회원별 폴더를 추가할 수 있다.

  9. 폴더를 추가할 때 1개~N개를 한번에 추가할 수 있다.

  10. 회원별 저장한 폴더들이 조회 되어야 한다.

  11. 관심상품에 폴더를 0개 ~ N개 설정할 수 있다.

  12. 관심상품이 등록되는 시점에는 어느 폴더에도 저장되지 않는다.

  13. 관심상품 별로 기 생성 했던 폴더를 선택하여 추가할 수 있다.

  • 폴더 전체 조회 및 선택
  1. 회원은 폴더 별로 관심상품 조회가 가능하다.

  2. 조회 방법

    1. '폴더별': 폴더별 저장된 관심상품들을 조회 가능하다.
    2. '전체': 폴더와 상관 없이 회원이 저장한 전체 관심상품들을 조회 가능하다.

여러 요구사항들이 많이 있지만 과제 제출 기한이 얼마 남지않아 강의를 빠르게 돌려보며 프로젝트를 진행하였다.

클래스 구조는 아래와 같다.

config

spring security 설정과 관련하여 여러 가지를 수행한다. Jwt 인증, 인가, SecurityFilterChain 함수를 구현한다.

controller

API를 만들어 외부 애플리케이션과 서버가 소통할 수 있도록 한다.

dto

API 패킷을 주고 받으며 RequestBody, ResponseBody에 담길 내용들을 클래스 형태로 작성한다. 보안을 위해 Entity 클래스를 직접 사용하지 않고 dto를 통해 사용한다.

entity

한 클래스 당 DB에서 하나의 테이블의 형태로 만들어지며 Dto와 연결되어 사용된다.

jwt

Jwt 토큰을 설정하는 클래스를 담고있다. 토큰 식별자, 만료 시간 등을 설정하여 토큰을 생성하고 토큰 검증을 진행하는 코드도 포함한다.

본 프로젝트에서는 Naver shopping API를 이용한다. 해당 패키지에는 관련 코드들을 포함하고있다.

repository

spring data jpa를 사용하기위해 각 entity별 repository 인터페이스를 생성한다.

scheduler

매일 변동되는 가격을 업데이트하기위해 스케줄러를 작성한다.

security

jwt 토큰의 인증, 인가 및 검증을 수행한다.

service

백엔드 서버의 주요 로직(CURD, 예외처리 등)을 포함한다.

전체 코드(클릭)


하루만에 구현하기는 너무 많은 양이었기에 강의 영상을 빠르게 돌려보며 정신없이 따라 갔다. Spring Boot를 이용해 개인 프로젝트를 진행해본 경험이 있었고, 외부 API를 사용해본 경험도 있었기에 아는 내용들이 많이 있었다.

그러나 그 중에서도 새롭게 알게된 사실도 분명 많이 있었다. 스케줄러 구현, 페이징 처리 등 단순 CRUD 작업이 아닌 디테일이 필요한 작업들을 하며 지식을 터득할 수 있었고, jwt 토큰의 인증 및 인가 처리, Spring Security 부분 등 잘 모르고 넘어 갔던 부분들에 대해 복습도 할 수 있는 기회가 되었다고 생각한다.

profile
안녕하세요

0개의 댓글