자바생
article thumbnail
728x90

앞에서 배운 HTTP 메서드들은 클라이언트에서 서버로 데이터를 전송할 때 

각자의 쓰임새에 맞게 사용된다.

 

HTTP 메서드 활용 강의 파트에서는 클라이언트에서 서버로 데이터를 전송할 때,

데이터 전달 방식과 그에 따른 상황에 따라 어떤 메서드가 사용이 되는지 배우게 된다.

 


데이터 전달 방식

데이터 전달 방식에는 크게 2가지가 있다.

 

쿼리 파라미터를 통한 데이터 전송

쿼리 파라미터란 우리가 앞에서 배운 ? 다음에 뭐가 나온 것들이라고 생각하면 된다.

주로 정렬 필터(검색어)에 사용된다고 한다.

아마 이건 우리가 검색창에 어떤 것을 검색하면 검색한 부분을 ? 뒤에 넣어서 데이터를 조회하는게 아닐까한다.

그래서 GET을 사용한다고 말하는 것 같다. 

 

메시지 바디를 통한 데이터 전송

회원 가입, 상품 주문 등 다양한 기능들에 사용이 된다. 

POST, PUT, PATCH를 사용하는 것 보니 아마 메시지 바디를 통하여 데이터를 만드는 것을 아닐까라는 생각이 든다.

 


4가지 상황

 

정적 데이터 조회

정적 데이터란 말 그대로 움직이지 않고 가만히 있는(?) 데이터이다.

즉, 변함이 없다는 말이 아닐까,, 예로 이미지나 정적 텍스트 문서이다.

GET 뒤에 리소스의 path만 입력하면(쿼리 파라미터를 사용하지 않음) 서버에서 해당 데이터를 조회할 수 있다.

그래서 path만으로 데이터를 조회하기 때문에 정적 데이터라고 하지 않을까?

정적 데이터 조회

동적 데이터 조회

동적 데이터는 정적 데이터와는 당연히 반대말이다.

동적 데이터는 우리가 무슨 검색을 하는지에 따라 달라진다. 우리가 검색을 하면 쿼리 파라미터가 입력이 되는데, 입력된 쿼리 파라미터를 기반으로 데이터를 조회하고, 이 결과를 동적으로 생성하기 때문에 동적 데이터라고 한다. 

그래서 동적 데이터를 조회할 때는 쿼리 파라미터를 사용한다.

HTML Form 데이터 전송

해당 파트는 정확히 어느 부분이 이해가 안된다라고 설명은 안되는데, 뭔가 전체적인 틀이 이해가 되질 않는다.

꼭 강의를 다시 들을 때는 이해할거다.

username과 age를 입력하여 전송을 누르면 HTTP 메시지 바디에 username과 age가 전달된다.

그래서 post를 이용하여 데이터를 저장할 때는 /save에 저장하면 되지만, 

만약 get을 이용하게 된다면 /save에서는 하면 안된다.

왜냐하면 GET은 조회에서만 사용하므로, /save뒤에 검색한 쿼리 파라미터가 들어가게 되면 조회가 될 수 없기 때문에 /members에 조회해야한다.

HTML Form 데이터 전송은 GET, POST만 지원한다.

HTTP API 데이터 전송

http api는 데이터를 바로 전송해야할 경우 사용한다. 

 


HTTP API 설계 예시

HTTP API - 컬렉션

POST 기반 등록을 컬렉션이라 한다. 회원 관리로 예를 들어보자.

POST로 데이터를 저장할 때 클라이언트는 등록될 리소스의 URI를 모른다. 

왜? 

우리가 앞에서 POST로 데이터를 저장할 때 /members 를 통해 저장을 하고, 

서버가 /members/100에 저장을 했다. 즉, 서버에서 리소스의 URI를 결정하고 만들어준 것이다.

그리고 서버는 데이터가 어디에 저장되있는지 location을 이용하여 위치를 알려준다.

그래서 컬렉션은 서버가 리소스의 URI를 생성하고, 관리한다. /members를 컬렉션이라 한다.

 

 

HTTP API - 스토어

PUT 기반 등록을 스토어라고 한다. 파일 관리 시스템을 예로 들어보자.

등록부분을 보면 POST와 다른 점이 바로 보인다.

POST는 /members에 POST를 하지만 PUT은 /files에 /{filename} 까지 알아야한다.,

파일을 등록할 때, 파일 이름을 클라이언트가 알고있다는 것이다.

왜 PUT을 쓰냐?

우리가 파일을 넣을 때, 없으면 새로 생성하고, 있으면 덮어버린다.

아무튼 PUT을 이용하여 데이터를 등록할 때는 클라이언트가 리소스 URI를 알고 있다.

그리고 클라이언트가 직접 리소스의 URI를 지정한다. 

그래서 스토어는 클라이언트가 리소스의 URI를 알고 관리한다. /files를 스토어라 함.

 

HTML FORM 사용

앞에서 HTML FORM은 GET, POST만 지원한다.

그래서 당연하게 제약이 많다. delete, put, patch 등을 사용할 수 없음.

 

회원 목록, 등록, 조회하는 것을 보면 신기한 점이 있다.

회원 등록 버튼을 누른다. 그러면 링크가 /members/new라는 곳으로 들어간다. 회원 등록 폼이 나와서

폼에 회원에 대한 정보를 입력한다. 저장을 누르면 이제 여기서 post로 넘어간다.

post에서 /members/new와 /members로 나뉘는 것을 볼 수 있다.

폼에 대한 등록은 /members/new에 사용하는 것을 선호한다고 하심. 

왜냐하면 나중에 서버에서 문제가 있어서 다시 post의 최종 결과를 그냥 회원 등록 폼에 보내야하는 경우가 있는데, 

이 때 URI경로를 변경시키지 않기 위해서이다.

 

회원 전체 조회를 하고 특정 회원을 누르면 회원 상세 조회가 나올 것이다.

조회에서 수정 버튼을 누르면 수정 폼으로 들어간다. /edit 사용

폼 자체를 보는 것은 변경이 일어나는 것이 아니라 폼을 서버로 보낼 때 변경이 되는 것임

그래서 회원 수정 폼에서는 GET을 사용하는 것이다.

그러면 이제 회원 수정 폼에서 수정을 하고 수정 버튼을 누르면 html 폼 데이터가 서버로 전송이 된다.

이 때도 /edit를 사용하냐 안하냐로 나뉘는데 맞추는 것을 선호한다.

삭제하는 경우에는 /delete를 설정한다.

만약 delete 메서드를 사용할 수 있으면 바로 delete를 사용하겠지만 그것이 안된다.

그러면 어쩔 수 없이 /delete라는 control URI를 사용한다.

 

컨트롤 URI

컨트롤 URI는 위에서 사용한 /delete, /new, /edit를 말한다.

이론적으로 URI는 리소스로만 하고, 행위와 관련된 것은 get, post, put, delete로 crud 매핑해서 하면된다라고

맞아떨어지지 않기 때문에 컨트롤 URI가 필요하다.

문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 같은 것이 있기 때문이다.

컨트롤 URI는 동사를 직접 사용한다.

 


 

 

728x90
profile

자바생

@자바생

틀린 부분이 있다면 댓글 부탁드립니다~😀

검색 태그