repository : persistance layer 라고 하는 DB 와 데이터를 주고 받는 interface 를 정의한 부분
실제 data 를 저장하는 class 가 아니라, data 를 주고 받는 방식인 interface 다.
controller : server 에 들어오는 요청을 받는 부분,
요청에 따라 어떤 작업을 처리하고 어떤 응답을 내려줄지 구현
-> API 설계문서 참고
JUnit 은 네트워크나 DB 가 연결이 되지 않는다고 JUnit 도 동작하지 않으면 안 되기 때문에 Mock 을 사용
외부 시스템에 의존하지 않고 자체 테스트를 실행할 수 있어야 하기 때문에
import static org.springframework.http.RequestEntity.post;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
GET 사용자의 정보 요청 (READ)
POST 사용자 정보 생성 (CREATE)
PUT 사용자 정보 생성 및 수정 (CREATE/UPDATE)
DELETE 사용자 정보 삭제 (DELETE)
HEAD 헤더 데이터 취득
OPTIONS 지원하는 메소드 취득
TRACE 요청메시지 반환
CONNECT 프록시 동작의 터널 접속으로 변경
자주 사용되는 코드 ->
(201) : 성공, 리소스를 생성 성공 (=PUT)
(400) : 요청 오류, 파라미터 에러
(401) : 권한 없음 (인증 실패)
(500) : 서버 내부 에러 (서버 동작 처리 에러)
(503) : 서비스 정지 (점검 등)
멱등성 -> 여러번 요청을 해도 같은 반응을 주는지 ? 데이터가 계속 생성되는 게 아닌지 ?
URI (Uniform Resource Identifier)
인터넷에서 특정 자원을 나타내는 주소 값. 해당 값을 유일 하다. (응답은 달라질 수 있다)
요청 : https://www.fastcampus.co.kr/resource/sample/1
응답 : fastcampus.pdf, fastcampus.docx
URL (Uniform Resource Locator)
인터넷 상에서의 자원, 특정 파일이 어디에 위치하는지 식별하는 주소
요청 : https://www.fastcampus.co.kr/fastcampus.pdf
URL 은 URI 의 하위 개념
CRUD 기능을 나타내는 것은 URI 에 사용하지 않는다.
URI 설계 원칙
하이픈(-)은 URI 가독성을 높이는데 사용한다
밑줄(_) 은 사용하지 않는다.