들어가기에 앞서
실제 프로젝트 진행했던 코드 내용은 업로드하지 않았습니다
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
: 로깅 관련 Annotation
HTTP(Hyper Text Transfer Protocol)
HTTP Request
메시지 스펙HTTP method
, GET / PUT / POST
등)Header
(User-Agent, Accept
등)Header
에서 줄바꿈 이후 : Request Body
POST /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 Body
HTTP/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 Initializr
WEB / Lombok / H2 Database / Spring Data JPA / Validation
Package
구성Controller
/ Service
/ Entity
/ DTO
/ Type
/ Repository
/ Exception
Package
역할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 제거