개발자가 되기 위해 순차적으로 갖춰야하는 것을 알려주는 개발자 로드맵은
개발자를 목표로 하는 이들에게 필수적인 참고자료가 되었다.
앞으로 차근차근 로드맵에 나와있는 순서대로 공부를 하고 포스팅을 할 것이다.
대망의 첫번째는 프론트와 백에게 모두 필요한 지식, 'HTTP'이다.
HTTP는 HTML파일(Hyper Text)를 전송(Transfer)하기 위한 컴퓨터끼리 어떻게 HTML파일을 주고 받을지에 대한 약속이자 애플리케이션 레이어의 프로토콜(Protocol)이다.
여기서 모르는 단어, 프로토콜이다. 프로토콜은 무엇일까?
Protocol은 상호 합의된 규칙으로, 데이터 통신을 원활하게 하기 위해 필요한 통신 규칙이다.
HTTP는 신호 송신의 순서, 데이터의 표현법 등을 정한다.
이 HTTP를 쉽게 풀어보면 "나는 이렇게 줄 테니 넌 이렇게 받고
난 너가 준거 이런 식으로 받을 수 있으니 참고해줘"이다.
우리가 URL로 특정 사이트를 접속한다고 생각해보자.
그 후에 일어나는 일을 간단하게 말하자면 아래 두 줄로 정리가 가능하다.
브라우저: 서버님 html 주세요 <요청 request>
서버: html 여기 있습니다 <응답 response>
무슨 말인지 모르겠다면 아래의 추가 설명을 보자.
< request >
그 사이트의 URL을 누름과 동시에 우리의 브라우저는 서버에게 html, css, js같은 파일을 달라고 요청한다.
즉, 해당 사이트를 브라우저에 표현하기 위해 해당 사이트의 자료를 달라고 요청하는 것이다.
< response >
'요청'받은 해당사이트 관련 자료들을 브라우저에게 '응답'으로 전달해주는 것이다.
State(상태) + less(없음)
HTTP에 대한 설명 중 절대 잊어서는 안 될 HTTP의 특징이 바로 Stateless 이다. 문자 그대로 번역하면 State(상태) + less(없음) 을 의미한다.
각각의 HTTP 통신(요청/응답)은 독립적 이기 때문에 과거의 통신(요청/응답)에 대한 내용을 전혀 알지 못한다. 이전의 상태를 전혀 알지 못 한다는 것은 무엇을 의미할까?
예시로 stateful과 stateless의 카페를 들어보자.
steateful할 때는 점원(서버)이 한 번 준 정보를 가지고 있어서, 전에 준 정보를 다시 줄 필요가 없다.
하지만 stateless 통신의 점원은 전에 준 정보를 기억하지 못하므로, 매 통신마다 필요한 정보를 다시 보내줘야 한다.
따라서, 만일 여러번의 통신(요청/응답)의 진행과정에서 연속된 데이터 처리가 필요한 경우(ex. 온라인 쇼핑몰에서 로그인 후 장바구니 기능)를 위해 로그인 토큰 또는 브라우저의 쿠키, 세션, 로컬스토리지 같은 기술이 필요에 의해 만들어졌다.
예로 Youtube를 들어보자.
유튜브 로그인페이지에서 로그인을 한 후, 메인페이지로 오면 실제로 서버는 클라가 로그인을 했다는 것을 기억하지 못한다.
그러므로 내가 로그인한 후 메인페이지에서 영상을 보려고하면, 사용자는 다시 로그인이 되어있지 않은 상태가 되는 것이다.
이러한 번거로움을 방지하기 위해 사용자가 로그인을 성공하면, 서버는 로그인을 성공했다라는 해당 서버 전용 토큰을 사용자에게 보내준다.
그럼 사용자는 그 토큰을 저장소에 저장해두었다가 통신을 할 때 서버에게 같이 보내줌으로써, 중복된 정보를 전송하지 않게 해준다.
채팅같이 내용을 보존해야하는 것은 stateful을 사용한다.
하지만 대부분의 서버에서 stateless를 사용하는 이유는 서버가 많은 데이터를 가지고 있으면 서버가 무거워지고, 그로 인해 요청을 빨리 처리하기 힘들기 때문이다.
이번엔 HTTP request를 자세히 뜯어보자.
Chrome의 [개발자도구]-[검사]-[Network]탭 통해 브라우저와 서버가 통신하는 내용 감청이 가능하다.
아래는 HTTP request 형식이다.
1. Start Line: 요청의 첫번째 줄. 이 시작 줄도 세 부분으로 구성되어있다.
Body: {
"user_email":"wecode@gmail.com"
"user_password": "wecode"
}
아래는 HTTP request의 실제 예시이다. 보면서 이해해보자.
아래는 HTTP response의 형식이다.
(Header 부분의 User-Agent는 request 헤더에만 존재한다. 오타..)
아래는 HTTP response의 실제 예시이다. 보면서 이해해보자.
1.Status Line: 응답의 첫 번째 줄. 첫 줄은 버전 상태코드와 상태 메세지로 구성되어 있다.
2. Headers: 요청의 헤더와 동일. 응답의 추가 정보를 담고 있다.
3.Body: 요청의 Body와 일반적으로 동일
Body: {
"message": "SUCCESS"
"token": "kldiduajsadm@9df0asmzm"
(암호화된 유저의 정보)
}
프론트엔드에서 요청의 의도를 담기 위해선 어떻게 해야할까?
바로 HTTP 요청 메서드(Http Request Methods)를 이용하면 된다. 대표적인 HTTP요청 메서드를 살펴보자.
GET : 자료를 요청
데이터를 서버로부터 받아올 때 사용.
데이터를 받아오기만 할 때 사용된다.
e.g. 장바구니에 담은 제품을 조회한다.
POST : 자료의 생성을 요청
데이터 생성 수정에 사용하므로 대부분 body가 포함되어 보내진다.
e.g. 장바구니에 맘에 드는 상품을 담는다.
PUT(전체), PATCH(일부) : 데이터의 수정을 요청
DELETE : 서버 데이터의 삭제를 요청
e.g. 장바구니에서 제품을 삭제한다.
상태 코드에는 굉장히 많은 종류가 있지만, HTTP 상태 코드는 크게 다섯 부류로 나눌 수 있다.
1. 1XX (조건부 응답) : 요청을 받았으며 작업을 계속한다.
2. 2XX (성공) : 클라이언트의 요청을 성공적으로 처리했음을 가리킨다.
HTTP가 처음 나왔을 땐, 세상은 아직 통신으로 많은 정보들을 나누지 않았다.
그래서 HTTP는 암호화 기능을 가지고 있지 않았다.
하지만 지금은 군사, 금융, 사생활 등 중요한 정보들을 통신으로 주고 받는다.
만약 현재 HTTP를 사용하여 통신한다면 어떻게 될까?
'HTTP를 이용한다'의 위험성을 쉽게 말하자면,
'누군가 우리가 통신을 통해 주고받는 데이터를 들여다볼 수 있다'는 것이다.
이를 막기 위해 HTTPS가 탄생했다. 그렇다면 HTTPS란 무엇일까?
HTTPS = HTTP over Secure socket layer로 HTTP에 데이터 암호화가 추가된 프로토콜로,
안전한 HTTP라고 볼 수 있다.
(Secure Socket Layer(SSL): 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술)
즉, HTTP와 달리 HTTPS로 통신하고 있는 우리를 누가 들여본다고 해도
데이터가 암호화가 되어있어 무슨 내용인지 알 수 없다.
생활코딩 - HTTP
Wikipedia - HTTP 상태코드
MDN Web Docs - HTTP
https://joshua1988.github.io/web-development/http-part1/
https://www.zerocho.com/category/HTTP/post/5b344f3af94472001b17f2da
https://velog.io/@surim014/HTTP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
wecode 2주차 자료