본문 바로가기
꾸준히

[TIL-190] 오랜만에 들어본 칭찬

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

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

 

목차
0. 오늘의 학습 시간
1. 오늘 배운 것
2. 오늘의 알고리즘
3. 이주의 CS
4. 오늘의 무자막 시청
5. 오늘 할 일 (청사진)
6. 감사한 일

 

0. 오늘의 학습 시간
00:00 ~ 03:00: F-lab 갓생 챌린지 새벽공부
11:30 ~ 13:00: 점심시간 짜투리 공부
22:00 ~ 23:00: 멘토링
23:00 ~ 24:00: 야간 학습

 

1. 오늘 배운 것
항상 누구의 취향을 다 맞출 수 있는 코드는 없다. 다만 수 많은 고민 뒤에 얻은 내 '주관'을 일관되게 가져가는 것은
.. 왜 중요하지? 아까는 그냥 받아들였는데 이것도 그냥 받아들이지 말고 멘토님은 왜 그렇게 생각했을까 조금만 고민해보자, 꼭 조금만 고민해보기 .. 시간이 많지 않으니

 

2. 오늘의 알고리즘
굴지의 백트래킹 문제 풀이

https://github.com/choichanhyeok/leetHyeok/blob/main/0093-restore-ip-addresses/0093-restore-ip-addresses.java

 

3. 이주의 CS
[2024-01-01]
- JVM의 메모리에서 'Heap, Method'영역을 제외한 나머지 영역은 공유되는게 아니다.
- 스택 영역의 경우 '쓰레드 마다' 런타입 스택이란 걸 만들고 스택 프레임을 쌓는다. (여기서 스택 프레임은 메서드 콜을 의미함)
- 결국 쓰레드마다 스택 안에 메서드 콜 정보를 쌓는다는 의미
- 에러 났을 때 보면 에러 내용이 스택 형식으로 적재되지 않은가, 그 얘기다.
- 그놈에 PC는 결국 스택 프레임을 가르키는 놈인데, 스택 프레임이 아까 뭐라고했는지 기억 나는가? 메서드 콜이다. 
- 결국 PC는 메서드 콜 위치를 가르키는 놈이다. 
- 클래스 로더가 하는 일은 결국에 클래스 파일을 바이트 코드로 번역하고 static 값들을 메모리에 적재하는 것 까지이다.
- 이건 중요한 건 아니지만, 클래스 레벨에서 new 한 객체들은 사실 심볼릭 메모리 레퍼런스라고 해서 논리적으로만 생성된다.
- Stop-The-World는 GC가 동작하는 동안 다른 작업이 멈추는 현상을 의미하는데
- 이는 메모리를 효율적으로 비우기 위해 메모리의 상태가 변하면 안되는 경우에 이렇다.
- 그래서 이 STW는 서비스에 영향을 끼칠 수 있고 이 시간을 최소화하는 것이 필요하다.
- 주로 에덴 영역을 거쳐 OLD 영역으로 넘어온 경우에 이와 관련된 문제가 생긴다.
- 또한 GC는 실시간성이 중요한 서비스에 좋지 못한 선택이 될 수 있다.
- 그래서 이 GC를 어떻게 효율적으로 튜닝할 건지에 대한 내용이 GC 튜닝이다.
- GC는 어떤 Object를 Garbage로 판단하느냐는 Reachable이라는 개념을 이용한다.
- 결국 참조되냐 참조되지 않냐 여부를 보고 지운다는건데, 간단히 얘기하면 Stack이나 Method 영역에 참조되고 있지 않는 객체를 Garbage로 판단한다.
- 옛날 GC는 YOUNG와 OLD 영역으로 나눴고, YOUNG 영역을 OLD 영역에 비해 작게 만들었다.
- 이에 대한 근거는 대부분의 객체는 오래 남아있지 않는다는 이유 때문이었다. 이렇게 작은 영역(YOUNG)에 대한 GC라고 해서
우리는 이를 Minor GC 라고 불렀다.
- 반대로 OLD 영역에 대한 GC는 Major GC라고 부른다.
- 사실 STW문제는 GC 알고리즘에 따라 YOUNG영역에서도 충분히 발생할 수 있다.
- 최근 사용되고 있는 GC는 1.9부터 디폴트가 된 G1 GC이다.

[2024-01-02]
- 쓰레드를 생성하는 방법에는 Runnable 인터페이스를 사용하는 방법과 Thread 클래스를 사용하는 방법 두가지가 있다.
- Runnable 인터페이스와 Thread인터페이스 둘 다 java.lang 패키지에 있다.
- Runnable 인터페이스에 선언되어 있는 메서드는 run() 하나다.
- 반면 Thread 클래스는 매우 많은 생성자와 메소드를 제공한다.

[2024-01-03]
- 쓰레드 usecase 공부

[2024-01-04]
- 자바의 컴파일 원리
- JVM의 각 메모리의 역할과 사용시 효능
- 객체지향이란 무엇인가

 

4. 오늘의 무자막 시청
오늘의 영상: 주인공 녀석 결국 와인 얻어먹더니 사고쳤다.

 

5. 오늘 할 일 (청사진)
- 자바의 신 무조건 20분 읽기 (점심시간): JVM 원리 복기로 대체
- SQL 무조건 한 문제씩 해결 (짜투리 시간: 쉬운걸로)
- 멘토링 준비 (오늘이 버저비터)
- 무조건 꼬리질문 2문제씩 해결 (무조건 쉬운걸로: 쉬운 거 부터 먼저 다 해결하는 방식으로)
- 알고리즘 무조건 1문제씩 해결 (알고리즘 챌린지 코드, 자기 전에 할 계획)
- 영어 회화 20분

 

6. 감사한 일
오늘 최근 듣게된 코스에 첫 멘토링을 받았다. 열심히 준비했는데 칭찬을 받아서 기분이 좋았다.
다만 칭찬 받았다는 사실에 집중하지 말고 열심히 준비했다는 사실에 집중해서 "한 주간 열심히 준비할 수 있었음에 감사"하다고 생각 .. 하려고 하는데 칭찬 받아서 너무 기분이 좋다.

 

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

2024-01-05 개발자 최찬혁

'꾸준히' 카테고리의 다른 글

[TIL-192] JVM과 GC  (1) 2024.01.08
[TIL-191] 객체지향에 대한 철학  (0) 2024.01.08
[TIL-189] 옳고 그름  (0) 2024.01.08
[TIL-188] 새해 첫 출근  (0) 2024.01.08
[TIL-187] 2024 New 최찬혁  (0) 2024.01.08