@ : annotation
--> 스프링한테 이런 역할이 있다고 알려줌
2-1 이번주 배울 것
API : 각 용도의 맞게 요구를 하면 돌려주는 창구(서버와 클라이언트 간의 약속)
DB : MySQL, H2은 SQL언어로 작동
JPA : 자바를 위한 번역기. 즉, 스프링은 자바로 작동하고, 데이터베이스는 SQL로 작동하므로 그 사이를 연결해줌
- Repository : JPA를 작동시키는 매개체
DTO : 데이터를 주고 받는 방법 (class entity그대로 사용 안함)
Lombok : 코드 절약 기능
2-2 RDBMS
-H2웹콘솔 설정 : resource->application.properties
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb 복붙
--> 서버키고 브라우저에 localhost:8080/h2-console 치면 h2 웹페이지에서 확인 가능
2-3 SQL 연습하기
테이블 생성하기
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)
);
데이터 삽입
INSERT INTO courses (title, tutor) VALUES
('웹개발의 봄, Spring', '남병관'), ('웹개발 종합반', '이범규');
데이터 조회하기
SELECT * FROM courses;
--> 이러한 명령어들 이제부터 JAVA에서 실행할 거임. 이건 JPA 덕분에 번역 가능
2-4 JPA 시작하기
JPA : JAVA를 이용해서 데이터를 생성,조회,수정, 삭제할 수 있도록 해주는 번역기
MySQL에서 Table은 엑셀 시트 한개, SQL은 조회해오는 기능
Spring에서 Domain(entity)가 Table과 1:1대응 , Repository가 SQL과 1:1대응
--> Table = Domain , SQL = Repository
com.sparta.week02밑에 domian패키지 폴더 안에 Course class, CourseRepository interface생성
Interface : JPA를 사용하는 방법. interface를 통해서 jpa사용 가능
--> class에서 멤버가 빠진, 메소드 모음집
2-6 생성일자, 수정일자
DB 관리에 있어서 생성일자, 수정일자 옵션 추가하는 건 기본적임!!
--> Timestamped
2-7 JPA 심화
CRUD : 정보관리의 기본 기능
--> 생성,조회,변경,삭제
creat & read
repository.save(new Course("프론트엔드의 꽃, 리액트", "임민영"));
Course course = repository.findById(2L).orElseThrow( //orElseThrow : 해당 id가 없을 경우
() -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
update,delete하기 전에 service먼저 알아야 함
스프링의 구조
1. Controller : 가장 바깥, 요청/응답 처리
--> 자동 응답기
2. Service : 중간, 실제 중요한 작동
--> 업데이트 쓰는 용도
3. Repo : 가장 안쪽, DB와 맞닿아 있음
(ex. Repository, Entity)
--> 직접 쿼리를 날림
--> Controller와 Repo사이의 연결고리 : CourseService(update)
2-8 Lombok, DTO
Lombok : 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메서드를 자동생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리
ctrl+alt+s --> compiler --> Annotation Processors --> Enable annotaion 체크
shift2번 --> actions -> plugins --> lombok설치
ex) @Getter , @NoArgsConstructor
ex) final CourseRepository courseRepository로 꼭 필요한 멤버 변수 선언 휘에, @RequiredArgsConstructor lombok선언해주면 따로 생성자 선언 해주지 않아도 됨.
** final을 써주어야 ReqiredArgsConstructor적용
DTO : data transfer object
--> 계층간 데이터를 주고받을 때는 기존의 class를 사용하지 말고 새로운 class를 만들어서 사용하자
--> update함수를 쓸때
--> course class를 직접 사용하는 경우는 저장할때, 값을 찾아서 넘겨줄 때 사용하는 것이 알맞음. 변경할 때는 course class를 사용할 때 적절하지 않음
public Long update(Long id, Course course) 이런 형식으로 id랑 Course class를 이용하였는데 class를 이용해서 변경하는거 좋지 않다.(db가 변경되는 것이기 때문)
ex)
service에서 repository로 갈때
Controller에서 service나 repository로 갈 때,
요청을 받을 때
정보를 물고 다닐 때
2-9 API-GET
API : 클라이언트-서버 간의 약속
--> 클라이언트가 정한대로 서버에게 요청(Request)을 보내면
--> 서버가 요구사항을 처리하여 응답(Response)반환
REST : 주소에 명사, 요청방식에 동사를 사용함으로써 의도를 명확히 드러냄
(restcontroller랑은 아무 관련 없음, 주소와 관련된 rest)
여기서 동사는 JPA에서 배운 CRUD를 의미
(생성:POST,조회:GET,수정:PUT,삭제:DELETE)
*주소에 들어가는 명사들은 복수형 사용 (/courses)
API를 만든다는 것 = 요청에 응답하는 것을 만드는 것, 요청에 응답하는 자동응답기는 Controller!!
일단 우리는 응답을 json형식으로 만들거기때문에 restController를 만들 것임.
ARC(Advanced REST Client) : API를 만들고 나서 테스트 및 기능 확인을 할 수 있게 해주는 툴
2-10 API-POST,PUT-DELETE
POST요청 방법 : 일단 데이터를 전달해주어야함.
(여기는 형식적, 외워야함)
ARC 구성 설명
HEADERS - 요청할때 정보를 같이 보낸다
HEADERS -> Header name : Content-Type
Parameter values : application/json
BODY - 생성할 데이터 전달
json으로 작성
{
"title":"앱개발 종합반",
"tutor":"김건희"
}
summary
https://www.notion.so/teamsparta/Spring-2-58046d5633454406b67905630ab7bc72