일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MySQL
- 네이티브쿼리
- appspec
- ㅔㄴ션
- 2 > /dev/null
- EC2
- 커밋메세지수정
- AuthenticationEntryPoint
- foreignkey
- 메세지수정
- 컨테이너실행
- docker명령어
- 포트
- ubuntu
- subquery
- application.yml
- 메소드명
- 서브쿼리
- WeNews
- 적용우선순위
- Query
- 검색
- 테스트메소드
- querydsl
- 추후정리
- appspec.yml
- 외부키
- 테스트
- 예약
- 참조키
- Today
- Total
제뉴어리의 모든것
[Section2] [네트워크] 웹 애플리케이션 작동원리 본문
웹 어플리케이션의 이해
네이티브 어플리케이션
그냥 앱스토어에서 내려받는 일반적으로 생각하는 앱이다.
특정 OS에 종속된 어플리케이션이다.
- 네이티브 어플리케이션 장점
- 웹 어플리케이션 보다 빠름
- 어플리케이션이 설치된 기기의 자원에 접근하기가 용이 (GPS 기능이나 마이크 같은 기능)
- 인터넷 없이 사용 가능
- 웹앱의 비해 안전 (앱스토어 승인도 받아야함) - 네이티브 어플리케이션 단점
- 웹앱보다 개발비가 더 들어감 (OS별로 만들어야함)
- 빠른 업데이트가 힘듬 ( 업데이트시 필요 내용을 내려받기도 해야함 )
- 앱스토어 승인까지가 어렵고 비용도 발생
웹 어플리케이션
정적인 사이트에서 벗어나 보다 동적인 응답을 하는 앱으로써,
브라우저라는 소프트웨어로 인해 접속 하는 어플리케이션이다.
- 웹앱 장점
- 브라우저로 인해 접속하므로 설치가 따로 필요없다.
- 업데이트 등과 같은 업데이트에 자유롭다.
- 네이티브 앱 만들기에 비하여 비교적 간편하다
- 앱스토어 승인이 필요없다. - 웹앱 단점
- 인터넷이 안되면 사용이 불가하다
- 네이티브앱에 비해 보안에 취약
- 테이티브앱에 비해 속도가 느림
- 사용자 접근성이 떨어짐 (네이티브앱은 앱스토어에서 검색시 결과로 나오거나 추천등으로 사용자가 접할 수 있지만,
웹앱은 해당 사이트를 직접 검색하여 찾아 들어가야하므로 접근성이 떨어짐)
LAN과 WAN
- LAN
좁은 범위 네트워크 - WAN
수많은 LAN들이 모여서 만들어진 네트워크
인터네트워킹
인터넷의 원래 의미.
여러 네트워크를 연결한다는 의미.
여러 네트워크를 연결(확장)하는 방법
1. 한 네트워크를 확장
2. 네트워크끼리의 연결
프로토콜
인터넷상에서 컴퓨터들끼리 소통하기 위해 정해진 약속.
현재는 이러한 약속으로 TCP/IP가 주로 쓰임.
- 프로토콜의 필요성
만약 각 컴퓨터마다 데이터를 보내는 방식이 다르다면 받은쪽은 해당 데이터를 어떻게 해석해야할지 모를것이다.
TCP/IP
인터넷 통신 스위트 : 인터넷상에서 컴퓨터들이 정보를 주고 받는데 쓰이는 통신규약의 모음.
그리고 그런 통신 스위트를 처음 정의할 시기에 정의되어 지금까지 사용되는 TCP/IP가 있다. 그러므로 현재는 인터넷 통신 스위트의 또다른 이름이 TCP/IP
TCP/IP 4계층 모델
데이터를 보내는쪽은 4층 -> 3층 -> 2층 -> 1층,
데이터를 반는 쪽은 1층 -> 2층 -> 3층 -> 4층.
IP주소
TCP/IP 구조에서 각각의 네트워크기기 (컴퓨터, 라우터 등등)를 구별할 수 있는 주소.
사설 IP (private IP) : LAN에서 쓰이는 IP
공용 IP (public IP) : 인터넷 상에서 쓰이는 IP
- localhost, 127.0.0.1 : 현재 사용 중인 로컬 PC를 지칭
- 0.0.0.0, 255.255.255.255 : broadcast address, 로컬 네트워크에 접속된 모든 장치와 소통하는 주소. 서버에서 접근 가능 IP 주소를 broadcast address 로 지정하면, 모든 기기에서 서버에 접근할 수 있습니다.
broadcast address
특정 호스트로 패킷을 전송하는 것이 아니라 특정 네트웍 전체에 패킷을 전송할 때 사용하는 IP Address가 BROADCAST IP 입니다.
- BROADCAST IP address는 255.255.255.255를 쓰거나 IP address의 SUBNET 부분을 제외한 호스트 자리를 2진수 1로 채운 것입니다.
- 예를 들어 10.1.10.100 이라는 IP Address를 가지는 호스트가 255.255.255.0 이라는 SUBNET MASK를 사용한다면 이 SUBNET의 BROADCAST IP는 10.1.10.255 가 됩니다.
- 이런 BROADCAST IP를 사용하면 해단 SUBNET의 모든 호스트에 패킷을 전달할 수 있습니다.
- 이러한 BROADCAST는 네트웍을 관리하는 특정 목적의 PROTOCOL과 UDP를 사용한 통신에서만 사용이 됩니다.
출처: https://dorigom.tistory.com/322 [도리곰 블로그:티스토리]
IP주소 체계
- -IPv4
기존 주소 체계 - -IPv6
부족해진 IPv4의 범위로 인해 새롭게 만들어진 주소 체계
MAC 주소
네트워크 기기가 가지고 있는 고유한 시리얼.
인터넷 통신을 하기 위해서는 이 MAC주소와 IP주소가 모두 필요하다.
TCP/IP의 4계층 중 1층인 이더넷에서 상대를 특정하고자 MAC주소를 이용하고, TCP/IP 에서 IP주소를 사용.
ARP (address resolution protocol)
같은 LAN 네트워크를 사용하는 네트워크 기기의 MAC 주소를 파악하기 위해 보내는 Request로.
파악하려는 기기가 xxxx.xxxx.xxxx.xxxx ip가 누구냐라는 식으로 메세지를 보내게 되면, 해당 ip에 해당하는 네트워크 기기가 자신의 MAC 주소를 보내주어 Request를 보낸 네트워크기기에서 상대방 네트워크 기기의 MAC주소와 IP주소의 매핑이 가능하다.
패킷
네트워크 기기끼리 통신할때 가능한 통신방식이
회선 교환(Circuit Switching), 패킷 교환(Packet Switching) 방식 두가지가 있는데 이때 패킷교환 방식에서 데이터를 보내는 형태가 패킷이다.
회선교환방식 : 1대1 통신만 가능. (EX : 음성통화)
패킷교환방식 : 다수의 네트워크기기에게 데이터 전송 가능
IP 주소 구조
- 서브넷 마스트
IPv4 주소에서 네트워크부가 어디까지인지 나타내는 것이 서브넷 마스크입니다.
- ip 주소의 형태
네트워크부 + 호스트부
192.168.1.1 -> 192.168.1 (네트워크부) .1(호스트부)
특정 네트워크부에서 특정 네트워크기기를 나타냄.
지금까지 공부한 IP주소의 체계의 예
- IP 주소: 192.168.1.1
- 서브넷 마스크: 255.255.255.0
- 네트워크 주소: 192.168.1.0
- 브로드캐스트 주소: 192.168.1.255
IPv4 주소는 4개의 옥텟으로 이루어져 있고, 각각을 1옥텟, 2옥텟, 3옥텟, 4옥텟이라고 부릅니다.
위 서브넷 마스크의 경우는, 1에서 3까지의 옥텟을 네트워크부로 사용하는 서브넷 마스크 입니다. 따라서 4옥텟은 호스트부로 사용하고 있음을 알수 있습니다.
IP주소의 할당과 관리
호스트부가 0으로 만 이루어진 것을 네트워크 주소로 그 네트워크를 의미합니다.
호스트부가 1로만 이루어진 것은 브로드캐스트 주소로 ARP 와 같은 기능을 사용하기 위해 사용합니다.
따라서 시작(0) 과 끝(255)를 제외한 254개의 주소만이 할당가능한 IP주소 입니다.
IP프로토콜의 한계
- 비연결성
패킷 받을 상대가 통신이 불가능 상황이여도 보내는쪽은 알길이 없기때문에 계속 패킷을 보내는 문제성 - 비신뢰성
전송한 패킷이 중간에 유실되거나, 패킷의 순서가 바뀔 가능성이 있을 경우가 발생.
TCP(Transmission Control Protocol)
직역하자면 전송 제어 프로토콜이다.
TCP/IP 4계층 모델을 기준으로 3층에서 동작하는 프로토콜.
2계층에서 동작하는 IP 와 4계층에서 동작하는 애플리케이션(http 등)을 중개하는 역할.
패킷의 순서가 보장되며 패킷 도착을 보장해준다. 그러나 속도가 느리다.
[ TCP 서버의 특징 ]
- 서버소켓은 연결만을 담당한다.
- 연결과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용된다형 서비스로 가상 회선 방식을 제공한다.
- 서버와 클라이언트는 1대1로 연결된다.
- 스트림 전송으로 전송 데이터의 크기가 무제한이다.
- 패킷에 대한 응답을 해야하기 때문에(시간 지연, CPU 소모) 성능이 낮다.
- Streaming 서비스에 불리하다.(손실된 경우 재전송 요청을 하므로)
출처: https://mangkyu.tistory.com/15 [MangKyu's Diary:티스토리]
TCP 3-way handshake
양 끝단의(end to end) 기기의 신뢰성 있는 데이터 통신을 위해, TCP 방식이 연결을 설정하는 방식
쉽게 말해 데이터 전송 전에 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정.
SYN은 'synchronize sequence numbers', 그리고 ACK는'acknowledgment' 의 약자.
[STEP 1]
A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다.
이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태, B서버는 Wait for Client 상태이다.
[STEP 2]
B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고
A가 다시 ACK으로 응답하기를 기다린다. 이때 B서버는 SYN_RECEIVED 상태가 된다.
[STEP 3]
A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다.
이때의 B서버 상태가 ESTABLISHED 이다.
위와 같은 방식으로 통신하는것이 신뢰성 있는 연결을 맺어 준다는 TCP의 3 Way handshake 방식이다.
출처 : https://bangu4.tistory.com/74
UDP(User Datagram Protocol)
직역하자면
TCP/IP 4계층 모델을 기준으로 3층에서 동작하는 프로토콜.
2계층에서 동작하는 IP 와 4계층에서 동작하는 애플리케이션(http 등)을 중개하는 역할.
패킷의 순서가 보장되지 않고, 패킷 유실 가능성이 있다. 그러나 속도가 빠르다
- UDP를 사용하는 이유
1. 높은 latency를 지양! 해야하는 경우
즉, 지연시간 없이 데이터가 신속하게 송수신 되어야 한다.
2. 연결 설정에 무관하다
송수신간에 연결을 유지하기위해 필요한 과정들이 생략되고
TCP가 송수신의 신뢰성을 보장하기 위해 많은 기본 데이터를 보내는 반면, UDP는 그럴 필요가 없다.
[ UDP 특징 ]
- 비연결형 서비스로 데이터그램 방식을 제공한다
- 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
- UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
- 신뢰성이 낮다
- TCP보다 속도가 빠르다
TCP, UDP 특징 출처: https://mangkyu.tistory.com/15 [MangKyu's Diary:티스토리]
TCP, UDP 간단 비교
참조 : https://mangkyu.tistory.com/15
PORT (포트)
대상 IP 에서 특정 앱을 구별하는 번호로써, 특정앱을 통할 수 있는 통로 역할을 한다.
그리고 그 Port 번호는 이미 시스템 내부적으로 사용되고 있는 번호도 있다.
자주 사용되는 Well-known port
그중, 자주 사용되는 포트 번호는 아래와 같다.
그리고 URI를 적어서 웹서버에 접속해야 할때, Well-known Port 번호는 URI에 적지 않아도 되지만, 그 외에는 적어줘야한다.
URL(Uniform Resource Locator)
우리가 웹상에서 볼 수 있는것은 사실 모든것이 자원이다.
자원이란 텍스트든 이미지든 동영상이든 파일이든 뭔가 존재하는것이다. 그리고 그런 어떤 존재하는 것들은 어떤 서버에 존재하는 것들이란 말이다. 그리고 그 자원들이 위치하는 주소값이 URL다.
그리고 그러한 URL은 아래와 같이 여러 부분으로 나뉠수 있고, 각자의 의미를 가진다.
scheme : 통신 방식(프로토콜)을 의미한다.
hosts : 웹 서버의 이름이나 도메인, IP를 사용하며 주소 (웹서버의 루트 디렉토리를 의미)
url-path : 루트 디렉토리부터 시작하여 웹 페이지, 이미지, 동영상 등이 위치한 경로와 파일명
query, bookmark : 웹 서버에 보내는 추가적인 질문
Domain name
IP 주소로 일일히 입력하여 접속하기 힘들기 때문에 문자로써 IP를 나타내는 것을 말한다.
Domain의 종류
- gTLD - generic Top Level Domain
초기 인터넷부터 사용되었던 도메인으로, 국가를 표기하지 않고 도메인 성격에 맞는 방식으로 지정했던 TLD.
com, net, gov(정부기관) 과 같은 것을 말한다. - ccTLD – country code Top Level Domain
국가별로 운영하기 위한 도메인.
KR과 같은것을 말한다.
example.com 기준으로 보면
.com : 최상위 도메인 (Top Level Domain)
example : 2차 도메인 (second-Level Domain)
만약 example.or.kr의 경우 or이 2차 도메인!
참조 : https://m.blog.naver.com/netpia_blog/220862116916
+ ICANN : 도메인 관리단체
+ Registry : 도메인 관리 기관
+ Registrar : 중개 등록업체
도메인 서버
DNS서버 == 네임서버
DSN 서버 종류
- Local DNS 서버
현재 사용중인 네트워크 기기(PC 기타 등등)에 설정된 DNS 서버로써
기존에 방문한적이 있다면 캐싱 되어 있으므로, 도메인으로 리소스 요청(웹사이트 방문 등)시 네트워트 기기(클라이언트)는 해당하는 도메인의 IP 주소를 바로 반환 받음.
각 통신사마다 지정된 장소에 위치. - Root DNS 서버
도메인으로 웹사이트 이동시 절차
1. 사용자가 주소창에 www.naver.com 입력
2. Local DNS 서버에 해당 도메인에 해당하는 IP를 가지고 있는지 확인
3. Local DNS 서버에 존재하지 않다면 Local DNS 서버가 Root DNS 서버에 해당 도메인의 IP를 가지고 있는지 확인
4. 그리고 Root DNS서버는 .com으로 끝나는 도메인들을 담당하는 서버(DNS서버)의 IP 주소를 Local DNS 서버에게 반환.
5. Local DNS 서버는 반환 받은 .com으로 끝나는 도메인을 담당하는 서버(DNS서버)에 찾아감
6. .com으로 끝나는 도메인을 담당하는 서버는 naver.com 의 도메인 정보를 가진 DNS 서버의 주소를 반환
7. 마지막으로 Local DNS 서버는 naver.com 의 도메인 정보를 가진 DNS 서버로 접근하면 naver.com의 호스트 네임별(www , m, blog 등등) 여러 IP가 존재하고 www에 해당하는 IP를 Local DNS 서버에게 반환
8. Local DNS 서버는 사용자에게 해당 IP를 반환하고
9. 사용자는 해당 IP로 이동
참조 : https://www.youtube.com/watch?v=6fc9NAQkcv0
참조 : https://hwan-shell.tistory.com/320
PC에 저장된 Local DNS 서버 -> PC가 사용하는 전화번호부
HTTP 메소드
다양한 메소드가 있지만, 대표적인 메소드만을 소개한다.
- POST
특정 리소스에 엔티티를 제출할 때 쓰인다.
쉽게 말해 서버로 데이터를 전송하여 리소스를 생성하는 의미로 쓰이는 메소드이다. - PATCH
PATCH 메서드는 리소스의 부분만을 수정할때 쓰인다.
쉽게 말해 서버에 이미 존재하는 리소스를 부분적으로 수정하는 의미로 쓰이는 메소드이다.
PUT과 비교를하자면,
PUT은 기존에 존재하는 리소스를 완전 대체할때 쓰이는 메소드이고 (덮어쓰기)
PATCH는 덮어쓰는 개념이 아니라 부분 데이터만 수정한다. - DELETE
DELETE 메서드는 특정 리소스를 삭제할때 쓰인다.
기존에 존재하는 리소스를 삭제한다. - GET
특정 리소스를 요청하는 메소드로, 데이터의 수정이나 삭제를 하지 않고 단순히 얻어오는 의미로만 쓰인다. - PUT
서버로 요청할때 보내는 데이터로 기존 데이터를 완전히 대체할때 쓰이는 메소드이다. - CONNECT
CONNECT 메서드는 목적 리소스로 식별되는 서버로의 터널을 맺기 위함이다.
상태 코드
정보응답 (1xx)
클라이언트에게 작업을 계속하라는 의미를 가진 코드.
- 100 Continue
이 임시적인 응답은 지금까지의 상태가 괜찮으며 클라이언트가 계속해서 요청을 하거나 이미 요청을 완료한 경우에는 무시해도 되는 것을 알려줍
성공 (2xx)
클라이언트의 요청을 이해했고, 처리가 되었음을 의미한다.
- 200 OK
요청이 성공적으로 처리되었음.
HTTP 메소드에 따라 의미는 달라질 수 있다. - 201 Created
요청이 성공하였고, 새로운 리소스가 생성됨. - 204 No Content
response의 내용은 없지만 처리가 완료되었음을 의미함.
리다이렉션 (3xx)
클라이언트에게 해당 요청의 완료를 위해 추가 동작을 요청함.
- 301 Moved Permantly
리다이렉트시 요청 메소드가 GET으로 변하고, 본문이 제거될 수 있음 - 308 Permanent Redirect
301과 기능은 같지만 메소드와 본문이 유지됨
클라이언트 에러 응답 (4xx)
클라이언트의 요청이 잘못됬음을 의미한다.
- 400 Bad Request
서버의 잘못된 요청으로 인해 서버가 요청 내용을 이해 할수없음을 의미한다. - 401 Unauthorized
인증이 되지 않은 상태임을 의미한다. - 403 Forbidden
요청한 리소스에 대하여 권한을 가지고 있지 않음을 의미한다. - 404 Not Found
요청한 리소스를 찾을 수 없음을 의미한다.
서버 에러 응답 (5xx)
- 500 Internal Server Error
서버 내부 문제로 오류발생 - 502 Bad Gateway
서비스 이용 불가
CORS
추가 헤더를 사용해서 한 출처에서 실행 중인 웹 앱이 다른 출처의 리소스에 접근 할 수 있는 권한을 부여하도록 브라우저에게 알려주는 정책.
'코드스테이츠 > 정리 블로깅' 카테고리의 다른 글
[Section2] [관계형 데이터베이스] [Spring Core] Spring Framework 기본 (0) | 2022.08.09 |
---|---|
[Section2] [관계형 데이터베이스] 데이터베이스 정규화 [추후 정리] (0) | 2022.08.08 |
[Section2] [코딩테스트 준비] 탐욕 알고리즘 (Greedy) (0) | 2022.07.29 |
[Section2] [코딩 테스트 준비] 자료구조 - 의사코드 (0) | 2022.07.29 |
[Section2][자료구조/알고리즘] 자료구조 - BFS / DFS (0) | 2022.07.28 |