Tech Interview - Network
in Tech Interview on Tech, Java, Os, Db, Network, Javascript
Tech Interview 준비 - Network
📌 HTTP
➜ 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.
클라이언트가 어떠한 서비스 url을 통해서 요청(request)하면 서버에서는 해당 요청사항에 맞는 결과를 클라이언트에게 응답(response)하는 형태로 동작한다.
- TCP/IP를 이용하는 프로토콜
- 비연결성 프로토콜
📌 HTTPS
➜ HTTP에 암호화나 인증 등의 구조를 더한 것으로 HTTP Secure의 줄임말이다.
- TCP와 직접 통신하지 않고 SSL이나 TLS 라는 프로토콜로 대체해서 사용한다.
HTTPS를 사용하기 위해서는 CA에서 인증서를 가져와야 한다.
저는 let’s encrypt를 이용해서 무료 인증서를 발급받았습니다. - let’s encrypt : 사용자에게 무료로 TLS 인증서를 발급해주는 비영리기관
📌 REST
➜ URI를 통해 자원을 표시하고, HTTP METHOD를 이용해서 자원을 행위를 정해주고 결과를 받는 것
- 자원(Resource): URI
- 행위(Verb): HTTP METHOD
- 표현(Representations)
📌 REST API
➜ Rest 기반의 규칙들을 지켜서 설계된 API를 Rest API 혹은 Restful API이라고 한다.
➜ 리소스와 행위를 명시적이고 직관적으로 분리해서 사용하는 것
- URI는 정보의 자원을 표현해야한다.
- 자원의 이름은 동사보다는 명사를 사용한다.
- URI는 자원을 표현하는데 중점을 두어야 하기 때문에 행위에 대한 표현이 들어가면 안된다.
- 자원에 대한 행위는 HTTP METHOD로 표현한다. (GET, POST, PUT DELETE)
GET /users/321 321 ID를 가진 유저 정보를 가져오기 DELETE /users/321 321 ID를 가진 유저 정보를 삭제하기 POST /users 유저를 생성하기 - 슬래시 (/)는 계층 관계를 나타내는데 사용한다.
http://restapi.test.com/users/rooms http://restapi.test.com/users/board - URI 마지막은 슬래시(/)를 사용하면 안된다.
http://restapi.test.com/users/rooms/ [X] http://restapi.test.com/users/rooms [O] - 하이픈 (-)은 URI의 가독성을 높이는데 사용한다.
- 불가피하게 긴 URI를 사용하게 될 경우 하이픈을 이용하여 가독성을 높인다.
- 언더바(_) 혹은 밑줄은 URI에 사용하지 않는다.
- 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 한다.
- URI는 경로에는 소문자가 적합하다.
- 파일 확장자는 URI에 포함하지 않는다.
- API 버전을 관리한다.
- 서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.
📌 HTTP 응답 코드
- 2xx 성공
- 200: 클라이언트의 요청을 정상적으로 수행함.
- 201: 클라이언트에게 생성 작업을 요청 받았고, 생성 작업을 성공함.
- 204: 요청은 성공 했지만 응답할 콘텐츠가 없음.
- 3xx 리다이렉션
- 301: 클라이언트가 요청한 리소스에 대한 URI가 영구적으로 변경되었을 때 사용함.
- 302: 301과 같으나 임시적으로 주소가 바뀌었을 경우 사용함.
- 304: 이전에 방문했을 때의 요청 결과와 다르지 않을 경우 사용함. 캐시된 페이지를 그대로 사용.
- 307: 임시 페이지로 리다이렉트.
- 4xx 클라이언트 오류
- 400: 클라이언트가 올바르지 못한 요청을 보냄.
- 401: 로그인을 하지 않아 페이지를 열 권한이 없음.
- 403: 금지된 페이지, 로그인을 하든 안하든 접근할 수 없음. (관리자 페이지)
- 404: 찾을 수 없는 페이지, 주소를 잘 못 입력했을 때 사용함.
- 403 대신에 사용할 수도 있음.(해커들의 공격을 방지하고자 페이지가 없는 것처럼 위장함)
- 408: 요청 시간이 초과됨.
- 409: 서버가 요청을 처리하는 과정에서 충돌이 발생한 경우. (회원가입 중 중복된 아이디인 경우)
- 410: 영구적으로 사용할 수 없는 페이지.
- 5xx 서버 오류
- 501: 해당 요청을 처리하는 기능이 만들어지지 않음.
- 502: 서버로 가능 요청이 중간에서 유실된 경우.
- 503: 서버가 터졌거나 유지 보수 중
(유지 보수 중일때는 유지 보수중이라는 것을 알려주는 페이지로 전송해주는 것이 좋음) - 504: 서버 게이트웨이에 문제가 생겨 시간 초과가 된 경우.
- 505: HTTP 버전이 달라 요청이 처리할 수 없음.
📌 REST API 장점
- 쉬운 사용
➜ REST API 메시지를 읽는 것 만으로도 메시지가 의도하는 바를 명확하게 파악할 수 있다.
➜ Stateless한 특징 때문에 수행 문맥이 독립적으로 진행됨으로써 이전에 서버(호스트)에서 진행된 내용들에 대해 클라이언트가 알 필요가 없다. 즉, 해당 URI와 원하는 메소드 자체만 독립적으로 이해하면 된다. - Client-Server가 분리된다.
➜ Stateless 한 특징에 따라, 서버는 클라이언트의 문맥을 유지할 필요가 없다. ➜ HTTP 프로토콜만 서비스 하면 되기 때문에 플랫폼과도 독립적이어서 플랫폼 상황에서 서비스를 쉽게 개발할 수 있게 해준다. - 원하는 데이터 표현을 사용할 수 있다.
➜ 헤더 부분에 URI에 대한 처리 메소드를 명시하고, 필요한 실제 데이터는 body부분에 표현하도록 분리시켜서 페이로드 부분을 JSON, XML, YAML 등 원하는 언어로 사용할 수 있다.
📌 REST API 단점
- HTTP 메소드의 한계에 묶인다.
➜ 간단한 수준의 메소드만 지원할 수 있다. - 표준이 없다.
➜ REST API는 API 설계 가이드일 뿐이지 표준이 아니라서 관리가 어렵다. - HTTP 통신 모델에 대해서만 지원한다.
📌 TCP VS UDP
- TCP
- 연결형 서비스로 가상 회선 방식을 제공한다.
- 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다.
- 흐름 제어 및 혼잡 제어
- 높은 신뢰성 보장
- UDP보다 속도가 느리다.
➜ 파일 전송과 같은 연속성보다 신뢰성 있는 전송이 중요할 때에 사용하는 프로토콜
- UDP
- 비연결형 서비스로 데이터그램 방식을 제공한다.
- 정보를 주고받을 때 정보를 보내거나 받는다는 신호 절차를 거치지 않는다.
- UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
- 신뢰성이 낮다.
- TCP보다 속도가 빠르다.
➜ 실시간 서비스와 같이 속도가 빠르고 신뢰성보다는 연속성이 중요한 서비스에 사용하는 프로토콜
📌 브라우저에서 주소창에 url 입력시 어떤일이 일어나는가?
- 브라우저의 주소창에 url 입력
- 브라우저 캐시에서 DNS 레코드를 확인하여 IP주소를 찾음 (없다면 DNS resolver를 통해 IP주소를 알아냄)
- 브라우저가 서버와 TCP 연결을 시작함
- 브라우저가 웹 서버에 HTTP 요청을 보냄
- 서버가 요청을 처리하고 응답을 되돌려보냄
- 브라우저는 서버가 보낸 HTML 내용을 표시
📌 OSI 7 Layer
- Physical layer: 전기적, 기계적 특성을 바탕으로 비트 흐름을 전송한다. 이 계층은 데이터를 전달만 할 뿐, 데이터가 무엇인지 전혀 신경쓰지 않는다. (케이블, 리피터, 허브 등)
- DataLink layer: 안전한 정보 전달을 보장한다. 물리 계층에서 전달 받은 프레임의 오류를 찾고 필요시 재전송을 요청한다.
- Network layer: 오류 없는 패킷을 목적지까지 안전하고 빠르게 전달하는 경로 (라우팅)를 찾는 계층이다.
- Transport layer: 전송을 통해 통신을 활성화하는 계층이다. 패킷의 전송이 유효한지 확인하고 실패한 패킷을 재전송한다. end-to-end 통신의 신뢰성을 보장하고, 오류 검출, 흐름제어, 중복 검사를 수행한다.
- Session layer: 그 전까진 물리적 측면의 통신이었다면 포트를 연결하여 논리적인 통신을 가능케하는 계층이다.
- Presentation layer: 응용 프로그램을 위해 형식상 차이를 갖는 데이터를 인코딩하여 일관된 형태의 데이터를 표현하는 계층이다.
- Application layer: 사용자와 직접 상호작용하는 계층이다. 크롬, 파이어폭스가 대표적 예시이다.
