HTTP & NETWORK 1
가을이되니 체력이 급격하게 떨어지는 것인지, 엉덩이를 고정하니 불안감에 집중을 못하는것인지 어제 처음으로 지각을했다(무려 30분씩이나). 생활패턴이 깨지려한다. 정신차려야한다. 매번 알고싶었지만 접근하기 힘들었던 네트워크~!
1. Network
1.2. Client Server Architecture
리소스가 존재하는 곳, 리소스를 사용하는 앱을 분리한 것을 말한다.
- Client: 리소스를 사용하는 앱
- Server: 리소스를 제공하는 곳
- Request: 클라이언트가 서버에 요청
- Response: 서버가 클라이언트에서 요청한 신호에 응답
1.3. 2-Tier Architecture
리소스를 사용하는 앱 | 인터넷 | 리소스가 존재하는 곳 | ||
…기능들 | <- | …리소스들 | ||
클라이언트 | - | 서버 | ||
요구사항 | -> | 요청 | -> | 반응 |
↑ | - | - | - | ↓ |
반영 | <- | 요청값 | <- | 응답 |
1.4. 3-Tier Architecture
보통 서버의 경우는 Database에 리소스를 저장하고, 서버는 Database에 접근해 해당 요청에 대한 요청값을 응답한다.
이렇게 Database가 추가되면, 3-Tier Architecture라고한다.
1.5. 프론트엔드와 백엔드
프론트앤드
는 “클라이언트”측, 즉 리소스를 사용하는 앱을 말한다. 주로 유저에게 보이는면, UI나 터치 시 이벤트 등을 개발하는 인력을 프론트엔드 개발자라 한다.백엔드
는 리소스를 전달해주는 측, 즉 “서버”를 말하고, 리소스를 저장하는 공간인 “데이터베이스”까지 포함한 영역을 말한다. 눈에 보이지 않는 부분, API나 권한관리, 세션, Database등의 시스템 설계를 개발하는 인력을 백엔드 개발자라 한다.
2. Client Server Communication & API
- Protocol: 통신 규약으로 약속이다.
- HTTP: 웹 애플리케이션 아키텍처에서의 프로토콜이다.
- HTTP Message: 클라이언트와 서버가 나누는 통신(대화)내용
2.1. Protocol
2.1.1. OSI 7 Layers
- 7: 응용 계층
프로토콜 이름 | 설명 |
HTTP | Web에서 HTML, JSON등의 정보를 주고받는 규약 |
HTTPS | HTTP에서 보안이 강화된 규악 |
FTP | 파일 전송 규약 |
SMTP | 메일 전송 규약 |
SSH | CLI환경의 원격 컴퓨터에 접속하는 규약 |
RDP | Windows계열의 원격 컴퓨터에 접속하기 위한 규악 |
WebSocket | 실시간 통신, Push 등을 지원하는 규약 |
- 6: 표현 계층
- 5: 세션 계층
- 4: 전송 계층
TCP | 양방향) HTTP, FTP 통신 등의 근간이되는 인터넷 규약 |
UDP | 단방향) 단방향으로 작동하는 단순하고 빠르고 신뢰성이 높은 인터넷 규약 |
- 3: 네트워크 계층
- 2: 데이터 링크
- 1: 물리
3. API
Application Programming Interface로 Server와 Client가 Communication을 할 수 있게 해주는 Interface(접점)이다.
3.1. Example
예시: https://bikemoa.net
자전거 목록 불러와 | /bike/list |
자전거 상세정보 불러와 | /bike/detail |
merida 브랜드 자전거 목룍 보여줘 | /bike/list?brand=”merida” |
specialized브랜드 자전거 상세정보 보여줘 | /bike/detail?brand=”specialized”&name=”allez”&y_of_manufacture=”2023” |
요청(Request)시에는 HTTP 프로토콜을 사용하고, URL, URI와같은 주소를 통해 접근할 수 있다.
http://bikemoa.net/bike/detail?brand="specialized"&name="allez"&y_of_manufacture="2023"
프로토콜://URL or URI/path?param_01="value"¶m_02="value"...
3.2. Best Example
사용자 관리 API
Request | URL Design | using method | CRUD |
전체 사용자 조회 | /users | GET | READ |
사용자 추가 | /users | POST | CREATE |
a 사용자 갱신(수정) | /users/a | PUT or PATCH | UPDATE |
a 사용자 삭제 | /users/a | DELETE | DELETE |
a 사용자 조회 | /users/a | GET | READ |
4. URL & URI
:scheme:
:hosts:
:url_path:
:query:
file://
127.0.0.1
/Users/username/Desktop/
쿼리없음
http://
www.google.com:80
/search
?q=JavaScript
4.1. URL
Uniform Resource Locator, 네트워크상 웹페이지, 이미지, 동영상 등의 파일이 위치한 정보 나타낸다.
- scheme: 통신방식(프로토콜)을 결정한다. ex) http, https
- hosts: 웹 서버의 이름이나 도메인, IP를 사용하며 주소를 나타낸다.
- url-path: 웹서버에서 지정한 루트 디렉토리로부터 시작하여 웹페이지, 이미지, 동영상 등이 위치한 경로와 파일명을 나타낸다.
4.2. URI
Uniform Resource Identifier, URL의 기본 요소인 scheme, hosts, url-path에 query, fragmet를 포함한다.
- query: 웹서버에 보내는 추가적인 질문 ex)
http://www.google.com:80/search?q=JavaScript
- fragment: 일종의 북마크 기능을 수행한다. url에 fragment(
#
)와 특정 HTML요소의 id를 전달하면 해당 요소가 있는 곳으로 스크롤을 이동할 수 있다. ex) 각종 문서의 마크다운형식에서#
을 의미하는걸로 보인다.
4.3. 도식화
file://, http://, https:// | scheme | 통신 프로토콜 |
192.168.0.1, www.naver.com | hosts | 웹페이지, 이미지, 동영상 등의 파일이 위치한 웹서버, 도메인 또는 IP |
:80, :443, :3000 | port | 웹서버에 접속하기 위한 통로 |
/search | url-path | 웹 서버의 루트 디렉토리로부터 웹페이지, 이미지, 동영상 등의 파일위치까지의 경로 |
q=JavaScript | query | 웹서버에 전달하는 추가 질문 |
로컬PC IP: 127.0.0.1 공유기 IP: 168.192.0.1
5. IP & Port
5.1. IP address
Internet Protocol address, IP 주소는 네트워크상에 특정 PC를 나타내는 IP 주소와 그 주소에 진입할 수 있는 통로 Port이다.
인터넷에 연결된 모든 PC는 IP 주소체계에 따라 네덩어리의 구분된 숫자 IP주소체계, IPv4를 따른다. IPv4 -> Internet Protocol version 4
#nslookup google.com
IPv4: 각덩어리는 0~255까지 2^(32) 43억개의 IP주소를 표현할 수 있다. 그중 몇가지는 이미 용도가 정해져있다.
- localhost, 127.0.0.1: 현재 로컬 PC지칭
- 0.0.0.0, 255.255.255.255: broadcast address, 로컬 네트워크에 접속된 모든 장치와 소통하는 주소이다. 서버에서 접근 가능 IP주소를 broadcast address로 지정 시 모든 기기에서 서버에 접근할 수 있다.
IPv4의 이용범위를 넘어서자 IPv6(IP version 6)가 나온다. IPv6는 2^(128)
IPv6 | IPv4 |
128 bit each | 4 bytes each |
340 undecillion | 4.3 billion |
5.2. PORT
포트는 항구에서 배가 정박할 수 있는 port와 같은 개념으로 로컬PC의 IP주소 뒤 :3000과같이 붙는다. Window와 Android의 경우 원격 접속 포트포워드 설정 시 :3389, mac의 경우 :5900을 기본으로한다.
일반적으로 react 서버실행구문인 npm start를 통한 서버 실행 시 :3000으로 포트가 열리고, 추가로 열 시 :3001처럼 다른 포트로 실행된다.
포트번호는 0~65535까지 사용할 수 있고, 0~1024까지의 포트번호는 주요통신 규약에 따라 정해져 있다.
- 22: SSH
- 80: HTTP
- 443: HTTPS
- 참조확인
잘알려진 포트의 경우는 포트번호를 생략해도 되지만(:3389, :5900 등), 잘알려지지 않은 경우 명시해야한다.
6. Domain & DNS
IP주소를 대신하여 사용하는 주소가 있다. 그것을 Domain이라고한다.
네트워크에 접속되어있는 모든 PC는 IP주소가 있고, 모든 PC가 Domain을 가진것은 아니다. Domain은 일정기간 대여하여 사용한다. 대여하여 사용한 Domain과 내 PC의 IP address를 매핑하는 작업을 DNS(Domain Name System)이라고 한다.
일반 개인PC의 경우 별도의 고유한 mac값을 가지고 있으며, 각 인터넷 공급업체(KT, SKT, 등등)가 대여해주는 동적IP를 가진다.
DNS는 호스틩 도메인 이름을 IP address로 변환하거나, 반대의 경우 수행할 수 있도록 개발된 Database System이다.
공유기의 DDNS설정을 이용하여 제조업체가 공급해주는 도메인을 이용할수도 있다.(동적 IP를 고정 IP처럼 사용할 수 있도록 공유기 제조업체에서 제공) -> Dynamic Domain Name System
7. Chrome Brower Error Code
7.1. Aw, Sanp
앗, 이런! 이라고뜬다는데 본적이 ㅇ..ㅄ..
Error | Description |
Aw, Sanp | 페이지 로드 중 문제 발생 |
ERR_NAME_NOT_RESOLVED | 호스트이름(웹주소)이 존재하지 않음 |
ERR_INTERNET_DISCONNECTED | 사용 중인 기기가 인터넷에 연결되지 않음 |
ERR_CONNECTION_TIMED_OUT | 페이지 접속 타임아웃, 인터넷이 느리거나, 접속자가 많아 시간초과 |
ERR_TIMED_OUT | 상기 동 |
ERR_CONNECTION_RESET | 웹페이지 연결 방해하는 요소 발생 |
ERR_NETWORK_CHANGED | 웹페이지 로드 중 기기의 네트워크 연결이 해제되었거나, 새로운 네트워크에 연결 |
ERR_CONNECTION_REFUSED | 웹페이지에서 Chrome 연결을 허용하지 않음. |
ERR_CACHE_MISS | 이전 입력정보 다시 제출하도록 요청받음 |
ERR_EMPTY_RESPONSE | 웹페이지에서 데이터를 전혀 전송하지 않았으며, 데이터를 전송할 서버가 다운 |
ERR_SSL_PROTOCOL_ERROR | 페이지에서 전송된 데이터를 Chrome 해석못함 |
ERR_BAD_SSL_CLIENT_AUTH_CERT | 클라이언트 인증서에 오류발생하여 로그인안됨 |
다른 에러들은 본적이 있는거 같다. 특히 Ubuntu깔면서 WIFI모듈 충돌로인한 ERR_INTERNET_DISCONNECTED, 크롬이 자체적으로 던져주는건지는 처음알았다. 껄껄
참조
KoreanJSON
MDN:HTTP 요청 메서드
Wikipedia:IPv6
Widipedia:Port Number
Asus:Support/DDNS
Chrome Brower:Network Errors