⚡️최근 프로젝트에서...
최근 자바와 스프링 기반으로 제작한 숙박 플랫폼 프로젝트가 있습니다.
프로젝트의 데이터 조회는 GET 방식으로, 삽입, 수정, 삭제는 POST 방식으로 하게 되었는데,
이런저런 API들을 사용하다보니 REST API라는 키워드가 계속해서 눈에 띄게 되었습니다.
당시에는 아임포트 API, 카카오 API, 문자 전송 API들이 RESTful 하게 설계 되어있음에도 불구하고
사용에만 급급해서 작동만 되도록 코드를 작성하였는데,
시간이 지난 지금 REST API에 대해 공부하다보니 위 프로젝트에서 REST 아키텍처를 도입해 URL을 설계했다면
훨씬 나은 완성도를 챙길 수 있다는 생각을 합니다.
⚡️REST API란?
REST API란 REST 아키텍처의 제약 조건을 준수하는 API를 뜻합니다.
여기서 REST는 (Representational State Transfer)의 약자로
자원(HTTP URI)과 HTTP Method에 따라 CRUD 기능을 구현하는 것을 의미합니다.
📌 Method
대표적인 HTTP Method에 따른 CRUD 기능은 다음과 같습니다.
HTTP Method | CRUD | 기능 | body 유무 |
POST | CREATE | 생성 | O |
GET | READ | 조회 | X |
PUT | UPDATE | 전체 수정 | O |
PATCH | 일부분 수정 | O | |
DELETE | DELETE | 삭제 | X |
HTTP body같은 경우
GET은 URL에 데이터를 담아 보내고,
DELETE는 삭제 성공 응답만 보내기 때문에 없습니다.
물론 나머지 메소드는 데이터를 body에 담아 전송하게 됩니다.
🔎 form 태그의 method
HTML <form> 태그의 Method 속성에서도 HTTP Method 설정이 가능한데,
저는 프로젝트 시 POST와 GET 방식으로만 모든 기능을 구현했어서 존재 자체를 모르고 있었습니다🤔
하지만 form 태그의 method는 POST와 GET만 지원하기 때문에
아무리 PUT, PATCH, DELETE를 설정해 전송하더라도 GET 방식으로 넘어간다고 합니다.
그럴땐 다음과 같이 input 태그를 이용해서 사용가능하다고 하니 참고해주세요.
<form action="/test" method="POST" >
<input type="hidden" name="_method" value="PUT"/>
<button type="submit"> 수정 </button>
</form>
📌 장단점
🔎 장점
- HTTP 프로토콜의 인프라를 그대로 사용하므로 별도의 인프라를 구출할 필요가 없습니다.
- HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해줍니다.
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능합니다.
- Hypermedia API의 기본을 충실히 지키면서 범용성을 보장합니다.
- REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있습니다.
- 여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소화합니다.
- 서버와 클라이언트의 역할을 명확하게 분리합니다.
🔎 단점
- 표준이 자체가 존재하지 않아 정의가 필요합니다.
- 메소드의 형태가 제한적입니다.
- HTTP Header 정보의 값을 처리해야 하므로 전문성이 요구됩니다.
- 익스플로어같은 구형 브라우저에서 호환이 되지 않습니다.
📌 특징
- Server-Client(서버-클라이언트 구조)
- Stateless(무상태)
- 클라이언트의 정보를 서버에 저장하지 않고 요청에 대한 응답만 수행합니다.
- Cacheable(캐시 처리 가능)
- HTTP가 기본적으로 가지고 있는 캐싱기능을 이용할 수 있습니다.
- Layered System(계층화)
- REST Server는 다중 계층으로 구성할 수 있어 여러 기능을 추가하기에 구조상 유연합니다.
- Uniform Interface(인터페이스 일관성)
- 설계 원칙에 따라 Resource에 대한 조작이 통일되어 있습니다.
- HTTP를 이용하는 모든 플랫폼에 적용 가능해 특정 언어나 기술에 종속되지 않습니다.
📌 설계
REST API 설계 방법에 대해 알아보겠습니다.
- URI에 되도록이면 소문자를 사용합니다.
- 언더바( _ ) 대신 하이푼( - )을 사용합니다.
- 슬래시( / )는 계층을 구분하는데만 사용하고 마지막에는 사용하지 않습니다.
- 파일 확장자는 표현하지 않습니다.
- 행위를 나타내는 동사가 포함되면 안되고, CRUD와 관련된 작업은 Method를 통해 식별 처리합니다.
회원 조회
[X] GET /members/select/{memberID}
[O] GET /members/{memberID}
회원 생성
[X] POST /members/register
[O] POST /members
회원 삭제
[X] POST /members/delete/{memberID}
[O] DELETE /members/{memberID}
'Web' 카테고리의 다른 글
웹프로젝트 문자인증 구현하기 with 네이버 클라우드 플랫폼 (0) | 2022.05.30 |
---|---|
국비 자바 세미 프로젝트 - 숙박 플랫폼 GOING (0) | 2022.03.27 |
CSS 파일 수정 후 적용이 안될 때 (0) | 2022.02.17 |
[맥/이클립스/톰캣] Error: Could not find or load main class, java.lang.ClassNotFoundException 해결법 (0) | 2022.01.22 |
[맥/이클립스/톰캣] the selection cannot be run on any server 오류 (0) | 2022.01.21 |
댓글