Settings -> Collaborators and team -> Add people를 눌러적당한 권한을 부여하여 팀원을 넣어준다.그 후 브랜치에 develop이라고 개발 전용 브랜치를 생성한 후 Settings -> General -> Default branch에서
작성일시, 수정일시, 작성자, 수정자 등을 모든 entity에 추가하기에는 코드가 길어질 수 있어 따로 분리하여 작성하기 위해 Auditing을 사용해준다. Application CustomUserDetails CustomUserDetails 클래스는 이후 Sec

프로젝트를 설정 시키기 위해서는 DB와 Security 등의 구성을 추가해야 한다.jdbc:h2:~/freemarket으로 초기 생성을 한 뒤 jdbc:h2:tcp://localhost/~/freemarket을 입력하여 접속해준다.application.yml기본적으로
User Review Product Order OrderItem

JWT 설정 JwtProvider JWT(JSON Web Token)를 생성하고 검증하는 프로바이더 클래스다. 주요 메서드 createToken(Authentication authentication, long validitySeconds) 기본 JWT 토큰을

gradle에 아래와 같은 코드를 추가해야 JavaMailSender를 사용할 수 있다.gradle그 후 yml에 이메일 관련 서버 설정을 추가해야 한다.application.ymlmail.smtp.auth: true - SMTP 서버에 인증이 필요함을 나타낸다.mai

UserDtofrom(User user) 정적 메서드는 User 엔티티 객체를 받아 UserResponse DTO로 변환하는 편의 메서드다.from(User) 메서드로 엔티티에서 DTO로의 변환 로직을 캡슐화하여 애플리케이션 전체에서 일관된 변환을 보장한다.UserSe

의존성 추가 application-oauth2.yml 구글 설정 google cloud console에 접속한다. API 및 서비스 -> OAuth2 동의화면에 들어간다. 앱 이름, 이메일 등을 입력하여 준다. API 및 서비스 -> 사용자 인증 정보 -> 사용
application.yml/api/\*\* 경로: http://localhost:8081 또는 http://127.0.0.1:8081 (주로 Vue 개발 서버)에서 오는 모든 종류의 API 요청(GET, POST, PUT, PATCH, DELETE,

상품 카테고리 확장 교내 중고마켓에 적합한 카테고리로 확장 (예: 교재, 전자기기, 의류, 생활용품 등) ProductCategory dto from (Entity -> DTO 변환) of (DTO 객체 생성) toEntity (DTO -> Entity 변환) 소셜

테스트
현재 프론트를 담당하는 팀원이 잘못된 코드를 올려 파일을 제거해야 될 상황이 되었다.깃허브의 upstream은 다른 개발자의 원격 저장소에 있는 변경사항을 가져오는 기능이다. 이를 통해 협업하고 있는 프로젝트의 최신 업데이트를 받아올 수 있다.먼저 팀 리포지토리 브랜치

현재 프로젝트에 Swagger UI 설정이 누락되어 있어, API 문서화가 제대로 이루어지지 않고 있어 Config 설정을 추가해준다.Swagger API 문서의 설명을 추가하고 JWT 인증 기능을 지원하도록 설정하였다.
User 사용자의 학교 이메일 인증이 완료 되었는지 확인하기 위한 필드와 인증 상태를 설정하는 메서드를 추가해준다. EmailVerification Entity 사용자가 인증을 요청하면 인증 코드가 생성되어 이 엔터티에 저장된다. Repository DTO

UserDto ProductDto UserProfileDto ResponseDto AuthDto EmailVerificationDto PasswordDto 예시 이미지

현재 애플리케이션에서는 다양한 종류의 표준 예외(RuntimeException, BadRequestException 등)를 직접 던지고 있어 예외 처리가 일관되지 않고, 프론트엔드에 유의미한 에러 메시지를 전달하기 어려운 상황이다. 모든 예외를 커스텀 예외로 통합하여

조회수는 자주 업데이트되는 데이터다. 별도 테이블로 분리하면 Product 테이블의 락(lock) 경합을 줄일 수 있어 성능상 이점이 있다.특히 조회수가 높은 인기 상품의 경우, 메인 Product 테이블에 영향을 주지 않고 조회수만 업데이트할 수 있다.ProductW
현재 ProductService 클래스는 상품 관리(CRUD 작업), 상품 상태 관리, 상품 조회 등 여러 책임을 담당하고 있다. 이는 단일 책임 원칙(SRP)을 위반하며, 클래스를 유지보수하고 확장하기 어렵게 만든다.ProductService가 너무 큼(약 300줄)

ReviewRatingCount특정 별점(rating)별 리뷰 개수(count)를 담기 위한 간단한 값 객체(Value Object)다.RatingDistribution리뷰 시스템에서 별점 분포와 관련된 계산 및 통계를 담당하는 값 객체(Value Object)다.Re
외래 키 제약조건으로 인해 연관 데이터(product_view_counts 등)가 있으면 제품 삭제가 실패한다.제품 이미지 파일이 서버 파일 시스템에 그대로 남아있어 공간 낭비가 발생한다.ProductService에 트랜잭션 처리된 deleteProduct 메서드를 구
스웨거 UI 접근 시 500 에러가 발생한다. 서버 로그에서는 No static resource v3/api-docs 메시지가 표시된다. 서버 내부에서는 정상적으로 실행되지만 외부에서 스웨거 UI 접근 시 문제가 발생하고 있다.스웨거 API 문서 경로가 올바르게 설정되

VM 인스턴스 생성 이미지는 ubuntu 22 버전을 선택해준다. SSH 키는 다운 받아준다. private 키는 절대 잃어버리거나 노출되면 안 된다. 수신 규칙 설정 내 인스턴스 - 보안 - 보안 목록 생성 - 수신 규칙 허용에 들어간다. 0.0.0.0/0은
FaviconConfiguration/favicon.ico 요청을 직접 처리하게 설정한다.Spring Boot는 기본적으로 /favicon.ico 요청을 정적 리소스에서 찾지만,일부 설정에서는 404가 발생할 수 있고WebMvcConfigurer를 커스터마이징한 경우
/home/ubuntu/app.log에 저장되어 있었다.

Nginx 재시작https://freemarket.duckdns.org/
현재 관심 상품 목록과 판매 내역 목록에서는 조회수와 관심수를 가져오지 않고 있다.상품을 가져올 때 ProductBaseResponse가 아닌 관심수와 조회수를 가져올 수 있는 ProductDetailResponse를 사용해준다.특정 사용자가 관심 등록(wishlist
DTO에서 상세 정보를 받아올 수 있게 수정해준다.다른 사용자의 정보는 일부분만 조회할 수 있게한다.사용자의 상세 정보 조회를 위해 통계 정보를 가져와서 DTO로 반환해준다.다른 사용자 프로필 조회 api 엔드포인트를 UserController로 가져와준다.

https://freemarket.duckdns.org/현재 운영환경에서도 제대로 동작하는지 테스트하기 위해 ddl-auto 설정이 create 로 되어 있어서 정보가 초기화 될 수 있습니다.다른 이미지 파일 사용했습니다.프로필 조회, 리뷰는 아직 미구현입니다
콜백 주소 변경 CORS allowedOrigins: 허용할 프론트 도메인들 allowedMethods: 허용할 HTTP 메서드 allowedHeaders: 어떤 요청 헤더를 허용할지 allowCredentials(true): 쿠키 등 인증정보 포함 허용 maxAg
기존에 2개로 나눴던 코드를 하나의 api 엔드포인트로 통합해준다.Controller에서 받아온 파라미터를 처리한다.기존 상품 목록 조회 로직이 2개로 나눠지던 걸 하나로 통합한다.findAllWithStatsAndWishlist: 모든 상품 조회 + 통계 포함find
상품 목록들은 따로 쿼리를 통해 가져온다.판매자의 기본 정보를 가져오는 api와 판매자의 상품 목록을 가져오는 api를 분리하여 사용한다.판매자의 상품 목록을 가져올 때는 상품 상태에 따라 가져올 수 있다.판매자의 프로필 정보를 조회하면서, 현재 판매 중인 상품 수와
ProductDetailResponse와 ProductSummaryResponse가 거의 똑같은 구조를 가지고 있어 중복이 심하기 때문에 통합을 해준다.그 후에 상품 생성 시간과 수정 시간을 응답에 넣어준다.UserDto에서는 ProductResponse을 가져와서 상

상품을 구매하고 싶은 경우 실시간 채팅을 통해 구매 의사를 밝힐 수 있도록 실시간 채팅 시스템을 구현한다.WebSocketWebSocket은 클라이언트와 서버가 한 번 연결되면, 지속적으로 연결을 유지하면서 양방향으로 자유롭게 데이터를 주고받을 수 있는 통신 방식이다.
판매 완료 처리시 채팅방의 id 값을 이용하도록 DTO를 생성한다.markProductAsSold판매자의 상품인지 검증이미 판매된 상품인지 확인하고 예외 처리구매자 존재 여부와 채팅방의 유효성을 검증상품을 판매완료 상태(SOLD_OUT)로 변경하고 구매자를 설정채팅방에

현재 판매된 상품에 대해 구매자가 아닌 제3자가 리뷰를 작성하려고 할 때 예외 처리 메시지가 자신의 상품에 리뷰를 작성할 수 없습니다.라고 엉뚱한 메시지가 나오고 있었다. 이를 수정해준다.수정 후 응답