전체 글 101

[Git] 워크 플로우

좋은 커밋 메시지의 중요성변경 사항을 한눈에 파악하고 이력을 쉽게 추적하기 위해 커밋 메시지는 정해진 규칙에 따라 작성하는 것이 좋다. 이는 팀원 간의 소통 비용을 줄여주는 핵심적인 약속이다.커밋 메시지 형식일반적으로 타입: 제목의 형식을 사용한다. 타입은 영어로 작성하며, 첫 글자는 대문자로 시작하는 것을 권장한다.Type: SubjectFeat: 새로운 기능 추가Fix: 버그 수정Docs: 문서 수정 (README.md 등)Style: 코드 포맷팅, 세미콜론 누락 등 기능 변경이 없는 스타일 수정Refactor: 기능 변경 없이 내부 구조를 개선하는 코드 리팩토링Test: 테스트 코드 추가 또는 수정Chore: 빌드 설정, 패키지 매니저 구성 등 기타 잡무GitHub Flow 6단계 핵심 과정GitH..

프로젝트 2025.05.24

[React] 컴포넌트 생명주기(Lifecycle)

1. 마운트 (Mount): 컴포넌트의 생성마운트는 컴포넌트 인스턴스가 생성되어 실제 DOM(Document Object Model)에 삽입될 때의 과정이다. 즉, 컴포넌트가 '탄생'하는 순간이다. 이 단계에서는 주로 초기 데이터를 불러오거나, 이벤트 리스너를 등록하는 등의 초기화 작업을 수행한다.클래스 컴포넌트 예시: componentDidMountcomponentDidMount 메소드는 컴포넌트가 렌더링된 직후에 호출된다. API를 호출하여 서버로부터 데이터를 가져와 state를 업데이트하기에 가장 적합한 위치이다.// javascriptcomponentDidMount() { // 컴포넌트가 마운트된 후 API 호출 fetch("https://api.example.com/data") .the..

[Nginx] SSL/TLS 인증서 설정하기

1. Certbot 설치 및 SSL 인증서 발급가장 먼저 SSL 인증서를 발급받고 관리해주는 Certbot을 설치해야 한다. Certbot은 Let's Encrypt의 인증서를 몇 가지 간단한 명령어로 발급받고, 웹서버 설정까지 자동으로 처리해주는 매우 편리한 도구이다.1.1. Certbot 설치하기사용하는 운영체제에 맞게 Certbot을 설치한다. 여기서는 Ubuntu를 기준으로 설명한다. 패키지 목록을 최신화하고 certbot과 Nginx용 플러그인을 함께 설치한다.sudo apt updatesudo apt install certbot python3-certbot-nginx1.2. SSL 인증서 발급받기이제 Nginx 플러그인을 사용하여 SSL 인증서를 발급받는다. -d 옵션을 사용하여 인증서를 적용..

인프라 2025.05.23

컴퓨터는 'a = 10'을 어떻게 이해할까?

우리는 코딩을 할 때 너무나도 당연하게 a = 10과 같은 코드를 작성합니다. 개발자에게 'a'는 10이라는 값을 담는 그릇처럼 직관적으로 이해됩니다. 하지만 컴퓨터에게 'a'라는 이름은 아무 의미가 없습니다. 컴퓨터는 오직 0과 1, 그리고 메모리 주소로 세상을 이해합니다.그렇다면 우리가 작성한 이 간단한 한 줄의 코드는 어떻게 컴퓨터가 이해하고 실행할 수 있는 기계어 코드로 변환될까요? 변수 'a'와 'b'를 더하는 간단한 과정을 통해, 그 깊고 흥미로운 내부 동작 원리를 단계별로 파헤쳐 봅시다.1단계: 개발자와의 약속, '변수 선언'a = 10b = 20프로그래밍에서 a = 10과 같은 변수 선언은 특정 데이터를 저장할 공간에 사람이 이해하기 쉬운 이름을 붙여주는 과정입니다. 'a'라는 이름은 컴퓨..

[리눅스 뻘짓 일기] 루트 파티션 변경 하기

LVM 파티션 재구성 및 GRUB 부트로더 복구 작업 기록이 문서는 1TB 서버의 100GB LVM 루트 파티션 용량 부족 문제를 해결하기 위해 시스템 파티션을 재구성하고, 변경된 환경에 맞게 GRUB 부트로더를 복구한 전체 과정을 기술합니다.1. 초기 문제 정의 및 해결 계획 수립초기 상황: 1TB 디스크를 장착한 서버가 100GB 크기의 LVM(논리 볼륨)으로 루트(/) 파티션이 설정되어, IntelliJ Gateway 및 LXC 컨테이너 사용으로 인해 용량 부족 현상이 발생했습니다.초기 목표: 호스트 OS와 LXC 컨테이너의 스토리지를 분리하기 위해, 기존 LVM 볼륨 그룹(VG)을 확장하고 논리 볼륨(LV)을 분리하는 것을 목표로 설정했습니다.기술적 한계: LVM 확장을 시도하는 과정에서, LVM..

인프라 2025.04.08

[문제 해결] 라즈베리파이 USB 가젯 설정: `echo`의 함정과 `printf`

라즈베리파이로 USB 가젯(Gadget), 특히 키보드나 마우스 같은 HID 장치를 만드는 프로젝트를 진행하다 보면 이런 막막한 상황에 부딪히곤 합니다. 분명히 모든 단계를 똑같이 따라 했는데도, 정작 PC에 연결하면 장치가 인식되지 않거나 "먹통"이 되는 문제입니다. 이 문제의 주범은 기본적인 명령어 하나일 가능성이 높습니다. 바로 echo -ne 입니다.문제의 코드: echo -ne로 Report Descriptor 작성하기USB HID 장치를 설정할 때, 가장 핵심적인 부분은 리포트 디스크립터(Report Descriptor)를 시스템 파일에 써주는 과정입니다. 이 디스크립터는 장치가 어떤 종류의 데이터를(예: 키보드 키 눌림, 마우스 좌표) 어떻게 보낼지 정의하는 일종의 '설명서'이며, 바이너리..

인프라 2024.12.11

[크래프톤 정글 Week 08 ] Pintos-project1-Priority Scheduling 키워드 정리

PintOS 프로젝트 가이드: 우선순위 스케줄링 정복하기 (기초부터 심화까지)지난 Alarm Clock 과제가 시간을 기준으로 스레드를 관리하는 법을 배웠다면, 이번 Priority Scheduling은 운영체제 스케줄링의 핵심인 우선순위(Priority)를 다루는 과제입니다. 우선순위가 높은 스레드가 CPU를 먼저 할당받도록 스케줄러를 수정하는 것이 목표입니다.1. 스케줄링을 위한 기본 지식본격적인 구현에 앞서, 운영체제의 기본 동작 원리를 이해해야 합니다.프로세스와 스레드 (Process and Thread)프로세스 (Process): 실행 중인 프로그램의 인스턴스로, 각자 독립된 메모리 공간을 가집니다. 안정적이지만, 이 때문에 프로세스 간 통신은 비용이 비쌉니다.스레드 (Thread): 프로세스 ..

[크래프톤 정글] Pintos-project1-AlaramClock 구현 하기

PintOS 프로젝트: 타이머 인터럽트로 알람 시계(Alarm Clock) 구현하기본 포스트는 PintOS Project 1의 기능 중 하나인 알람 시계(Alarm Clock) 구현에 대한 상세한 내용을 다룹니다. 이 기능은 운영체제의 핵심 개념인 인터럽트와 스레드 스케줄링을 깊이 있게 이해하는 데 큰 도움이 됩니다. 관련 용어에 대한 기본 지식이 있다고 가정하고, 기능 구현에 초점을 맞춰 딥다이브하는 내용이므로 다소 복잡하게 느껴질 수 있습니다.핵심 개념: 타이머 인터럽트와 ISR알람 시계를 구현하기 위해선 먼저 컴퓨터의 '시간' 개념을 관리하는 두 가지 핵심 요소를 이해해야 합니다.1. 타이머 인터럽트 (Timer Interrupt)타이머 인터럽트는 시스템 타이머 칩에 의해 일정 주기(Pintos에서..

[크래프톤 정글 week 08] Pintos-Project1 키워드 정리

Pintos-kaist-project1 Alaram Clock 키워드 정리이 포스트에서는 project1의 Alarm Clock을 구현하는 데 있어 필요한 키워드만 정리한다.ProcessCS 전반을 깊게 다루어 보면서 이전에도 마찬가지 였지만 항상 이 추상화 라는 개념이 항상 잘 이해가 되지 않았었는데 다른 여러 개념을 다루면서 어느정도 감을 잡을 상태였다.내가 생각했던 프로세스는 단순히 커널에서 이루어지는 작업을 분류 하고 운영체제가 작업의 관리 를 수월 하게 하기 위한 거라고만 생각하고 있었는데 도무지 이 프로세스가 운영체제 에서 어떻게 사용되는지 감이 잡히지 않고 있었다. 그러다 운영체제 책 을 읽던중 추상화 에 대한 내용을 읽었는데 자바에서도 추상화를 이용해 클래스의 구현 내용을 숨기는 것 처럼 ..

[크래프톤 정글] 메모리 관리 기법

1. 프로그램 실행사용자가 쉘에 ./hello를 입력하여 hello 프로그램을 실행한다.2. Fork 호출쉘 프로세스는 새로운 프로세스를 생성하기 위해 fork() 시스템 콜을 호출한다.이 호출로 인해 두 개의 프로세스가 존재하게 된다:부모 프로세스: 쉘.자식 프로세스: hello 프로그램을 실행하기 위해 생성된 프로세스.3. 메모리 공유부모와 자식 프로세스는 처음에 같은 가상 메모리 주소 공간을 공유한다.이때, 두 프로세스는 같은 물리 메모리를 참조하고 있어 메모리 사용이 효율적이다.4. 쓰기 발생부모 또는 자식 프로세스 중 하나가 가상 메모리에 쓰기를 시도할 경우 페이지 폴트가 발생하게 된다.이때, COW(Copy-On-Write) 메커니즘이 개입하여 두 프로세스 간의 물리 메모리 공유를 분리한다.5..