CNU_SW_모각코
7주차 모각코 학습 결과 (22.08.19 금 14:00~17:00)
nayeonee__
2022. 8. 20. 10:36
* GET 방식과 POST방식
- HTML 입력 폼을 통해 HTML 요청ㅇ르 보낼 때 주로 GET 방식과 POST방식의 두 종류의 요청 방식을 많이 사용한다.
- 이들 요청방식은 각각 사용하는 용도와 특징이 다르기 때문에 웹 서비스의 기능에 따라 구분해서 사용해야함.
* GET 방식 : 입력 폼의 내용이 요청 행에 포함된다.
: URL의 '?' 문자 뒤에 입력 폼의 내용이 붙는다.
: URL에 입력 폼의 내용이 포함되어 있어서 웹 브라우저의 '이전 페이지'버튼을 누르면 한 단계 앞의 페이지가 표시되어 정적인 웹 페이지처럼 다룰 수 있다.
* POST방식 : 입력 폼의 내용이 메시지 바디에 포함된다.
=> GET방식이 정보를 요청하는 것과 달리, POST 방식은 정보를 저장하거나 변경할 때 사용하며 상대적으로 더 많은 데이터를 전송할 수 있다/
=> GET 방식처럼 입력 폼의 내용이 육안으로 쉽게 노출되지는 않지만, 전송한 메시지를 해석하면 내용이 노출되기 때문에 보안상 안전하다고 할 수 없다.
* 웹 서비스의 사용성을 높여주는 AJAX
: HTTP 메시지로 통신한다는 점에서는 일반적인 요청 방식과 비슷하지만, 요청을 보내는 주체가 브라우저가 아닌 자바스크립트라는 것에 차이가 있다.
: 웹 브라우저가 웹 서버로 요청하는 것이 아니라, 자바스크립트로 작성된 프로그램이 웬 서버와 통신한다. 그리고 응답 결과로 받은 내용에 대해서는 웹 브라우저가 전체 페이지를 다시 그려 화면을 갱신하는 방식이 아니라, 자바 스크립트가 웹 페이지의 특정 부분에만 응답 받은 내용이 갱신되도록 처리한다.
: 사용자 입장에서는 전체 페이지를 다시 조회하지 않아도 되고, 서버의 응답을 바로 받아 상호작용할 수 있으므로 보다 자연스러운 서비스 이용과 보다 향상된 사용자 경험을 느낄 수 있다.
ex) 구글 검색의 입력 필드는 입력 도중에 검색 키워드와 유사한 키워드 후보들을 표시한다.
# 04 세션을 유지하기 위한 쿠키
: HTTP는 기본적으로 요청과 응답하는 과정에서 상태 정보를 저장하지 않아 무상태 혹은 스테이트리스 프로토콜이라고 하며, 상태를 유지하면서 연속된 응답을 해야할 때 쿠키라는 기술을 사용한다.
* 쿠키로 세션을 유지한다
- 쿠키(cookie) : 여러 건의 요청 처리를 동일한 사용자 접속 세션(session)으로 인식할 수 있도록 하는 것
- 쿠키 사용 이유
: HTTP는 무상태 프로토콜이기 때문에 요청과 응답을 한 번씩 주고받은 후에 통신이 끊어진다. 그래서 온라인 쇼핑몰에서 상품을 선택하고 구입 결정을 한 후에 결제화면으로 이동하는 것처럼 여러 단계의 흐름 처리를 할 때는 각 요청이 동일한 사용자가 보낸 것인지 다른 사용자가 보낸 것인지 판단하지 못한다. 이때 쿠키를 사용한다.
* 쿠키가 하는 일
: 웹 브라우저는 응답받은 메시지에 'Set-Cookie:' 라는 문자열이 있는지 확인하고, 만약 있으면 그 내용을 로컬 디스크에 쿠키 형태로 저장한다.
쿠키 정보는 악용될 경우 보안 문제가 발생할 수 있기 때문에 이에 대비한 조치가 필요한데, 기본적을 ㅗ웹 브라우저가 이에 대한 방어책을 자체적으로 구현하고 있다.
ex) 쿠키가 생성된 웹 서버와 동일한 도메인을 사용하는 웹 사이트에마 쿠키가 전송되도록 제한한거나, 이미 저장된 쿠키들이 있다면 유효기간을 확인하고 유효기간이 지난 것은 자동으로 폐기함.
* 쿠키를 사용해서 주고받는 정보
기본적으로 각종 정보는 서버 쪽에 저장하는 것이 원칙이고, 동일한 사용자인지 확인하기 위한 세션ID등의 식별정보만 클라이언트 쿠키로 저장하도록 제한해야 한다.
1. 사용자 계정명과 패스워드를 입력해서 로그인한다.
2. 세션 ID를 발급한 후에 응답 메시지에 포한해서 보낸다.
3. 세션 ID가 일치하므로 로그인된 사용자와 동일한 사용자로 간주한다.
# 05 이메일
: 이메일을 송수신 할 때는 SMTP, POP, IMAP 와 같은 여러 프로토콜이 사용된다.
* 송신과 수신에 서로 다른 프로토콜을 사용한다.
- 메일 발신자는 SMTP(Simple Mail Transfer Protocol)를 사용하여 수신자의 메일 서버로 메일을 보낸다.
- 메일 수신자는 POP(Post Office Protocol)를 사용해서 메일 서버로부터 자신의 메일을 받아온다.
* SMTP 동작방식
: SMTP 프로토콜은 클라이언트 PC가 메일 서버로 메일을 보낼때만 사용되는 것이 아니라, 발신자의 메일 서버에서 수신자의 메일 서버로 메일을 중계할 때도 사용됨.
: HTTP 프로토콜과는 달리 상태를 가지는 스테이트풀(stateful)프로토콜이기 때문에 전송 종료 명령이 보내져야 통신을 종료함
: 송신자, 수신자, 메일 정보를 순차적으로 전송한다.
: 상태를 유지하는 프로토콜이기 때문에 종료 명령이 전달되기 전까지는 통신이 계속 유지된다.
* 이메일을 수신하는 POP
: 메일 서버에 저장된 메일을 확인할 때는 POP프로토콜을 사용함.
: 메일을 수신하는 것 외에도 수신한 메일 건수나 용량 확인, 메일 삭제와 같은 처리에도 POP프로토콜을 사용함.
: POP는 사용자 인증을 먼저 한 후에 메일과 관련된 통신을 시작한다.
* 서버에 메일을 보관하는 IMAP
: IMAP 프로토콜은 클라이언트 PC가 메일을 수신하더라도 메일 서버에서 수신한 메일을 지우지 않고 보관하게 되어있다.
: 이런 방식은 메일 저장 공간이 충분하지 않은 스마트폰 등의 휴대기기에서 많이 활용된다.
# 06 PC끼리 파일 공유하기
: 파일공유는 개인 컴퓨터에 공유 디렉터리를 만든 후, 그 안에 공유할 파일을 저장하여 여러 사람이 함께 활용할 수 있도록 만드는 서비스
* 피어 투 피어(peer to peer) : 네트워크에 연결된 두 대의 컴퓨터가 클라이언트와 서버의 역할을 동시에 할 수 있어서 서로에게 서비스를 주거나 받을 수 있는 통신 방식
* 피어 투 피어 통신
: 개인 컴퓨터에서 많이 사용되는 파일공유는 공유에 참여하는 각각의 컴퓨터가 서로 서버가 되기도 하고 클라이언트가 되기도 하는 피어투피어방식을 사용한다.
특별히 공유를 위한 서버를 별도로 준비할 필요가 없고 공유할 컴퓨터끼리 네트워크에 접속하기만 하면 되기 때문
* 파일 공유 프로토콜은 OS마다 서로 다르다
- 파일 공유 기능은 OS에 기본적으로 탑재
- 윈도우에서는 SMB(Server Message Block) 사용
- 맥 OS X 에서는 AFP(Apple Filing Protocol)사용
- 다만, 최근에는 다른 OS의 프로토콜도 지원할 수 있게 되어 간단한 설정만으로 파일을 서로 공유할 수 있게 됨
# 07 파일을 전송하는 FTP
: 네트워크에 연결된 서버로 파일을 전송하기 위한 프로토콜
* 서버로 파일을 전송한다.
: FTP(File Transfet Protocol)는 파일 전송 프로토콜. 주로 인터넷에 연결된 서버에 파일을 전송할 때 사용
: 명령어를 사용해서 파일을 업로드하거나 다운로드하고, 디렉터리를 만들거나 파일을 삭제하기도함
: 웹 서버로 웹페이지를 전송할 때 자주 사용
* 데이터 커넥션과 컨트롤 커넥션
- 데이터 커넥션 : 파일을 주고 받기위한 접속 형태 / FTP 명령을 보내기위한 접속
- 컨트롤 커넥션 : 명령어를 보내기 위한 접속형태 / 파일 데이터를 주고 받기 위한 접속
# 08 원격지의 컴퓨터 제어하기
: 원격지의 컴퓨터를 제어하는 방법으로는 CLI(Command Line Interface)와 같은 명령 프롬포트를 통해 명령어로 제어하는 방법과 GUI(Graphical User Interface)를 통해 제어하는 방법이 있다.
# 09 Voice over IP와 영상 스트리밍
: 인터넷에서 음성이나 동영상을 보낼 때는 데이터를 압축하거나 분할해서 보낸다.
음성이나 동영상 데이터는 메일고 ㅏ같은 텍스트 형태희 정보에 비해 상대적으로 데이터 용량이 크기 때문에 통신의 신뢰성보다는 전송 속도를 우선하는 UDP를 사용하고, 전송 시에는 데이터를 압축하되 수신된 정보를 바로 재생할 수 있는 스트리밍기술을 사용한다.
* 클라이언트 서버 방식과 조합하기
: 음성이나 동영상을 주고받는 서비스는 중간에 서버를 경유하지 않고 컴퓨터나 스마트폰끼리 직접 통신하는 피어투피어 방식을 사용하는 것이 일반적이지만, 피어투피어 방식은 서로 통신할 상대를 찾는 것이 어렵기 때문에 우선 클라이언트 서버 방식으로 디렉터리 서버에 접속하여 상대를 찾은 다음, 상대방과 통화할 때 피어투피어 방식으로 직접 통신하는 하이브리드 방식도 많이 활용된다.
* 동영상 공유 서비스가 사용하는 프로토콜
: 음성이나 동영상을 처리하는 프로토콜은 아직 널리 보편화 된 것은 아니기 때문에 일부 네트워크 환경에서는 통신이 거부되는 경우가 종종 발생하는데 그래서 유튜브와 같은 동영상 공유 서비스에서는 동영상 프로토콜에서 사용할 데이터를 HTTP 메시지 않에 채워 넣는 기술을 사용한다.
HTTP 라면 차단되는 경우가 거의 없으므로 더 많은 환경에서 차단없이 동영상을 서비스할 수 있다.
< 3장 트랜스포트 계층>
트랜스포트 계층의 대표적인 프로토콜
- TCP : 웹이나 이메일과 같이 데이터가 정확하게 전달되어야하는 통신에 사용
- UDP : VoIP나 동영상 스트리밍과 같이 전송속도가 빨라야 하는 통신에 사용
# 01 트랜스 포트 계층의 역할
: 트랜스포트 계층의 역할은 수신지의 애플리케이션에 데이터를 전달하는 것. 트랜스포트 계층에서 사용하는 대표적인 프로토콜로는 전송의 신뢰성을 중시하는 TCP와 전송속도를 중시하는 UDP가 있다.
* 역할 : 컴퓨터가 받은 데이터를 애플리케이션까지 전달하는것
* 포트번호로 애플리케이션을 구분 : 할당된 포트번호를 참고하여 데이터를 애플리케이션에 전달한다.
* 데이터의 정확한 전달을 중시하는 TCP
- 수신지의 통신환경에 맞춰 데이터 크기를 정하거나 연속된 데이터를 몰아서 보낼 개수를 정한다.
- 도달하지 않은 패킷이 있다면 재전송을 요청한다.
* 데이터의 전송속도를 중시하는 UDP
- 별다른 처리를 하지 않는 대신 전송속도가 빠르다.
# 02 포트번호
: 데이터를 어떤 애플리케이션의 어느 프로토콜로 전달할지에 대해서는 포트번호를 보고 판단한다.
* 포트번호는 컴퓨터 내부의 수신지를 표현한다.
- 인터넷 게층에는 외부로부터 다양한 패킷들이 들어온다.
- 트랜스포트 계층의 프로토콜들은 패킷의 포트 번호를 보고 어느 애플리케이션으로 그 패킷을 전달해야 하는지 알 수 있다.
* 포트번호 범위
- 웰 노운 포트 (well-known ports) : 0~ 1023번 / 서버 프로그램이 수신 대기할 때 사용하는 포트
- 레지스터드 포트(registered ports) : 1024~49151번 / 벤더가 할당받아 사용하는 포트
- 다이나믹 포트(dynamic ports) : 49152~65535번 / 클라이언트 프로그램이 사용하는 포트
: 세 종류는 IANA라는 단체가 관리한다.
* 포트 번호와 IP 어드레스의 조합으로 상대방을 식별한다.
: 서버는 수신 대기를 위해 같은 포트를 사용하는 반면, 접속을 요청한 클라이언트 측은 서로다른 IP 어드레스와 포트번호를 사용한다. 써버는 이러한 클리아언트의 IP어드레스와 포트 번호를 조합하여 클라이언트를 식별할 수 있기 때문에 여러 클라이언트와 통신하는 상황에서도 혼선이 발생하지 않는다.
접속이 완료되면 통신 상대의 IP 어드레스와 포트 번호를 기억해 둔 다음, 누구와 통신하는지를 있는지 식별하는 데 사용한다.
# 03 TCP가 정확하게 데이터를 전달하는 방법
: TCP 에는 데이터를 정확하게 전달하기 위한 다양한 기법이 적용되어 있다.
* TCP 가 하는일
- TCP(Transmission Control Protocol)는 트랜스포트 계층의 포로토콜의 하나로서 웹이나 이메일, FTP와 같이 정확한 데이터 전달이 필요한 통신에 사용된다.
- TCP는 데이터 전송에 신뢰성을 더하기 위해 데이터를 세그먼트(segment)라는 단위로 분할하고, 전송속도를 조정하며, 데이터가 제대로 전달되지 않았을 경우 재전손을 하게 된다.
* 통신 개시부터 통신 종료까지의 흐름
: TCP 통신은 커넥션 연결에서 시작함. 커넥션을 맺는 과정은 3단계로 진행되기 때문에 이것을 3방향 핸드셰이크라고 부른다. 커넥션이 맺어지면 데이터를 전송할 수 있는 상태가 되고, 데이터 전송이 끝나면 커넥션을 끊는다.
- 커넥션 연결하기(통신개시) : 통신을 시작하고 싶을 때 SYN을 ON으로 설정하고, 통신을 끝내고 싶을 때 FIN을 ON으로 설정한다.
- 커넥션 연결끊기(통신종료) : ACK는 데이터가 잘 도착했는지 확인 응답을 하기 위한 플래그이다. ACK가 ON으로 설정된 패킷이 응답으로 돌아오지 않으면 제대로 전달되지 않은 것이라고 판단한다.
* 커넥션을 맺을 때 송신측과 수신측은 원활한 통신을 위해 사전에 일련번호와 최대 세그먼트크기(MSS, Maximum Segment Size)를 서로 합의하고 조율하는 과정을 거치게 된다.
* TCP는 일련번호와 응답확인 번호 정보를 따로 관리하면서 데이터가 제대로 송수신되는지 확인한다.
* 송신 측에서는 일정 시간이 지난 후에도 수신 측으로부터 응답이 오지 않을 경우 송신 실패로 간주하고 최근에 정상적으로 응답을 받은 후 부터 데이터를 재전송한다.
* 응답을 기다리지 않고 연속된 데이터를 몰아서 보내면 전송 속도를 더 빠르게 향상시킬 수 있다. 앞서 보낸 데이터에 대한 응답을 받은 후에 다음 데이터를 보내는 방식은 통신이 정상적으로 완료되기 까지 다소 많은 시간이 소요되기 때문
* 한번에 받을 수 있는 데이터 크기를 통보함
- 수신측은 수신한 데이터를 일시적으로 보관할 수 있는 버퍼(buffer)라는 저장 영역을 가지고 있다. 수신측은 TCP 헤더의 윈도우 사이즈에 이 버퍼의 크기를 설정하고 송신측에 통보함으로써 어느정도의 크기까지 받아낼 수 있는지를 알려주게 된다.
* 흐름제어 (flow control) : 수신측은 도착한 패킷들을 버퍼에 쌓아두는 것과 동시에 이미 버퍼에 쌓인 데이터를 순차적으로 처리하게 된다. 수신측은 응답을 보낼때 윈도우 사이즈를 설정하여 현재 어느 정도 까지 수신할 수 있는지를 수시로 알려주게 된다.
* 버퍼가 가득 차면 윈도우 사이즈가 0으로 설정되고 데이터전송은 일단 멈춘다. 재개할 시점을 알기위해 송신측은 탐색패킷 혹은 윈도우 프로브(window probe)라는 패킷을 수신측에 보내고, 수신 측의 응답을 받아 현재 윈도우 사이즈를 확인한후에 전송 재개 여부를 결정한다.
* 버퍼의 빈 공간이 있더라도 네트워크 경로가 혼잡한 상태라면 통신 속도를 낮춰야 하는 경우도 있다. 이때 인터넷 계층에 헤더 안에 혼잡 플래그가 on으로 설정되고, 송수신 측 양쪽이 ECE플래그와 CWR플래그를 사용해 통신 속도를 조절하게 된다.
- 혼잡플래그는 인터넷 계층이 붙이는 IP헤더 안에 있다.
=====
컴퓨터 내에서 어떻게 파일들이 송수신되는지 조금 알게 되었다.
처음 듣는 단어들이 많아서 자주 보고 학습해야 할 것 같다.