이 글은 2024년에 진행하는 네이버 부스트캠프 웹모바일 9기 챌린지 프로그램의 일자별 학습 내용을 정리한 글이다.
부스트캠프에서 제공하는 모든 콘텐츠는 외부 유출이 금지되며, 이 글에서는 직접적인 내용을 포함하지 않는다.
진행 과정
- HTTP Request, Response 이해
- TCP/IP 이해
- Echo Server 이해
- Client, Server 이해
- JSON 이해
- 요구사항 분석 및 설계
- 요구사항 구현
학습 내용
HTTP
- HyperText Transfer Protocol
- 하이퍼텍스트 문서를 교환하기 위해 만들어진 통신 규약(Protocol)
- TCP/IP 기반
- 기본적으로 HTML 형태로 통신하며, JSON, XML 등의 형식도 사용 가능
- 기본적으로 Request, Response 구조로 이루어지며, 클라이언트가 서버에 HTTP Request를 보내면 서버는 클라이언트에 HTTP Response를 보내는 방식
HTTP Request
GET /test.html HTTP/1.1
Host: google.com
Accept: text/html
Accept-Encoding: gzip, deflate
Connection: keep-alive
hl=ko&ogbl=0&page=99
- Start Line
- HTTP Method
- GET : 존재하는 자원에 대한 요청
- POST : 새로운 자원 생성
- PUT : 존재하는 자원에 대한 변경
- DELETE : 존재하는 자원에 대한 삭제
- Request target : HTTP Request가 전송되는 목표 주소
- HTTP version : 버전에 따라 메시지 구조나 데이터가 다를 수 있으므로 버전 명시
- HTTP Method
[HTTP Method] [Request target] [HTTP version]
- Headers
- 헤더는 대소문자를 구분하지 않으며, 이름,
:
, 값으로 구성됨 - Request Headers : 요청 내용을 구체화하고 컨텍스트 제공
- Host : 요청하려는 서버 호스트 이름과 포트번호
- User-Agent : 클라이언트 프로그램 정보
- Accept : 클라이언트가 처리 가능한 미디어 타입 종류
- Accept-Encoding : 클라이언트가 처리 가능한 인코딩, 콘텐츠 압축 방식 종류
- Authorization : 서버로 보낼 인증 토큰
- Origin : 서버로 POST 요청을 보낼 때 어느 주소에서 시작되었는지 나타내는 값
- Referer : 바로 직전에 머물렀던 웹 링크 주소
- IF-Modified-Since : 지정된 시간 이후로 변경된 리소스 취득
- General Headers : 메시지 전체에 적용되는 헤더
- Connection : 현재 전송이 완료된 후 네트워크 접속 유지 결정
- Via : 포워드 메시지를 추적하거나, 요청 루프 방지, 요청과 응답 체인에 따라 송신자의 프로토콜 정보 식별
- Entity Headers : 요청 본문에 적용되는 헤더
- Content-Length : 전송되는 콘텐츠의 길이
- 헤더는 대소문자를 구분하지 않으며, 이름,
- Blank Line
- Headers와 Body를 구분하는 빈 줄
- Body
- 전송되는 실제 데이터
HTTP Response
HTTP/1.1 200 OK
Date: Sun, 26 June ...
Server: Apache
Content-Length: 35
Content-Type: text/html
<h1>Hello World</h1>
- Status Line
- HTTP version : 버전 명시
- Status Code : 요청의 성공 또는 실패를 나타내는 숫자 코드
- Status Text : 상태 코드에 대한 설명
[HTTP version] [Status Code] [Status Text]
- Headers
- Request의 헤더와 동일하나 일부 다른 속성이 존재함
- Response Headers
- Access-Control-Allow-Origin : 실행되는 스크립트가 다른 도메인의 자원에 접근할 수 있는 권한 부여
- Set-Cookie : 서버 측에서 클라이언트에 세션 쿠키 정보 설정
- General Headers
- Server : 웹 서버 정보
- Via : 포워드 메시지를 추적하거나, 요청 루프 방지, 요청과 응답 체인에 따라 송신자의 프로토콜 정보 식별
- Entity Headers
- Content-Type : 전송되는 콘텐츠의 미디어 타입
- Content-Length : 전송되는 콘텐츠의 길이
- Date : 현재 날짜
- Last-Modified : 요청한 파일의 최종 수정일
- Blank Line
- Headers와 Body를 구분하는 빈 줄
- Body
- 전송되는 실제 데이터
IP
- Internet Protocol
- 송수신 간의 패킷 단위로 데이터를 교환하는 네트워크에서 정보를 주고받는 데 사용하는 통신 프로토콜
- 10진수로 총 12자리로 이루어진 IPv4와 IPv4의 문제점을 보완하기 위해 16진수로 총 8자리로 이루어진 IPv6이 있음
TCP
- Transmission Control Protocol
- 전송 계층에 위치하면서 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 에러 없이 교환할 수 있게 해주는 프로토콜
- IP와 함께 TCP/IP라는 명칭으로 사용
- 연결지향적으로, 자체적으로 오류를 처리하고 전송 도중에 순서가 뒤바뀐 메시지를 스스로 교정함
UDP
- User Datagram Protocol
- 비연결성이고, 신뢰성이 없으며, 순서화되지 않은 데이터그램 서비스를 제공하는 전송 계층의 통신 프로토콜
- 오류를 처리하거나 순서를 재조합하는 기능 없이 단순히 데이터만 주고받음
- 실시간 응용 및 멀티캐스팅 가능
- 헤더가 단순함
TCP/IP
- Transmission Control Protocol/Internet Protocol
- 컴퓨터 사이의 통신 표준 및 네트워크의 라우팅 및 상호 연결에 대한 자세한 규칙을 지정하는 프로토콜 스위트
- 네트워크에 연결된 여러 호스트 사이의 통신을 허용함
- 각 네트워크는 해당 네트워크의 호스트와 통신하는 다른 네트워크에 연결될 수 있음
TCP/IP 관련 용어
- 클라이언트
- 네트워크 프로세스나 다른 컴퓨터의 데이터, 서비스 또는 자원들을 액세스하는 컴퓨터 또는 프로세스
- 서버
- 네트워크상의 다른 컴퓨터 또는 프로세스가 액세스할 수 있는 데이터, 서비스 또는 자원을 제공하는 컴퓨터 또는 프로세스
- 호스트
- 인터넷 네트워크에 접속되고 다른 인터넷 호스트와 통신할 수 있는 컴퓨터
- 네트워크
- 둘 이상의 호스트 및 이들 사이의 연결 링크 조합
- 패킷
- 호스트와 네트워크 사이의 한 트랜잭션에 대한 제어 정보 및 데이터 블록
- 포트
- 프로세스에 대한 논리적 연결 지점
- 프로토콜
- 물리적 또는 논리적 레벨로 통신을 처리하는 규칙 세트
- 프로세스
- 실행 중인 프로그램
Echo Server
- 클라이언트가 전송해주는 데이터를 그대로 되돌려 전송해주는 기능을 가진 서버
- 전송한 만큼 되돌려받기 때문에 클라이언트가 서버로부터 몇 바이트의 데이터를 수신할 것인지 예상 가능
- 네트워크 통신의 테스트와 디버깅을 위해 사용
JSON
- Javascript 객체 문법을 따르는 문자 기반의 데이터 포맷
- 문자열의 형태로 존재하며 다양한 프로그래밍 환경에서 제공
- 웹 어플리케이션에서 데이터를 전송할 때 일반적으로 사용
문법
- JSON은 키와 값의 쌍으로 이루어지며, 키와 값은
:
로 구분되고 각 데이터는,
로 구분됨 - 문자열, 숫자, boolean, null, 객체, 배열을 포함함
{ key1 : value1 , key2 : value2 }
- 객체는
{}
로 묶고, 배열은[]
로 묶음
{ key1 : { subKey : subValue } , key2 : [ arr1, arr2, arr3 ] }
느낀점
벌써 마지막 미션이다. 아직 각자 개선하기나 그룹 활동 등의 활동이 남아 있지만 문제를 처음부터 분석 설계하고 구현하는 미션은 오늘로 마지막이다. 4주동안 진행하면서 총 12개의 문제를 수행했고 12가지가 넘는 CS를 학습하고 적용했다. 한 달이라는 짧은 시간에 내가 이 정도 분량을 학습할 수 있을 줄은 상상도 못했다. 이런 많은 분량을 전부 소화해냈다고 자신하지는 못하겠지만 그럼에도 최대한 소화하려고 노력했고, 어떻게든 꼭꼭 씹어먹은 결과 체하지는 않은 것 같다. 당장에 학습하고 내 것으로 만드는 것도 중요하지만, 이렇게 배운 것들을 잊어버리지 않고 온전히 흡수하는 것이 더 중요하기 때문에, 그리고 이런 과정 하나하나가 나에게 많은 도움이 됐다고 생각하기 때문에 챌린지가 끝나고 나서도 계속 곱씹어볼 생각이다.
오늘 미션 역시 지난주와 마찬가지로 페어 프로그래밍이었는데, 이전보다 조금 더 체계적으로 진행된 것 같다. 스프레드시트나 피그잼을 사용해 분석 설계 과정을 양식을 정하고 하나의 문서로 온전히 기록하고, 구현을 진행할 때 설계한 내용을 곱씹으면서 어떤 순서대로 구현을 진행해나가야 하는지 결정했다. 중간에 진행이 몇 번 막히긴 했지만 그 때도 서로 논의하면서 나름의 최적안을 찾아서 해결했다. 나는 구현할 때 일단 들이박고 시작하는 스타일인데, 이렇게 체계적으로 설계를 하고 진행하니 조금은 더 깔끔하게 진행되는 것 같았다. 보통은 설계하는 데 꽤 많은 시간을 잡아먹어서 바로 구현하면서 그때그때 수정했었는데, 빠르게 설계하는 과정을 더 많이 연습해봐야 될 것 같다.
'네이버 부스트캠프 > 챌린지' 카테고리의 다른 글
[네이버 부스트캠프 9기 챌린지] 수료 후기 (0) | 2024.08.18 |
---|---|
[네이버 부스트캠프 9기 챌린지] Day 17 학습 정리 (0) | 2024.08.06 |
[네이버 부스트캠프 9기 챌린지] Day 16 학습 정리 (0) | 2024.08.05 |
[네이버 부스트캠프 9기 챌린지] 3주차 회고 (0) | 2024.08.04 |
[네이버 부스트캠프 9기 챌린지] Day 14 학습 정리 (0) | 2024.08.02 |