https://zero-base.co.kr/event/media_BE_school_roadmap
백엔드 공부 로드맵 feat. 현직 백엔드 개발자 | zero-base
0에서 1은 만들어주는 백엔드 6개월 공부 로드맵
zero-base.co.kr
웹사이트를 기준으로 정리 해보았습니다.
1. 인터넷
1.1 인터넷은 어떻게 작동합니까
인터넷은 웹의 핵심적인 기술입니다. 인터넷의 가장 기본적인 것은, 컴퓨터들이 서로 통신가능한 거대한 네트워크라는 것
단순 네트워크
두개의 컴퓨터가 통신이 필요할 때, 우리는 다른 컴퓨터와 물리적으로(이더넷 케이블) 또는 무선으로(WiFi or Bluetooth)연결되어야함 모든 현대 컴퓨터들은 이러한 연결중 하나를 이용하여 연결을 지속할수 있다.
네트워크는 원하는 만큼 컴퓨터를 연결할수 있지만 연결할수 록 복잡해지므로 네트워크의 각 컴퓨터는 라우터라는 특수형 소형 컴퓨터를 연결합니다. (ex 철도역의 신호원처럼 주어진 컴퓨터에서 보낸 메시지가 올바른 대상 컴퓨터에 도착하는지 확인합니다. 컴퓨터 B에게 메시지를 보내려면 컴퓨터 A가 메시지를 라우터로 보내야하며, 라우터는 메시지를 컴퓨터 B로 전달하고 메시지가 컴퓨터 C로 배달되지 않도록해야합니다.)
이라우터를 시스템에 추가하면 10대의 컴퓨터 네트워크에는 10개의 케이블만 필요합니다. 각 컴퓨터마다 단일 플러그와 10개의 플러그가 있는 하나의 라우터가 필요합니다.
컴퓨처를 라우터에 연결하고 라우터에서 라우터로 무한히 확장할수 있습니다.
우리의 네트워크를 전화 시설과 연결하기 위해선, 모뎀이라는 특수 장비가 필요합니다. 이 모뎀은 우리 네트워크의 정보를 전화 시설에서 처리 할 수있는 정보로 바꾸며, 그 반대의 경우도 마찬가지입니다.
그래서 우리의 네트워크는 전화 시설에 연결됩니다. 다음 단계는 우리의 네트워크에서 도달하려는 네트워크로 메시지를 보내는 것입니다. 그렇게하기 위해 네트워크를 인터넷 서비스 제공 업체 (Internet Service Provider, ISP)에 연결합니다. ISP는 모두 함께 연결되는 몇몇 특수한 라우터를 관리하고 다른 ISP의 라우터에도 액세스 할 수 있는 회사입니다. 따라서 우리 네트워크의 메시지는 ISP 네트워크의 네트워크를 통해 대상 네트워크로 전달됩니다. 인터넷은 이러한 전체 네트워크 인프라로 구성됩니다.
1.2. HTTP란 무엇인가
- HTTP 프로토콜의 특징
- 비연결지향(connectionless) : 클라이언트가 request를 서버에 본고, 서버가 클라이언트에 요청에 맞는 response를 보내면 바로 연결을 끊는다.
- 상태 정보 유지 안함(stateless) : 연결을 끊는 순간 클라이언트와 서버의 통신으 끝나며 상태 정보를 유지하지 않는다.
- HTTP
- www 상에서 정보를 주고받을 수 있는 프로토콜
- 클라이언트와 서버사이에 이루어지는 요청/응답 프로토콜
- 주로 HTML 문서를 주고 받는데 사용
- TCP(HTTP/1, HTTP/2), UDP(HTTP/3)를 사용하며, 80번 포트를 사용한다.
- HTTPS
- HTTP의 보안상 문제를 해결하기 위해 등장한 프로토콜
- HTTP는 텍스토로 자원을 주고 받기 때문에 네트워크를 가로챈다면 내용이 유츌되는 보안 이슈가 발생한다.
- SSL, TLS를 이용해 암호화하여 주고받음
- 응용 계층과 전송 계층 사이 위치
- 433 포트 사용
- 모든 HTTP 요청과 응답 데이터는 네트워크로 보내기전에 전송 계층과 응용 계층 사이에서 암호화 된다.
- HTTP 자체를 암호화하는것이아니라 운반하는 HTTP Body 부만 암호화진행하고 Header는 암호화하지 않는다.
- 암호화 통신방법(공개키/ 개인키, 대칭키 방식을 혼합하여 사용
- A에서 B로 접속 요청
- B에서 공개키를 A에게 전달
- A는 자신의 대칭키를 공개키 A로 암호화 해서 B에게 전달
- B는 개인키로 복호화하여 A의 대칭키를 얻음
- 얻어낸 대칭키를 이용하여 A와 ㅠ가 암호문을 주고 받음
- 단점
- 암호화 추가 비용 발생
- 암호화 과정에서 웹서버에 부하
- 연결이 끊기면 재인증 시간이 소요
https://www.zerocho.com/category/HTTP/post/5b344f3af94472001b17f2da
https://www.zerocho.com/category/HTTP/post/5b344f3af94472001b17f2da
www.zerocho.com
1.3. 브라우저와 작동 방식
www.google.com 에 접속할때 일어나는일
1. www.google.com 을 브라우저 주소창에 입력한다.
2. 브라우저는 캐싱된 DNS 기록을 통해 www.google.com 에 대응되는 IP 주소가 있는지 확인한다.
- 브라우저 캐시 확인
- OS 캐시 확인
- 라우터 캐시 확인
- ISP 캐시 확인
3. 요청한 URL이 캐시에 없으면 ISP(인터넷 서비스 제공자, KT등)의 DNS 서버가 www.google.com을 하고 있는 서버의 IP주소를 찾기 위해 DNS query를 날려 찾는다.
4. 브라우저는 IP주소를 받아 서버와 TCP연결을 한다(3 way handshaking)
- 클라이언트가 서버로 접속 요청 SYN 패킷을 보낸다
- 서버에서는 수학하는 ACK와 SYN패킷을 보낸다
- 클라이언트는 서버에게 확인 응답으로 ACK 패킷을 보낸다.
5. TCP 연결이 완료되면 qmfkdnwjrk 웹 서버에 HTTP요청을 보낸다.
6. 서버는 요청 처리하고 response를 생성하고 보낸다.
7. 브라우저가 HTML content를 사용자에게 보여준다.
1.4. DNS와 작동 방식(Domain Name System)
IP주소를 문자로 표현한 주소로 바꾸는 시스템 혹은 서버
DNS 작동 방식
1. DNS Query (from Web Browser to Local DNS) : "제가 원하는 웹 사이트의 IP 주소를 알고 계신가요?" Local DNS 서버에게 전달
2. DNS Query (from Local DNS to Root DNS) : "제가 원하는 웹 사이트의 IP 주소를 알고 계신가요?" Root DNS서버에게 전달
3. DNS Response (from Root DNS to Local DNS) : "저는 모르지만 , Com 도메인을 관리하는 네임서버의 이름과 IP 주소를 알려드릴 테니 거기에 물어보세요"
4. DNS Query (from Local DNS to com NS) : “ 안녕하세요. www. naver. com의 IP 주소를 알고 계신가요?"
5. DNS Response (from com NS to Local DNS) : "저는 모르지만 , Com 도메인을 관리하는 네임서버의 이름과 IP 주소를 알려드릴 테니 거기에 물어보세요"
6. DNS Query (from Local DNS to naver. com NS) : “ 안녕하세요. www. Naver .com의 IP 주소를 알고 계신가요?"
7. DNS Response (from naver .com NS to Local DNS) : "저는 모르지만 해당 웹은 www. g.naver. com이라는 이름으로 통해요. g.naver .com 도메인을 관리하는 네임서버의 이름과 IP 주소를 알려드릴테니 거기에 물어보세요"
8. DNS Query (from Local DNS to g.naver. com NS) : “ 안녕하세요. www. g.naver. com의 IP 주소를 알고 계신가요?"
9. DNS Response (from g.naver .com NS to Local DNS) : " 네 www. g.naver .com의 IP 주소는 222.222.222.22와 333.333.333.33입니다"
10. DNS Response (from Local DNS to Web Browser) : "네 www. naver .com의 IP 주소는 222.222.222.22와 333.333.333.33입니다"
1.5. 도메인이란
- ip는 사람이 이해하고 기억하기 어렵기 때문에 이를 위해서 각 ip에 이름을 부여할 수 있게 하는것
1.6. 호스팅이란
- 서버 컴퓨터의 전체 또는 일정한 공간을 이용할 수 있도록 임대해주는 서비스를 말한다. 사용자가 직접 서버를 구입하고 운영할 필요없이 호스팅 업체가 미리 준비해 놓은 서버를 빌려 사용하는 형식이다.
ex) 웹 호스팅, 서버 호스팅,ㅣ 메일 호스팅
2. OS및 일반상식
2.1 운영체제
- 운영체제는 하드웨어를 관리하고, 응용 프로그램과 하드 웨어 사이에서 인터페이스 역할을 하는 시스템 소프트웨어
2.2 프로세스 관리
프로세스 생성과정
- PCB가 생성되어 OS가 실행한 프로그램의 코드를 읽어 들여 프로세스에 할당된 메모리의 text영역에 저장한다.
- Text segment(혹은 Code segment)는 실행가능한 명령어를 포함하고 있는 메모리 영역이다.
- 초기화된 전역 변수 및 static 변수를 data 영역에 할당.
- HEAP과 Stack은 초기 메모리 주소 초기화
- PCB에 여러 정보가 기록되면 Ready Queue에서 CPU를 할당받기까지 대기한다.
2.3 스레드와 동시성
- 프로세스
- 컴퓨터에서 실행중인 츠로그램
- 각자 고유한 공간과 자원을 할당받는다.
- 각각의 code,data,stack, heap 영역을 보유
- 각각의 영역을 갖기에 동기화 작업이 필요하지 않음
- 각각의 영역을 갖기에 컨텍스트 스위칭 비용이 크다,
- 스레드
- 한 프로세스의 내의 실행 단위
- stack만 고유 영역을 갖고 나머지는 프로세스 자원을 공유
- stack 이외의 영역을 공유하므로 동기화 작업이 필요
- stack 이외의 영겨을 공유함므로 컨텍스트 스위칭 비용이 적음
- 동시성
- 동시에 실행되는 것 같이 보이는것
- 싱글 코어에서 멀티스레드를 동작시키기 위한 방식
- 병렬성
- 실제로 동시에 여러 작업이 처리되는 것
- 멀티 코어에서 멀티 스레드를 동작시키기 위한 방식
- 한번에 여러 스레드를 실행 한다.
2.3 메모리 관리
각각의 프로세스는 독립된 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수없는 제한이 걸려있다. 단지 운영체제만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 영향을 받지 않는다. 따라서 메모리에는 적절하게 관리되어 사용되야 한다.
- Swapping
- 메모리의 관리를 위해 사용되는 기법
- CPU 할당 시간이 끝난 프로세스의 메모리를 보조기억장치(하드웨어)로 내보내고 다른 프로세스의 메모리를 불러들인다.
- 단편화
- 프로세스들이 메모리에 적재되고 제거되는 일이 반복되다보면, 프로세스들이 차지하는 메모리 사이에 사용하지 못할 만큼의 생기는 작은 공간 을 의미한다.
- 외부 단편화
- 물리 메모리 공간 중 사용하지 못하게 되는 일부분
- 물리 메모리(RAM)에서 사이사이 남는 공간을 모두 합치면 충분한 공간이 되는 부분들이 분산되어 있을 때
- 내부 단편화
- 프로세스가 사용하는 메모리 공간에 포함되어있는 부분중 남는 부분
- 압축
- 외부 단편화를 해소하기 위해 프로세스가 사용하는 공간들을 한쪽으로 모는 방식
CPU에 가까운 순서대로 레지스터, 캐시, 주기억장시, 보조기억장치 순이다.
- 레지스터 : CPU 내에 존재하는 메모리로 빠르고 작다.
- 캐시 : CPU와 주기억장치 사이에서 중간 저장소 역할을 한다.
- 주기억장치 : 현재 수행되는 프로그램과 데이터 저장
- 보조기억장치 : 용량이 크나 느리다.
메모리가 고갈되면 어떤 현상이 발생할까요?
프로세스들의 Swap이 활발해지면서 CPU 사용률이 하락하게 되고, CPU가 놀고있는 것을 발견한 운영체제는 프로세스를 추가하게 되는 쓰레싱 현상이 발생한다.
쓰레싱이 해소되지 않을 경우, Out of Memory 상태로 판단되어 중요도가 낮은 프로세스를 찾아 강제로 종료하게 된다.
IPC(Inter Process Communication)
프로세스간 통신을 의미하여 프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스간의 통신을 한다.
- 메모리 공유: 프로세스끼리 특정 공통 메모리 영역을 공유하여 통신
- 메시지 전달: 파이프, 소켓
POSIX 기초🌟
- stdin, stdout, stderr, pipes ..
- 이식 가능 운영 체제 인터페이스(portable operating system interface)의 약자
- 서로 다른 UNIX OS의 공통 API를 정리하여 이식성이 높은 유닉스 응용 프로그램을 개발하기 위한 목적으로 IEEE가 책정한 애플리케이션 인터페이스 규격
출처 : https://developer.mozilla.org/ko/docs/Learn/Common_questions/How_does_the_Internet_work
'Back-end' 카테고리의 다른 글
백엔드 공부 로드맵2(22.12) (0) | 2022.12.15 |
---|---|
Back-end 로드맵 (0) | 2022.12.15 |
Back-End 개발자란 (0) | 2022.12.13 |