꾸준히

[TIL-177] 구간탐색 끝, 간단한 서브쿼리 문제, 인터넷 계층과 라우터

무자비한 낭만주먹 2024. 1. 7. 23:21

[그림1]. 오늘도 감사한 공부 시작 ~

목차
0. 오늘의 학습 시간
1. 오늘 배운 것
2. 오늘의 알고리즘
3. 오늘의 CS
4. 영어 받아쓰기
5. 내일 할 일 (청사진)
6. 감사한 일

 

0. 오늘의 학습 시간
11:30 ~ 13:00(1시간 30분): 점심에 오뎅 호다닥 먹고 와서 공부했다.
19:00~20:00 (1시간): 본가 가는 기차에서 공부했다.
21:00~24:00 (3시간): 본가에 와서 편안한 환경에서 공부했다.

 

1. 오늘 배운 것
1. 구간 탐색에서 방향에 따른 이동 기록의 상태값이 여러개일 때의 처리 실습
2. 간단한 JOIN 및 서브쿼리 문제 풀이

 

2. 오늘의 알고리즘
1. 드디어 구간 탐색 마무리 하고 사각형 칠하기 파트 진입!
2. 간단한 SQL문 풀이
3. 리트코드 HARD 풀이 (스도쿠 문제)

https://github.com/choichanhyeok/codetree-TILs/tree/main/231208

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

3. 이주의 CS
이번주는 모두의 네트워크 3장(: 물리 계층의 역할과 랜 카드의 구조) 진입

(2023-12-04)
- 데이터란 0과 1로 이루어진 신호를 이용한 "완전한 정보"의 조합으로 구성되어 있다.
- OSI 모델에서 이를 담당하는 곧은 맨 아래 "물리 계층"이다.
- 우리는 컴퓨터 통신을 위해 아날로그 신호를 디지털 신호로 변환한다.
- 아니 그럼 전기 신호는 아날로그 신호인데 어떻게 이진 신호를 전기 신호로 변환하는건가
- 이 역할을 해주는게 랜 카드이다. 랜 카드는 0과 1을 전기 신호로 변환해준다.
- 따라서 랜 카드가 속한 물리 계층은 "컴퓨터와 네트워크 장비 간에 전송되는 데이터를 전기 신호로 변환하는 계층"으로도 볼 수 있다. 

- 위에서 설명한 아날로그 신호(전기)가 실제 통신을 위해 지나가야 하는 길을 '전송 매체'라고 표현한다.
- 전송 매체는 크게 '유선'과 '무선'으로 나뉜다.
- 가장 많이 사용되는 건 '트위스트 페어 케이블이고 UTP와 STP가 있다.
- UTP는 실드가 없는 반면에 STP는 실드가 있어 외부 간섭(노이즈)에 강하다. 하지만 가격 또한 비싸서 사실 대부분 UTP를 사용한다
- *** 여기서 중요한게, 우리가 일반적으로 '랜 케이블'이라고 부르는 것들이 바로 UTP와STP다. ***
- 랜 케이블의 경우 '다이렉트 케이블'과 '크로스 케이블'로 분류할 수 있다. 차이점은 크로스 케이블의 경우 송수신측의 충돌을 막기 위해 선 번호를 교차해서 연결한다.

- 예전에는 리피터라는 장비를 사용해 "전기 신호를 정형하고 증폭"했다.
- 요즘은 다른 네트워크 장비가 리피터 기능을 지원해서 굳이 쓸 필요가 없다.
- 그 외에 '허브'라는 장비가 있다. 리피터와 다르게 포트가 여러개 있어서 여러대와 통신이 가능하다. 허브도 리피터와 마찬가지로 전기 신호를 정형하고 증폭하는 기능을 한다.
- 컴퓨터 여러대가 데이터를 주고받을 때 유용하지만 "1:1로 데이터를 전송하는게 아니라 연결된 모든 컴퓨터에  데이터를 전송하기에 주의"해야 한다. 이렇게 스스로 판단하지 않고 모든 포트로 전기 신호를 보내는 특징 떄문에 '더미 허브'라고도 불린다.
- 그 대책으로 나온게 스위치다.

(2023-12-05)
[데이터 링크 계층: 랜에서 데이터 전송하기 파트 진입]
- 물리 계층의 랜끼리 데이터를 주고 받으려면 아래서 두번째 계층인 "데이터 링크 계층"의 기술이 필요하다.
- 데이터 링크 계층은 네트워크 장비 간에 "신호를 주고 받는 규칙"을 정하는 계층
- 일반적으로 가장 많이 사용되는 규칙은 "이더넷"이다.   ** 미친 .. 이더넷이 이거였다고? **
- Q. 이더넷은 랜에서 적용되는 규칙인거네요 ?  A. 맞아요 ~ 이더넷은 허브와 같은 장비에 연결된 컴퓨터와 데이터를 주고 받을 때 사용해요
- 여기서 허브는 "전달받은 전기 신호를 복원시키고 해당 전기 신호를 전달받은 포트를 제외한 나머지 포트에 전달하는 기계"
- 그래서 연결된 모든 컴퓨터에 데이터를 보내버려서 특정 컴퓨터에만 데이터 보낼 수 없음. 그래서 못보게 하는 규칙을 정했는데 ..
- 그래서 보내려는 데이터에 "목적지 정보"를 추가해서 보내고, 그 이외의 컴퓨터는 데이터를 받더라도 무시하게 되어있음.
- 사실 안보내는게 아니라 받았는데 "무시"하도록 되어있는 것
- 또 여러대의 컴퓨터가 동시에 데이터를 보낼 수 있는데 이 경우에 "충돌"이 발생할 수 있어서 이더넷은 "여러 컴퓨터가 동시에 데이터를 전송해도 충돌이 일어나지 않는 구조"로 만들어졌다.
- 바로 이게 !!! ** 그 유명한 CSMA/CD ** 이다 !!
- CSMA/CD는 허브등의 장비의 특성상 동시에 여러 요청을 보낼 수 있는데 그로인해 발생하는 충돌 현상을 방지하기 위한 방법이다.
- 다만 아쉽게도 현재는 효율이 안좋다는 이유로 CSMA/CD를 쓰지 않고, "스위치"라는 네트워크 장비를 이용해 문제를 해결한다.
+ CSMA/CD에서 CS는 "데이터를 보내려고 하는 컴퓨터가 케이블에 신호가 흐르고 있는지 아닌지를 확인한다"라는 규칙이고 MA는 "케이블에 데이터가 흐르고 있지 않다면 데이터를 보내도 좋다"라는 규칙이다. CD는 "충돌이 발생하고 있는지를 확인한다"라는 규칙이다.

(2023-12-06)
[MAC 주소의 구조]
- 랜카드가 뭐였지? => 데이터를 0과 1의 신호로 변환하는 것
- 그 랜카드가 만들어질 때 정해지는 "물리적인 주소"가 바로 MAC주소인데, 결국 데이터와 물리적 신호 사이의  매핑을 하는 놈이니까 얘의 식별 값으로 통신 주체의 식별을 하기로 했구나!
- "00-23-AE-D0-7A-9A" 같은 48 비트 숫자로 구성되있고 저기 앞 3개16진수 번호는 랜카드를 만든 제조사 번호, 뒤에 3개가 제조사가 붙인 일련번호야.
- MAC주소는 TCP/IP 모델 기준 "네티워크 계층"에서 사용되는데 이 계층에서 이더넷 헤더와 트레일러를 붙인다.
- 저번에 말했듯이 이더넷은 "네트워크 장비들 사이에 신호를 주고받는 대표적인 규칙중에 하나"이고 이 규칙을 이용해 네트워크 장비끼리 통신하기 위해 네트워크 계층에서 MAC 주소와 함께 패키징한다. 
- 이더넷 헤더는 [목적지 MAC 주소(6byte)], [출발지 MAC 주소(6byte)], [유형(2byte)]의 총 14byte로 구성되어 있다.
- 그니까 정리하면 "네트워크 장비 끼리 통신하려면 규칙이 필요한데, 그 규칙 중에 이더넷이라는 규칙을 사용하기 위해 네트워크 장비 식별을 위한 랜카드의 식별번호기도 한 MAC 주소를 보내야한다" 라는게 본 절의 골조인 거 같다.
- 유형에는 "프로토콜의 종류를 식별하는 번호"가 들어가는데, 여기서 프로토콜이라 하면 상위 계층 프로토콜 종류를 나타낸다. 에컨대 ARP나 RARP, IPv4를 판별하기 위한 16진수 번호가 들어간다. ( => ** 왜 필요한거지? **, 검색해보가)
- 이제 여기에 데이터 전송 도충에 발생하는 오류 발생 확인을 위한 FCS를 추가해주는데(트레일러로서) 이렇게 트레일러까지 붙으면 드디어 네트워크 계층의 PDU인 "프레임"이라는 단위로 패키징 되는 것이다.
-이제 이 프레임을 전기 신호로 변환해 허브로 전달하면 허브는 모든 포트로 이 데이터를 전송한다. 만약에 이를 수신받은 컴퓨터들이 자신의 MAC주소가 아닌데 왔을 경우 그냥 데이터를 파기해버린다.
- 또 만약에 이 상황에서 데이터를 동시에 송수신해 문제가 발생했으면 CSMA/CD 규칙에 근거해 뒤에 보낸 컴퓨터가 잠시 기다렸다가 데이터를 다시 전송한다.

(2023-12-07)
[스위치의 구조]
- 어제까지는 데이터와 전기신호를 매핑해주는 LAN의 식별번호인 MAC을 이용해 허브를 사용하는 과정을 배웠다.
- 허브는 CSMA/CD라는 규칙을 이용해 충돌을 방지하는데, 이는 효율적이지 않은 방식이다.
- 그래서 최근에는 스위치라는 걸 사용한다. 스위치는 "데이터 링크 계층"에서 동작하고 "레이어 2 스위치", "스위치 허브"라고 불린다.
- 근데 허브랑 스위치는 기능이 완전 다르다.
- 스위치 내부에는 MAC 주소 테이블 이라는 게 존재하는데, 이 테이블은 [포트 번호] - [MAC 주소] 형태로 등록되어 있다. 결론은 "MAC 주소 테이블은 스위치의 포트 번호와 해당 포트에 연결되어 있는 컴퓨터의 MAC주소가 등록되어 있는 테이버테이스이다."
- 사실 스위치를 막 켰을 땐 아무것도 없는데 "데이터 링크" 계층의 PDU인 "프레임"이라는게 만들어져서 전송되면 그 과정에서 MAC주소 테이블을 보고 이미 등록 안되어 있으면 새로 추가 하는 방식으로 MAC주소와 포트를 함께 등록한다. 
- 이게 바로 허브(더미 허브)에는 없는 기능이다. => 스위치만 가지고 있는 "맥 주소 학습"이라는 기능
- ** 근데 사실 스위치도 연결된 모든 포트에 신호를 보내는 경우가 있다. 예컨대 A, B 컴퓨터에 대한 MAC 주소가 스위치의 MAC 주소 테이블에 없을 때 A가 B를 호출할 때 A의 MAC 주소는 현재 넘어온 "프레임"을 보고 저장하면 되지만 B는 알 수 없다. 그래서 연결된 모든 포트에 MAC주소를 요청하는 데이터(프레임)를 전송하는데 이런걸 ["플러딩(홍수)"] 라고 한다.**

[전이중 통신과 반이중 통신]
- 전이중, 반이중 통신 같은 개념은 "데이터가 충돌하지 않는 구조"를 고민하는 과정에서 나왔다.
- 전이중 통신 방식은 데이터의 송수신을 "동시에" 통신하는 방식이고
- 반이중 통신 방식은 데이터의 송수신을 "번갈아가며" 통신하는 방식이다.
- 그냥 딱 봤을 땐 전이중 통신 방식(휴대폰 같은)게 좋아 보이지만 사실 이를 구현하기 위해 케이블에 필요한 선이 4쌍이 필요하다.
- 앞서 설명한 허브에서 충돌이 났던건 "송수신"이 나눠져 있지 않기 때문에 회선 하나를 송신, 수신 번갈아가면서 사용하는 "반이중 통신 방식"을 사용해서 그런거였다.
- 반면 스위치는 전이중 통신 방식이었어서, 충돌 없이 데이터를 주고받을 수 있었던 거였다.
- ** 이런 이유로 최근에는 "허브 대신 스위치"를 사용하는게 표준이다. 대부분 네트워크 업체들도 허브 안팔고 주로 스위치만 판다 **
- 충돌 도메인이란 걸 들어 봤는가? 앞서 반이중 통신 방식으로 통신할 때 "충돌"이 발생하는데 이 때 그 영향이 미치는 범위를 "충돌 도메인" 이라고 한다.
- 허브의 경우에는 어이없게도 충돌 도메인이 포트에 연결된 모든 컴퓨터에 미친다.
- 반면 스위치는 충돌 도메인의 범위는 각 포트에 컴퓨터들과 1:1 정도이다.
- 충돌 도메인의 범위가 넓을수록 네트워크가 지연되므로, 충돌 도메인의 범위는 네트워크 효율에 반비례한다.

*** ARP 공부해보기 ***

(2023-12-08)
** 이번 주 목표였던 3장을 넘어 4장까지 마무리하고 [5장. 네트워크 계층: 목적지에 데이터 전달하기] 파트에 들어왔다. **
- 이전 까지, 물리계층과 데이터링크 계층의 역할을 공부했는데 이번장에선 드디어 네트워크 계층의 역할에 대해 배운다고 한다.
- "다른 네트워크에 있는 목적지로 데이터를 전달하려면 .." 네트워크 계층이 필요하다고 한다. 사실 어제까지 배운걸 복기해보면 데이터를 LAN을 이용해 전기 신호로 변경하고 Swith나 Hub로 전달하는 과정까지 배웠어서, 그럼 외부로는 언제 나가는거지? 라는궁금증이 있었는데 오늘 배울 거 같다.
- 4장에서 설명했던 데이터 링크 계층에서는 이더넷 규칙 기반으로 데이터를 전송한다. 여기서 이더넷을 다시 기억해보면 허브 같은 네트워크 장비끼리 데이터를 주고 받을 때 필요한 대표적인 규칙중 하나이다.
- 즉 물리적으로 연결 된 하나의 네트워크 안에서만 통신이 가능하다는 것을 의미하는데 아예 외부의 다른 네트워크와 통신하게끔 돕는게 네트워크 계층의 역할이다.
- 이 떄 필요한게 바로 "라우터"고 사용하는 식별 정보는 MAC 대신에 IPfksms rjf tkdydgksek.
- 헤더 정보를 다 기억할 필요는 없고 "출발지 IP 주소"와 "목적지 IP 주소"가 있다는 사실만 기억하자.
- 어쨌든 이런 IP프로토콜을 사용해 캡슐화할 때는 데이터에 IP헤더가 추가된다. 이렇게 만들어지는 것을 IP패킷 이라고 한다.
- IP 주소는 사실 ISP(인터넷 서비스 제공자)들 한테 받을 수 있다. 
- IP 버전에는 Ipv4와 Ipv6가 있다.

 

4. 오늘의 무자막 시청
오늘의 영상: 주인공이 드디어 주방에 입성했다.

 

5. 내일 할 일 (청사진)
1. 진짜 서비스 만들기 프로젝트 시작 (이슈 기반 개발)
2. 류호석 듣기 
3. 자바의 신 공부
4. 평일 이해 안됐던 알고리즘 정리
5. 그놈에 BufferedReader, scanner의 실제 구현 원리 기반해 차이 공부
6. Stringbuilder가 가지는 이점 실제 원리 보면서 공부
7. InputStream의 진짜 역할 공부
8. Comprator와 익명 클래스 공부
9. 일요일 기술 블로깅 준비
10. 클린 코드 시리즈 연재
11. 평일 공부한 네트워크 내용 정리

 

6. 감사한 일
오늘 잠을 너무 푹 자서 아침에 일어났을 때 말도 안되게 개운했다. 덕분에 하루를 너무 열심히 살 수 있었기에 감사하다,

 

 

오늘 하루도 공부할 수 있어 크게 감사합니다

2023-12-08 개발자 최찬혁