신입 개발자 기술면접 질문 정리 - Java

2022. 12. 14. 16:08신입 개발자 기술면접 질문 정리/Java

✏️ HTTP 메소드 중 GET 방식과 POST 방식의 차이


1. GET은 요청을 전송할 때 필요한 데이터를 Body에 담지 않고, 쿼리스트링으로 전송합니다.

URL의 끝에 ?와 함께 이름과 값으로 쌍을 이루는 파라미터를 쿼리스트링이라고 합니다. 파라미터가 단수가 아닌 복수일 경우에는 앰퍼샌드(&)를 사용하여 각 파리미터를 연결합니다. 쿼리스트링을 사용하게 되면 URL에 조회 조건을 표시하기 때문에 특정페이지를 링크하거나 북마크할 수 있습니다. 쿼리스트링을 포함한 URL의 예시는 아래와 같습니다. 여기서 파라미터명은 nam1, name2이고 각각의 파라미터는 value1, value2라는 갑승로 서버에 요청을 보내게 됩니다.

www.sample.com/resource?name1=value1&name2=value2 

 

- GET 요청은 캐시가 가능하다 : GET을 통해 서버에 리소스 요청을할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환한다. HTTP 헤더에서 cache-control헤더를 통해 캐시 옵션을 지정할 수 있다.

- GET 요청은 브라우저 히스토리에 남는다.

- GET 요청은 북마크 될 수 있다.

- GET 요청은 길이 제한이 있다 : GET 요청의 길이 제한은 표준이 따로 있는건 아니고 브라우저마다 제한이 다르다고 한다.

- GET 요청은 중요한 정보를 다루면 안된다(보안) : GET 요청은 파라미터에 다 노출되어 버리기 때문에 최소한의 보안 의식이라 생각하자.

 

2. POST는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용되는 메서드다. 예를들면 게시판에 게시글을 작성하는 작업 등을 할 때 사용된다. POST는 전송할 데이터를 HTTP메시지 body 부분에 담아서 서버로 보낸다. (body의 타입은 Content-Type 헤더에 따라 결정 된다.) GET에서 URL의 파라미터로 보냈던 name1=value1&name2=value2가 body에 담겨 보내진다. POST로 데이터를 전송할 때 길이 제한이 따로 없어 용량이 큰 데이터를 보낼 때 사용하거나 GET처럼 데이터가 외부적으로 드러나는건 아니라서 보안이 필요한 부분에 많이 사용된다. (하지만 데이터를 암호화하지 않으면 body의 데이터도 보여지는건 마찬가지다/)

POST를 통한 데이터 전송은 보통 HTML Form을 통해 서버로 전송된다.

 

- POST 요청은 캐시되지 않는다.

- POST 요청은 브라우저 히스토리에 남지 않는다.

- POST 요청은 북마크 되지 않는다.

- POST 요청은 데이터 길이에 제한이 없다.

 

3. GET 과 POST의 차이점

- 사용목적 : GET은 서버의 리소스에 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다. DB로 따지면 GET은 SELECT에 가깝고, POST는 CREATE에 가깝다고 보면 된다.

- 요청에 body 유무 : GET은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 bod가 없다. POST는 body에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다.