프로토콜이란?
서로 간의 통신을 위한 약속 규칙
주고 받을 데이터에 대한 형식을 정의한 것
예를 들어 야구에서 사인을 주고 받는 것
모자를 만지면 -> 번트
코를 만지면 -> 희생플레이
귀를 만지면 -> 배팅하고 달려라
이런식으로 미리 정해놔야 알 수 있지 정해놓지 않고 모자를 만지고 귀를 만지면
나보고 어떻게하라는거야???? 이렇게 되어버린다
그래서 이런 것을 정해놓는 것을 쉽게말해 프로토콜이라고 한다
또 다른 예로는 편지를 예로 들 수 있다
비즈니스 레터에서 정해진 포맷
<헤더>
보내는 사람
직책
주소
날짜
<바디>
내용
순서로 적는 것 또한 규칙이다
편지봉투에서도
보내는사람은 왼쪽 위
받는 사람은 오른쪽 아래
우측상단에는 우표를 붙이기로
사회적인 약속이 있다
이런 것을 우리는 프로토콜이라고 할 수 있다
HTTP란(Hyper Text Transfer Protocal)?
단순하고 읽기 쉽다. - 텍스트 기반의 프로토콜이다
약속과 규칙이라고 부를 수 있다
또한 상태를 유지하지 않는다 stateless -> 클라이언트 정보를 저장하지 않으므로
요청이 몇번와도 같은 요청인지 다른 요청인지 구별하지 않는다
이같은 이유 때문에 보안을 위해 쿠키&세션을 이용해서 클라이언트를 구분할 수 있게 된다
또한 확장이 가능하다 - 커스텀 헤더(header)추가 가능
HTTP 응답 메세지
헤더
바디(내용)
헤더이름: 값
헤더이름은 대소문자구분을 하지 않는다
값은 공백을 무시한다
값은 n개가 나올 수 있다 개수가 여러개 나올 수 있다는 것
클라이언트와 서버가 약속만 하면 원하는 정보를 추가해서 제공할 수 있다
HTTP응답 메세지는 편지와 비슷하다
편지에서도 헤더가 있고 본문내용 바디가 있다
HTTP응답 메세지에도 설명인 헤더가 있고 본 내용인 바디가 있다
HTTP 프로토콜은 쉽게말해 요청 편지를 클라이언트가 서버에게 보내고
서버는 응답편지를 클라이언트에게 보낸다고 생각하면 쉽다
클라이언트 요청편지 -> 서버
서버 응답편지 -> 클라이언트
우리가 브라우저에서 주소(URL)을 입력하고 엔터를 치면
실제로는 HTTP 요청 메세지를 만들어서 전송을 하는 것이다
그러면 서버는 그 응답을 받아서 응답메세지를 만들어서 클라이언트에 주게되고
클라이언트에게 그 내용이 보여지게 되는 것이다
응답메세지를 조금 더 자세하게 보면
HTTP/1.1로 요청했고 상태코드가 200이고 OK는 는 설명이다(Success와 같음)
200번대는 Success
300번대는 Redirect 다른 url요청
400 클라이언트 에러
500 서버 에러
가장 유명한 404 에러는 서버가 아닌 클라이언트가 잘못 요청한 에러
예를 들어 내가 요청할 주소즉 URL을 쳤을 때 요청주소가 틀리게 되면
404에러가 나온다
이 처럼 잘못된 주소를 검색하면 404에러가 나오게 된다
서버는 잘못한 것이 없고 요청을 잘못한 클라이언트 탓이다
이렇게 클라이언트는 올바른 url로 요청을 했는데
서버에서 잘못하게되면 500에러를 보게 된다
클라이언트는 잘못이없다 서버쪽 잘못이다
근본 원인이라는 곳을 읽어보면
NumberFormatException 에러가 나왔다
요청을 잘 해주었는데 예외처리를 제대로 하지 못했기 때문이다
해당 프로그램을 짰던 코드를 열어보면 year month day를 입력하도록 했지만
해당 값을 넣지 않았을 경우 발생하는 에러에 대한 예외처리를 하지 않았기 때문에
500에러가 나오는 것이다
그러니까 항상 예외상황에 따른 처리를 어떻게 할지 생각해서
견고한 코드를 짜서 이러한 상황이 발생하지 않도록 해야한다
다시정리하면
100 클라이언트 - 서버 간의 정보교환이 목적 (잘 쓰여지지 않으니 크게 신경쓰지말자)
200 성공
300 다른 요청해라
400 클라이언트 에러
500 서버 에러
HTTP응답 메세지 형식은
상태라인 (status line)
헤더
빈줄 -- (빈줄이나오면 헤더가 끝난 것)
바디 (응답내용)
이런 순서로 작성된다
이번에는 요청 메세지를 알아보자
요청 메서드에서 대표적으로 GET , POST 2개가 있다
요청 라인
헤더
빈줄 (헤더가 끝났음을 뜻한다)
바디
순서로 나오는데
GET은 리소스를 얻어오기 위해서 사용하는데 쿼리스트링으로 데이터를 보낼 수 있고
바디가 없다
POST같은 경우는 서버에 전송할 데이터를 바디에 담는다
GET이 READ 라면
POST는 Write이다
게시판에 글쓰거나 로그인, 회원가입,파일첨부는 모두 POST
단순히 서버에 있는 리소스를 가져오는 것은 GET이다 즉 읽기만 하는 것
GET은 리소스 URL만 적어주면 되니까 바디가 필요없다
쉽게 말해 리소스 얻어올 때 GET 읽기
서버에 정보를 즉 데이터를 제공해야할 경우 POST 쓰기
포스팅 해서 서버에 넣기 위해서는 POST
단순이 검색하고 보안에 크게 신경쓰지 않아도 될 경우 GET
쿼리스트링으로 보내는 GET방식은 데이터가 소용량 밖에 되지 않는다
? 뒤로 붙이는데 크롬같은경우 7000자 정도 들어간다
원래 데이터를 전송하는 목적과는 거리가 멀다
POST방식은 바디에 담아서 보내게 됨으로 대용량으로 보낼 수 있고
URL에 직접 노출 되지 않으므로 보안에 유리하다
우리가 어떤 제품을 샀는데 친구가 그 제품 나도 좀 보여줘 나도 사고 싶다면?
우리는 보통 URL을 복사해서 공유해준다
그럼 그 URL을 통해서 우리는 그 제품페이지에 들어가서 구매도 할 수 있고 상품에 대한 정보도 살펴볼 수 있다
이것이 가능한 이유가 해당 URL뒤에 쿼리스트링으로 제품에 대한 정보를 같이 넣어주기 때문이다
이런 방식이 GET방식이다
POST 방식은 보안에 유리하다고 했지만 공유에는 불리하다
그럼 정말 보안에 유리할까?
아니다
http에 tls프로토콜을 적용해야한다 그게 우리가 쉽게 봤던 https:// 이다
TLS덕분에 암호화가 가능한 것이다 그렇지 않으면 보안에 취약할 수 있다
이것으로 간단하게 이론을 정리해보았다
이론을 토대로 실습을 하면서 내 것으로 만드는 시간을 가져보자
'개발' 카테고리의 다른 글
포스트맨(Postman) 사용해보기 (0) | 2022.12.15 |
---|---|
GET 방식 POST 방식 실제로 어떻게 나타날까? (0) | 2022.12.15 |
미래의 나를 위해 적는 AWS EC2 배포 설정방법2 (2) | 2022.12.15 |
미래의 나를 위해 적는 AWS EC2 배포 설정방법 (0) | 2022.12.15 |
요청하고 응답받은 값을 랜덤으로 출력하기 랜덤주사위 프로그램 (0) | 2022.12.15 |