내배캠 57

[내일배움캠프/백엔드] JPA 심화 개인과제 트러블 슈팅

1. @DynamicInsert 사용1)개요DynamicInsert를 통해 DB의 기본값을 적용하려고 했지만, ItemEntity 테스트 코드를 작성 했을 때 nullable = false의 조건을 확인하는 과정에서 테스트 코드가 정상적으로 동작하지 않는 문제 발생 2)문제상황기본 값 설정을 @PrePersist를 사용해 처리하는 방식으로 수정을 했는데, 테스트 환경에서 DB에 직접적인 기본값 적용 확인이 어려워 DynamicInsert와 중복으로 인하여 여전히 동작하지 않는 문제 발생 DynamicInsert는 SQL INSERT 문을 생성할 때 null 필드를 제외시켜 DB의 기본값을 적용하지만, 코드에서 설정된 값과 충돌하거나 테스트에서 null 처리가 누락이 되면 동작하지 않는 문제 발생 3)해결..

[내일배움캠프/백엔드] JPA 심화 강의 내용 정리

강의 목표Spring Boot 설정부터 JPA 심화까지 학습데이터베이스 연동과 객체 관리의 기본 및 심화 기술 실습프로젝트 세팅 1. Spring Boot를 활용한 프로젝트 생성 및 의존성 관리Spring Initializer를 통해 프로젝트 생성 및 필수 의존성 추가의존성 옵션implementation컴파일 시 의존성 포함외부로 노출 안 됨캡슐화를 유지하며 필요한 라이브러리만 프로젝트에 포함runtimeOnly런타임에만 필요한 의존성 추가ex. H2, 로그 라이브러리testImplementation테스트 전용 의존성 추가테스트 환경에서만 필요한 라이브러리 포함2. 의존성 관리Spring Boot Starterspring-boot-starter-web : REST API, 웹 서버(H2 Console)s..

내배캠/Spring 2024.12.12

[내일배움캠프/백엔드] Spring 심화. 아웃소싱 프로젝트 발표 자료

OrderStatus Enum : 상태 변경 로직1.개요주문 상태(OrderStatus)는 주문 처리 단계를 관리하는 핵심 요소Enum(열거형) 타입으로 구현하여 주문의 진행 상태를 명확하게 정의상태 변경이 순서대로 진행되도록 로직을 설계하고, 중앙에서 관리하여 잘못된 상태 변경의 예외 상황을 방지하고 데이터의 일관성을 유지 2. 왜 이런 설계를 선택했는지?잘못된 상태 변경으로 인해 주문 데이터가 비정상적으로 처리될 가능성이 있고, 순서를 지키지 않아도 통과되는 문제 발생을 없애기 위해 선택canTransitionTo 메서드를 사용하여 상태 전환이 허용된 경우에만 변경 가능3. 상태 변경 로직을 적용 후 예외처리상태 변경의 흐름ORDERED → ACCEPTED: 사장님이 주문을 수락. ACCEPTED →..

[내일배움캠프/백엔드] Spring 심화. 아웃소싱 프로젝트 트러블 슈팅

1. 코드 구현 전 원활하고 구체적인 의사소통 필요1) 개요프로젝트 진행이 아직 미숙하여 초기에 팀원 간의 충분한 의사소통이 이루어지지 않아 프로젝트 진행 중에 기본 구조 및 코딩 규칙 등이 통일 되지 않았다. 이로 인해 코드 merge 후 여러 문제점 발생 2) 문제 상황기본 구조와 의존성 정의 X문제팀원이 각각 다른 방식으로 프로젝트의 기본 구조를 설계BaseEntity를 포함한 예외 처리 방식, 의존성 추가 등에 대한 사전 합의가 부족결과중복된 의존성이 추가됨 (ex. spring-boot-starter-validation 중복 추가)예외 처리가 전역 예외처리와 Service 계층에서 각각 처리되어 일관성 부족 및 혼란용어 정의 및 타입 불일치문제가게 주인과 관련된 용어를 각각 다르게 정의(Owne..

[내일배움캠프/백엔드] Spring 심화 아웃소싱 프로젝트 Lv0. API 명세 및 ERD 작성

피드백 받고 수정예정프로젝트 개요 *프로젝트 목표1. 데이터베이스와 ORM데이터베이스와 스키마를 설계JPA를 이용해 데이터베이스와 연동JPA를 통해 CRUD 작업2. 인가인가 개념을 구현하여 접근 권한을 다르게 설정3. 협업 및 버전 관리Git을 사용해 소스 코드 버전 관리Git branch를 이용해 브랜치 관리 및 원활한 협업Pull Request와 코드 리뷰 과정에 대해 이해*프로젝트 필수 기능 가이드1. 회원가입 / 로그인회원가입사용자 아이디 : 이메일 형식비밀번호Bcrypt로 인코딩 : 암호화를 위한 PasswordEncoder를 직접 만들어 사용대소문자 포함 영문 + 숫자 + 특수문자를 최소 1글자씩 포함비밀번호는 최소 8글자 이상권한회원가입 시 일반 유저 또는 사장님으로 가입권한에 따라 사용할..

[내일배움캠프/백엔드] Spring 심화 개인과제 트러블 슈팅

- 어떤 현상을 발견했는가?1. @RequestParam으로 Enum 값 처리 postman 오류 2. @NotNull과 Bean Validation이 작동하지 않음 3. @PostMapping 어노테이션 사용 불가 오류 4. Project JDK is not defined 이런 장애가 생길 수 있다는 것을 인지1. @RequestParam으로 Enum 값 처리 postman 오류-@RequestParam이 enum 타입 값을 처리하지 못하거나 올바르게 매핑되지 않으면 400 Bad Request 오류가 발생한다는 것을 인지-클라이언트가 enum 문자열 값을 정확히 전달하지 않거나, 서버가 enum을 변환하지 못할 시에 발생 2. @NotNull과 Bean Validation이 작동하지 않음-Dto에서 ..

[내일배움캠프/백엔드] Spring 심화 개인과제 Lv0. API 명세 및 ERD, SQL 작성하기

API 명세서 작성  ERD 작성SQL 작성CREATE TABLE User ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(200) NOT NULL, email VARCHAR(200) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);CREATE TABLE Currency ( id INT AUTO_INCREMENT PRIMARY KEY, currency_name VARCHAR(200) NOT NULL, exchange_r..

[내일배움캠프/백엔드] Spring 숙련. 뉴스 피드 프로젝트 발표

발표 ppt 자료 내가 맡은 부분인 게시물 조회, 정렬 관련해서 발표자 분이 원하는 형식으로 정리해서 보냈다.코드 발표는 어떻게 해야할 지 감이 잘 잡히지 않았는데, 이렇게 기능별로 설명하면 되는 구나~라고 생각하게 되었다. READ ME 처음 공부할때는 리드미가 뭔지도 몰랐는데 이제는 어떻게 하면 한눈에 정리할 수 있을지 고민하게 되고, 이 페이지만 봐도 어떤 프로젝트를 진행해서 이런 코드를 짰는지 알 수 있게 정리할 수 있게 된 것 같다.# News_Feed_project#### 뉴스피드 : 친구들의 가장 최근에 업데이트된 게시물들을 볼 수 있는 페이지## 뉴스피드 기능### 1. 프로필 관리#### *프로필 조회#### *프로필 수정##### -로그인한 사용자 본인만 사용자 정보 수정##### -비..

[내일배움캠프/백엔드] Spring 숙련. 뉴스 피드 프로젝트 트러블 슈팅

1. Git 충돌 해결1) 개요develop 브랜치에서 동시에 작업을 진행하면서 push, pull 하는 과정에서 다른 팀원이 작성한 내용을 pull로 가져올 때, 현재 작업하고 있던 내용과 충돌이 발생 2) 문제상황-모든 작업을 develop 브랜치에서 직접 진행을 하면서 문제가 생김-작업 중 서로 다른 파일을 수정하면서 충돌이 발생 3) 해결-작업을 개별 브랜치 feature에서 진행하도록 변경-작업 완료 후, 로컬에서 develop 브랜치로 병합하고, 충돌이 있다면 로컬에서 해결한 후에 git push-develop이 최신화되면 브랜치를 pull 받아 최신으로 유지하고 다시 feature에서 개발1. feature 브랜치 생성git checkout -b feature/2. 로컬에서 작업 후 병합gi..