GET, POST의 개념과 함께 데이터 흐름에 대해서 설명해주세요.
GET과 POST은 HTTP 프로토콜에서 사용되는 두 가지 주요 메서드입니다. 이 두 메서드는 클라이언트(일반적으로 웹 브라우저)와 서버 간에 정보를 주고받을 때 어떻게 동작할지를 정의합니다.
GET은 URL에 데이터를 포함하여 조회를 위한 요청을 하며, 주로 읽기 작업에 사용됩니다.
POST는 HTTP 요청 바디에 데이터를 담아 데이터를 생성하거나 변경하는 데 사용되며 쓰기 작업에 적합합니다.
GET은 브라우저 주소창에 파라미터가 노출되기 때문에 민감한 정보에 적합하지 않습니다
POST는 요청에 담기는 데이터가 숨겨지기 때문에 GET보다 보안적으로 강력합니다. HTTPS를 통해 데이터를 암호화할 수 있습니다.
두 방식은 클라이언트와 서버 간의 데이터 교환을 위한 HTTP 메서드로 사용되지만, 데이터의 위치와 사용 목적에서 차이가 있습니다.
GET 요청 방식의 데이터 흐름은 앞서 설명과 함께 클라이언트는 URL에 필요한 매개변수를 포함하여 서버에 GET 요청을 보냅니다.서버는 GET 요청의 데이터를 매개변수로 부터 받게 되며, 주로 PathVariable, 또는 QueryString으로 추출하여 필요한 정보를 URL에서 추출하여 비지니스 로직으로 전달하게 됩니다. 이후 서버 내 처리를 통해 응답을 생성합니다.
POST 요청 방식의 데이터 흐름은 GET과 다르게 클라이언트는 요청 본문에 데이터를 담아 서버에 POST 요청을 보냅니다. 서버는 요청을 받아들이고, 요청 본문에서 데이터를 추출하여 처리합니다. 이 데이터는 주로 form 데이터, JSON 등이 포함됩니다. 서버는 JSON을 서버는 해당 데이터를 파싱(변환)하여 활용하게 됩니다. 이를 통해 데이터와 관련된 비지니스 로직을 수행하게 됩니다.
추가질문:
QueryString과 PathVariable의 차이는 무엇인가요?
Query String이란 서버에게 무엇이 필요한지, 혹은 클라이언트에게 무엇이 필요한지 묻는 문자열을 의미, Query String은 /board?id=444 같은 형태로 구성됩니다. 주소 뒤에 ‘?’를 붙여서 표현합니다.‘key=value’형태로 키와 값을 작성하고 여러 개를 보내기 위해 ‘&’를 붙여줍니다.
쿼리 파라미터라 불리는 것은 이 쿼리스트링과 혼용되어 사용되는 것으로 같은 의미다.
Path Variable이란 Query String과 같이 데이터를 넘기는 방법 중의 하나로 경로를 변수처럼 사용하는 것을 의미합니다. Path Variable은 /board/444 같은 형태로 구성됩니다.
Query String은 리소스들을 정렬, 필터링 혹은 페이징하는 곳에 사용합니다. 아래의 예시와 같이 writer가 nick인 게시글 리스트라는 필터링된 리소스들을 가져오는데 사용합니다. # writer가 nick인 게시글들을 가져옵니다. /board/list?writer=nick
Path Variable은 구체적인 리소스를 식별하는데 사용한다. 아래의 예시와 같이 id가 444인 게시글이라는 구체적인 리소스를 식별하는데 사용합니다.
# id가 444인 게시글을 가져옵니다. /board/444
추가 질문 :
파싱은 보통 어떻게 하나요?
서버는 주로 JSON 형태 데이터를 HTTP 요청으로 전달 받는데 이를 프로그래밍 언어에서 사용되는 객체 형태로 변환해야 합니다. 이 객체를 DTO라고 부르며, 이후 서버에서는 이 DTO를 활용하여 비지니스 로직을 수행하거나 다양한 작업을 처리합니다. 계층간에 데이터가 이동 할 때는 DTO 형태로 이동하게 되며, DB와 통신할 때는 Entity 형태로 변환되서 DB에서 CRUD 명령이 실행되어 적용됩니다. 이후 조회 등의 응답 데이터가 있다면 다시 DTO형태로 데이터가 컨트롤러로 이동하며, 다시 JSON 형태로 파싱하여 HTTP 응답 바디에 JSON 형태 데이터가 담겨지고 HTML에서 사용되게 됩니다.