본문 바로가기
꾸준히

[TIL-179] 자바의 역사, 간만에 낮잠

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

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

 

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

 

0. 오늘의 학습 시간
07:00 ~ 08:00: 오늘은 본가에서 바로 회사로 가서 아침에 기차를 탔다. 기차에서 한 시간동안 백트랙킹 문제를 풀었다.
12:30 ~ 13:00: 갑자기 너무 졸려 공부 전에 10분만 자려했는데 눈 떠보니 12시 반이었다. 부랴부랴 급하게 30분 공부했다.

 

1. 오늘 배운 것
자바의 역사

 

2. 오늘의 알고리즘

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

오늘은 이상하게 피곤해서 운동 끝나고 졸아버렸다 .. TIL만 쓰고 자려고 한다.

 

3. 이주의 CS
(2023-12-10)
[이제는 눈감고도 말할 수 있는 또 자바의 역사]
- 오픈 소스 공부했을 때 배웠듯이 70~80년대 개인용 컴퓨터(PC)가 보급되면서 Oracle 같은 소프트웨어 기업들이 등장했다.
- 그런 기반 위에 1991년, 내가 태어나기 5년전 즈음 Green이라는 프로젝트가 생기면서 자바의 탄생이 시작됐다.
- 이 프로젝트의 목적은 제임슨 고슬링 형 포함 3명으 ㅣ친구들이 TV와 시청자가 서로 상호 작용 할 수 있는 무언가를 만들기 위해 시작했었다. 지금의 IPTV 같은 느낌이다.
- 그 때 지은 자바의 모태였던 언어의 이름은 Oak였다 (참나무: 고슬링 형 사무실 앞에 있는 나무).
- 나 태어나기 1년 전에 Oak라는 이름의 언어는 커피의 종류였던 Java라는 이름으로 드디어 세상에 등장했다.
- 당시 자바의 모토는 WORK (WorkOnceRunAnywhere): 한 번 개발하면 어디서든 동작하는 것이었다.
- 내가 태어난 해인 96년에 JDK 1.0이 등장했고 그 다음해인 JDK1.1 은 1년만에에 22만 다운로드를 기록하면서 엄청난 성장을 보이게된다.
- 중간에 J2SE(Java 2 Standard Edtion)으로 변경됐는데 이유는 그 당시에 J2EE, J2ME와 같은 기업용, 모바일(블랙베리) 같은 Edition들과 혼동을 막기 위해서였다. (같은 시리즈로 분류하고 싶어서인가? 어쨌든 ..)
- 그렇게 J2SE는 1.4 버전까지 출시되다가 1.5버전 부터는 앞에 1.을 뺀 J2SE 5라는 형식으로 불리게 됐다.
- J2SE 1.5 까지는 그대로 J2SE라는 prefix를 사용했지만 1.6 버전부터는 Java SE 1.6 같은 형식으로 불리기 시작했다.
- Java SE 1.6 까지는 기존에 고슬링 형이 있었던 Sun MicroSystem이 주요 스펙을 만들고 java를 만들어 왔지만 SE 7 부터는 Oracle이 선 마이크로 시스템즈를 인수해 지금에 이르렀다.
- 사실 자바 표준의 이름이 JDK, J2SE, Java SE로 변경됐지만 이 책에서는 자바 표준 버전을 일반적으로 불리는 JDK라고 사용한다고 한다.
-  사실 Java 버전에서 제공되어야 하는 표준 문서가 만들어지면 그 기준에 해당하는 각 벤더에 맞는 JDK가 별도로 만들어진다. 예컨대 IBM과 HP 서버는 별도의 OS를 가지고 있는데, 여기에 최적화되어 있는 JDK를 개발해서 사용하고 있다.
- 단, JDK 버전만 맞으면 어떤 OS에서 개발하든지 적용한 OS에서 컴파일만 하면 애플리케이션 실행에 문제가 없다.
- 그리고 맨날 보는 "OpenJDK"라는 건 "소스에 라이선스 문제가 되는 부분을 제거한 완전 오픈소스 버전의 JDK"를 말한다.
- 알고 있겠지만 JRE는 실행만을 위한 환경이다. JDK에서 개발에 필요한 컴파일 등의 각종 프로그램이 제외된 상태로 설치된다.

(2023-12-11)
[전송계층의 역할: 신뢰할 수 있는 데이터 전송하기]
- 다른 네트워크로 데이터를 전송하려면 네트워크 계층에 있는 라우터의 라우팅 기능을 이용해야한다.
- 근데 데이터 전송을 하더라도 목적지에 도착을 못하는 경우는 어떻게 할까? 더 이상 내 데이터는 신뢰할 수 없는 데이터가 된다.
- 이런 상황에 대비해 "목적지에 신뢰할 수 있는 데이터를 전달"하기 위해 전송 계층이 필요하다.
- 전송계층은 어떻게 전달하는 데이터를 "신뢰할 수 있는 상태"로 만들까?
- 먼저 '오류를 점검"한다. 오류가 발생하면 데이터 재전송을 요구하는데 그 때 하헌우 코치님이 말씀해주셨던 TCP의 재전송이 여기에서 일어나는 거 같다.
- 아하! 그럼 전송 계층은 '오류를 점검하고 대응하는 계층이구나!' 라고 정리가 가능한 거 같다. 근데 사실 역할이 하나 더 있다. 바로 '전송된 데이터의 목적지가 어떤 어플리케이션인지 식별하는 역할'이다.
- 어떤 어플리케이션인지 어떻게 식별하냐고? 바로 'port'를 이용해 식별한다. 예컨대 ssh에 요청을 보낼거면 22번 포트를 써야하는 맥락과 같은 것이다.
- 전송 계층은 2가지로 구분할 수 있다, "신뢰성을 중요하게 생각하냐", 아니면 "효율성을 중요하게 생각하냐"
- 각 관점에 따라 '연결형 통신', '비연결형 통신'으로 구분할 수 있다. 
- 연결형 통신은 상대편과 유기적으로 협력해가면서 통싱하는 방식이고 비연결형 통신은 '닥치고 내 편지 받아라' 전략이다.
- 이쯤 되면 느낌이 오는게 당연하지만 정리하면, 연결형은 TCP이고 비연결형은 UDP이다.

[TCP의 구조]
- TCP로 메시지를 전송할 때 우리는 TCP 헤더라는 걸 붙이는데, 이렇게 TCP 헤더가 붙은 메시지를 우리는 "세그먼트"라는 PDU로 표현한다. (UDP 헤더가 붙으면 데이터그램~)
- IP 헤더와 마찬가지로 일일이 다 외울 필요 없고 중요한 것만 기억하면 된다.
- TCP는 데이터 전송을 위해 먼저 "가상의 동점 통신로"를 확보해야 한다.
- 3 웨이 핸드셰이크는 텍스트로 표현하기 어려워 필요시 164p  직접 확인하기

 

4. 오늘의 무자막 시청
오늘의 영상: -

 

5. 내일 할 일 (청사진)
1. 자바의 신 마저 공부하기 (너무 재밌어서 못참겠어 .. 딴 거 빨리하고 자기전에 공부하자)
2. 점심시간에 코드 트리, 프로그래머스(sql) 풀기
3. 주짓수 다녀와서 꼭 flutter 숙제 채점 하고 우수 답안이랑 비교해보기
4. 평일 이해 안됐던 알고리즘 (투 포인터, 병합 정렬, 스도쿠 中 택1 해서) 조금이라도 고민해보기
5. 점심시간 끝나기 30분 전에 네트워크 공부하기

 

6. 감사한 일
회사에서 고민하던 협업 관련 문제에 해답을 얻었다. 기술적인 성장이 아니더라도 꾸준히 발전하는 모습에 감사하다.

 

 

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

2023-1 개발자 최찬혁