들어가기에 앞서
실제 프로젝트 진행했던 코드 내용은 업로드하지 않았습니다
Post method 사용, Validation 이해)Get method, DTO)Put method)Delete method)@Setter, @Getter Annotation 추가만으로 Getter/Setter 추가Getter/Setter가 추가된 부분에 대해서는 Refactor > lombok으로 변환toString을 Override해서 값들을 출력하던 것 역시 @ToString 추가로 대체Annotation@NoArgsConstructor : 기본 생성자@AllArgsConstructor : 모든 필드를 다 받아야 하는 생성자@RequiredArgsConstructor : final, @NonNull인 필드만 받는 생성자@Data : Getter+Setter+Required...+EqualsAndHashCode+ToString 등 모든 기능 통합@Sl4fj : 로깅 관련 AnnotationHTTP(Hyper Text Transfer Protocol)HTTP Request 메시지 스펙HTTP method, GET / PUT / POST 등)Header (User-Agent, Accept 등)Header에서 줄바꿈 이후 : Request BodyPOST /create-developer HTTP/1.1
// GET / POST 구분 없으 QueryString, RequestBody를 모두 넣을 수 있긴 하나 약속을 한 것...
Content-Type: application/json
Accept: application/json
{
"developerLevel": "JUNIOR",
"developerSkillType": "FULL_STACK",
"experienceYears": 2,
"memberId": "sunny.flower",
"name": "sun",
"age": 36
}
HTTP Response 메시지 스펙status 상태 라인 (200, 500 등)Header (User-Agent, Accept 등)Header에서 줄바꿈 이후 : Request BodyHTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sat, 17 Jul 2021 15:33:34 GMT
Keep-Alive: timeout=60
Connection: keep-alive
{
"developerLevel": "JUNIOR",
"developerSkillType": "FULL_STACK",
"experienceYears": 2,
"memberId": "sunny.flo1wer",
"name": "sun",
"age": 36
}
Spring InitializrWEB / Lombok / H2 Database / Spring Data JPA / ValidationPackage 구성Controller / Service / Entity / DTO / Type / Repository / ExceptionPackage 역할Controller : @RestController로 지정, http request를 받아Service에 정의된 Business Logic을 호출, ResponseBody에 객체를 받아 반환Service : @Service로 지정, Business Logic을 처리하는 Service Layer Entity : @Entity를 통해 SQL을 통해 연결된 DB에 저장할 수 있는 객체를 구현DTO : Wrapping된 순수한 데이터 객체로 각 Layer간 데이터 교환을 하기 위해 사용Type : enum 타입으로 각종 속성/상태에 대해 정의 (exception 포함)Repository(DAO) : MVC 모델 중의 Model에 해당하는 영역,DB의 데이터에 접근하기 위한 객체로 Entity를 통해 데이터를 DB에 저장하는 역할DB 접근 Logic과 Business Logic을 분리하기 위해 사용)Exception : Global exception handling 및 Custom exception을 정의 @RestController 로 controller로 지정http request 값을 json 형식으로 받아 이에 맞는 메소드를 활용, 처리해주는 역할@Sl4fj 으로 로깅 기능 추가 controller 내부 @PostMapping을 활용, Post 메소드 추가, service에도 추가entity 구현type에서 enum 타입으로 속성 구현repository 구현dto 내부에 Post에 필요한 객체 생성 dto 구현, 내부에 validation 수행service 구현 및 business validation 수행, exception handlingexception 내에 custom exception 구현 (enum 타입) controller에 @GetMapping을 활용, Get 메소드 추가, service에도 추가dto 내부에 Get에 필요한 정보 확인 시 노출시킬 dto 구현Get 메소드에서는 Entity를 리턴하는 것이 아닌 Dto를 반환controller에 @PutMapping을 활용, Put 메소드 추가, service에도 추가PUT : 수정을 하더라도 모든 key-value 값 입력 필요 (입력 안할 시 null로 초기화)PATCH : 요청한 key-value에 대해서만 수정dto 내부에 Put 에 필요한 수정될 정보를 받을 dto 구현service 내부에 추가로 Put 에 대한 validation 수행을 하는 메소드 추가수정될 정보를 받을 dto의 request 정보를 바탕으로repository 내부의 entity 의 정보를 수정한 후, 해당 값을 dto로 반환 controller에 @DeleteMapping을 이용, Delete 메소드 추가, service에도 추가Delete를 통해 객체를 분리, 보관하기 위해서 삭제되지 않은 객체와 삭제된 객체를 구분하는 enum 타입과 삭제 상태의 entity를 추가삭제 상태의 entity가 저장될 삭제 상태 객체 저장 repository 추가삭제, 삭제되지 않음 상태 추가 및 삭제 상태 entity, 삭제 상태 겍체 저장 repository의 추가로 인해 생긴 변동사항 수정 (service, repository 내부 메소드 등)MySQL 배웠으니 다시 한 번 복습)ACID (예전 티스토리에 있는 내용 재정리, 요약해서 넣어보자)Atomic : 원자성Consistency : 일관성Isolation : 고립성Durability : 지속성ctrl+alt+o : 불필요 import 제거