2018년 즈음에 일본에서 유학하면서 들었던 web 과정 (backend가 java spring) 을 복습하려고 한다.

그 때 수강하면서 제대로 이해하지 못한 내용이 많기 (거의 전부) 때문이다.

부스트 캠프 2019 과정을 참가하면서 node.js를 공부하며 기본을 잡았으니 이번에는 이해하기 편할것이라고 생각한다...

 

아마도?

 


포트

이름 프로토콜 포트 기능
WWW HTTP 80 웹 서비스
Email SMTP/POP3/IMAP 25/110/114 이메일 서비스
FTP FTP 21 파일 전송 서비스
DNS TCP/UDP 53 네임 서비스
NEWS NNTP 119 인터넷 뉴스 서비스

위의 표는 알아두는 편이 좋다. 적어도 HTTP 프로토콜이 80번 포트를 사용하는건 중요하다!

 

AWS 서버에 배포하면서 80번 포트를 뚫어주면 URL (도메인 호스팅을 사용하지 않는다면 IP주소) 로 접근했을 때 배포한 페이지가 바로 나타난다.

 

포트 관련해서 할 이야기는 많이 있다.

 

주요 데이터베이스 포트

  • MySQL (MariaDB) : 3306
  • MongoDB : 27017

이 외에도 VM (가상머신)으로 다른 운영체제를 가상화 한 경우에 포트포워딩 할 때 포트를 지정하기 등등...

 

이 부분은 기회가 되면 이야기 하고 싶다.

 

HTTP

하이퍼 테스트 트랜스퍼 프로토콜 (Hypertext Transfer Protocol)

최신 버전은 HTTP/2 (ver 2)이다. 주로 많이 사용하는 버전은 ver 1.1

 

'Client' 가 'Server'에 요청을 보내면, 'Server'가 'Client'에게 응답을 보내는 방식이다.

 

이 부분이 가장 중요한데, 'Server'가 'Client'에게 먼저 요청을 보낼 수가 없기 때문이다.

이런 이유 중 한 가지는, 요청>응답 이후 연결을 끊기 때문이다.

 

연결을 끊는 것의 장점은, 연결을 계속 유지할 필요가 없기 때문에 더 많은 사용자들의 요청을 해결할 수 있다.

 

그렇다면 'Server'가 'Client'에게 먼저 요청을 보내려면 어떻게 해야 할까?

 

'Socket'이 답이 될 수 있다. 'Socket'은 연결을 계속 유지하기 때문이다.

 

그리고 'Socket'의 단점은, HTTP의 장점과 정확히 상반된다. (연결을 끊는지, 유지하는지에 대한 차이)

 

HTTP의 sequence diagram

HTTP를 수행할 때, request 객체와 response 객체를 자세히 보면 위 정보들이 들어있다.

 

요청 메시지의 요청 메소드에 주의하자. 특히 Get 과 Post를 구분하는것은 정말 중요하다!

차후 Restful API 내용을 포스팅 할 때 자세히 설명하려고 한다. (저도 Restful을 거의 지키지 않습니다...)

 

그리고 응답에 숫자로 된 번호가 있는것에 유의하자. 각 숫자들을 응답의 상태를 의미하는데,

대표적으로 404 (not found) 등이 존재한다.

 

그리고 개발자들의 숙명인 500번 에러...

Cookie

HTTP 연결은 응답이 완료되면 연결이 끊는다. 이 과정에서 클라이언트의 이전 상황을 알 수 가 없다.

이를 무상태 (Stateless)라고 한다.

 

그렇다면... 요청 이후 변경되는 정보를 저장하고 싶으면 어떻게 할까?

 

  • 서버에 정보를 저장한다 (데이터베이스, 메모리, 캐싱)
  • 클라이언트에 정보를 저장한다 (쿠키)

크롬 사용자의 경우 사용자 정보 제거 (Ctrl + Shift + Delete) 를 누르면 쿠키를 제거하는 체크박스가 존재한다.

보통 쿠키에 로그인 여부 등등을 저장하곤 하는데 (나는 주로 JWT를 저장했었다...)

 

이것과 관련해서 처리하기 애매한 보안 이슈들이 발생한다!

 

ex) 로그인 정보를 쿠키에 저장할지??

 

왜나하면 쿠키는 브라우저에서 까볼수 있기 때문이다! (확인 가능하다는 의미)

브라우저 콘솔 창을 열고 document.cookie를 확인해보자...

document.cookie

 

document 객체에 대해서 나중에 기회가 되면 설명하고 싶다.

 

URL

공부를 하다보면 URI 와 URL이란 단어가 존재하는 것을 확인 할 수 있다.

정말 대충 설명하면 URI = URL + URN 이다.

 

일반적으로 URL만 알아두어도...

 

https://developer.mozilla.org/ko/docs/Learn/Common_questions/What_is_a_URL

 

What is a URL?

Hypertext 와 HTTP 함께, URL 은 웹에서 중요한 개념 중 하나이다.  URL은 웹에 게시된 어떤 자원을 찾기 위해서 browsers에 의해 사용되는 메카니즘이다 .

developer.mozilla.org

MDN 문서를 확인하면 문법에 대해 더 자세히 알 수 있다.

 

바쁜 사람들을 위해 대충 설명하면

 

접근 프로토콜 :// IP또는 도메인 : 포트번호 / 문서경로 / 문서이름

 

으로 나타낼 수 있다. (포트번호는 80번을 사용하는 경우 생략가능하다)

 

부스트코스 강의에서는 포트번호 관련 내용이 빠져있어서 추가했다.

 

 


오랫만에 한 복습이였는데, 예전엔 그냥 수강했던 강의의 내용이 지금에서 보니 엄청 중요했구나 라는 것을 느꼇다...

특히 개론에 대한 설명인데도, 본질적인 부분을 꿰뚫고 있는 부분이 있었다. (HTTP의 장 단점)

 

공부는 끝이 없다...

+ Recent posts