JPA
- SQL을 쓰지안고 데이터를 생성, 조회,수정,삭제할수 있도록 해주는 번역기
(스프링을 위해 태어난 녀석)
- Repository는 JPA를 작동시키는 매개체
Gradle
- 라이브러리를 가져올 수 있게 도와줌
- 이걸 빌드해서 실제로 배포할 수 있게 도와줌
RDBMS
- 컴퓨터에 정보를 저장하고 관리하는 기술
- 성능/관리 면에서 매우 고도화된 엑셀과같음
H2
- in-memory DB의 대표주자
- 인메모리DB란 서버가 작동하는 동안에만 내용을 저장하고, 서버가 작동을 멈추면 데이터가 모두 석제되는 데이터베이스를 뜻함 (연습용으로 딱)
MySQL
- MySQL은 서비스를 배포할때 사용할 데이터베이스
CREATE TABLE IF NOT EXISTS courses (
id bigint(5) NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL,
tutor varchar(255) NOT NULL,
PRIMARY KEY (id)
);
- 3개의열로 구성이되있는거고 id , title, tutor어느하나도 비면안된다
- big int는 SQL에서 Long을 가리키는 방법
- AUTO_INCREMENT는 만약 기존의 id가 1이었다면 근데 다음께 들어오면 자동으로 아이디를 2,3,4,5등등자동으로 증가하라는 의미
Interface
- 클래스에서 멤버가빠진 메소드 모음집
- JPA는 인터페이스를 통해서만 사용할수있음
LocalDateTime
- 시간을 나타내는 자바의 자료형 중에 하나
- 골뱅이붙은건 어노테이션이라고함(스프링한테 야 이거 이런역할이있어 알려주는역할)
- @EntityListeners (이녀석을 주시하라는것임)
Entity가 Course같은 테이블임
- AuditingEntityListener (뭔가 수정이일어날때 자동으로 반영해달라는것)
- @MappedSuperclass (이 클래스를 상속을 하면 멤버변수가 있을텐데 그것도 컬럼으로 인식을 해줘라는의미)
- abstract(추상) 는 직접구현이안되고 상속으로만 쓸수 있다는 의미
CRUD
- 정보관리의 기본기능
- 생성, 조회 ,변경, 삭제
스프링의 구조는 3가지영역으로 나눌수있음
- Controller : 가장 바깥부분, 요청/응답을 처리함
- Service :중간부분, 실제 중요한 작동이 많이 일어나는 부분
- Repo : 가장 안쪽부분, DB와 맞닿아 있음
- Update는 Service 부분에 작성함
- @Service : 스프링한테 이거는 service다 라고 알려줌
- final : 이거 이 클래스에 꼭 필요한거야라고 표시하는(한번 값이 부여되면 변형할수없음) 의미
Lombok
- Lombok(이하 롬복)은, 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메소드/생성자 등을 자동생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리임
DTO
- 테이블을 막 건드려도 될까?
= read, update할 때 Course 클래스를 막 써도 될까?
= 내가 아닌 다른 사람이 변경이라도 한다면?? 😱
- 완충재로 활용하는 것이 DTO(Data Transfer Object)입니다.
API
- 클라이언트 - 서버간의 약속
- 클라이언트가 정한대로 서버에게 요청을 보내면 , 서버가 요구사항을 처리하여 응답을 반환합니다.
REST
-
👉 REST란, 주소에 명사, 요청 방식에 동사를 사용함으로써 의도를 명확히 드러냄을 의미함
-
여기에 쓰이는 동사는 우리가 JPA 시간에 배운 CRUD를 지칭함
-
즉 A에 대해 생성(POST)/조회(GET)/수정(PUT)/삭제(DELETE) 요청을 하는 것
EX)
- GET /courses
→ 강의 전체 목록 조회 요청
- GET /courses/1
→ ID가 1번인 녀석 조회 요청
- POST /courses
→ 강의 생성 요청
- PUT /courses/3
→ ID가 3번인 녀석 수정 요청
- DELETE /courses/2
→ ID 2번인 녀석 삭제 요청
주의 사항
- 주소에 들어가는 명사들은 복수형을 사용함
/course
- 주소에 동사는 가급적 사용하지 않음
/accounts/edit
- Spring 포스트 방식에서 데이터를 전달하는 방식은 엄격허게 정해져있다. (이해보다 암기에 가까움)
- Content - Type application/json 으로해줌
(heders 에서 Conten-type , value에서 application/json)