REST API
// @controller @RequsetMapping 등등 앞에 @골뱅이 붙은 애들을 어노테이션이라고하는데
이것들은 나중에 자세히 설명하고 지금은 rest api의 큰흐름만 먼저 알아보자
REST API는 인터넷 식별자 URI(Uniform Resource Identifier)와 HTTP를 기반으로하고,
브라우저간 호환성이 좋은 JSON형식을 주로 사용
REST는 문서,사진,데이터등의 자원을 이름으로 구분하여
해당 자원에 대한 상태,정보를 주고 받는 것을 의미
또한 HTTP Method(GET,POST,DELETE,PUT,PATCH..)를 이용해서
해당자원에 대한 CRUD 를 적용하는 것을 의미한다.
예를들면 이런 주소가 있다
https://www.springwebpage.com/comment/save
아래 사진은 한 컨트롤러의 일부 모습을 캡쳐한 사진이다.
사용자가 위의 주소로 접속을 하면
컨트롤러는 해당주소와 일치하는 메소드를 실행시키게된다.
경로와 방식까지 일치하는것을 실행한다
경로는 comment/save (실제로 접속할때는 위처럼 http://www.도메인주소/comment/save)
방식은 post

그럼 HTTP method방식(위사진에서는 POST)과 주소가 일치하는 메소드가 실행되는데
위사진에서는 commentSave메소드가 실행되고
원하는 return값을 반환하여
사용자에게 응답을 해주는것이다.
명시해놓은 주소(식별자)를 이용해서
자원을 교환하는 것이 바로 rest이다
다음은
REST API에 사용되는 HTTP Method 에 대해 알아보겠다
HTTP Method

1. GET
리소스를 검색하고, 반환받기 위해 사용되는 메소드이다.
원하는 정보를 서버에 요청할 때 쓰인다.
(일반적으로) 리소스의 위치를 URL에서 쿼리로 표현하기 때문에 RequestBody가 없다.
2. HEAD
서버의 각종 정보를 확인하기 위해 사용되는 메소드이다.
GET과 동일하지만, response에 Body가 없고 response Code와 Head만 응답받는다.
3. POST
요청된 자원을 생성하기 위해 사용되는 메소드이다.
POST로 정보를 전송하면 URL에 파라미터가 나타나지 않으므로 각종 데이터를 전송하는데 쓰인다.
4. PUT
요청된 자원을 수정하기 위해 사용되는 메소드이다.
5. PATCH
요청된 자원을 수정하기 위해 사용되는 메소드라는 점에서 PUT과 같지만,
해당 자원 전체를 수정하는 PUT과는 다르게 PATCH는 해당 자원의 일부 부분을 수정한다.
6. DELETE
요청한 자원을 삭제하기 위해 사용되는 메소드이다.
클라이언트에서 서버의 자원을 삭제할 수 있도록 허가하는 것은 매우 위험하다.
그러므로 현실적으로는 사용될 일이 거의 없고, 대부분의 서버는 이 메소드를 비활성화 시킨다.
7. TRACE
루프백 메시지를 호출하기 위해 테스트용으로 사용되는 메소드이다.
8. OPTION
웹서버에서 지원하는 메소드를 알기위해 사용되는 메소드이다.
9. CONNECT
프락시 기능을 요청할 때 사용되는 메소드이다.
get과 post를 주로 쓰기때문에
이 둘을 더 자세히 보자
👉 Get
GET method는 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메서드입니다.
좀 더 쉽게 말하자면, 데이터를 읽거나(Read), 검색(Retrieve)할 때에 사용되는 method라고 할 수 있겠네요.
GET은 요청을 전송할 때 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링(QueryString)이라고 부릅니다.
e.g.) www.example-url.com/resources?name1=송유현&name2=곽철용
위 예는 앞서 말한 쿼리스트링을 포함한 URL입니다. 파라미터인 name1과 name2를 통해 값을 전달받을 수 있습니다.
만약, 요청 파라미터가 여러 개이면 &로 연결합니다.
그리고 GET 요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않습니다.
따라서 이런 이유로 사용하면 안전하다고 간주되죠. 즉, 데이터의 변형의 위험 없이 사용할 수 있다는 뜻입니다.
✔ GET 요청에 대한 기타 참고 사항
- GET은 불필요한 요청을 제한하기 위해 요청이 캐시 될 수 있습니다.
- 파라미터에 내용이 노출되기 때문에 민감한 데이터를 다룰 때 GET 요청을 사용해서는 안 됩니다.
- GET 요청은 브라우저 기록에 남습니다.
- GET 요청을 북마크에 추가할 수 있습니다.
- GET 요청에는 데이터 길이에 대한 제한이 있습니다.
- Get 요청은 성공 시, 200(Ok) HTTP 응답 코드를 XML, JSON뿐만 아니라 여러 데이터(html, txt 등..), 여러 형식의 데이터와 함께 반환합니다.
- GET 요청은 idempotent 합니다.
지금 당장은 idempotent가 뭔 말인지 몰라도 괜찮습니다. 이따가 Post와 Get의 차이점에서 자세히 다뤄보도록 하죠.
👉 Post
POSTmethod는 리소스를 생성/업데이트하기 위해 서버에 데이터를 보내는 데 사용됩니다.
GET과 달리 전송해야 될 데이터를 HTTP 메시지의 Body에 담아서 전송합니다. 그리고 그 Body의 타입은 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시 따라 결정됩니다. (POST로 요청을 보낼 때는 해야 합니다.)
HTTP 메시지의 Body는 길이의 제한 없이 데이터를 전송할 수 있습니다. 그래서 POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있는 이유도 이 때문입니다.
이처럼 POST는 데이터가 Body로 전송되고, 내용이 눈에 보이지 않아 GET보다 보안적인 면에서 안전하다고 생각할 수 있지만, POST 요청도 크롬의 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우에는 반드시 암호화해 전송해야 합니다.
✔ Post 요청에 대한 기타 참고 사항
- POST 요청은 캐시 되지 않습니다.
- POST 요청은 브라우저 기록에 남아 있지 않습니다.
- POST 요청을 북마크에 추가할 수 없습니다.
- POST 요청에는 데이터 길이에 대한 제한이 없습니다.
- Post 요청 중 자원 생성은 201(Created) HTTP 응답 코드를 반환합니다.
- Post 요청은 idempotent하지 않습니다.
👌 Get과 Post의 차이점 정리

Get과 Post의 리소스 전달 방식의 차이를 표현한 사진
✔ GET VS POST
| 캐시 | ⭕️ | ❌ |
| 브라우저 기록 | ⭕️ | ❌ |
| 북마크 추가 | ⭕️ | ❌ |
| 데이터 길이 제한 | ⭕️ | ❌ |
| HTTP 응답 코드 | 200(Ok) | 201(Created) |
| 언제 주로 사용하는가? | 리소스 요청 | 리소스 생성 |
| 리소스 전달 방식 | 쿼리스트링 | HTTP Body |
| idempotent | ⭕️ | ❌ |
👌 여기서 잠깐!! idempotent란?
아까부터 idempotent란 단어가 자꾸 보이는데, 대체 이 단어가 뭐길래 이렇게 쓰는지 한 번 알아나 봅시다.
idempotent는 멱등법칙(冪等法則) 또는 멱등성(冪等性)이란 뜻으로, 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.
출처 : 위키백과
너무 어렵게 보지 않으셔도 됩니다. 우리가 집중해야 할 부분은 딱 한 줄이기 때문입니다.
👉 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질 👈
즉, 멱등이라는 것은 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타나야 합니다.
GET은 Idempotent, POST는 Non-idempotent 하게 설계되었습니다.
여기서 GET이 Idempotent 하도록 설계되었다는 것은 GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다는 것을 의미합니다. 이에 따라 GET은 설계 원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 Idempotent 하기 때문에 주로 조회를 할 때에 사용해야 합니다. 예를 들어, 브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등 조회를 하는 행위는 GET으로 요청하게 됩니다.
반대로 POST는 Non-idempotent 하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있습니다.
이에 따라 POST는 서버의 상태나 데이터를 변경시킬 때 사용됩니다. 게시글을 쓰면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청을 하게 되면 서버의 무언가는 변경되도록 사용됩니다.
이처럼 POST는 생성, 수정, 삭제에 사용할 수 있지만, 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE 가 더 용도에 맞는 메서드라고 할 수 있습니다.
'백엔드 > 🍃 SpringBoot' 카테고리의 다른 글
| SpringBoot | ModelAndView에 데이터얹기 + Thymeleaf (0) | 2023.04.15 |
|---|---|
| SpringBoot | Controller - PageController (0) | 2023.03.27 |
| SpringBoot | MVC패턴 (0) | 2023.03.21 |
| SpringBoot | 세팅(2) (0) | 2023.03.05 |
| SpringBoot | 세팅(1) (0) | 2023.03.05 |