저번 시간에 다뤘던 GET / POST / PUT / DELETE 기능 기억하는가?
워낙 중요한 내용이다보니 다시 한 번 리마인딩 해보겠다.
GET (읽기: READ)
POST (생성: CREATE)
PUT (수정: UPDATE)
DELETE (삭제: DELETE)
이렇게 CRUD와 연계해서 머리 속에 박아넣는 것이 중요한 것 같다.
그렇다면 이제부터 본격적으로 저 4가지 기능을 코드를 통해 살펴보도록 하자!
1. GET
package com.sparta.week02.domain;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Getter
@NoArgsConstructor // 기본생성자를 대신 생성해줍니다.
@Entity // 테이블임을 나타냅니다.
public class Course extends Timestamped{
// Course 클래스는 Timestamped 클래스를 상속해서 쓴다.
// Timestamped 클래스는 추상 클래스
@Id // ID 값, Primary Key로 사용하겠다는 뜻입니다.
@GeneratedValue(strategy = GenerationType.AUTO) // 자동 증가 명령입니다.
private Long id;
@Column(nullable = false) // 컬럼 값이고 반드시 값이 존재해야 함을 나타냅니다.
private String title;
@Column(nullable = false)
private String tutor;
public Course(String title, String tutor) {
this.title = title;
this.tutor = tutor;
}
public Course(CourseRequestDto requestDto){
this.title = requestDto.getTitle();
this.tutor = requestDto.getTutor();
}
public void update(CourseRequestDto requestDto) {
this.title = requestDto.getTitle();
this.tutor = requestDto.getTutor();
}
}
비교적 최근에 롬복 기능을 사용하면서 올렸던 코드인데 기억할지 모르겠다.
요 녀석은 DTO라고 해서 클래스별로 각 객체값을 전달해주는 매개체 역할을 하는 코드이다.
임의로 수정하면 곤란한 데이터들 (title, tutor)에 접근제한자 (private)를 둬서 따로 관리하고 있고..
앞으로 GET / POST / PUT / DELETE 영역에서 각각 다뤄야 하는 데이터들은..
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@RequiredArgsConstructor
public class CourseRequestDto {
private final String title;
private final String tutor;
}
다음과 같이 별도로 응답 전용 DTO 클래스를 만들어 바로 전에 올린 클래스와 상속관계를 형성해주고 있다.
변수 타입 앞에 final을 선언하여 '너 이거 안가져다가 쓰면 죽어?' 식으로 협박을 하고 있다.
더 좁은 개념으로는 다형성이라고도 하는데..
자바 기본 개념은 따로 페이지를 만들어 포스팅 하도록 하겠으니 우선은 넘어가주기 바란다 앗쎄이!
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RequiredArgsConstructor
@RestController
public class CourseController {
private final CourseRepository courseRepository;
private final CourseService courseService;
@GetMapping("/api/courses")
public List<Course> getCourses() {
return courseRepository.findAll();
// SELECT * FROM COURSES;
}
갑자기???
미안하다. 나도 아직 누비라 여기저기에서 공부한 개념이 보기 좋게 짜여져 있지는 않다.
당분간은 이렇게 생각나는대로 불쑥 불쑥 다루지 않았던 개념을 소개할 거 같다.
자! 각설하고..
웹을 프로그래밍 할 때는 크게 model단 / command단 / controller단 / 클라이언트단
요런 식으로 각각 스코프를 나눠서 제작하는 게 일반적이다.
요놈은 그중에서 Controller단에 해당하는 코드라고 할 수 있다.
어렵게 생각할 거 없다. 그냥 자동응답기라고 보면 된다.
그래서 그게 뭐?
하단에 어노테이션을 선언한 부분이 보이는가?
@GetMapping(...) 요 부분 말이다.
DTO 클래스에 선언된 변수들을 따로 배열로 읽어 (GET / READ) 오려고 하는 것이다.
리턴 값으로 courseRepositoty.findAll() 메서드를 선언해줬는데
SQL로 치면 'SELECT * FROM TABLE' 이나 마찬가지인 부분이다.
API의 GET 메서드를 실행하기 위한 핵심코드는 사실 요 스코프라고 할 수 있다.
이 다음부터는 나머지 POST / PUT / DELETE 방식을 다뤄봐야 하는데..
글이 너무 길어져서 우선 여기서 끊고 다시 뒤 이에서 포스팅을 하도록 하겠다.
미안하고 고맙다..!

'[SPRING_입문] > 개발일지' 카테고리의 다른 글
[2주차] 개발일지 (2-11) API : POST / PUT / DELETE (後) (0) | 2022.06.17 |
---|---|
[2주차] 개발일지 (2-10) ARC (Advanced REST Client) (0) | 2022.06.17 |
[2주차] 개발일지 (2-8) API (0) | 2022.06.17 |
[2주차] 개발일지 (2-7) LOMBOK / DTO (0) | 2022.06.16 |
[2주차] 개발일지 (2-6) JPA 심화과정 (0) | 2022.06.16 |