기본적인 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");
'항해99 개발일지' 카테고리의 다른 글
[항해99] 16일차 (TIL : 주특기 입문 Spring) (0) | 2022.10.04 |
---|---|
[항해99] 15일차 (TIL : 주특기 입문 Spring) (0) | 2022.10.03 |
[항해99] Spring 입문 (RDBMS, SQL, JPA) (0) | 2022.10.03 |
[항해99] 14일차 (WIL : 주특기 입문 Spring) (0) | 2022.10.02 |
[항해99] 13일차 (TIL : 주특기 입문 Spring) (0) | 2022.10.01 |