Skip to content

Commit

Permalink
부산대_ BE_ 김태윤 6주차 (3단계) (#355)
Browse files Browse the repository at this point in the history
* Initial commit

* feat: set up the project

* 부산대 BE_김태윤 5주차 과제 (0단계) (#58)

* Initial commit

* feat: set up the project

* 부산대 BE_김태윤 4주차 과제 (0단계) (#51)

* Initial commit

* Initial commit

* feat: set up the project

* 부산대 BE_김태윤_2주차 과제 (0단계 구현) (#86)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(3단계) (#414)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

* docs(README.md) : 3단계 - 위시 리스트 구현할 기능 목록들 정리

* feat : HandlerMethodArgumentResolver 구현

* feat : 위시 리스트 CRUD 기능 구현

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(1,2단계) (#369)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* refactor : globalhandler는 하나여야 한다.

* feat: set up the project

* feat : 3주차 - step0 구현

* docs(README.md) : 3주차 1단계 구현할 기능 목록 정리

* feat : spring data jpa 의존성 추가

* feat : 지금까지 작성한 JdbcTemplate 기반 코드를 JPA 기반 코드로 리팩토링

* 부산대 BE_김태윤 3주차 과제 (0단계) (#36)

* Initial commit

* feat: set up the project

* 부산대 BE_김태윤_2주차 과제 (0단계 구현) (#86)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(3단계) (#414)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

* docs(README.md) : 3단계 - 위시 리스트 구현할 기능 목록들 정리

* feat : HandlerMethodArgumentResolver 구현

* feat : 위시 리스트 CRUD 기능 구현

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(1,2단계) (#369)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* refactor : globalhandler는 하나여야 한다.

* feat : 3주차 - step0 구현

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* feat : 회원가입 및 로그인 E2E test 구현

* refactor : JPA 리팩토링 에러 해결

* feat : @DataJpaTest 활용하여 wishlist CRUD 테스트

* refactor : service interface 생성 및 불필요한 파일들 삭제

* refactor : 전체적인 리팩토링 완료

* refactor : reformat code 적용

* docs(REAME.md) : 3주차 - 2단계 구현할 기능 목록 정리

* feat : 테이블 고려하여 엔티티 설계

* refactor : 회원가입/로그인 로직 리팩토링

* refactor : 디렉토리 구조 변경

* refactor : 사용자의 위시리스트 추가, 삭제, 조회하는 로직 리팩토링

* test : 상품 CRUD 테스트 통과

* test : 사용자의 위시리스트 추가, 삭제, 조회 로직 테스트 통과

* feat : 양방향 연관관계 적극 활용하기

* 부산대 BE_김태윤 3주차 과제 (1단계) (#220)

* Initial commit

* feat: set up the project

* 부산대 BE_김태윤_2주차 과제 (0단계 구현) (#86)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(3단계) (#414)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

* docs(README.md) : 3단계 - 위시 리스트 구현할 기능 목록들 정리

* feat : HandlerMethodArgumentResolver 구현

* feat : 위시 리스트 CRUD 기능 구현

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(1,2단계) (#369)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* refactor : globalhandler는 하나여야 한다.

* feat : 3주차 - step0 구현

* docs(README.md) : 3주차 1단계 구현할 기능 목록 정리

* feat : spring data jpa 의존성 추가

* feat : 지금까지 작성한 JdbcTemplate 기반 코드를 JPA 기반 코드로 리팩토링

* feat : 회원가입 및 로그인 E2E test 구현

* refactor : JPA 리팩토링 에러 해결

* feat : @DataJpaTest 활용하여 wishlist CRUD 테스트

* refactor : service interface 생성 및 불필요한 파일들 삭제

* refactor : 전체적인 리팩토링 완료

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* feat : conflict 해결!

* docs(README.md) : 3주차 3단계 - 페이지네이션 구현할 기능 목록 정리

* feat : wish list 페이지네이션 구현

* feat : product list 페이지네이션 구현

* test : 페이지네이션 테스트 구현

* refactor : Getmapping에 대해 동일한 url 매핑이 되어있는 에러 수정

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 4주차 과제 (1단계) (#171)

* docs(README.md) : 4주차 1단계 구현할 기능 목록 정리

* feat : 카테고리 : 상품 양방향 OneToMany 엔티티 설정

* feat : 카테고리 CRUD 구현

* feat : data.sql을 통해 카테고리 미리 설정하기

* feat : 관리자 화면에서 상품을 추가할 때 상품 카테고리 추가 기능 구현

* feat : 관리자 화면에서 상품을 수정할 때 상품 카테고리 수정 기능 구현

* test : 중복 검사 및 CRUD test 완료

* 부산대_BE 김태윤 4주차 과제 (2단계) (#360)

* docs(README.md) : 4주차 1단계 구현할 기능 목록 정리

* feat : 카테고리 : 상품 양방향 OneToMany 엔티티 설정

* feat : 카테고리 CRUD 구현

* feat : data.sql을 통해 카테고리 미리 설정하기

* feat : 관리자 화면에서 상품을 추가할 때 상품 카테고리 추가 기능 구현

* feat : 관리자 화면에서 상품을 수정할 때 상품 카테고리 수정 기능 구현

* test : 중복 검사 및 CRUD test 완료

* docs(README.md) : 4주차 2단계 구현할 기능 목록들 추가

---------

Co-authored-by: azjaehyun <[email protected]>

* 부산대 BE_김태윤 4주차 과제 (2,3단계)  (#391)

* docs(README.md) : 4주차 1단계 구현할 기능 목록 정리

* feat : 카테고리 : 상품 양방향 OneToMany 엔티티 설정

* feat : 카테고리 CRUD 구현

* feat : data.sql을 통해 카테고리 미리 설정하기

* feat : 관리자 화면에서 상품을 추가할 때 상품 카테고리 추가 기능 구현

* feat : 관리자 화면에서 상품을 수정할 때 상품 카테고리 수정 기능 구현

* test : 중복 검사 및 CRUD test 완료

* docs(README.md) : 4주차 2단계 구현할 기능 목록들 추가

* feat : Option 엔티티 설계

* feat : 옵션 crud 구현 및 중복성 관리 구현

* feat : 옵션 페이지 구성 완료

* feat : 옵션 추가 페이지 구성 완료

* feat : 관리자 화면에서 옵션 추가/수정/삭제 기능 구현

* feat : subtract 메서드 구현

* test : 테스트 완료

* refactor : 멘토님 리뷰 반영하여 refactor

* feat : 5주차 과제 step0 수행 - 2

---------

Co-authored-by: 박재성(Jason) <[email protected]>
Co-authored-by: azjaehyun <[email protected]>

* 부산대 BE_김태윤_5주차 과제(step1) (#89)

* Initial commit

* feat: set up the project

* 부산대 BE_김태윤 4주차 과제 (0단계) (#51)

* Initial commit

* Initial commit

* feat: set up the project

* 부산대 BE_김태윤_2주차 과제 (0단계 구현) (#86)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(3단계) (#414)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

* docs(README.md) : 3단계 - 위시 리스트 구현할 기능 목록들 정리

* feat : HandlerMethodArgumentResolver 구현

* feat : 위시 리스트 CRUD 기능 구현

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(1,2단계) (#369)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* refactor : globalhandler는 하나여야 한다.

* feat: set up the project

* feat : 3주차 - step0 구현

* docs(README.md) : 3주차 1단계 구현할 기능 목록 정리

* feat : spring data jpa 의존성 추가

* feat : 지금까지 작성한 JdbcTemplate 기반 코드를 JPA 기반 코드로 리팩토링

* 부산대 BE_김태윤 3주차 과제 (0단계) (#36)

* Initial commit

* feat: set up the project

* 부산대 BE_김태윤_2주차 과제 (0단계 구현) (#86)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(3단계) (#414)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

* docs(README.md) : 3단계 - 위시 리스트 구현할 기능 목록들 정리

* feat : HandlerMethodArgumentResolver 구현

* feat : 위시 리스트 CRUD 기능 구현

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(1,2단계) (#369)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* refactor : globalhandler는 하나여야 한다.

* feat : 3주차 - step0 구현

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* feat : 회원가입 및 로그인 E2E test 구현

* refactor : JPA 리팩토링 에러 해결

* feat : @DataJpaTest 활용하여 wishlist CRUD 테스트

* refactor : service interface 생성 및 불필요한 파일들 삭제

* refactor : 전체적인 리팩토링 완료

* refactor : reformat code 적용

* docs(REAME.md) : 3주차 - 2단계 구현할 기능 목록 정리

* feat : 테이블 고려하여 엔티티 설계

* refactor : 회원가입/로그인 로직 리팩토링

* refactor : 디렉토리 구조 변경

* refactor : 사용자의 위시리스트 추가, 삭제, 조회하는 로직 리팩토링

* test : 상품 CRUD 테스트 통과

* test : 사용자의 위시리스트 추가, 삭제, 조회 로직 테스트 통과

* feat : 양방향 연관관계 적극 활용하기

* 부산대 BE_김태윤 3주차 과제 (1단계) (#220)

* Initial commit

* feat: set up the project

* 부산대 BE_김태윤_2주차 과제 (0단계 구현) (#86)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(3단계) (#414)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

* docs(README.md) : 3단계 - 위시 리스트 구현할 기능 목록들 정리

* feat : HandlerMethodArgumentResolver 구현

* feat : 위시 리스트 CRUD 기능 구현

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(1,2단계) (#369)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* refactor : globalhandler는 하나여야 한다.

* feat : 3주차 - step0 구현

* docs(README.md) : 3주차 1단계 구현할 기능 목록 정리

* feat : spring data jpa 의존성 추가

* feat : 지금까지 작성한 JdbcTemplate 기반 코드를 JPA 기반 코드로 리팩토링

* feat : 회원가입 및 로그인 E2E test 구현

* refactor : JPA 리팩토링 에러 해결

* feat : @DataJpaTest 활용하여 wishlist CRUD 테스트

* refactor : service interface 생성 및 불필요한 파일들 삭제

* refactor : 전체적인 리팩토링 완료

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* feat : conflict 해결!

* docs(README.md) : 3주차 3단계 - 페이지네이션 구현할 기능 목록 정리

* feat : wish list 페이지네이션 구현

* feat : product list 페이지네이션 구현

* test : 페이지네이션 테스트 구현

* refactor : Getmapping에 대해 동일한 url 매핑이 되어있는 에러 수정

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 4주차 과제 (1단계) (#171)

* docs(README.md) : 4주차 1단계 구현할 기능 목록 정리

* feat : 카테고리 : 상품 양방향 OneToMany 엔티티 설정

* feat : 카테고리 CRUD 구현

* feat : data.sql을 통해 카테고리 미리 설정하기

* feat : 관리자 화면에서 상품을 추가할 때 상품 카테고리 추가 기능 구현

* feat : 관리자 화면에서 상품을 수정할 때 상품 카테고리 수정 기능 구현

* test : 중복 검사 및 CRUD test 완료

* 부산대_BE 김태윤 4주차 과제 (2단계) (#360)

* docs(README.md) : 4주차 1단계 구현할 기능 목록 정리

* feat : 카테고리 : 상품 양방향 OneToMany 엔티티 설정

* feat : 카테고리 CRUD 구현

* feat : data.sql을 통해 카테고리 미리 설정하기

* feat : 관리자 화면에서 상품을 추가할 때 상품 카테고리 추가 기능 구현

* feat : 관리자 화면에서 상품을 수정할 때 상품 카테고리 수정 기능 구현

* test : 중복 검사 및 CRUD test 완료

* docs(README.md) : 4주차 2단계 구현할 기능 목록들 추가

---------

Co-authored-by: azjaehyun <[email protected]>

* 부산대 BE_김태윤 4주차 과제 (2,3단계)  (#391)

* docs(README.md) : 4주차 1단계 구현할 기능 목록 정리

* feat : 카테고리 : 상품 양방향 OneToMany 엔티티 설정

* feat : 카테고리 CRUD 구현

* feat : data.sql을 통해 카테고리 미리 설정하기

* feat : 관리자 화면에서 상품을 추가할 때 상품 카테고리 추가 기능 구현

* feat : 관리자 화면에서 상품을 수정할 때 상품 카테고리 수정 기능 구현

* test : 중복 검사 및 CRUD test 완료

* docs(README.md) : 4주차 2단계 구현할 기능 목록들 추가

* feat : Option 엔티티 설계

* feat : 옵션 crud 구현 및 중복성 관리 구현

* feat : 옵션 페이지 구성 완료

* feat : 옵션 추가 페이지 구성 완료

* feat : 관리자 화면에서 옵션 추가/수정/삭제 기능 구현

* feat : subtract 메서드 구현

* test : 테스트 완료

* refactor : 멘토님 리뷰 반영하여 refactor

* feat : 5주차 과제 step0 수행 - 2

* docs(REAME.md) : 5주차 1단계 구현할 기능 목록들 정리

* test : 인가 코드, 토큰 받기

* feat : step1 구현 완료

---------

Co-authored-by: 박재성(Jason) <[email protected]>
Co-authored-by: azjaehyun <[email protected]>

* 부산대 BE_김태윤_5주차 과제 (2단계) (#280)

* Initial commit

* feat: set up the project

* 부산대 BE_김태윤 4주차 과제 (0단계) (#51)

* Initial commit

* Initial commit

* feat: set up the project

* 부산대 BE_김태윤_2주차 과제 (0단계 구현) (#86)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(3단계) (#414)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

* docs(README.md) : 3단계 - 위시 리스트 구현할 기능 목록들 정리

* feat : HandlerMethodArgumentResolver 구현

* feat : 위시 리스트 CRUD 기능 구현

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(1,2단계) (#369)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* refactor : globalhandler는 하나여야 한다.

* feat: set up the project

* feat : 3주차 - step0 구현

* docs(README.md) : 3주차 1단계 구현할 기능 목록 정리

* feat : spring data jpa 의존성 추가

* feat : 지금까지 작성한 JdbcTemplate 기반 코드를 JPA 기반 코드로 리팩토링

* 부산대 BE_김태윤 3주차 과제 (0단계) (#36)

* Initial commit

* feat: set up the project

* 부산대 BE_김태윤_2주차 과제 (0단계 구현) (#86)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(3단계) (#414)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

* docs(README.md) : 3단계 - 위시 리스트 구현할 기능 목록들 정리

* feat : HandlerMethodArgumentResolver 구현

* feat : 위시 리스트 CRUD 기능 구현

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(1,2단계) (#369)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* refactor : globalhandler는 하나여야 한다.

* feat : 3주차 - step0 구현

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* feat : 회원가입 및 로그인 E2E test 구현

* refactor : JPA 리팩토링 에러 해결

* feat : @DataJpaTest 활용하여 wishlist CRUD 테스트

* refactor : service interface 생성 및 불필요한 파일들 삭제

* refactor : 전체적인 리팩토링 완료

* refactor : reformat code 적용

* docs(REAME.md) : 3주차 - 2단계 구현할 기능 목록 정리

* feat : 테이블 고려하여 엔티티 설계

* refactor : 회원가입/로그인 로직 리팩토링

* refactor : 디렉토리 구조 변경

* refactor : 사용자의 위시리스트 추가, 삭제, 조회하는 로직 리팩토링

* test : 상품 CRUD 테스트 통과

* test : 사용자의 위시리스트 추가, 삭제, 조회 로직 테스트 통과

* feat : 양방향 연관관계 적극 활용하기

* 부산대 BE_김태윤 3주차 과제 (1단계) (#220)

* Initial commit

* feat: set up the project

* 부산대 BE_김태윤_2주차 과제 (0단계 구현) (#86)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(3단계) (#414)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

* docs(README.md) : 3단계 - 위시 리스트 구현할 기능 목록들 정리

* feat : HandlerMethodArgumentResolver 구현

* feat : 위시 리스트 CRUD 기능 구현

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 2주차 과제(1,2단계) (#369)

* Initial commit

* feat: set up the project

* feat : 1단계 상품 API 과제 수행

* feat : 2단계 상품을 CRUD할 수 있는 관리자 화면을 구현

* feat(README.md) : 구현할 기능 목록 정리

* feat : 상품 옵션 추가 기능 구현 및 전체적인 UI 변경

* feat(application.yml) : h2 DB 접속 정보 설정

* feat(build.gradle) : jdbc 의존성 추가

* feat(schema.sql) : DB 테이블 설계

* feat(ProductRepository.java) : JdbcTemplate을 활용하여 CRUD 구현

* feat : update servce 추가

* feat : 더 이상 Product 클래스를 JPA가 관리하지 않음

* docs : ExceptionHandler 구현 기능 목록 추가

* feat : 사용자 정의 Exception 구현

* feat : 발생 가능할 exception 상황 유추 및 처리

* feat : Global Exception 핸들러 구현

* feat : error 페이지 구현

* feat : 구현할 기능 목록들 모두 구현 완료

* refactor : 중복 처리 Exception 로직 수정

* refactor : UI 변경 및 CSS 코드 통합

* refactor : 유효성 검증 리팩토링

* feat : 2단계 - 관리자 화면 기능 목록 추가

* feat : 3단계 - 데이터베이스 적용 기능 목록 추가

* feat : DB 초기화 기능 구현
1. data.sql을 활용하여 초기 데이터 삽입
2. `spring.sql.init.mode : always` : 항상 SQL 데이터베이스를 초기화

* refactor : 이미 삽입된 데이터와 추가되는 데이터 간의 id값 충돌 해결

* feat : 1단계에서 작성한 테스트를 3단계 테스트 코드로 리팩토링

* feat : jacoco 설정 추가 및 코드 커버리지 확인

* feat : DeleteMapping으로 수정

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리

* docs(README.md) : 2주차 0단계 과제 - 구현할 기능 목록 정리 및 수행 완료!

* docs(README.md) : step1 구현할 기능 목록 정리

* feat(build.gradle) : spring-boot-starter-validation 의존성을 명시적으로 추가

* feat : 추가/수정하려는 상품에 대한 유효성 검사 및 예외 처리 구현

* feat : 전체적인 리팩토링 - 1

* feat : 전체적인 리팩토링 - 2

* feat : 인터페이스와 구현체 나누기

* docs(README.md) : 2단계 과제 (인증) 구현할 기능 목록 정리

* feat(build.gradle) : 라이브러리 설정 (spring security, jwt)

* feat : 로그인 요청 및 응답 모델 클래스 설계

* feat : JWT 토큰 생성 및 검증하는 서비스 구현

* feat : 사용자 정보 로드하는 서비스 구현

* feat : jwt 토큰값 및 log 설정

* feat : Model 설계

* feat : Service 설계

* feat : Controller 설계

* docs(README.md) : step1 README.md 추가

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* docs(README.md) : 2단계 - 인증 구현할 기능 목록들 정리

* feat(build.gradle) : 2단계 - 라이브러리 추가 및 환경 설정

* feat : 2단계 - 회원가입 로직 구현

* refactor : 전체적인 리팩토링

* refactor : 전체적인 리팩토링

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* refactor : globalhandler는 하나여야 한다.

* feat : 3주차 - step0 구현

* docs(README.md) : 3주차 1단계 구현할 기능 목록 정리

* feat : spring data jpa 의존성 추가

* feat : 지금까지 작성한 JdbcTemplate 기반 코드를 JPA 기반 코드로 리팩토링

* feat : 회원가입 및 로그인 E2E test 구현

* refactor : JPA 리팩토링 에러 해결

* feat : @DataJpaTest 활용하여 wishlist CRUD 테스트

* refactor : service interface 생성 및 불필요한 파일들 삭제

* refactor : 전체적인 리팩토링 완료

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* feat : conflict 해결!

* docs(README.md) : 3주차 3단계 - 페이지네이션 구현할 기능 목록 정리

* feat : wish list 페이지네이션 구현

* feat : product list 페이지네이션 구현

* test : 페이지네이션 테스트 구현

* refactor : Getmapping에 대해 동일한 url 매핑이 되어있는 에러 수정

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_김태윤 4주차 과제 (1단계) (#171)

* docs(README.md) : 4주차 1단계 구현할 기능 목록 정리

* feat : 카테고리 : 상품 양방향 OneToMany 엔티티 설정

* feat : 카테고리 CRUD 구현

* feat : data.sql을 통해 카테고리 미리 설정하기

* feat : 관리자 화면에서 상품을 추가할 때 상품 카테고리 추가 기능 구현

* feat : 관리자 화면에서 상품을 수정할 때 상품 카테고리 수정 기능 구현

* test : 중복 검사 및 CRUD test 완료

* 부산대_BE 김태윤 4주차 과제 (2단계) (#360)

* docs(README.md) : 4주차 1단계 구현할 기능 목록 정리

* feat : 카테고리 : 상품 양방향 OneToMany 엔티티 설정

* feat : 카테고리 CRUD 구현

* feat : data.sql을 통해 카테고리 미리 설정하기

* feat : 관리자 화면에서 상품을 추가할 때 상품 카테고리 추가 기능 구현

* feat : 관리자 화면에서 상품을 수정할 때 상품 카테고리 수정 기능 구현

* test : 중복 검사 및 CRUD test 완료

* docs(README.md) : 4주차 2단계 구현할 기능 목록들 추가

---------

Co-authored-by: azjaehyun <[email protected]>

* 부산대 BE_김태윤 4주차 과제 (2,3단계)  (#391)

* docs(README.md) : 4주차 1단계 구현할 기능 목록 정리

* feat : 카테고리 : 상품 양방향 OneToMany 엔티티 설정

* feat : 카테고리 CRUD 구현

* feat : data.sql을 통해 카테고리 미리 설정하기

* feat : 관리자 화면에서 상품을 추가할 때 상품 카테고리 추가 기능 구현

* feat : 관리자 화면에서 상품을 수정할 때 상품 카테고리 수정 기능 구현

* test : 중복 검사 및 CRUD test 완료

* docs(README.md) : 4주차 2단계 구현할 기능 목록들 추가

* feat : Option 엔티티 설계

* feat : 옵션 crud 구현 및 중복성 관리 구현

* feat : 옵션 페이지 구성 완료

* feat : 옵션 추가 페이지 구성 완료

* feat : 관리자 화면에서 옵션 추가/수정/삭제 기능 구현

* feat : subtract 메서드 구현

* test : 테스트 완료

* refactor : 멘토님 리뷰 반영하여 refactor

* feat : 5주차 과제 step0 수행 - 2

* docs(REAME.md) : 5주차 1단계 구현할 기능 목록들 정리

* test : 인가 코드, 토큰 받기

* feat : step1 구현 완료

* docs(README.md) : 2단계 구현할 기능 목록들 정리

* feat : 상품 옵션 추량 차감 및 위시 리스트 삭제 구현

* feat : 카카오 로그인을 통해 액세스 토큰과 사용자 정보 받기

* feat : 토큰과 사용자 이름 DB에 저장하기

* feat : 주문 내역을 카카오톡 메시지로 전송하기 구현

* feat : 주문 내역 속 상품이 위시 리스트에 있는 경우 위시 리스트에서 삭제하는 기능 구현

* refactor : 옵션 페이지 및 옵션 이름 오류 해결

* feat : accessToken 유효성 검사 및 재발급 로직 추가

* test : accessToken 유효성 검사 및 재발급 로직 테스트 완료!

* refactor : 간단한 오류 수정

---------

Co-authored-by: 박재성(Jason) <[email protected]>
Co-authored-by: azjaehyun <[email protected]>

* 부산대 BE_김태윤 5주차 과제 (3단계) (#376)

* docs(README.md) : 5주차 - 3단계 구현할 기능 목록등 정리

* feat : RestClient에 timeout 설정하기

* refactor : 멘토님 리뷰 반영

* feat : timeout 설정

* feat : springdoc-openapi의 swagger를 이용해 swagger 구현

* feat : 회원 API 명세서 작성 성공

* feat : 카테고리 API 명세서 작성 성공

* feat : 상품 API 명세서 작성 성공

* feat : 상품 옵션 API 명세서 작성 성공

* feat : 위시리스트 API 명세서 작성 성공

* feat : 주문 API 명세서 작성 성공

* docs(README.md) : 6주차 0단계

* feat : 회원 API 구현 완료

* feat : 카테고리 API 구현 완료

* feat : 상품 API 구현 완료

* feat : 상품 옵션 API 구현 완료

* feat : 위시 리스트 API 구현 완료

* feat : 주문 API 구현 완료

* feat : 목 데이터 왕창 삽입하기

* feat : CORS 설정 구현

* feat : 토큰값 넣어주기

* 테스트 잠시 멈추기

* 코드 추가하기

* feat : 테이블 데이터 추가하기

* feat : 카테고리별 상품 조회 API 구현

* feat : data.sql에 데이터 추가

* feat : Wish 테이블에 createdDate 추가

* refactor : 주문하기, 위시리스트 API 리팩토링

* feat : CORS 설정 테스트 추가

* refactor : 테스트 코드 리팩토링

* 테스트코드 가리기

* CORS 설정 재설정하기

* 충돌 해결

* 충돌 해결

* docs(README.md) : 리드미 파일 수정

* docs(README.md) : 리드미 파일 수정 2

* docs(README.md) : 리드미 파일 수정 3

* feat : 쉘 스크립트 추가

* test : 쉘 스크립트 테스트용

* feat : 쉘 스크립터 작성 완료

* feat : 쉘 스크립터 수정

* Save local changes before pulling

* feat : 6주차 2단계 구현 완료

* feat : 회원가입 API 수정하기

* feat : 회원별 포인트 조회하는 API 구현

* feat : 주문하기 API 수정하기

* refcator : 주문하기 API 리팩토링 - 1

* refactor : 토큰 만료기간 재설정

* refactor : 비밀키 길이 수정

* refactor : 토큰 길이 수정 - 2

* refactor : jwtUtil 수정

* refactor : jwtUtil 수정 - 2

* refactor : 2단계 멘토님 리뷰 반영

* refactor : 2단계 멘토님 리뷰 반영 - 2

* refactor : 주문하기 로직 리팩토링

* refactor : 주문하기 로직 리팩토링 - 2

* feat : orderPageResponse에 product 내용 좀 더 풍부하게 담기

* feat : 회원가입하지 않은 사용자 404 NOT FOUDN ERROR 띄우기

---------

Co-authored-by: 박재성(Jason) <[email protected]>
Co-authored-by: azjaehyun <[email protected]>
Co-authored-by: Ubuntu <[email protected]>
  • Loading branch information
4 people authored Aug 5, 2024
1 parent 2e046f5 commit 3afef63
Show file tree
Hide file tree
Showing 25 changed files with 381 additions and 176 deletions.
19 changes: 3 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,6 @@
- [x] CORS 설정하기
- [x] CORS 설정 테스트

## https 통신을 위한 설정
- [ ] DuckDns를 이용하여 도메인 설정하기
- [ ] Nginx를 이용하여 https 설정하기
- [ ] Cerbot을 이용하여 SSL 인증서 발급하기
- [ ] OpenSSL을 이용하여 SSL 인증서 발급하기

---
# 6주차 3단계 구현해야할 기능 목록들 정리
## 1. 회원가입 API 수정하기
Expand All @@ -59,14 +53,7 @@
- [x] 포인트가 상품 금액의 50%를 넘지 않는지 검증하는 로직 추가
- [x] 사용자는 구매한 상품의 5%를 포인트로 적립받는다.
- [x] 반환받은 포인트값 업데이트하기


- [x] jwt 토큰 길이 수정 (512비트 이상으로)
- 현재 발생하고 있는 오류는 JWT 토큰을 검증하기 위한 키가 HS512 알고리즘에 대해 충분히 안전하지 않기 때문이다.
- JWT JWA 명세서(RFC 7518, 섹션 3.2)에 따르면, HS512와 함께 사용되는 키는 최소 512비트 이상이어야 한다.
---
# 6주차 4단계 구현해야할 기능 목록들 정리
### 추가적으로 생각해봐야 할 API들
- 카카오 로그인 API
- 특정 카테고리 조회, 새로운 카테고리 추가, 카테고리 삭제 API
- 옵션 추가 및 삭제 API
- 주문 추가 API
- 상품 추가, 상품 정보 수정, 상품 삭제 API

65 changes: 5 additions & 60 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.1'
id 'io.spring.dependency-management' version '1.1.4' // 버전까지 추가해줘야함

id 'io.spring.dependency-management' version '1.1.4'
// id 'jacoco'
}

tasks.bootJar {
archiveFileName.set("spring-gift-1.0-SNAPSHOT.jar") // 자바 빌드 후 jar 파일명 명확히 기재
}

group = 'camp.nextstep.edu'
Expand Down Expand Up @@ -38,63 +40,6 @@ dependencies {
}

test {
//finalizedBy jacocoTestReport
// finalizedBy jacocoTestReport
useJUnitPlatform()
}


//jacoco {
// toolVersion = "0.8.10"
// reportsDirectory = layout.buildDirectory.dir('jacocoReport')
//}
//
//
//jacocoTestReport {
//
// dependsOn test
//
// reports {
// xml.required = false
// csv.required = false
// html.required = true
// }
//
// afterEvaluate {
// classDirectories.setFrom(
// files(classDirectories.files.collect {
// fileTree(dir: it, excludes: [
// '**/domain/**',
// '**/global/**',
// '**/*Application*'
// ])
// })
// )
// }
// finalizedBy 'jacocoTestCoverageVerification'
//}

/*
jacocoTestCoverageVerification {
violationRules {
rule {
enabled = true
element = 'CLASS'
// 라인 커버리지 제한을 90%로 설정
limit {
counter = 'LINE'
value = 'COVEREDRATIO'
minimum = 0.90
}
excludes = [
'**.*Application',
'**.domain.**',
'**.global.**'
]
}
}
}
*/
37 changes: 29 additions & 8 deletions src/main/java/gift/common/auth/JwtUtil.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,27 @@
package gift.common.auth;

import gift.member.model.Member;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;
import java.security.Key;
import javax.crypto.SecretKey;
import java.util.Date;

@Component
public class JwtUtil {

private final Key key;
private final SecretKey key;
private final long expirationTime;

public JwtUtil(@Value("${jwt.secret}") String secretKey) {
this.key = Keys.hmacShaKeyFor(secretKey.getBytes(StandardCharsets.UTF_8));
public JwtUtil(@Value("${jwt.secret}") String secretKey, @Value("${jwt.expiration}") long expirationTime) {
this.key = Keys.hmacShaKeyFor(secretKey.getBytes());
this.expirationTime = expirationTime;
}

// JWT 토큰을 파싱하여 그 안에 포함된 클레임을 반환
public Claims extractClaims(String token) {
return Jwts.parser()
Expand All @@ -27,15 +31,15 @@ public Claims extractClaims(String token) {
.getBody();
}

// 토큰이 유효한지 확인
// 토큰 유효성 검사
public boolean isTokenValid(String token) {
try {
Jwts.parser()
.setSigningKey(key)
.build()
.parseClaimsJws(token);
return true;
} catch (Exception e) {
} catch (JwtException e) {
e.printStackTrace();
return false;
}
Expand All @@ -46,4 +50,21 @@ public String extractEmail(String token) {
Claims claims = extractClaims(token);
return claims.get("email", String.class);
}

// 헤더값에서 토큰 추출하기 (Bearer 제거)
public String extractToken(String authorizationHeader) {
return authorizationHeader.startsWith("Bearer ") ? authorizationHeader.substring(7) : null;
}


// JWT 생성
public String generateToken(Member member) {
return Jwts.builder()
.setSubject(member.getId().toString())
.claim("email", member.getEmail()) // 이메일 클레임 추가
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + expirationTime))
.signWith(SignatureAlgorithm.HS512, key)
.compact();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer m
}

// JWT 토큰 검증
String token = header.substring(7); // "Bearer " 접두사 제거
String token = jwtUtil.extractToken(header);
if (!jwtUtil.isTokenValid(token)) {
throw new UserNotFoundException("Invalid JWT token");
}
Expand Down
38 changes: 28 additions & 10 deletions src/main/java/gift/member/controller/MemberController.java
Original file line number Diff line number Diff line change
@@ -1,30 +1,28 @@
package gift.member.controller;

import gift.common.auth.JwtUtil;
import gift.common.util.CommonResponse;
import gift.member.dto.LoginRequest;
import gift.member.dto.LoginResponse;
import gift.member.dto.SignUpReqeust;
import gift.member.dto.SignUpResponse;
import gift.member.dto.*;
import gift.member.service.MemberService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/members")
@Tag(name = "회원 API", description = "회원가입, 로그인 API")
public class MemberController {

private final MemberService memberService;
private final JwtUtil jwtUtil;

public MemberController(MemberService memberService) {
public MemberController(MemberService memberService, JwtUtil jwtUtil) {
this.memberService = memberService;
this.jwtUtil = jwtUtil;
}

// 회원가입
Expand All @@ -51,11 +49,31 @@ public ResponseEntity<?> login(@Valid @RequestBody LoginRequest request) {
String token = memberService.login(email, password);

if (token == null) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("Invalid email or password"); // 403 Forbidden
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("회원가입하지 않은 사용자입니다."); // 403 Forbidden
}

LoginResponse response = new LoginResponse(email, token);

return ResponseEntity.ok(new CommonResponse<>(response, "로그인 후 토큰 발기 성공", true));
}

// 특정 회원의 포인트 조회
@Operation(summary = "포인트 조회", description = "특정 회원의 포인트를 조회한다.")
@GetMapping("/points")
public ResponseEntity<?> getPoint(
@Parameter(hidden = true) @RequestHeader("Authorization") String authorizationHeader
) {
// 토큰 추출
String token = jwtUtil.extractToken(authorizationHeader);
if (token == null || !jwtUtil.isTokenValid(token)) {
// 401 Unauthorized
return ResponseEntity.status(401).body(new CommonResponse<>(null, "Invalid or missing token", false));
}
System.out.println("KKKKtoken = " + token);
String memberEmail = jwtUtil.extractEmail(token);
System.out.println("KKKKmemberEmail = " + memberEmail);
Long points = memberService.getPoint(memberEmail);

return ResponseEntity.ok(new CommonResponse<>(new PointResponse(points), "포인트 조회 성공", true));
}
}
10 changes: 10 additions & 0 deletions src/main/java/gift/member/dto/PointResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package gift.member.dto;

import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;

@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public record PointResponse(
Long points
) {
}
24 changes: 24 additions & 0 deletions src/main/java/gift/member/model/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,20 @@ public class Member {
@Column(nullable = false)
private String password;

private Long points;

@OneToMany(mappedBy = "member", cascade = CascadeType.REMOVE, orphanRemoval = true)
private List<Wish> wishList = new ArrayList<>();

// 활용 메서드들
public void addPoints(Long points) {
this.points += points;
}

public void subtractPoints(Long points) {
this.points -= points;
}

public void addWish(Wish wish) {
this.wishList.add(wish);
wish.setMember(this);
Expand Down Expand Up @@ -58,6 +68,12 @@ public Member(String email, String password) {
this.password = password;
}

public Member(String email, String password, Long points) {
this.email = email;
this.password = password;
this.points = points;
}

// Getters and setters
public Long getId() {
return id;
Expand Down Expand Up @@ -90,4 +106,12 @@ public List<Wish> getWishList() {
public void setWishList(List<Wish> wishList) {
this.wishList = wishList;
}

public Long getPoints() {
return points;
}

public void setPoints(Long points) {
this.points = points;
}
}
6 changes: 4 additions & 2 deletions src/main/java/gift/member/service/MemberService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ public interface MemberService {

void registerMember(String email, String password);

String generateToken(Member member);

String login(String email, String password);

Long getPoint(String memberEmail);

Member getMemberByToken(String token);
}
Loading

0 comments on commit 3afef63

Please sign in to comment.