18 posts

  • 운영체제 프로세스와 스레드 🧵
    2025.03.22
    이번 포스팅에서는 운영체제의 핵심 개념인 프로세스와 스레드에 대해 자세히 알아보겠습니다. 프로세스프로세스(process)는 한마디로 프로그램이 실행 중인 상태, 즉 실행 중인 프로그램의 인스턴스를 의미합니다. 우리가 컴퓨터에서 어떤 소프트웨어를 실행하면, 그 프로그램 파일이 디스크에서 메모리로 로드되고, 운영체제로부터 CPU 자원을 할당받아 명령을 하나씩 수행하게 되는데요. 이 과정이 바로 프로세스입니다. 운영체제에서 프로세스는 자원을 할당받는 최소 작업 단위로 정의되며, 각 프로세스는 자신만의 독립된 메모리 공간을 갖습니다. 이 독립성 덕분에 프로세스들은 서로 간섭하지 않고 안정적으로 실행될 수 있는데요. 예를 들어 엑셀과 동시에 카카오톡을 실행한다고 해보면, 두 프로세스는 각각 독립적으로 동작합니다...
  • [F-Lab] Java Backend 멘토링 2개월 후기
    2025.01.19
    안녕하세요. 벌써 F-Lab 멘토링 프로그램을 시작한 지 2개월이 지났는데요. 이번 글에서는 지난 한 달 동안 제가 경험한 다양한 일들과 배운 점들을 공유하며, 멘토링을 통해 느낀 성장의 이야기를 나눠보려고 합니다.  한 달 동안의 경험드디어 본격적으로 프로젝트를 시작했습니다! 사실 이전에는 프로젝트 설계를 구체적으로 해 본 경험이 없어서 어디서부터 시작해야 할지 막막했는데요. F-Lab을 통해 도메인 용어 사전, 요구사항 정의서, ERD를 작성하며 체계적인 설계 과정을 경험해 볼 수 있었습니다. 프로젝트 초반에 화면 기획서를 만들어 멘토님께 보여드렸는데, 엄청 극찬을 해주셔서 뿌듯했던 기억이 아직도 선명히 남아있습니다. 😊 한 달동안 프로젝트를 통해 다양한 경험들을 해보았는데요.GitHub의 경우 이..
  • [F-Lab] Java Backend 멘토링 1개월 후기
    2024.12.11
    안녕하세요. 벌써 F-Lab 멘토링 프로그램을 시작한 지 한 달이 되었습니다. 한 달 동안 단순한 배움 이상의 경험과 성장을 얻을 수 있었던 소중한 시간을 보냈는데요. 이번 글에서는 제가 F-Lab을 선택한 이유와 멘토링을 통해 느낀 점, 그리고 앞으로의 계획을 공유해보려고 합니다.  시작하게 된 이유저는 만 4년 차 SI 개발자입니다. 개발 공부를 처음 시작했을 때부터 서비스 기업에 입사하는 것이 꿈이었지만, 현실적으로 취업 준비를 오래 할 수 있는 환경이 아니었습니다. 인프랩 CTO 이동욱 님과 전 우아한형제들 기술이사셨던 김영한 님께서도 이직을 통해 서비스 기업에 가셨다는 이야기를 듣고, 일단 SI 기업에 입사한 뒤 경험을 쌓고, 이후 서비스 기업으로 이직을 노려보자는 전략을 선택하였습니다. 그렇게..
  • 가비지 컬렉터 G1 GC 🗑️
    2024.11.17
    이번 포스팅에서는 JVM의 GC(Garbage Collection), 그중에서도 G1 GC에 대해 자세히 알아보겠습니다.  Garbage Collection(GC)이란? 자바에서는 메모리 관리의 복잡성을 줄이기 위해 Garbage Collection(GC)이라는 자동 메모리 관리 기법을 제공합니다. 개발자는 메모리를 처리하기 위한 로직을 직접 만들 필요가 없으며, 절대로 만들어서도 안 됩니다. 그렇다면 GC는 정확히 무엇을 하고, 어떻게 동작할까요?  자바에서의 '쓰레기'란?자바에서 '쓰레기'는 더 이상 참조되지 않는 객체를 의미합니다. 즉, 프로그램에서 사용되지 않는 객체로, 메모리에서 제거되어야 하는 대상입니다. public void createObjects() { Object obj1 = ne..
  • HotSpot VM과 JIT 컴파일러🔥
    2024.11.16
    오늘은 HotSpot VM과 JIT 컴파일러에 대해서 포스팅을 해보겠습니다.  HotSpot VM자바 관련 문서들을 읽다 보면 HotSpot VM이라는 용어를 종종 접할 수 있습니다. HotSpot VM에 대해서 살펴보기 전에 우선 HotSpot이 무엇일까요? 단어를 직역하면 '뜨거운 지점'이라고 번역할 수 있지만, 자바에서는 '자주 실행되는 코드 영역'이라는 의미로 사용됩니다. 왜 이름을 이렇게 지었을까요? HotSpot VM은 원래 Longview Technologies라는 회사에서 개발되었고, 후에 Sun Microsystems가 이 회사를 인수하여 Java에 통합했습니다. 이 VM은 JIT(Just-In-Time) 컴파일러를 포함하고 있으며, 프로그램 실행 중 지속적으로 코드의 성능을 분석합니다...
  • [F-Lab] Java Backend 멘토링 시작 그리고 나의 커리어
    2024.11.05
    이번 포스팅에서는 에프랩 멘토링을 시작하게 된 계기와 그동안 겪어온 경험을 공유하려고 합니다.  에프랩에프랩을 처음 알게 된 것은 2년 전 인스타그램 광고를 통해서였습니다. 당시 6개월 과정이었고 금액이 부담되어 신청하지 않았지만, 이후 많은 수료생들이 대규모 서비스 기업에 취업하는 것을 보고 다시 관심을 가지게 되었습니다. 좋은 회사에서 일하고 싶다는 열망은 항상 있었지만, 시간과 금전적으로 여유가 없었기에 진행하고 있던 국비 과정을 수료한 후 바로 취업을 하게 되었습니다. 제가 취업했던 SI 기업은 초봉은 높지 않았지만 개발자들을 대우해 주는 분위기와 복지가 좋아서 처음엔 매우 만족하였습니다. 하지만 시간이 지나며 조직 문화에서 오는 스트레스로 건강상의 어려움을 겪게 되었고, 결국 퇴사를 결정했습니다..
  • JVM과 Class가 JVM에 로딩되는 과정 🧩
    2024.11.03
    안녕하세요. 오늘은 자바 가상 머신(JVM)에 대해 공부한 내용을 정리하려고 합니다. JVM은 Java 프로그램이 운영체제에 종속되지 않고 실행될 수 있도록 해주는 중요한 역할을 담당하고 있는데요. 이 포스팅에서는 JVM의 구조와 Class가 JVM에 로딩되는 과정에 대해 알아보도록 하겠습니다. JVMC나 C++과 같은 언어로 작성된 프로그램은 컴파일된 실행 파일이 특정 운영체제에서만 동작합니다. 예를 들어, Linux에서 컴파일된 프로그램은 Windows에서 실행되지 않습니다. 이러한 플랫폼 종속성을 해결하려면 크로스 컴파일(Cross Compile)이나 별도의 컴파일러가 필요합니다. Java는 JVM을 통해 이러한 플랫폼 종속성을 해결합니다. JVM(Java Virtual Machine)은 자바 바이..
  • [Clean Code] Chapter 7 - 오류 처리
    2024.10.17
    Chapter 7 오류 처리 상당수 코드 기반은 전적으로 오류 처리 코드에 좌우되는데, 여기저기 흩어진 오류 처리 코드 때문에 실제 코드가 하는 일을 파악하기가 어려워지는 경우가 있다.오류 처리는 중요하지만 오류 처리 코드로 인해 프로그램 논리를 이해하기 어려워진다면 클린 코드라 부르기 어렵다.이 장에서는 우아하고 고상하게 오류를 처리하는 기법과 고려 사항 몇 가지를 소개한다.   오류 코드보다 예외를 사용하라얼마 전까지만해도 예외를 지원하지 않는 프로그래밍 언어가 많았는데, 예외를 지원하지 않는 언어는 오류를 처리하고 보고하는 방법이 제한적이었다.오류 플래그를 설정하거나 호출자에게 오류 코드를 반환하는 방법이 전부였다. public class DeviceController { ... publ..
  • [Clean Code] Chapter 6 - 객체와 자료 구조
    2024.10.17
    Chapter 6 객체와 자료 구조 변수를 `private`로 정의하는 이유는 남들이 변수에 의존하지 않게 만들고 싶어서다.그렇다면 어째서 수많은 프로그래머가 `getter`와 `setter`를 당연하게 `public`으로 만들어 `private`로 선언한 변수를 외부에 노출할까?   자료 추상화 // 구체적인 Point 클래스public class Point { public double x; public double y;} // 추상적인 Point 클래스public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getT..
  • [Clean Code] Chapter 5 - 형식 맞추기
    2024.10.17
    Chapter 5 형식 맞추기프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다.코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 하며, 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다.필요하다면 규칙을 자동으로 적용하는 `도구`를 활용한다. 형식을 맞추는 목적코드 형식은 매우 중요하다. 너무나도 중요하므로 융통성 없이 맹목적으로 따르면 안 된다.오랜 시간이 지나 원래 코드의 흔적을 더 이상 찾아보기 어려울 정도로 코드가 바뀌어도맨 처음 잡아놓은 `구현 스타일`과 `가독성 수준`은 유지보수 용이성과 확장성에 계속 영향을 미친다.그렇다면 원활한 소통을 장려하는 코드 형식은 무엇일까?   1. 적절한 행 길이를 유지하라 소스 코드는 얼마나 길어야 적당할까?50..