전체 글 251

크래프톤 정글 — Week 5 WIL

이번 주에 뭔가를 완전히 알게 됐다고 쓰기는 어렵다.다만 얼버무리던 부분이 어디였는지는 전보다 분명해졌다.상태 정의를 흐리게 잡던 습관, 이유 없이 그리디라고 넘기던 태도, 돌아가기만 하면 됐다고 생각하던 구현이 이번 주에는 계속 걸렸다.이번 주를 한 줄로 정리하면107번부터 155번까지의 글을 다시 묶어 보니, 이번 주는 크게 세 흐름으로 정리됐다. 첫째는 알고리즘에서 문제를 상태와 전이로 읽는 연습이었다. 둘째는 컴퓨터시스템 파트에서 코드가 실제로 어떤 구조 위에서 실행되는지 내려가 본 시간이었다. 셋째는 React 구현 회고를 통해 기능보다 제약과 설계 이유를 다시 확인한 흐름이었다. 각각 따로 배운 것 같았지만, 결국은 “겉으로 보이는 답”보다 “안에서 움직이는 구조”를 더 자주 보게 됐다는 점으..

크래프톤 정글 × 수요코딩회Custom React 구현기 2편 — 과제 제약이 가르쳐준 React의 설계 원리

크래프톤 정글 × 수요코딩회“React를 구현하라” 이후 —직접 만들어보고 나서야 이해한 것들이번 글은 결과물 설명보다,과제의 제약을 따라가며 무엇을 배웠고 어디서 막혔는지를 정리한 회고다.👥 3인 팀 🧩 Vanilla JS Only 🪝 Hooks 직접 구현 ⚙️ Diff · Patch · Batching 지난 글에서는 Virtual DOM과 Diff 알고리즘을 직접 구현하면서 React의 내부 원리를 따라가 봤다. 이번 글은 그 연장선이지만, 초점을 조금 바꿔보려 한다. 이번 과제를 다시 돌아보니 내가 더 크게 배운 것은 특정 기능의 구현 방식 자체보다도, 과제가 걸어 둔 제약조건이 왜 그렇게 설계되어 있었는가였다. Hook은 최상위에서만 써야 하고, state는 루트 컴포넌트에서만 관리해야 하..

개발/프로젝트 2026.04.02

컴퓨터시스템 기초 19. 분산 메모리와 가속기는 한 머신 밖에서 무엇을 바꿀까

[컴퓨터 시스템] 19. 분산 메모리와 가속기는 한 머신 밖에서 무엇을 바꿀까 18편까지는 한 머신 안에서 여러 코어와 스레드를 어떻게 다루는지 보았습니다. 마지막으로는 메모리를 공유하지 않는 여러 머신이나 특수 하드웨어가 등장할 때 계산 모델이 어떻게 달라지는지 보겠습니다.이번 글은 MPI, GPU, cloud, MapReduce를 키워드 나열로 끝내지 않고, '데이터와 실행 자원이 멀어질수록 무엇이 달라지는가'라는 하나의 관점으로 묶습니다. 먼저 짚고 갈 용어 distributed memory: 여러 노드가 각자 자기 메모리를 갖고 메시지로 협력하는 구조MPI: 프로세스들이 메시지를 주고받으며 협력하도록 돕는 대표 모델accelerator: 특정 계산을 더..

컴퓨터시스템 기초 18. 스레드와 동기화는 왜 멀티코어에서 필수가 될까

[컴퓨터 시스템] 18. 스레드와 동기화는 왜 멀티코어에서 필수가 될까 여러 프로세스를 봤다면, 이제 한 프로세스 안에서 여러 실행 흐름이 동시에 움직이는 스레드를 볼 차례입니다. 멀티코어 시대의 성능 이야기는 결국 동시성과 동기화 문제를 피해 갈 수 없습니다.이번 글은 스레드를 가볍게 소개하는 수준이 아니라, 왜 공유 상태가 문제를 만들고 왜 동기화가 필요해지는지를 중심으로 정리합니다. 먼저 짚고 갈 용어 thread: 같은 프로세스 자원을 공유하면서 실행되는 개별 실행 흐름synchronization: 동시에 접근하는 공유 상태를 올바르게 조율하는 규칙race condition: 실행 순서에 따라 결과가 달라지는 위험한 상황 ..

컴퓨터시스템 기초 17. 시스템 호출과 IPC는 프로세스 사이를 어떻게 잇는가

[컴퓨터 시스템] 17. 시스템 호출과 IPC는 프로세스 사이를 어떻게 잇는가 16편에서 프로세스와 가상 메모리를 봤다면, 이제 서로 격리된 실행 단위가 운영체제와 어떻게 대화하고, 또 서로 어떻게 협력하는지 봐야 합니다. 바로 시스템 호출과 IPC가 그 경계면을 드러냅니다.이번 글은 사용자 프로그램과 커널의 경계, 그리고 프로세스 사이 통신을 하나의 흐름으로 묶어 설명합니다. 먼저 짚고 갈 용어 system call: 사용자 프로그램이 운영체제 서비스에 공식적으로 요청하는 진입점kernel: 운영체제의 핵심 권한 영역IPC: 프로세스 사이 통신 기법 이번 글에서 다루는 것 왜 시스템 호출이 필요한지사용자 공간과 ..

컴퓨터시스템 기초 16. 운영체제는 프로세스와 가상 메모리를 어떻게 관리할까

[컴퓨터 시스템] 16. 운영체제는 프로세스와 가상 메모리를 어떻게 관리할까 지금까지는 프로그램 내부 구조와 하드웨어 쪽 흐름을 많이 봤다면, 이제는 그 프로그램이 실제 실행 환경 안에서 어떤 관리 대상이 되는지 봐야 합니다. 운영체제는 바로 그 실행 환경을 조율하는 핵심 관리층입니다.이번 글은 프로세스와 가상 메모리를 묶어, 운영체제가 왜 단순한 도구 모음이 아니라 실행 전체를 관리하는 시스템인지 설명합니다. 먼저 짚고 갈 용어 process: 실행 중인 프로그램 단위virtual memory: 각 프로세스가 자기만의 연속된 주소 공간을 가진 것처럼 보이게 하는 구조address space: 프로세스가 사용하는 메모리 주소의 논리적 범위 ..

컴퓨터시스템 기초 15. 코드 최적화는 왜 측정과 locality가 먼저일까

[컴퓨터 시스템] 15. 코드 최적화는 왜 측정과 locality가 먼저일까 14편에서 locality가 성능을 바꾼다는 감각을 잡았다면, 이제 최적화를 '코드를 영리하게 바꾸는 요령'이 아니라 '무엇을 측정하고 무엇을 바꾸는가'의 문제로 봐야 합니다.이번 글은 최적화를 감각적 마이크로 튜닝이 아니라, 병목 파악, 데이터 접근, 실험 기반 비교라는 흐름으로 정리합니다. 먼저 짚고 갈 용어 benchmark: 코드 성능을 실제로 재보는 측정bottleneck: 전체 성능을 가장 크게 제한하는 지점locality-aware optimization: 데이터 접근 구조를 개선하는 최적화 이번 글에서 다루는 것 왜 최적화 ..

컴퓨터시스템 기초 14. 메모리 계층은 왜 프로그램 속도를 바꿀까

[컴퓨터 시스템] 14. 메모리 계층은 왜 프로그램 속도를 바꿀까 13편까지가 값과 명령이 어떻게 표현되고 실행되는지에 가까웠다면, 이제는 같은 코드라도 왜 어떤 경우는 빠르고 어떤 경우는 느린지로 시선을 옮겨야 합니다. 그 중심에는 메모리 계층과 cache가 있습니다.이번 글은 저장장치, RAM, cache, register를 속도 계층으로 보고, locality와 cache line이 왜 성능 이야기의 핵심 단어인지 정리합니다. 먼저 짚고 갈 용어 memory hierarchy: 속도와 용량이 다른 저장 계층이 층을 이루는 구조cache line: cache가 한 번에 가져오는 연속 데이터 묶음locality: 최근 값이나 가까운 주소를 반복해 쓰는 경향 ..

컴퓨터시스템 기초 13. x86-64와 ARM64는 무엇이 같고 다를까

[컴퓨터 시스템] 13. x86-64와 ARM64는 무엇이 같고 다를까 어셈블리를 보다 보면 ISA마다 문법과 레지스터 이름이 달라 보여서 완전히 다른 세계처럼 느껴질 수 있습니다. 하지만 장기적으로 더 중요한 것은 차이만이 아니라 공통 구조를 읽는 능력입니다.이번 글에서는 x86-64와 ARM64를 완전히 따로 외우지 않고, 공통 질문과 눈에 띄는 차이를 나눠 보는 방식으로 정리합니다. 먼저 짚고 갈 용어 ISA: 명령 집합 구조. CPU가 어떤 명령과 규칙을 제공하는지 정한 설계x86-64: 널리 쓰이는 데스크톱/서버 계열 ISAARM64: 모바일과 서버 등에서 널리 쓰이는 또 다른 대표 ISA 이번 글에서 다루는 것 ..

컴퓨터시스템 기초 12. 배열과 구조체는 어셈블리에서 왜 주소 계산이 될까

[컴퓨터 시스템] 12. 배열과 구조체는 어셈블리에서 왜 주소 계산이 될까 고수준 언어에서는 `arr[i]`나 `s.field`가 자연스러운 문법처럼 보입니다. 하지만 저수준으로 내려오면 결국 둘 다 '기준 주소에서 얼마나 떨어진 위치를 읽고 쓰는가'라는 주소 계산 문제로 보이기 시작합니다.이번 글은 배열, 포인터, 구조체를 다시 한 번 어셈블리 관점으로 묶어 보면서, 왜 메모리 배치 감각이 중요했는지 연결합니다. 먼저 짚고 갈 용어 base address: 어떤 데이터 묶음이 시작되는 기준 주소offset: 기준 주소에서 얼마나 떨어져 있는지 나타내는 값layout: 메모리 안에 데이터가 배치되는 구조 이번 글에서 다루는 것..