백엔드 기초 지식은 이리저리 많이 듣기도 하고 어느정도는 안다고 생각했다..ㅎㅎ
근데 프로젝트에서 막상 API 명세서를 작성해보려 하니 아무것도 못하겠어서 책으로 공부를 좀 해보려고 한다.
chapter2 .cs 기초 지식
2.1 네트워크
- 네트워크(network) : 컴퓨터들이 통신망을 통해 서로 그물처럼 연결되어 있는 것
- 인터넷(Internet) : 네트워트가 전 세계적으로 연결된 통신망
- 2.1.1 IP 주소
- IP 주소(Internet Protocol adress) : 네트워크에 연결된 각 컴퓨터를 구분하는 유일한 주소
- 4byte로 이뤄진 고유한 값, 1byte씩 10진수로 나타냄
- ex) 구글 웹사이트의 IP 주소 : 172.217.174.100
- 2.1.2 도메인 네임
- 도메인 네임(domain name) : 사용자가 쉽게 기억할 수 있도록 IP주소를 문자열로 변환한 것
- 2.1.3 DNS
- DNS(Domain Name System) : 도메인과 IP주소의 매핑 정보를 가지고 있는 시스템
- 동작 방식
- 사용자가 도메인 입력
- 웹브라우저가 입력받은 도메인에 해당하는 IP 주소를 DNS서버(네임 서버라고도 함)에 문의
- DNS 서버는 도메인에 해당하는 IP 주소를 찾아 반환
- 웹브라우저가 IP 주소의 컴퓨터에 접속
- DNS 서버의 계층 구조
- 도메인을 계층화하고 각 계층마다 DNS 서버를 따로 둬 운영함
- 각 계층은 '.(닷,dot)'을 기준으로 구분함
- www.google.com(.)의 계층 구조
- 마지막 생략된 닷(.)이 루트 도메인
- com은 최상위 레벨 도메인
- google은 2레벨 도메인
- www는 3레벨 도메인, 서브 도메인(sub-domain)이라고도 부름
- www.google.com이 보낸 요청에 대한 DNS 서버의 IP 주소 조회 과정
- DNS 서버가 루트 DNS 서버에게 www.google.com의 IP 주소 조회 요청을 보냄
- 루트 DNS 서버가 DNS 서에에게 'com' DNS 서버의 IP 주소를 반환해줌
- 받은 'com' DNS 서버의 IP 주소로 DNS 서버가 www.goolge.com의 IP 주소 조회 요청을 보냄
- 'com' DNS 서버가 DNS 서버에게 'google.com' DNS 서버의 IP 주소를 반환해줌
- 받은 'google.com' DNS 서버의 IP 주소로 DNS 서버가 www.goolge.com의 IP 주소 조회 요청을 보냄
- 'google.com' DNS 서버가 DNS 서버에게 초종 IP 주소를 반환해줌 ex)142.250.207.100
- 관련 공부 : DNS 질의 프로세스, DNS 캐시, DNS 보안 등
- 2.1.4 포트와 포트 번호
- IP 주소로 특정 컴퓨터에 요청을 보낼때 해당 컴퓨터에서 여러 프로그램이 실행되고 있으면 포트(port)를 통해 해당 프로그램을 찾을 수 있음
- 세 프로그램을 구동하고 있은 서버를 본다면
- 서버의 IP 주소 192.168.1.1
- HTTP 프로토콜 기반의 웹 서비스 프로그램 (포트번호 80)
- SSH 프로토콜 가반의 외부 접속 프로그램 (포트번호 22)
- FTP 프로토콜 기반의 파일 전송 프로그램 (포트번호20,21)을 구동 중
- 웹 서비스 프로그램에 접속하려면 192.168.1.1 주소의 80번 포트에 접속하면 됨
- 포트 번호는 0~65535번이며 0번과 65535번은 사용하지 않음
- 1~1023번은 '잘 알려진 포트' 번호로 잘 알려진 프로그램의 용도에 따라 이미 할당 되어 있음
- 2.1.5 프로토콜
- 프로토콜 (protocol) : 컴퓨터 네트워트에서 컴퓨터 간에 통신할 수 있도록 정해놓은 규칙과 절차
- 백엔드 개발 관련 주요 프로토콜
- TCP와 IP
- TCP (Transmission Control Protocol) ,IP (Internet Protocol) : 인터넷으로 연결된 컴퓨터들이 서로 정보를 주고 받는 데 사용하는 프로토콜임, 합쳐서 TCP/IP 라고 부름
- 데이터를 패킷(packet)이라는 작은 단위로 나누어 전송함
- IP는 목적지 주소로 패킷을 빠르게 전달만 하는 역할, 순서가 뒤섞이거나 중간 유실 가능성 有
- TCP는 목적지에 도착한 패킷을 순서에 맞게 정렬, 통신 중 유실된 패킷이 있는 경우 송신 측에 재전달 요청을 함
- 인터넷 통신 시 TCP와 IP 프로토콜을 사용해 데이터를 빠르게 전달하면서 신뢰성을 보장함
- HTTP
- HTTP (HyperText Transfer Protocol) : 인터넷에서 클라이언트와 서버 간에 데이터를 주고받기 위해 사용하는 프로토콜, 요청-응답 프로토콜이라고도 함
- HTTP로 처리한 데이터는 TCP와 IP를 거쳐 인터넷 통신망으로 전송
- ex) www.google.com 접속
- 사용자가 'www.google.com'을 을 입력하면 웹 브라우저(클라이언트)가 구글 서버에 '구글 웹 사이트를 사용자에게 보여주기 위한 데이터를 전송해줘' 라는 HTTP 요청을 보냄
- 구글 서버는 웹 사이트를 띄우는 데 필요한 데이터(HTML, CSS, 이미지 파일 등)를 HTTP 응답으로 보냄
- 웹 브라우저가 각 요소를 적절히 조합해 구글 웹 사이트를 사용자 화면에 출력함
- 요청과 응답은 메세지 형태로 주고 받음 : HTTP 메세지(HTTP message)
- request message 요청 메세지 : 클라이언트가 서버로 요청을 보낼 때 사용
- response message 응답 메세지 : 서버가 클라이언트에 응답할 때 사용
- 각 메세지는 시작 행(start line), 헤더(header), 빈 행(empty line), 본문(body)으로 구성됨
- start line : 요청 혹은 응답과 관련된 주요 정보가 들어있음 무엇을 요청했고, 요청에 대한 응답이 성공적으로 이뤄졌는지 여부 등의 정보가 들어있으므로 제일 중요함
- header : 요청 혹은 응답과 관련된 부가 정보가 들어있음
- empty line : 헤더의 끝을 표시하기 위해 빈 행을 넣어 구분함
- body : 통신을 통해 실제로 주고받는 데이터가 들어있음, request의 body에는 요청 시 전달할 데이터가, response의 body에는 응답으로 보내는 데이터가 담김, 생략 가능
- request message의 start line : HTTP 메서드(HTTP method), 요청 URI(Uniform Resource Identifier), HTTP 버전 정보가 들어감
- HTTP 메서드 : 클라이언트가 서버로 보내는 요청의 종류를 나타냄
- ex) GET, POST, PUT, PATCH, DELETE
- 요청 URI : 웹상의 고유한 자원을 식별하는 통합 자원 식별자, 클라이언트로부터 요청을 받아 처리할 서버의 자원을 가리킴
- HTTP 버전 : 해당 메세지에서 사용하는 HTTP버전
- HTTP 메서드 : 클라이언트가 서버로 보내는 요청의 종류를 나타냄
- response message의 start line : HTTP 버전 정보, 상태 코드, 상태 메세지
- 상태 코드 : HTTP 요청이 성공적으로 완료됐는지 여부
- 1XX : 정보를 제공하는 응답
- 2XX : 요청을 성공적으로 처리했다는 응답
- 3XX : 리다이렉션(redirection) 응답(새 URI로 재요청하라는 의미)
- 4XX : 클라이언트 에러 응답
- 5XX : 서버 에러 응답
- 상태 메세지 : 상태 코드 뒤에 붙는 간략한 문구, 상태 코드에 대한 해설 제공
- 상태 코드 : HTTP 요청이 성공적으로 완료됐는지 여부
- HTTPS
- HTTPS(HyperText Transfer Protocol over Secure Socket Layer) : 보안 요소가 강화된 HTTP 프로토콜
- HTTP는 데이터를 전송하는 중간에 탈취 위험이 큼
- HTTPS는 SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security) 암호화 프로토콜을 사용해 데이테를 암호화 함
- HTTPS는 SSL인증서를 사용해 서버의 신원을 확인하므로 클라이언트는 접속하는 웹 사이트의 신뢰성을 판단할 수 있음
- TCP와 IP
- 2.1.6 네트워크 정리
- 웹 브라우저와 DNS의 동작 방식을 이해하면 클라이언트와 서버의 통신 시간을 단축해 웹 페이지의 로딩 시간을 줄이고, 사용자에게 더 빠른 인터넥 경험을 제공할 수 있음
- 추가 공부를 위한 키워드
- 내부 IP, 외부 IP
- 유동 IP, 고정 IP
- DNS, hosts 파일
- 레지스트리(registry), 레지스트라(registrar)
- well-known port, registered port, dynamic port
- 포트 포워딩(port forwarding)
- OSI 7계층, TCP/IP 4계층
'백엔드' 카테고리의 다른 글
API 문서화 swagger (feat. 아는 만큼 보이는 백엔드 개발) (0) | 2024.08.01 |
---|---|
쿠키와 세션 (0) | 2024.06.06 |
My SQL 명령문 (1) | 2024.04.26 |