티스토리 뷰
들어가기 전에
네이티브 애플리케이션(Native Application) vs. 웹 애플리케이션(Web Application)
네이티브 애플리케이션은 흔히 말하는 '앱'으로, 특정 플랫폼을 위해 만들어진 응용 프로그램을 말한다.
따라서 네이티브 앱은 Apple iOS, Android OS, Windows와 같은 실행환경에 종속된다.
웹 애플리케이션은 웹 브라우저를 통해 접근이 가능한 응용 프로그램이다.
정적인 웹사이트의 한계를 벗어나 동적인 상호작용을 하는 애플리케이션이라고 할 수 있다.
네이티브 앱 | 웹 앱 | |
개발 언어 | 네이티브 전용 | 웹 전용 |
디바이스 고유기능 액세스 | 높음 | 낮음 |
화려한 UI | 높음 | 낮음 |
업그레이드 유연성 | 낮음(반드시 앱스토어를 거침) | 중간(일반적으로 앱스토어를 거침) |
구현 난이도 | 높음 | 중간 |
네이티브 앱과 웹 앱의 장단점은 아래와 같다.
네이티브 애플리케이션 | 웹 애플리케이션 | |
장점 | 속도가 빠르다. 설치된 기기의 리소스에 접근이 쉽다(GPS 등). 인터넷 없이 사용 가능하다. 웹 애플리케이션에 비해 안전하다(앱스토어에서 거름). |
설치나 다운로드가 필요 없다. 업데이트 유연성이 높다. 개발 난이도가 낮다. 애플리케이션 승인이 필요 없다. |
단점 | 개발 난이도와 비용이 높다(멀티 플랫폼). 업데이트 유연성이 낮다. |
인터넷이 없으면 사용이 불가능하다. 속도가 느리다. 앱스토어에서 관리되지 않아 접근성이 낮다. 보안상 위험에 노출되기가 쉽다. |
TCP(Transmission Control Protocol) / IP(Internet Protocol)
인터넷 프로토콜 슈트(Internet Protocol Suite)는 인터넷에서 프로그램들이 서로 정보를 주고받을 때 쓰이는
통신규약(프로토콜 - Protocol)의 모음이다. TCP/IP는 그 기반이 되는 프로토콜이며, 두 기기간의 데이터 전송을 담당한다.
- 인터넷?
- LAN(Local Area Network) - 라우터 등 좁은 범위의 지역 네트워크
- WAN(Wide Area Network) - 광대한 지역 단위의 네트워크
- 이더넷(Ethernet) - 프로토콜을 이용해 장치들을 연결하는 통신 구성 체계
- 인터네트워킹(Internetworking) - 여러 네트워크를 연결. 전 세계적 인터네트워킹이 인터넷(The Internet)
아래 그림에서 보듯이 TCP/IP는 크게 네 개의 계층으로 되어있고, OSI 7 계층 모델과 맵핑이 가능하다.
각 계층별 이름과 특징은 아래와 같다.
계층 이름 | 주요 프로토콜 | 기능 | |
4계층 | 응용 계층 | HTTP, DNS, FTP, ... | 애플리케이션에 맞추어 통신한다. |
3계층 | 전송 계층 | TCP, UDP, ... | IP와 애플리케이션을 중재해 데이터를 확실하게 전달한다. |
2계층 | 인터넷 계층 | IP, ICMP, ARP, RARP | 네트워크 주소를 기반으로 데이터를 전송한다. |
1계층 | 네트워크 인터페이스 계층 | Ethernet, wifi, ... | 장치를 물리적으로 네트워크에 연결, 기기간 전송이 가능하게 한다. |
데이터가 프로토콜을 따라 상대에게 도달하는 흐름은 아래와 같으며,
여기서 TCP/IP 프로토콜의 기능은 패킷(Packet)을 생성하고 정보를 교환하는 것이다.
참고로 패킷이란 송/수신자의 주소와 전달하는 정보가 묶인 작은 단위를 말한다
추가로 주소는 IP 주소(Internet Protocol Address)와 MAC 주소(Media Access Control Address)로 나뉘는데,
각각에 대해 먼저 간단하게 살펴보자.
- IP 주소
- TCP/IP 구조에서 IP 통신 시 장치를 식별하기 위해 사용되는 네트워크 고유 주소이며, 전화번호와 비슷하다.
- LAN 내부에서 사용되는 Private IP 주소와 인터넷에서 사용되는 Public IP 주소가 있다.
- IPv4(Internet Protocol version 4)와 IPv6 두 가지 체계가 있다.
- MAC 주소
- 하드웨어 주소(Hardware Address), 물리적 주소(Physical Address)라고 불리며, 시리얼 넘버와 비슷하다.
- 임시적으로 할당되는 IP 주소와 달리, MAC 주소는 장치에 부여된 고유한 식별번호이다.
- 직접적으로 연결된 노드에게 데이터를 전달할 때 사용된다.
- MAC 주소와 IP 주소를 대응시킴으로써 장치를 인터넷에 연결할 수 있다(ARP*).
*ARP(Address Resolution Protocol) - 주소 결정 프로토콜. MAC 주소와 IP 주소 연결에 사용
- 패킷, 패킷 교환
- 패킷(Packet) - 네트워크 전송의 용량 단위
- 회선 교환(Circuit Switching) 방식의 단점을 극복하기 위해 패킷 교환(Packet Switching) 방식 탄생
- 하나의 패킷은 헤더(데이터의 정보, 보내는 곳, 최종 목적지)와 페이로드(전송되는 데이터)로 이루어짐
- 패킷으로 작게 분할해 전송하더라도 도착한 곳에서 복원 가능
IP 주소의 구조
아직도 많이 사용되고 있는 IPv4 주소는 OOO.OOO.OOO.OOO 형식으로 되어있다.
세 자리의 10진수 네 칸으로 되어있는 듯 보이지만 실제로는 8자리 2진수(8비트 필드) 네 칸으로 구성되어 있는데,
이를 4개의 옥텟으로 이루어져 있다고 표현하기도 한다.
또한 IP 주소는 네트워크부와 호스트부로 나뉜다. 네트워크부는 현재 사용하는 네트워크를,
호스트부는 그 네트워크 안의 특정 컴퓨터를 나타내는 정보이다.
계속해서 IP 주소에서 네트워크부가 어디까지인지를 나타내는 것을 서브넷 마스크라고 부르며
말 그대로 네트워크를 작게 쪼갤 때 사용한다.
- IP 주소: 192.168.123.132
- 서브넷 마스크: 255.255.255.0
- 네트워크 주소: 192.168.1123.0
- 브로드캐스트 주소: 192.168.123.255
IP 주소의 할당과 관리
IP 주소는 MAC 주소와 달리 호스트부를 변경해 가면서 할당된다. 이때 아래의 규칙을 따른다.
- 호스트부가 0만으로 이루어진 것은 네트워크 자체의 주소이다.
- 호스트부가 1만으로 이루어진(255) 것은 ARP를 사용하기 위해 남겨둔다.
따라서 할당 가능한 주소는 1부터 254까지의 254개가 된다.
IP 프로토콜의 한계
IP 프로토콜은 IP 주소를 통해 정확한 출발지와 목적지를 파악할 수 있지만, 크게 두 가지의 단점이 존재한다.
- 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 파악할 방법이 없어 패킷을 그대로 전송한다.
- 비신뢰성 - 데이터의 소실: 패킷이 전달되던 중 소실되어도 파악할 방법이 없다.
- 비신뢰성 - 순서를 장담하지 못함: 의도하지 않은 순서대로 패킷이 도착할 가능성이 있다.
추가로 한 IP에서 여러 애플리케이션이 실행 중일 때 특정할 방법이 없다.
위와 같은 단점을 극복하기 위해 등장한 것이 TCP와 UDP이다. 계속해서 알아보자.
TCP(Transmission Control Protocol) / UDP(User Datagram Protocol)
TCP와 UDP는 둘 다 IP 프로토콜을 기반으로 구현되어 있으나, 다른 특징을 가진 프로토콜이다.
공통점을 먼저 보기 위해 위에 작성한 표를 가져오자.
계층 이름 | 주요 프로토콜 | 기능 | |
4계층 | 응용 계층 | HTTP, DNS, FTP, ... | 애플리케이션에 맞추어 통신한다. |
3계층 | 전송 계층 | TCP, UDP, ... | IP와 애플리케이션을 중재해 데이터를 확실하게 전달한다. |
2계층 | 인터넷 계층 | IP, ICMP, ARP, RARP | 네트워크 주소를 기반으로 데이터를 전송한다. |
1계층 | 네트워크 인터페이스 계층 | Ethernet, wifi, ... | 장치를 물리적으로 네트워크에 연결, 기기간 전송이 가능하게 한다. |
3계층인 전송 계층에 TCP와 UDP가 위치하는 것을 볼 수 있다.
전송 계층이라는 이름에 걸맞게 2계층의 IP와 4계층의 애플리케이션 사이의 중개 역할을 맡고 있다고 볼 수 있다.
또한 여러 애플리케이션 실행 시 특정 불가능하다는 IP 프로토콜의 단점을 극복하기 위해,
TCP와 UDP는 포트(Port) 번호를 사용한다.
포트 번호는 같은 기기에서 여러 애플리케이션을 사용할 경우 그 애플리케이션을 특정하는 번호이다.
포트 번호는 0 ~ 65535까지 사용할 수 있으며, 0 ~ 1023번 까지는 주요 프로토콜에 따라 미리 배정되어 있다.
Type | Port Number Range | Description |
Well-Known Port | 0~1023 | 시스템 사용 번호(슈퍼유저 권한 필요) 사용 권장 X |
Registered Port | 1024~49151 | 특정 프로토콜/앱에서 사용 |
Dynamic Port | 49152~65535 | 앱에서 사용 혹은 임시 사용 번호 |
당연히 이미 사용 중인 포트는 중복해서 사용할 수 없으며, 0 ~ 1023번 중 자주 사용되는 포트 번호는 아래와 같다.
Port no. | Protocol Name | Transport Protocol | Description |
80 | HTTP | TCP | 웹 서버 접속 |
443 | HTTPS | TCP | 웹 서버 접속(SSL) |
110 | POP3 | TCP | 메일 읽기 |
25 | SMTP | TCP | 메일 서버간 메일 전송 |
22 | SSH | TCP | 컴퓨터 원격 로그인 |
53 | DNS | UDP | DNS 쿼리 |
123 | NTP | TCP | 시간 동기화 |
잘 알려진 포트의 경우 URI에서 생략 가능하지만, 8080과 같은 임시 포트는 반드시 표시해 주어야 한다.
계속해서 TCP와 UDP의 차이점을 보자.
TCP(Transmission Control Protocol) | UDP(User Datagram Protocol) | |
서비스 타입 | 연결 지향적 프로토콜 | 데이터그램 지향적 프로토콜 |
신뢰성 | 표적 기기까지의 전송을 보장한다. | 표적 기기까지의 전송이 보장되지 않는다. |
순서 보장 | 전송하는 패킷의 순서가 보장된다. | 패킷의 순서가 보장이 안 된다. 패킷 순서를 보정하려면 애플리케이션 레이어에서 관리해야 한다. |
속도 | UDP에 비해 느리다. | TCP에 비해 빠르고 단순하며 효율적이다. |
데이터의 신뢰성이 필요하면 TCP를, 속도와 효율이 필요하면 UDP를 사용한다.
위 그림에서 왼쪽이 TCP, 오른쪽이 UDP를 대략적으로 나타낸다.
웹 애플리케이션의 개발에선 데이터의 신뢰성이 중요하기 때문에, 주로 TCP를 사용한다.
위 그림 중 TCP 파트를 조금 더 구체적으로 보자.
위 그림은 Sender와 Receiver 사이의 TCP 3-Way Handshake를 보여준다.
그 단계는 다음과 같다.
- Step 1 (SYN): 클라이언트는 segment를 랜덤으로 설정된 SYN(Synchronize Sequence Number)과 함께 보낸다. 이 요청은 리시버에게 센더가 통신을 시작하고 싶다는 알림이다.
- Step 2(SYN / ACK): 리시버는 받은 요청을 바탕으로 요청을 수락한다는 SYN/ACK(Acknowledgement) 신호 세트를 보낸다.
- Step 3(ACK): 센더가 받은 ACK를 리시버에게 전송하면서 실제 데이터 전송이 시작된다.
위와 같은 단계를 거치며 센더와 리시버 사이의 신뢰성 연결을 맺어준다.
그렇다면 UDP는 어떤 장점이 있을까? 빠른 속도를 바탕으로 다음과 같은 장점이 있다.
- 애플리케이션의 정교한 제어가 가능하다: 실시간 반응을 위해 약간의 데이터 손실을 감수한다. 대신 개발자 스스로가 이를 보완하기 위해 애플리케이션에 추가 기능을 구현할 수 있다.
- 연결 설정에 무관하다: UDP는 예비과정 없이 바로 전송을 시작하기 때문에 반응속도가 빠르다. 또한, TCP는 신뢰성을 위해 많은 파라미터와 정보 전달이 필요하지만 UDP는 연결 설정 관리를 하지 않기 때문에 어떠한 파라미터도 기록하지 않는다. 이 때문에 네트워크에도 부하가 덜 걸리며, 서버에서도 TCP와 비교에 더 많은 클라이언트의 수용이 가능하다.
'Development > Network' 카테고리의 다른 글
[네트워크]AJAX (0) | 2022.08.04 |
---|---|
[네트워크]HTTP (0) | 2022.08.04 |
[네트워크]SSR vs. CSR (2) | 2022.08.03 |
[네트워크]CORS(Cross-Origin Resource Sharing) (1) | 2022.08.03 |
[네트워크]웹(WEB) (0) | 2022.08.03 |
[네트워크]URL, URI, Domain, DNS (2) | 2022.08.02 |
- Total
- Today
- Yesterday
- RX100M5
- 스프링
- 면접 준비
- 자바
- a6000
- 알고리즘
- 여행
- BOJ
- 스트림
- 세계일주
- 유럽
- java
- 야경
- 세모
- 맛집
- 백준
- 세계여행
- Backjoon
- 기술면접
- 유럽여행
- Algorithm
- 중남미
- 칼이사
- spring
- 지지
- Python
- 동적계획법
- 파이썬
- 남미
- 리스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |