[Spring Boot] CRUD REST API 작성하기

우롱차·2022년 11월 7일
1

Spring Boot

목록 보기
4/7
  • REST API: REST를 기반으로 만들어진 API
  • REST: 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)

    PUTPATCH의 차이

    • PUT: 리소스의 모든 것을 업데이트
      • 보내지지 않은 정보에 대해서는 null값으로 업데이트
    • PATCH: 리소스의 일부를 업데이트
      • 보내지지 않은 정보에 대해 기존 데이터를 유지하는 방식으로 대응

1. Postman 설치

Postman Download

Postman

  • 개발한 API를 테스트하고, 테스트 결과를 공유하여 API 개발의 생산성을 높여주는 플랫폼

2. Spring Initializr에서 프로젝트 만들기

요구사항

  • /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 데이터 삭제

3. application.properties 추가

  • DB 정보와 Mapper.xml 파일 위치를 설정해준다.

4. VO 작성

  • DB의 데이터에 접근할 수 있도록 PostVo.java를 작성한다.

  • Post 테이블 구조

    • User 테이블의 id를 userId로 참조
  • 테이블 구조에 맞게 데이터 타입과 컬럼명을 작성한다.

5. GET 요청 처리하기

1) mapper.xml 작성

  • PostMapper.xml에 Post 테이블의 전체 데이터를 가져오는 SQL문과 userId 또는 id가 일치하는 데이터를 가져오는 SQL문을 작성한다.

2) Mapper 인터페이스 작성

  • PostMapper.javagetPostListgetPostListByUserId, getPostById 메서드를 선언한다.
    • getPostList는 Post 테이블의 전체 데이터를 가져오는 메서드이므로 매개변수가 필요없으며, PostVo 타입의 데이터들을 List에 담아 반환한다.

      • 테이블이 비어있을 때는 null이 아니라 빈 리스트가 반환된다. → null 값으로 데이터 체크 금지! (null은 나올 수가 없는 값)
    • getPostListByUserId는 userId(Post 테이블이 User 테이블에서 참조하고 있는 Foreign Key) 값에 따라 데이터를 가져오는 메서드이므로 매개변수로 userId가 필요하며, PostVo 타입의 데이터를 List에 담아 반환한다.

    • getPostById는 id(Post 테이블의 Primary Key) 값에 따라 데이터를 가져오는 메서드이므로 매개변수로 id가 필요하며, id에 따른 Post 데이터는 1개씩 존재하므로 PostVo 타입의 데이터를 반환한다.

      • 데이터가 존재하지 않으면 null을 반환


3) Service 작성

  • PostService.java에 PostMapper의 getPostListgetPostListByUserId, getPostById 메서드를 호출하여 로직을 수행하는 메서드를 작성한다.

4) Controller 작성

  • PostController.java에 GET 요청을 처리하는 controller를 작성한다.

@Controller@RestController의 차이

  • @Controller: view를 반환
  • @RestController: JSON과 같은 데이터를 반환
  • 현재 프로젝트에서는 JSON 형식의 데이터를 처리하므로 @RestController annotation을 사용한다.

6. POST 요청 처리하기

1) mapper.xml 작성

  • PostMapper.xml에 새로운 Post 데이터를 추가하는 SQL문을 작성한다.

2) Mapper 인터페이스 작성

  • PostMapper.javainsertPost 메서드를 선언한다.

    • 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)
    • 실패: 에러

3) Service 작성

  • PostService.java에 PostMapper의 insertPost 메서드를 호출하여 로직을 수행하는 메서드를 작성한다.

4) Controller 작성

  • PostController.java에 POST 요청을 처리하는 controller를 작성한다.

    • POST request가 올 때 Body에 담겨온 데이터를 PostVo 타입의 객체에 담아 postService의 createPost 메서드에 넘겨주어 새로운 Post를 생성하는 로직을 수행한다.

7. PUT 요청 처리하기

1) mapper.xml 작성

  • PostMapper.xml에 id가 일치하는 Post 데이터를 수정하는 SQL문을 작성한다.

2) Mapper 인터페이스 작성

  • PostMapper.javaupdatePost 메서드를 선언한다.

    • updatePost는 Post 테이블에서 id가 일치하는 데이터를 수정하는 메서드이므로 PostVo 타입의 데이터가 매개변수로 필요하며, 테이블에서 update 된 행의 개수를 int로 반환한다.

3) Service 작성

  • PostService.java에 PostMapper의 updatePost 메서드를 호출하여 로직을 수행하는 메서드를 작성한다.

4) Controller 작성

  • PostController.java에 PUT 요청을 처리하는 controller를 작성한다.

    • path variable로 넘어온 id를 PostVo 타입의 객체의 id로 설정해준다.

    • PUT request가 올 때 Body에 담겨온 데이터를 PostVo 타입의 객체에 담아 postService의 updatePost 메서드에 넘겨주어 id로 검색한 Post 데이터를 수정하는 로직을 수행한다.


8. DELETE 요청 처리하기

1) mapper.xml 작성

  • PostMapper.xml에 id가 일치하는 Post 데이터를 삭제하는 SQL문을 작성한다.

2) Mapper 인터페이스 작성

  • PostMapper.javadeletePost 메서드를 선언한다.

    • deletePost는 Post 테이블에서 id가 일치하는 데이터를 삭제하는 메서드이므로 id가 매개변수로 필요하며, 테이블에서 delete 된 행의 개수를 int로 반환한다.

3) Service 작성

  • PostService.java에 PostMapper의 deletePost 메서드를 호출하여 로직을 수행하는 메서드를 작성한다.

4) Controller 작성

  • PostController.java에 DELETE 요청을 처리하는 controller를 작성한다.

    • path variable로 넘어온 id를 postService의 deletePost 메서드에 넘겨주어 id로 검색한 Post 데이터를 삭제하는 로직을 수행한다.

9. 실행 화면


Source Code
https://github.com/wooryung/REST_API_Basic.git

profile
아직 따끈따끈합니다🍵

3개의 댓글

comment-user-thumbnail
2022년 12월 19일

정리 너무 잘하셨네요!! 공부하는데 많은 도움이 되었습니다!

1개의 답글
comment-user-thumbnail
2023년 5월 13일

안녕하세요 공부하는데 어려움이 있어서요..
혹시 data 파일을 얻을 수 있을까요?

답글 달기