728x90
Spring Boot 사용을 위한 개념정리
CRUD(Create, Read, Update, Delete)
생성, 조회, 변경, 삭제
대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능을 묶어서 일컫는 말
REST
주소에 명사, 요청 방식에 동사를 사용함으로써 의도를 명확히 드러냄을 의미
주소에 들어가는 명사는 주로 대게 복수형을 사용
동사는 CRUD를 지칭
- Create 생성 - POST
- Read 조회 - GET
- Update 수정 - PUT
- Delete 삭제 - DELETE
REST API - REST 규칙을 지킨 API의 형태
Entity(= Domain)
직역 - 독립체
실제 DB의 테이블과 매칭되는 클래스이자 테이블을 설계하는 클래스
DB에 쓰일 필드와 여러 Entity 간의 연관관계를 정의
클래스의 멤버들은 기본적으로 Private으로 설정
요청과 응답에서 Entity를 직접 사용한다면 테이블 설계를 화면에 노출시키는 것과
다름없어 보안상 문제 발생 가능성 존재
테이블과 직접 매핑되는 Entity 클래스가 변경되면 여러 클래스에 직간접적인 영향을 끼침
-> DTO를 이용
DTO(Data Transfer Object)
DB에서 데이터를 얻어 Service나 Controller등으로 보낼 때 사용하는 Object(객체)
DB에 연결된 클래스가 변경되면 DB 자체가 변형될 가능성이 있기에 DTO를 사용하여 위험성 최소화
로직을 갖고 있지 않은 순수한 데이터 객체이며 Getter / Setter 메서드만을 갖는다.
하지만 DB에서 꺼낸 값을 임의로 변경할 필요가 없기에 DTO Class에는 Setter가 없다.
- RequestDto - 데이터를 운반할 때 필요
Repository(=DAO - Data Access Objext)
- DB에서의 SQL 역할 수행
- 생성 / 삭제 / 조회 단에서 필요
- Entity 클래스에 의해 생성된 DB 에 접근하는 메세드(ex, findAll())등을 사용하기 위한 인터페이스
- CRUD를 어떻게 할 것인지 정의해주는 계층
JPA를 작동시키는 매개체
JpaRepository를 상속받도록 함으로써 기본적인 동작이 가능해짐
->extends JpaRepository<Entity 클래스 명RequestDto, RequestDto>{
}
Repository는 Interface로 생성
- Repository는 Interface를 통해서만 사용 가능
- Interface는 클래스에서 멤버가 빠진, 메소드 모음집
- 이러한 메소드들은 사용자가 직접 작성한 것이 아닌 JPA상에 미리 작성된 것
JPA(Java Persistance API)
SQL을 쓰지 않고 데이터를 생성, 조회, 수정, 삭제할 수 있도록 도오주는 번역기
Service
비즈니스 로직이 이뤄지는 곳
Controller로 부터 전달받은 클라이언트 단의 요청을 처리
Bussiness Logic(비즈니스 로직)
- DB / View들과 대조되는 개념
- 데이터를 생성, 표시, 저장, 변경하는 Service 단의 일
- View영역 = 클라이언트 단, 가공된 데이터를 표시해주는 영역
Controller
- 클라이언트의 요청을 받음
- 요청에 대한 처리는 서비스에게 전담
- 클라이언트에게 응답
- RestController = Controller 중에서도 JSON 형식으로 응답하는 Controller
Annotation 정리
@Entity
//Entity Class에 작성
//Entity 클래스(Domain)라고 선언
@Service
//Service에 작성
//Service라고 선언
@RestController
//Controller에 작성
//'JSON으로 응답하는 Controller다' 라고 선언
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
//Entity Class에 작성
//식별자를 id로 삼겠다.(Primary Key로 삼겠다.)
//id가 생성되는 strategy(전략, 방법)을 자동으로 증가되게 해줘
@Column(nullable = false)
//Entity Class에 작성
//아래 내용이 DB 테이블 상에서 하나의 Column(열)이 된다.
// nullable = false -> 해당 값이 공란이어도 되냐? false(안됨!)
@CreatedDate
//Timestamped에 작성
//만들어진 날짜를 알려주는 것
@LastModifiedDate
//Timestamped에 작성
//마지막으로 수정된 날짜 알려주는 것
@EntityListener(AudutingEntityListener.class)
//Entity를 주시하다가 수정이 일어날 때 자동으로 반응해줘!(MofifiedAt 기능을 해줘!)
@MappedSuperclass
//이 클래스를 상속하면 멤버변수가 있을텐데 그것도 Column으로 인식해줘!
@EnableJpaAuditing
//Application file에 작성
//Timestamped class에서의 내용 반영
@Transactional
//Service 단에 작성
//Service를 이용하여 업데이트된 내용을 반영
@Getter
//일일히 getter를 작성하지 않아도 되게끔 선언
@RequestBody
//Controller의 API메소드 선언에서 API 단에서 넘어오는 데이터를 잘 받기위해 선언
//요청이 날아올 때 Body에 담겨있는 값을 잘 넣어줘
@PathVariable
//경로상에 있는 값을 받아서 내려준다.
//Controller의 API메소 선언에서 {id}처럼 중괄호로 묶여있는 유동적인 값을 잘 받아서 반영
@NoArgsContructor
//메모드 생성할 때 들어가는 매개변수(Arguments / Parameter)가 아예없는-
//기본 생성자를 자동으로 만들어줘
@RequiredArgsConstructor
//final이 붙은 필드의 생성자를 자동생성
//@NonNull인 필드값도!
@AllArgsConstructor
//모든 필드 값을 파라미터로 받는 생성자를 만듦
@NoArgsConstructor
@RequiredArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
@NonNull
private String name;
@NonNull
private String pw;
private int age;
}
-->
User user1 = new User(); // @NoArgsConstructor
User user2 = new User("user2", "1234"); // @RequiredArgsConstructor
User user3 = new User(1L, "user3", "1234", null); // @AllArgsConstructor
- 참고/출처
728x90
'🖥CS' 카테고리의 다른 글
TCP/UDP (0) | 2022.09.27 |
---|---|
1일 1로그 100일 완성 IT지식 - 통신 75~77 (0) | 2022.08.21 |
자바스크립트/파이썬은 어떻게 작동할까? (0) | 2022.08.12 |
1일 1로그 100일 완성 IT지식 - SOFTWARE 27 (0) | 2022.07.31 |
1일 1로그 100일 완성 IT지식 - HARDWARE 12, 13 (0) | 2022.07.24 |