본문 바로가기
320x100
320x100

CS & Terminology - 컴퓨터지식 & 용어

컴퓨터 구조를 공부할때 Code/Data/Stack/Heap의 메모리 구조에 대해서 배운다. Java에서는 Stack/Heap/Method/Native Method Stack/PC Register로 메모리가 구분된다.
그럼 왜 이걸 공부했을까? 현업개발자 관점에서 생각해보면 Java언어를 배울 때 Static을 남발하면 GC가 메모리를 처리하지 못하고 어플리케이션에서 쭉 들고 있기 때문에 OOM(Out of memory)가 날 수도 있다는 사실을 알기때문에 메모리 구조를 미리 아는 것, 내가 작성한 코드가 메모리에 어떻게 꽂히는지 아는게 중요하다고 생각했다.
[ 메모리구조 -> 코드레벨의 작성법 ]
 
그리고 운영체제/메모리/프로세스/스레드(자식/좀비)를 잘 알면 Multi process, Multi thread로 프로그램을 작성할 수 있고 이는 Spring Batch 등에서 사용된다.
물론 JNI(Java Native Interface)도 공부해야겠지만 말이다.
[ 운영체제 -> 효율적인 프로그래밍 ]
 
그리고 우리는 초딩중딩고딩시절 게임을 했다. 그때 맨날 하는 이야기. 아 겜 렉 엄청 심하네..!!
나는 카프카를 공부하고 사용하면서 Kafka Consumer Lag에 대한 개념들을 배우고, 이 LAG이 생기지 않기 위해 어떻게 해야 하고 모니터링하는 방법에 대해서 배웠다.
그럼 여기서 눈치챘을 것 같다. 게임에서의 렉은 kafka consumer에서 나오는 lag과 같은 의미이다. 지연(=delay)이란 뜻이다.
영어만 잘해도 우리 생활에 녹아있는 용어들은 종종 CS 포함 개발을 배우는데 도움이 된다.
[ 영어 -> 개발 전체에 도움 ]
 
또한 대학교때 운영체제를 배우며 Round-robin이란 개념을 배웠다. 그때는 이런 CS가 얼마나 중요하다고.. 언제 쓰이는지도 잘 모르겠는데.. 라는 생각을 하는 학생들이 많았고, 나도 어느정도 그들의 생각과 같았다.
카프카 프로듀서에서 record를 publish(produce)할때 key값을 생략할수도 있고, 명시할 수도 있는데 생략하면 round-robin방식으로 모든 파티션에 분배된다고 한다.
[ 운영체제 -> 카프카 ]
 
또한 네트워크 수업을 들으며 TCP, UDP를 C++로 구현해봤지만 이 개념이 추후 현업에서 또는 기술레벨에서 어떻게 사용되는지 과거에는 구체적으로 알지 못했다.
우리가 웹사이트를 이용하는 것 또한 네트워크 통신의 일종이고, 하다못해 스프링 AP와 DB간의 커넥션도 TCP이다(아닌것도 있다).
그리고 네트워크 수업이 너무 어려웠다고 대충 공부한 나 자신을 반성한다. 왜냐하면 도커와 쿠버네티스에서 네트워크 지식을 고수준으로 요구하게 된다. CNI(Container Network Interface), 특히 k8s의 Service/Ingress/DNS 등을 공부하며 네트워크를 예전에 딥하게 공부해놓을껄 하는 생각을 갖게 됐다.
[ 네트워크 -> 웹/서버/도커/쿠버네티스 ]
 
내가 블로그에 IT관련 글을 쓸때 내가 추구하는 목적은 포스팅을 보는 독자에게 단순정보+왜 이걸 썼는지+어디에 이걸 쓰는지+내가 느끼는 이 개념or기술의 특징과 장단점에 대해서 알려주고 싶은 뜻을 갖고 있다.
예전에 내가 학교, 책 또는 강의에서 봤던 내용들은 지금은 나에게 "아하! 그래서...그때 그 개념이.." / "오 그 용어가 이 뜻이었네!?" 라는 말을 나오게 한다.
 
그리고 과거 동료였던 프론트엔드 개발자는 CS의 중요성을 알지만, Javascript와 React/Vue를 개발할 때는 잘 사용하지 않는것 같고, 공부를 해도 어떤 부분을 공부해야될지 모른다고.. 그래서 결국 CS보다는 React 관련 다른 강의만 본다고 했다.
왜 안쓰이는가..!? useMemo 훅만 해도 컴포넌트가 사라지기 전까지 메모이제이션이라고 하는 알고리즘 기법을 사용한다.
 
나는 TIL(Today I Learn)보다는 WIL(What I Learn)을 더 선호한다.
내가 무엇을 배웠는지 알려면 책의 끝장을 덮어야 하지 않을까 생각한다.
그리고 IT에선 딱히 (기승전결)은 없지만 '기'일때 어떤 A라는 개념에 대해서 blue라고 말했다가
'전'쯤에서 A라는 개념이 사실은 yellow라고 재 정의를 내리게 된다면... 1달 전(기)에 내가 알고 있던 것과 1달 후(전)에 알고 있는 내 지식이 달라서.. 내 글을 읽는 사람한테 혼동된 개념을 주입시킬 수도 있지 않을까 싶다.
물론 취준생이나 신입기준에서는 공부를 안하는것보다 TIL하는게 나을 수도 있다.
 
그리고 나는 19세기 영국의 정치가 벤저민 디즈레일리가 말한 '가장 무서운 사람은 책을 읽지 않은 사람도 아니고 책을 많이 읽은 사람도 아닌 단 한권의 책을 읽은 사람' 이라는 말에 공감한다.
예를 들어 Java의 Test Code 이렇게만 작성하세요 < 라는 책이 있다고 치자(가상의 책이다). 근데 이 책에서는 JUnit + Mockito를 사용한 테스트만 나와있고, 이게 유일한 방법이라고 말한다.
하지만 현실은 classicist vs mockist의 대립점도 있고 Mock객체 대신 Spy를 사용할 수도 있다. 또한 Kotlin에서는 Kotest를 사용하는 방법도 있다.
항상 어떤 한 가지를 도입하거나 공부할때는 공식문서+책+강의 를 모두 활용하는 편이다.
 
그렇기 때문에 나는 개발에 관련한 글을 쓸 때 항상 어렵다. 하나의 글에 다양한 시각을 담고 싶고, 현재 취준생 또는 신입들을 위해서 이런거 왜 배우지?라고 생각할 수 있는 코어개념들이 현재 여기에서 사용된다고 알려주고 싶다.
글 쓰는 것이 어렵지만 그럼에도 불구하고 좋은 글을 쓰고 싶고 길 잃은 개발자들에게 등대가 되어주고 싶다.
 
 

출처

썸네일 생성 - GPT 4o(DALLE)

https://d2.naver.com/helloworld/1203723
https://www.geeksforgeeks.org/java-memory-management/

Java Memory Management - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 
https://redpanda.com/guides/kafka-performance/kafka-consumer-lag

Kafka consumer lag - Measure and reduce

Learn how to optimize Apache Kafka for maximum performance and scalability with tuning tips and best practices.

redpanda.com

320x100

댓글