본문 바로가기
꾸준히

[TIL-171] Comparable과 Comparator, TCP/IP 기초

by 무자비한 낭만주먹 2024. 1. 6.

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

 

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

 

0. 오늘의 학습 시간
06:00 ~ 09:30(3시간 30분): 회사 출근 전에 공부했다. 
11:30 ~ 13:00 (1시간 30분): 빵으로 점심을 빠르게 때우고 공부했다.
19:00 ~ 20:00 (1시간): 집 내려가는 기차 안에서 한 시간 공부했다.

 

1. 오늘 배운 것
(1) 회사에서 업무를 할 때 내 역할이 아닌 부분은 확실하게 말해주는게 오히려 일을 더 깔끔하게 만들 수 있다는 점을 배웠다.
(2) 그냥 이론적으로 공부해봤던 익명 클래스가 실제로 사용되는 예시를 봤고 이걸 깊게 파봐야겠다고 생각했다.
(3) 어렴풋해졌던 TCP/IP 각 계층의 역할을 리마인드했다.

 

2. 오늘의 알고리즘
다양한 형식의 객체 정렬 문제를 풀어봤다. 객체 정렬을 위해 시도할 수 있는 방법은 크게 2가지인데

(1) Comparable 인터페이스를 상속받는 것
(2) Comparator 인터페이스를 익명 클래스로 사용하는 것
    (이 때 Comparator는 함수형 인터페이스여서 람다로도 사용 가능하다.)

그 외에는 사실 크게 어려울 게 없었다. 문자열 정렬을 위한 비교로 String.compareTo()를 써야 한다는 거나 Comparable이나 Comparator의 재정의 함수가 각각 compareTo()와 compare()로 다르다는 것 정도가 잊어먹기 딱 좋은 문제였다.

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

3. 오늘의 CS
이번 주 선정 도서: 모두의 네트워크

(1) 네트워크의 구조: (2023-11-28)
- 네트워크는 여러 분야에서 사용하는 용어다. 따라서 컴퓨터 간의 네트워크는 "컴퓨터 네트워크"라고 불러야 명확하지만 앞으로 편의상 "네트워크"라고 표현하기로 한다.

- 이런 네트워크를 통해 우리는 각 노드(컴퓨터) 간의 데이터(파일) 전송, 웹 사이트 열람, 메일 송수신과 같은 일을 할 수 있다.

- 이런 데이터를 주고받는 과정(통신)을 위해선 "규칙"이라는게 필요하다. 규칙중엔 "패킷"이라는게 있는데 "택배"라고 생각하면 편하다. 우리는 네트워크를 통해 전송되는 데이터의 작은 조각을 "패킷"이라고 표현한다.

- 굳이 이렇게 작게 나누는 이유는 네트워크의 "대여폭"을 너무 많이 점유할 정도로 큰 패킷은 다른 패킷의 흐름을 막을 위험이 있기 때문에 잘게 쪼개서 보내는 것이다. 

- 예를 들어 사진 같은 것도 여러개의 패킷으로 나눠서 보내는데, 이 패킷들을 받는 곳에선 이를 다시 퍼즐처럼 조립해 원본으로 만드는 과정이 필요하다. (이를 위해 각 패킷의 순서 정보등이 같이 담겨 목적지로 던져진다)

(2) 네트워크의 구조: (2023-11-29)
- 정보의 양을 나타내는 단위는 bit와 byte가 있다. 

- 이진 코드로 문자를 표현할 수 있는 방법은 ASCII와 같은 문자 대응 기준이 있기 때문이다. 

(3) LAN과 WAN: (2023-11-30)
- WAN은 ISP가 제공하는 서비스를 사용하여 구축된 네트워크를 의미한다. LAN과 LAN을 연결하는 것으로 이해해도 된다.

- 인터넷을 사용하기 위해선 "ISP"와 "인터넷 회선"이 필요하다. 회선의 경우 2018년 기준 광랜을 많이 사용한다.

- 가정에서 네트워크 구성시 ISP와 연결되기 위해 "인터넷 공유기"라고 하는 장비가 필요하다.

- 연결 방식의 종류는 "유선"과 "무선"으로 나뉘는데 이 기준은 "LAN"케이블의 필요 여부로 기억하면 쉽다.

- 가정용과 비교해 소규모 회사의 네트워크 구성에서 달라지는 점 중 하나는 DMZ라는 영역이 있다는 점이다.

- DMZ는 외부에 공개하기 위한 네트워크다.

- 공개용 서버는 주로 웹, 메일, DNS 서버를 공개한다.

- 서버는 "사내에 설치", "데이터 센터", "클라우드"라는 환경을 통해 운영할 수 있다. 

- 사내 또는 데이터 센터에 서버를 두고 운영하는 걸 온프레미스라고 한다. 클라우드와 자주 비교된다.

(4) 네트워크의 규칙 (2023-12-01)
- 프로토콜은 별 거 아니고 그냥 "약속" 이다.

-  옛날에는 "같은 회사의 컴퓨터 끼리만 통신이 가능"하던 시기가 있었다. 네트워크 관련 표준 규격이 달라서 그랬는데 현대에는 "국제표준화 기구(대표적으로 ISO)"에서 표준 규격을 제정했다.

- ISO에는 OSI라는 표준 규격(인터페이스)이 존재한다.

- 현재는 TCP/IP 모델을 사용하고 있다.

- 데이터를 보내기 위해선 데이터에 앞부분에 전송하는데 필요한 정보를 붙여서 다음 계층으로 보내야한다. 이를 헤더라고한다.

- 당연한 얘기지만 헤더에는 데이터를 전달받을 상대에 대한 정보도 포함되어있다.

- 계층을 내려가면서 각 계층에 필요한 헤더를 하나씩 더 붙여 나가는 걸 "캡슐화"라고 한다.

- 반대로 데이터를 수신하는 쪽에서 헤더를 하나씩 제거하는 것을 "역캡슐화"라고 한다.

- (1) 응용 계층에선 웹사이트 접속을 위한 요청 데이터가 만들어진다.

- (2) 응용에서 전송 계층으로 넘어가는 과정에서 "신뢰할 수 있는 통신을 위한 헤더"인 전송 계층 헤더가 붙는다.

- (3) 전송계층에서 네트워크 계층으로 내려갈 땐 "데이터를 나른 네트워크와 통신하기 위한" 네트워크 계층 헤더를 붙인다.

- (4) 네트워크 계층에서 데이터 링크 계층으로 내려갈 땐 "물리적인 통신 채널을 연결하기 위한 헤더와 트레일러"가 붙는다.

- 트레일러는 데이터를 전달할 때 데이터의 마지막에 추가하는 정보를 말한다.

- 데이터링크 계층에서 만들어진 데이터는 최종적으로 "전기 신호"로 변환돼서 수신 측에 전달된다.

- VPN이란 무엇인가?

 

4. 이주의 클래스 다이어그램

 

- 다른 방법 재고중

 

5. 오늘의 무자막 시청
오늘의 영상: 더그의 일상
- 할아버지가 더그한테 새를 위한 모이 보관소 맡겼는데 또 다람쥐가 난장판을 만들어놓고 갔다. 근데 더그가 다람쥐를 잡다가 고놈 집을 부숴놔서 식량을 다 못쓰게 만들었는데 이게 미안하다고 할아버지가 아끼는 땅콩잼을 몰래 가져다줬다. (결국 들켰지만)

 

6. 내일 할 일 (청사진)
1. LPVS 오픈소스 이슈 해결 (Java Doc)
2. 시뮬레이션 (시간 관련 문제) 풀이
3. Comparable, Comparator 관련 분석 작업 기록
4. 기술 블로깅 주제 선정
5. 변형 하노이탑 풀기
6. 순환 큐, 위상 정렬 개념 정리하기

 

7. 감사한 일
오늘 공부가 너무 잘됐다. 주말도 집중해서 이번주도 잘 마무리하자!

 

 

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

2023-12-01 개발자 최찬혁