REST API: REST를 기반으로 만들어진 APIREST: Representational State Transfer의 약자로, 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것
- HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
- HTTP Method(POST, GET, PUT, DELETE, PATCH)를 통해
- 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미
HTTP 프로토콜과 CRUD의 관계
POST- Create
- 데이터를 생성하기 위해 사용 (INSERT)
- Body (o)
GET- READ
- 데이터를 조회하기 위해 사용 (SELECT)
- Body (x) - URL로 정보 요청
PUT- Update
- 데이터를 수정하기 위해 사용 (UPDATE)
- Body (o)
DELETE- Delete
- 데이터를 삭제하기 위해 사용 (DELETE)
- Body (x)
PUT과PATCH의 차이
PUT: 리소스의 모든 것을 업데이트
- 보내지지 않은 정보에 대해서는 null값으로 업데이트
PATCH: 리소스의 일부를 업데이트
- 보내지지 않은 정보에 대해 기존 데이터를 유지하는 방식으로 대응
Postman
- 개발한 API를 테스트하고, 테스트 결과를 공유하여 API 개발의 생산성을 높여주는 플랫폼
- /posts 경로로 접근하여 Post DB의 데이터를 CRUD 할 수 있도록 Rest API 작성
- GET
- /posts: Post 테이블의 모든 데이터 보여주기
- /posts/{id}: id(primary key)가 일치하는 Post 데이터 보여주기
- /posts?userId={userId}: userId가 일치하는 Post 데이터 보여주기
- POST
- /posts: 새로운 Post 데이터 생성
- PUT
- /posts/{id}: id가 일치하는 Post 데이터 수정
- DELETE
- /posts/{id}: id가 일치하는 Post 데이터 삭제
이번 프로젝트에서는 jsp를 사용하지 않으므로 jsp 라이브러리 추가, 프로젝트 구조 변경은 하지 않는다.
프로젝트 구조


DB의 데이터에 접근할 수 있도록 PostVo.java를 작성한다.
Post 테이블 구조



PostMapper.xml에 Post 테이블의 전체 데이터를 가져오는 SQL문과 userId 또는 id가 일치하는 데이터를 가져오는 SQL문을 작성한다.
PostMapper.java에 getPostList와 getPostListByUserId, getPostById 메서드를 선언한다.getPostList는 Post 테이블의 전체 데이터를 가져오는 메서드이므로 매개변수가 필요없으며, PostVo 타입의 데이터들을 List에 담아 반환한다.
getPostListByUserId는 userId(Post 테이블이 User 테이블에서 참조하고 있는 Foreign Key) 값에 따라 데이터를 가져오는 메서드이므로 매개변수로 userId가 필요하며, PostVo 타입의 데이터를 List에 담아 반환한다.
getPostById는 id(Post 테이블의 Primary Key) 값에 따라 데이터를 가져오는 메서드이므로 매개변수로 id가 필요하며, id에 따른 Post 데이터는 1개씩 존재하므로 PostVo 타입의 데이터를 반환한다.

PostService.java에 PostMapper의 getPostList와 getPostListByUserId, getPostById 메서드를 호출하여 로직을 수행하는 메서드를 작성한다.
PostController.java에 GET 요청을 처리하는 controller를 작성한다.
@Controller와@RestController의 차이
@Controller: view를 반환@RestController: JSON과 같은 데이터를 반환- 현재 프로젝트에서는 JSON 형식의 데이터를 처리하므로 @RestController annotation을 사용한다.
PostMapper.xml에 새로운 Post 데이터를 추가하는 SQL문을 작성한다.
PostMapper.java에 insertPost 메서드를 선언한다.
insertPost는 Post 테이블에 새로운 데이터를 추가하는 메서드이므로 PostVo 타입의 데이터가 매개변수로 필요하며, 테이블에 insert 된 행의 개수를 int로 반환한다.
int 타입의
insert,update,delete메서드
- SQL의 영향을 받은 행의 개수를 반환
→ 0을 반환한다면 sql문은 성공적으로 실행됐으나 테이블에서 영향을 받은 행이 없다는 의미. 실패했다는 의미가 아니다!- insert는 데이터를 추가하는 것이므로 0을 반환할 수 없다.
→ 0으로 테스트 금지!
MyBatis Query return 값
Select
- 성공: Select문에 해당하는 결과
- 실패: 에러
Insert
- 성공: 1 (여러개인 경우도 1)
- 실패: 에러
Update
- 성공: Update된 행의 개수 (없으면 0)
- 실패: 0
Delete
- 성공: Delete된 행의 개수 (없으면 0)
- 실패: 에러
PostService.java에 PostMapper의 insertPost 메서드를 호출하여 로직을 수행하는 메서드를 작성한다.
PostController.java에 POST 요청을 처리하는 controller를 작성한다.

PostMapper.xml에 id가 일치하는 Post 데이터를 수정하는 SQL문을 작성한다.
PostMapper.java에 updatePost 메서드를 선언한다.
updatePost는 Post 테이블에서 id가 일치하는 데이터를 수정하는 메서드이므로 PostVo 타입의 데이터가 매개변수로 필요하며, 테이블에서 update 된 행의 개수를 int로 반환한다.
PostService.java에 PostMapper의 updatePost 메서드를 호출하여 로직을 수행하는 메서드를 작성한다.
PostController.java에 PUT 요청을 처리하는 controller를 작성한다.
path variable로 넘어온 id를 PostVo 타입의 객체의 id로 설정해준다.
PUT request가 올 때 Body에 담겨온 데이터를 PostVo 타입의 객체에 담아 postService의 updatePost 메서드에 넘겨주어 id로 검색한 Post 데이터를 수정하는 로직을 수행한다.

PostMapper.xml에 id가 일치하는 Post 데이터를 삭제하는 SQL문을 작성한다.
PostMapper.java에 deletePost 메서드를 선언한다.
deletePost는 Post 테이블에서 id가 일치하는 데이터를 삭제하는 메서드이므로 id가 매개변수로 필요하며, 테이블에서 delete 된 행의 개수를 int로 반환한다.
PostService.java에 PostMapper의 deletePost 메서드를 호출하여 로직을 수행하는 메서드를 작성한다.
PostController.java에 DELETE 요청을 처리하는 controller를 작성한다.




Source Code
https://github.com/wooryung/REST_API_Basic.git
정리 너무 잘하셨네요!! 공부하는데 많은 도움이 되었습니다!