프로세스 메모리 구조, Stack, Heap

프로세스 메모리 구조, Stack, Heap

프로세스 메모리 구조는 운영체제가 실행 중인 프로그램에 나눠 주는 가상 주소 공간을 용도별로 나눈 그림입니다. 보통 실행 코드가 놓이는 Code, 전역 변수가 놓이는 Data, 실행 중에 크기가 정해지는 객체가 놓이는 Heap, 함수 호출 정보와 지역 변수가 놓이는 Stack으로 나눠 설명합니다.핵심 답부터 정리하면 이렇습니다. C에서는 개발자가 malloc으로 Heap 메모리를 받고 free로 직접 돌려줘야 하며, 빠뜨리면 C 메모리 누수가 생깁니다. Go에서는 Go GC(가비지 컬렉터)가 더 이상 도달할 수 없는 Heap 객체를 회수하고, 변수가 Stack에 놓일지 Heap에 놓일지는 컴파일러의 Escape Analysis가 결정합니다. 그래서 Go에는 free가 없지만, 필요 없는 객체를 계속 참조..

프로그램과 프로세스 차이부터 가상 메모리·MMU까지: 운영체제 기초 정리

프로그램과 프로세스 차이부터 가상 메모리·MMU까지: 운영체제 기초 정리

프로그램과 프로세스의 차이를 한 문장으로 정리하면 이렇습니다. 프로그램은 디스크에 저장된 실행 가능한 명령어와 데이터의 묶음이고, 프로세스는 그 프로그램이 실행될 때 운영체제가 만들고 관리하는 실행 단위입니다. 프로세스는 자기만의 가상 주소 공간을 사용하며, 이 가상 주소는 CPU 안의 MMU가 운영체제가 만든 페이지 테이블을 참고해 실제 RAM의 물리 주소로 변환합니다.이 글은 운영체제 기초를 처음 정리하는 개발자를 위해 프로그램 실행부터 메모리 접근까지의 흐름을 한 줄로 이어서 설명합니다. 프로그램과 프로세스 차이, CPU와 RAM의 역할, 운영체제란 무엇인지, 가상 메모리란 무엇인지, 가상 주소와 물리 주소가 어떻게 연결되는지 차례로 다룹니다. 마지막에는 이 개념이 Linux 프로세스 분석과 KVM..

Planet - 캘린더에 Orbit Layer를 붙이기까지

Planet - 캘린더에 Orbit Layer를 붙이기까지

블록은 티스토리 스킨에 따라 제거될 수 있어 — 붙여넣은 뒤 "페이지 소스 보기"로 남아있는지 꼭 확인해줘.============================================================ --> TL;DRPlanet 캘린더에 My Schedule과 Orbit Schedule을 독립된 Layer로 분리했다Orbit Schedule은 내가 Orbit(구독)한 사람들의 공개(Public) 일정만 켜고 끌 수 있는 두 번째 Layer로 표시한다비공개 일정은 서버 쿼리 단계에서부터 걸러져 응답에 아예 포함되지 않는다왜 이 기능이 필요했나Planet은 흔한 SNS처럼 사람을 팔로우하는 서비스가 아니다. 사람과 시간을 연결한다는 게 핵심 컨셉이라, 누군가를 Orbit한다는 건 그 사람의..

Go 클로저(Closure) 완벽 정리 — 개념부터 트랜잭션 패턴까지

Go 클로저(Closure) 완벽 정리 — 개념부터 트랜잭션 패턴까지

Go 클로저(Closure) 완벽 정리 — 개념부터 트랜잭션 패턴까지Go로 백엔드를 짜다 보면 func(tx *gorm.DB) error { ... } 같은 코드를 자주 마주치게 됩니다. 이게 바로 클로저(Closure)입니다. 이 글에서는 Go 클로저가 정확히 무엇인지, 어떤 상황에서 쓰는지, 장단점과 주의할 점까지 실제 코드 예제로 정리합니다.1. 클로저(Closure)란 무엇인가?클로저는 자신을 둘러싼 스코프(주변 환경)의 변수를 "기억"해서, 그 함수가 밖으로 전달되거나 나중에 실행되어도 해당 변수에 계속 접근하고 값을 바꿀 수 있는 함수를 말합니다.말로만 보면 어려우니 코드로 보겠습니다.func makeCounter() func() int { count := 0 return func(..

Planet에 GitHub Actions CI를 적용한 이유와 과정

Planet에 GitHub Actions CI를 적용한 이유와 과정

회사에서 직장생활을 하면서, 퇴근 후와 주말에는 개인 프로젝트 Planet을 만들고 있습니다. Planet은 연습용 토이 프로젝트가 아니라 실제 서비스를 목표로 개발하고 있는 프로젝트이고, Backend는 Go, Frontend는 SvelteKit으로 구성되어 있습니다.이번 글은 Planet에 GitHub Actions를 이용해서 Pull Request 기반 CI 환경을 구축한 과정을 기록한 글입니다. Frontend와 Backend를 각각 어떤 기준으로 검증하도록 구성했는지, 그리고 이 CI가 정확히 어떤 흐름으로 동작하는지를 중심으로 정리했습니다.Planet에 GitHub Actions CI를 적용한 이유Planet은 혼자 개발하는 프로젝트입니다. 코드 리뷰를 해줄 동료가 없다는 뜻이기도 합니다. 그..

npm 명령어 정리: install, ci, run, check, lint, build 차이

npm 명령어 정리: install, ci, run, check, lint, build 차이

Node.js 기반 프로젝트를 개발하다 보면 습관처럼 입력하게 되는 npm 명령어들이 있습니다. 저도 프로젝트를 진행하면서 다음 명령어들을 거의 매일 사용하고 있습니다.npm cinpm run checknpm run lintnpm run build문제는 이 명령어들을 손에 익어서 습관적으로 치고는 있지만, 막상 "npm ci랑 npm install이 정확히 뭐가 다르지?", "check랑 lint는 왜 따로 나뉘어 있지?" 라는 질문을 받으면 명쾌하게 답하기 어려울 때가 있다는 겁니다.그래서 이번 기회에 실제 프로젝트에서 사용하는 npm 명령어들을 하나씩 정리해보기로 했습니다. 단순히 명령어와 뜻만 나열하는 게 아니라, 무엇을 하는 명령어인지 → 언제 쓰는지 → 왜 필요한지를 중심으로 풀어보겠습니다.No..