기본적인 CRUD를 구현하고 이에 활용되는 Lombok, DTO 학습하기

 

Lombok

자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메서드 / 생성자 등을

자동생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리이다

 

@Getter : get 메서드 생성

@Setter : set 메서드 생성

@AllArgsConstructor : 전체 멤버변수를 파라미터로 가지는 생성자 생성

@NoArgsConstructor : 기본 생성자 생성

 

이외에도 많은 어노테이션들이 존재한다

 

DTO

read, update 할 때 Course 클래스를 막 쓰지 못하게 하려고

즉 내가 아닌 다른 사람이 변경못하게 하려고

완충재로 활용하기 위해 사용한다

 

API

클라이언트-서버 간의 약속이다

클라이언트가 정한대로 서버에게 요청(Request)을 보내면

서버가 요구사항을 처리하여 응답(Response)을 반환한다

 

REST

주소에 명사, 요청 방식에 동사를 사용함으로써 의도를 명확히 드러냄을 의미한다

 

여기에 쓰이는 동사는 JPA에서 배운 CRUD를 지칭한다

 

GET/courses : 강의 전체 목록 조회 요청

GET/courses/1 : ID가 1번인 강의 조회 요청

POST/courses : 강의 생성 요청

PUT/courses/3 : ID가 3번인 강의 수정 요청

DELETE/courses/2 : ID가 2번인 강의 삭제 요청

 

주의해야할 것

- 주소에 들어가는 명사들은 복수형을 사용한다

- 주소에 동사는 가급적 사용하지 않는다

 

리마인드

Controller

제일 바깥 쪽에서 요청을 받고, 응답을 되돌려주는 역할을 한다

 

Service

중간에서 구체적인 작업 순서를 결정한다

 

Repository

DB와 직접 소통함으로써 자료를 생성하고, 조회하고, 변경하고, 삭제한다

 

그리고 각 레이어 간에는 절대 Entity를 직접 사용하지 않고, DTO 라는 택배상자를 만들어 사용한다

 

3계층 설계하기

Controller

ProductRestController: 관심 상품 관련 컨트롤러

SearchRequestController: 검색 관련 컨트롤러

 

Service

ProductService: 관심 상품 가격 변경

 

Repository

Product: 관심 상품 테이블

ProductRepository: 관심 상품 조회, 저장

ProductRequestDto: 관심 상품 등록하기

ProductMypriceRequestDto: 관심 가격 변경하기

ItemDto: 검색 결과 주고받기

 

사용한 어노테이션 정리

@SpringBootApplication

스프링 부트임을 선언한다

 

@EnableJpaAuditing

시간 자동 변경이 가능하도록 한다

 

@RequiredArgsConstructor

final로 선언된 멤버 변수를 자동으로 생성한다

 

@RestController

JSON으로 데이터를 주고받음을 선언한다

@Controller + @ResponseBody

 

@GetMapping

get 메서드로 들어온 url을 찾는다

 

@PostMapping

post 메서드로 들어온 url을 찾는다

 

@RequestBody

파라미터에 HTTP요청의 본문 body가 그대로 전달되면 (JSON, XML)

HTTP 요청의 body 내용을 통째로 자바 객채로 변환해서

매핑된 메서드 파라미터로 전달해준다

 

@ResponseBody

자바 객체를 HTTP요청의 body내용으로 매핑하여 클라이언트로 전송한다

 

@PathVariable

url에서 각 구분자에 들어오는 값을 처리해야 할때 사용한다

경로의 특정 위치 값이 고정되지 않고 달라질 때 사용한다

 

@RequestParam

사용자가 전달하는 값을 1:1 매핑해준다

보통 파라미터를 통해 값을 전달할 때 자주 사용한다

 

@MappedSuperclass

멤버 변수가 컬럼이 되도록 한다

 

@CreateDate

최초 생성 시점

 

@LastModifiedDate

마지막 변경 시점

 

@Service

서비스임을 선언한다

 

@Component

스프링 Bean을 등록하기 위해 사용한다

 

@Transactional

해당 범위 내 메서드가 트랜잭션이 되도록 보장해준다

 

@Getter

get 함수를 일괄적으로 만들어준다

 

@NoArgsConstructor

기본 생성자를 만들어 준다

 

@Entity

DB 테이블 역할을 한다

 

@GeneratedValue

기본키(PK)값에 대한 생성 전략을 제공한다

ID가 자동으로 생성 및 증가한

 

@Id

기본키(PK) 를 지정한다

 

@Colum(nullable = false)

객체 필드를 테이블의 컬럼에 매핑시켜준다

반드시 값을 가지도록한다

 

@EntityListeners

변경되었을 때 자동으로 기록한다

 

JSONObject, JSONArray

문자열 정보를 JSONObject로 바꾸기

JSONObject rjson = new JSONObject(result);

 

JSONObject에서 items 배열 꺼내기

JSONArray items = rjson.getJSONArray("items");

 

JSONArray로 for문 돌기

for (int i=0; i<items.length(); i++) {
	JSONObject itemJson = (JSONObject) items.get(i);
	System.out.println(itemJson);
}

 

JSONObject에서 String, int 데이터 뽑기

String title = itemJson.getString("title");
int lprice = itemJson.getInt("lprice");