프로그램과 프로세스 차이부터 가상 메모리·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..

혼자 개발하는 사이드 프로젝트에서 Git Branch 전략을 변경한 이유 (master / dev / feature)

혼자 개발하는 사이드 프로젝트에서 Git Branch 전략을 변경한 이유 (master / dev / feature)

안녕하세요. 현재 Planet이라는 서비스를 개발하고 있습니다. 이번 Sprint에서는 새로운 기능을 추가하기보다 앞으로의 개발을 더 안정적으로 진행하기 위한 Git Branch 전략을 변경했습니다.한 줄 요약master, dev, feature 브랜치를 분리하여 개발과 배포를 독립적으로 관리할 수 있도록 개선했습니다.왜 브랜치 전략을 변경했을까?초기에는 master 브랜치 하나만 사용하여 개발을 진행했습니다.혼자 개발하는 프로젝트이다 보니 브랜치를 여러 개 운영하는 것이 오히려 번거롭다고 생각했기 때문입니다.하지만 Planet은 Cloudflare와 Cloud Run을 이용해 자동 배포되고 있습니다. 문제는 master 브랜치에 코드를 Push할 때마다 운영 환경에 새로운 코드가 배포된다는 점이었습니다..