Sign in

규링은 규링규링~

@kyulinglee.bsky.social
157 followers 123 following 3.2K posts

트위터에서 @KyulingLee로 활동하는 규링입니다. 현직은 컨설턴트..(어쩌다 보니) 전직 임베디드, 윈도우, ios 개발자/허접허접허접허~~접한 C++, C, C# 개발자 블로그 겸 사이트: kyulingcompany.com 덕질 좋아하고, 덕질 관련 이야기 환영합니다.

PostsRepliesMedia
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
20주차: 멀티스레딩과 병렬 프로그래밍 학습 목표 이번 주차를 마치면 다음을 할 수 있습니다. pthread_create 의 인자 네 개가 각각 무엇인지 설명하고, 스레드를 만들고, 인자를 넘기고, 결과를 회수할 수 있다 스레드와 프로세스가 무엇이 다른지 주소를 직접 찍어서 설명할 수 있다 락 없이 공유 변수를 고치면 왜 값이 사라지는지, 기계어 수준에서 설명할 수 있다 뮤텍스와 조건 변수로 안전한 공유 자료구조를 만들 수 있다 교착 상태를 일부러 만들고, …
kyulingcompany.com
20주차: 멀티스레딩과 병렬 프로그래밍
학습 목표 이번 주차를 마치면 다음을 할 수 있습니다. pthread_create 의 인자 네 개가 각각 무엇인지 설명하고, 스레드를 만들고, 인자를 넘기고, 결과를 회수할 수 있다 스레드와 프로세스가 무엇이 다른지 주소를 직접 찍어서 설명할 수 있다 락 없이 공유 변수를 고치면 왜 값이 사라지는지, 기계어 수준에서 설명할 수 있다 뮤텍스와 조건 변수로 안전한 공유 자료구조를 만들 수 있다 교착 상태를 일부러 만들고, …
000
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
19주차: IPC와 동기화 학습 목표 이번 주차를 마치면 다음을 할 수 있습니다: pipe가 만드는 fd 두 개가 무엇이고, 왜 안 쓰는 끝을 반드시 닫아야 하는지 실험으로 설명할 수 있다 pipe + fork + dup2 세 가지로 셸의 ls | wc -l을 직접 만들 수 있다 FIFO, popen, 공유 메모리, 메시지 큐를 "언제 쓰나 / 인자는 무엇인가 / 실패하면 어떻게 되나"로 설명할 수 있다
kyulingcompany.com
19주차: IPC와 동기화
학습 목표 이번 주차를 마치면 다음을 할 수 있습니다: pipe가 만드는 fd 두 개가 무엇이고, 왜 안 쓰는 끝을 반드시 닫아야 하는지 실험으로 설명할 수 있다 pipe + fork + dup2 세 가지로 셸의 ls | wc -l을 직접 만들 수 있다 FIFO, popen, 공유 메모리, 메시지 큐를 "언제 쓰나 / 인자는 무엇인가 / 실패하면 어떻게 되나"로 설명할 수 있다
000
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
18주차: POSIX 시스템 프로그래밍 학습 목표 이번 주차를 마치면 다음을 할 수 있습니다. printf 밑에 write 가 있다는 것을 strace 로 직접 확인하고, 시스템 콜과 라이브러리 함수의 차이를 버퍼링으로 설명할 수 있다 open / read / write / close 의 인자와 반환값을 하나씩 알고, 파일 디스크립터 번호만으로 파일을 다룰 수 있다 fork 가 왜 두 번 돌아오는지 PID 로 확인하고, exec 로 변신하고, wait…
kyulingcompany.com
18주차: POSIX 시스템 프로그래밍
학습 목표 이번 주차를 마치면 다음을 할 수 있습니다. printf 밑에 write 가 있다는 것을 strace 로 직접 확인하고, 시스템 콜과 라이브러리 함수의 차이를 버퍼링으로 설명할 수 있다 open / read / write / close 의 인자와 반환값을 하나씩 알고, 파일 디스크립터 번호만으로 파일을 다룰 수 있다 fork 가 왜 두 번 돌아오는지 PID 로 확인하고, exec 로 변신하고, wait…
000
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
17주차: 고급 알고리즘과 최적화 학습 목표 이번 주차를 마치면 다음을 할 수 있습니다: 동적 계획법(DP)이 성립하는 두 조건(겹치는 부분 문제, 최적 부분 구조)을 말하고, "상태 → 점화식 → 기저" 3단계로 문제를 정리할 수 있다 메모이제이션(하향식)과 테이블(상향식)을 각각 구현하고, 어느 쪽을 언제 쓸지 고를 수 있다 0/1 배낭, LCS, 동전 거스름돈을 DP로 풀고, 표를 거꾸로 걸어 "무엇을 골랐는지"까지 복원할 수 있다 백트래킹의 "선택 → 재귀 → 취소" 리듬으로 N-Queens와 부분집합·조합·순열 생성을…
kyulingcompany.com
17주차: 고급 알고리즘과 최적화
학습 목표 이번 주차를 마치면 다음을 할 수 있습니다: 동적 계획법(DP)이 성립하는 두 조건(겹치는 부분 문제, 최적 부분 구조)을 말하고, "상태 → 점화식 → 기저" 3단계로 문제를 정리할 수 있다 메모이제이션(하향식)과 테이블(상향식)을 각각 구현하고, 어느 쪽을 언제 쓸지 고를 수 있다 0/1 배낭, LCS, 동전 거스름돈을 DP로 풀고, 표를 거꾸로 걸어 "무엇을 골랐는지"까지 복원할 수 있다 백트래킹의 "선택 → 재귀 → 취소" 리듬으로 N-Queens와 부분집합·조합·순열 생성을 짤 수 있다
000
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
16주차: 문자열 알고리즘 학습 목표 이번 주차를 마치면 다음을 할 수 있습니다: 브루트포스 검색의 비교 횟수를 손으로 세고, 최악의 입력이 언제 생기는지 설명할 수 있다 KMP의 실패 함수를 종이에 계산하고, 텍스트 포인터가 왜 뒤로 가지 않는지 안다 라빈-카프의 롤링 해시를 십진수로 설명하고, 해시 충돌이 왜 위험한지 실험으로 확인한다 보이어-무어가 텍스트를 건너뛰는 과정을 한 단계씩 그릴 수 있고, grep이 빠른 이유를 안다 Z 알고리즘으로 검색·주기·접두사-접미사 문제를 풀 수 있다
kyulingcompany.com
16주차: 문자열 알고리즘
학습 목표 이번 주차를 마치면 다음을 할 수 있습니다: 브루트포스 검색의 비교 횟수를 손으로 세고, 최악의 입력이 언제 생기는지 설명할 수 있다 KMP의 실패 함수를 종이에 계산하고, 텍스트 포인터가 왜 뒤로 가지 않는지 안다 라빈-카프의 롤링 해시를 십진수로 설명하고, 해시 충돌이 왜 위험한지 실험으로 확인한다 보이어-무어가 텍스트를 건너뛰는 과정을 한 단계씩 그릴 수 있고, grep이 빠른 이유를 안다 Z 알고리즘으로 검색·주기·접두사-접미사 문제를 풀 수 있다
000
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
15주차: 정렬과 검색 알고리즘 학습 목표 이번 주차를 마치면 다음을 할 수 있습니다: 버블·선택·삽입 정렬이 배열을 어떻게 바꾸는지 한 바퀴씩 손으로 따라갈 수 있다 비교 횟수와 이동 횟수를 세어 세 정렬의 성격 차이를 설명할 수 있다 병합 정렬(하향식·상향식)과 퀵 정렬(파티션, 피벗 전략, 3-way)을 구현하고, 각 줄이 왜 그렇게 생겼는지 안다 "정렬된 입력에 끝 피벗"이 왜 O(n²)와 스택 오버플로로 이어지는지 직접 재현할 수 있다 비교 없는 정렬(카운팅·기수·버킷)이 O(n log n) 벽을 넘는 원리와 그 대가를…
kyulingcompany.com
15주차: 정렬과 검색 알고리즘
학습 목표 이번 주차를 마치면 다음을 할 수 있습니다: 버블·선택·삽입 정렬이 배열을 어떻게 바꾸는지 한 바퀴씩 손으로 따라갈 수 있다 비교 횟수와 이동 횟수를 세어 세 정렬의 성격 차이를 설명할 수 있다 병합 정렬(하향식·상향식)과 퀵 정렬(파티션, 피벗 전략, 3-way)을 구현하고, 각 줄이 왜 그렇게 생겼는지 안다 "정렬된 입력에 끝 피벗"이 왜 O(n²)와 스택 오버플로로 이어지는지 직접 재현할 수 있다 비교 없는 정렬(카운팅·기수·버킷)이 O(n log n) 벽을 넘는 원리와 그 대가를 안다
000
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
14주차: 그래프 자료구조와 탐색 학습 목표 이번 주차를 마치면 다음을 할 수 있습니다. 그래프 용어(정점, 간선, 차수, 방향, 가중치)를 정확히 쓰고, 현실의 문제를 그래프로 옮길 수 있다 인접 행렬과 인접 리스트로 그래프를 저장하고, 메모리와 시간이 어떻게 달라지는지 실제 숫자로 설명할 수 있다 DFS(스택)와 BFS(큐)를 구현하고, 큐와 스택의 내용을 단계별로 추적할 수 있다 visited 배열을 빼먹으면 정확히 무슨 일이 일어나는지 실험으로 확인했다 위상 정렬로 의존성 순서를 구하고 사이클을 감지할 수 있다
kyulingcompany.com
14주차: 그래프 자료구조와 탐색
학습 목표 이번 주차를 마치면 다음을 할 수 있습니다. 그래프 용어(정점, 간선, 차수, 방향, 가중치)를 정확히 쓰고, 현실의 문제를 그래프로 옮길 수 있다 인접 행렬과 인접 리스트로 그래프를 저장하고, 메모리와 시간이 어떻게 달라지는지 실제 숫자로 설명할 수 있다 DFS(스택)와 BFS(큐)를 구현하고, 큐와 스택의 내용을 단계별로 추적할 수 있다 visited 배열을 빼먹으면 정확히 무슨 일이 일어나는지 실험으로 확인했다 위상 정렬로 의존성 순서를 구하고 사이클을 감지할 수 있다
000
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
13주차: 해시 테이블과 고급 트리 학습 목표 이번 주차를 마치면 다음을 할 수 있습니다. 해시 함수가 문자열을 숫자로 바꾸는 과정을 손으로 따라가고, 좋은 해시와 나쁜 해시가 분포를 어떻게 다르게 만드는지 실험으로 확인할 수 있다 체이닝과 개방 주소법 두 방식으로 해시 테이블을 직접 구현하고, 각 연산이 메모리에서 무슨 일을 하는지 그림으로 설명할 수 있다 개방 주소법에서 삭제에 묘비(tombstone)가 필요한 이유를 버그를 직접 재현해서 설명할 수 있다
kyulingcompany.com
13주차: 해시 테이블과 고급 트리
학습 목표 이번 주차를 마치면 다음을 할 수 있습니다. 해시 함수가 문자열을 숫자로 바꾸는 과정을 손으로 따라가고, 좋은 해시와 나쁜 해시가 분포를 어떻게 다르게 만드는지 실험으로 확인할 수 있다 체이닝과 개방 주소법 두 방식으로 해시 테이블을 직접 구현하고, 각 연산이 메모리에서 무슨 일을 하는지 그림으로 설명할 수 있다 개방 주소법에서 삭제에 묘비(tombstone)가 필요한 이유를 버그를 직접 재현해서 설명할 수 있다
000
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
12주차: 트리 구조 구현 학습 목표 이번 주차를 마치면 다음을 할 수 있습니다: 트리 용어(루트, 잎, 부모, 자식, 높이, 깊이)를 쓰고, 노드 구조체가 메모리에 어떻게 놓이는지 그릴 수 있다 이진 트리를 손으로 조립하고 네 가지 순회(전위, 중위, 후위, 레벨)를 코드 없이 종이에서 수행할 수 있다 재귀 순회를 스택 기반 반복문으로 바꿀 수 있고, 왜 그래야 하는 경우가 있는지 안다 이진 탐색 트리(BST)의 탐색, 삽입, 삭제를 구현하고, 삭제의 세 경우를 설명할 수 있다
kyulingcompany.com
12주차: 트리 구조 구현
학습 목표 이번 주차를 마치면 다음을 할 수 있습니다: 트리 용어(루트, 잎, 부모, 자식, 높이, 깊이)를 쓰고, 노드 구조체가 메모리에 어떻게 놓이는지 그릴 수 있다 이진 트리를 손으로 조립하고 네 가지 순회(전위, 중위, 후위, 레벨)를 코드 없이 종이에서 수행할 수 있다 재귀 순회를 스택 기반 반복문으로 바꿀 수 있고, 왜 그래야 하는 경우가 있는지 안다 이진 탐색 트리(BST)의 탐색, 삽입, 삭제를 구현하고, 삭제의 세 경우를 설명할 수 있다
000
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
11주차: 스택, 큐, 덱 학습 목표 이번 주차를 마치면 다음을 할 수 있습니다. 스택(LIFO)을 배열과 연결 리스트 두 방식으로 구현하고, 어느 쪽을 언제 쓸지 고를 수 있다 함수 호출 스택이 어떻게 쌓이고 걷히는지, 스택 오버플로가 왜 나는지 설명할 수 있다 원형 배열 큐(FIFO)의 감아 돌기(wrap-around)를 % 연산으로 구현하고, 인덱스가 어떻게 움직이는지 손으로 추적할 수 있다 연결 리스트 큐의 단골 버그(tail 정리 누락)를 직접 일으키고 Valgrind와 AddressSanitizer로 잡아낼 수 있다
kyulingcompany.com
11주차: 스택, 큐, 덱
학습 목표 이번 주차를 마치면 다음을 할 수 있습니다. 스택(LIFO)을 배열과 연결 리스트 두 방식으로 구현하고, 어느 쪽을 언제 쓸지 고를 수 있다 함수 호출 스택이 어떻게 쌓이고 걷히는지, 스택 오버플로가 왜 나는지 설명할 수 있다 원형 배열 큐(FIFO)의 감아 돌기(wrap-around)를 % 연산으로 구현하고, 인덱스가 어떻게 움직이는지 손으로 추적할 수 있다 연결 리스트 큐의 단골 버그(tail 정리 누락)를 직접 일으키고 Valgrind와 AddressSanitizer로 잡아낼 수 있다
000
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
연구 노트 R05. 언어 모델은 얼마나 생각해야 하나 — 말귀는 생각으로 늘지만, 생각할 시간은 장비가 정합니다 27편에서 로봇은 말을 다 알아들었고, 병목은 말귀였습니다. 그런데 그 말귀를 맡은 언어 모델이 속으로 무엇을 했는지는 한 번도 들여다보지 않았습니다. 문장을 넣으면 숫자 세 개가 나오는 상자로만 썼으니까요. 이번 노트는 그 상자를 열어 본 기록입니다. 모델 일곱 개를 같은 문장으로 시험했고, 생각을 시키면 무엇이 달라지는지, 그리고 그 생각을 GPU가 아닌 곳에서 시키면 얼마나 기다려야 하는지 쟀습니다. 27편에서…
kyulingcompany.com
연구 노트 R05. 언어 모델은 얼마나 생각해야 하나 — 말귀는 생각으로 늘지만, 생각할 시간은 장비가 정합니다
27편에서 로봇은 말을 다 알아들었고, 병목은 말귀였습니다. 그런데 그 말귀를 맡은 언어 모델이 속으로 무엇을 했는지는 한 번도 들여다보지 않았습니다. 문장을 넣으면 숫자 세 개가 나오는 상자로만 썼으니까요. 이번 노트는 그 상자를 열어 본 기록입니다. 모델 일곱 개를 같은 문장으로 시험했고, 생각을 시키면 무엇이 달라지는지, 그리고 그 생각을 GPU가 아닌 곳에서 시키면 얼마나 기다려야 하는지 쟀습니다. 27편에서 열지 않은 상자
000
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
아... 집에서 공부하는 것도 gpu 팍팍 써가면서 할 수 있는 환경이면 좋겠다. ㅠㅠ 회사에서는 A6000 몇개나 꼽아가면서 미친듯 돌릴 수 있는데...ㅠㅠ
001
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
연구 노트 R04. 상상은 어디서부터 틀리는가 — 닿는 순간이 아니라, 들고 가는 동안과 지나간 자리에서 시즌 3를 시작하며 적어 둔 질문이 하나 있었습니다. 로봇이 무엇을 할지 머릿속으로 미리 그려 보는 작은 모델을 만들면, 그 상상은 물리와 어디서부터 어긋날까요? 저는 "물체에 닿는 순간"이라고 예상했습니다. 틀렸습니다. 이 노트는 그 예상이 틀린 자리와, 대신 찾은 세 군데의 기록입니다. 월드 모델이 뭔가요 월드 모델은 "지금 장면과 내가 할 행동을 주면, 다음 장면이 어떻게 될지"를 예측하는 모델입니다. 시뮬레이터가 물리…
kyulingcompany.com
연구 노트 R04. 상상은 어디서부터 틀리는가 — 닿는 순간이 아니라, 들고 가는 동안과 지나간 자리에서
시즌 3를 시작하며 적어 둔 질문이 하나 있었습니다. 로봇이 무엇을 할지 머릿속으로 미리 그려 보는 작은 모델을 만들면, 그 상상은 물리와 어디서부터 어긋날까요? 저는 "물체에 닿는 순간"이라고 예상했습니다. 틀렸습니다. 이 노트는 그 예상이 틀린 자리와, 대신 찾은 세 군데의 기록입니다. 월드 모델이 뭔가요 월드 모델은 "지금 장면과 내가 할 행동을 주면, 다음 장면이 어떻게 될지"를 예측하는 모델입니다. 시뮬레이터가 물리 법칙으로 계산하는 일을, 데이터에서 배운 신경망이 흉내 내는 것입니다.
010
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
27. 말로 걷게 하기 — 로봇은 다 알아들었고, 말귀가 병목이었습니다 시즌 1~2에서 G1은 걷고, 돌고, 밀려도 버티고, 계단을 올랐습니다. 시즌 3에서는 로봇 팔이 말을 알아듣고 큐브를 옮겼습니다. 이 편은 둘을 잇습니다. "천천히 가면서 왼쪽으로 크게 돌아" 같은 말을 G1에게 하면 그대로 걷게 만드는 것입니다. 보행 정책은 하나도 고치지 않았습니다. 사이에 말을 숫자로 바꾸는 얇은 층 하나만 끼웠습니다. 로봇이 알아듣는 말은 숫자 세 개입니다 8편에서 G1에게 방향 전환을 가르칠 때, 보행 정책이 받는 명령은 숫자 세…
kyulingcompany.com
27. 말로 걷게 하기 — 로봇은 다 알아들었고, 말귀가 병목이었습니다
시즌 1~2에서 G1은 걷고, 돌고, 밀려도 버티고, 계단을 올랐습니다. 시즌 3에서는 로봇 팔이 말을 알아듣고 큐브를 옮겼습니다. 이 편은 둘을 잇습니다. "천천히 가면서 왼쪽으로 크게 돌아" 같은 말을 G1에게 하면 그대로 걷게 만드는 것입니다. 보행 정책은 하나도 고치지 않았습니다. 사이에 말을 숫자로 바꾸는 얇은 층 하나만 끼웠습니다. 로봇이 알아듣는 말은 숫자 세 개입니다 8편에서 G1에게 방향 전환을 가르칠 때, 보행 정책이 받는 명령은 숫자 세 개였습니다.
010
규링은 규링규링~ @kyulinglee.bsky.social · 01/10/2026
글이 뭔가 이상하면 댓글 달아주세요. 검토하고 수정합니다. 저도 글을 쓰면서 몇몇 기능을 ai의 도움도 좀 받고 있습니다. 일단 본업이 새벽까지도 하고 있어서... 제 글 스타일과 비슷하게 나와주는 것도 있어서 바쁠때에 도움받고 제가 죄다 수정하는 경우도 있습니다. 그러면서 도중에 못본 것들이 있을 수 있는데, 글에 댓글 적어주시면 댓글 읽고 반영해서 수정하겠습니다. 앞으로도 계속 더 작성할 글들이 많고, 저도 실험해야 하는 글들이 너무 많긴 하지만... 그래도 최대한 잘 해보겠습니다. 그리고 저 자신의 솔루션도 계속 선보일…
kyulingcompany.com
글이 뭔가 이상하면 댓글 달아주세요. 검토하고 수정합니다.
저도 글을 쓰면서 몇몇 기능을 ai의 도움도 좀 받고 있습니다. 일단 본업이 새벽까지도 하고 있어서... 제 글 스타일과 비슷하게 나와주는 것도 있어서 바쁠때에 도움받고 제가 죄다 수정하는 경우도 있습니다. 그러면서 도중에 못본 것들이 있을 수 있는데, 글에 댓글 적어주시면 댓글 읽고 반영해서 수정하겠습니다. 앞으로도 계속 더 작성할 글들이 많고, 저도 실험해야 하는 글들이 너무 많긴 하지만... 그래도 최대한 잘 해보겠습니다. 그리고 저 자신의 솔루션도 계속 선보일 예정인데, 한번 봐주세요. ^^ 관심 있는 분들의 문의도 기다립니다 ㅎㅎ
010
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
10주차: 동적 메모리 관리와 기본 자료구조 학습 목표 이번 주차를 마치면 다음을 할 수 있습니다. void * 와 함수 포인터를 조합해 "타입에 얽매이지 않는" 제네릭 코드를 작성하고, 표준 함수 qsort 가 어떻게 모든 타입을 정렬하는지 설명할 수 있다 구조체의 실제 크기가 멤버 크기의 합과 다른 이유(정렬과 패딩)를 offsetof 로 직접 확인하고 설명할 수 있다 realloc 이 무엇을 돌려주는지, 왜 결과를 임시 변수에 받아야 하는지 알고, 자동으로 크기가 늘어나는 동적 배열(Vector)을 구현할 수 있다
kyulingcompany.com
10주차: 동적 메모리 관리와 기본 자료구조
학습 목표 이번 주차를 마치면 다음을 할 수 있습니다. void * 와 함수 포인터를 조합해 "타입에 얽매이지 않는" 제네릭 코드를 작성하고, 표준 함수 qsort 가 어떻게 모든 타입을 정렬하는지 설명할 수 있다 구조체의 실제 크기가 멤버 크기의 합과 다른 이유(정렬과 패딩)를 offsetof 로 직접 확인하고 설명할 수 있다 realloc 이 무엇을 돌려주는지, 왜 결과를 임시 변수에 받아야 하는지 알고, 자동으로 크기가 늘어나는 동적 배열(Vector)을 구현할 수 있다
000
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
9주차: 파일 입출력 학습 목표 파일을 열고 닫는 기본 흐름(fopen → 확인 → 읽기/쓰기 → fclose)을 손에 익힙니다 fopen 의 모드 문자열("r", "w", "a", "r+", "w+", "a+", "b")이 각각 무엇을 하는지 직접 실험해서 압니다 텍스트 파일을 줄 단위(fgets), 문자 단위(fgetc/fputc), 서식 단위(fprintf/fscanf)로 읽고 씁니다
kyulingcompany.com
9주차: 파일 입출력
학습 목표 파일을 열고 닫는 기본 흐름(fopen → 확인 → 읽기/쓰기 → fclose)을 손에 익힙니다 fopen 의 모드 문자열("r", "w", "a", "r+", "w+", "a+", "b")이 각각 무엇을 하는지 직접 실험해서 압니다 텍스트 파일을 줄 단위(fgets), 문자 단위(fgetc/fputc), 서식 단위(fprintf/fscanf)로 읽고 씁니다
000
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
8주차: 구조체와 공용체 학습 목표 구조체(struct)로 서로 다른 자료형을 하나의 새 자료형으로 묶고, 정의·선언·초기화·멤버 접근의 문법 요소를 하나씩 설명할 수 있다 sizeof 와 offsetof 로 구조체의 실제 메모리 배치를 찍어 보고, 패딩과 정렬 때문에 크기가 멤버 합보다 커지는 이유를 바이트 단위로 설명할 수 있다 멤버 순서만 바꿔서 구조체 크기를 줄일 수 있다 typedef 로 이름을 다듬고, 자기참조 구조체에 태그 이름이 필요한 이유를 안다
kyulingcompany.com
8주차: 구조체와 공용체
학습 목표 구조체(struct)로 서로 다른 자료형을 하나의 새 자료형으로 묶고, 정의·선언·초기화·멤버 접근의 문법 요소를 하나씩 설명할 수 있다 sizeof 와 offsetof 로 구조체의 실제 메모리 배치를 찍어 보고, 패딩과 정렬 때문에 크기가 멤버 합보다 커지는 이유를 바이트 단위로 설명할 수 있다 멤버 순서만 바꿔서 구조체 크기를 줄일 수 있다 typedef 로 이름을 다듬고, 자기참조 구조체에 태그 이름이 필요한 이유를 안다
000
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
7주차: 포인터 심화 학습 목표 이중 포인터(포인터의 포인터)가 왜 필요한지 설명하고, 함수가 호출자의 포인터를 바꾸게 만들 수 있다 int *a[5], int (*p)[5], int (*f)(int, int) 같은 복잡한 선언을 오른쪽-왼쪽 규칙으로 읽을 수 있다 함수 포인터로 "동작"을 값처럼 넘기고(콜백), qsort 에 비교 함수를 줄 수 있다 프로그램의 메모리 영역(코드·데이터·BSS·힙·스택)을 실제 주소로 확인할 수 있다 malloc, calloc, realloc, free…
kyulingcompany.com
7주차: 포인터 심화
학습 목표 이중 포인터(포인터의 포인터)가 왜 필요한지 설명하고, 함수가 호출자의 포인터를 바꾸게 만들 수 있다 int *a[5], int (*p)[5], int (*f)(int, int) 같은 복잡한 선언을 오른쪽-왼쪽 규칙으로 읽을 수 있다 함수 포인터로 "동작"을 값처럼 넘기고(콜백), qsort 에 비교 함수를 줄 수 있다 프로그램의 메모리 영역(코드·데이터·BSS·힙·스택)을 실제 주소로 확인할 수 있다 malloc, calloc, realloc, free…
000
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
6주차: 포인터 기초 들어가며 지금까지 우리는 설명하지 않고 넘어간 것이 세 가지 있습니다. 2주차에 scanf("%d", &age); 를 쓰면서 "& 를 빼먹으면 안 된다"고만 했습니다. 그런데 printf("%d", age); 에는 & 가 없습니다. 왜 scanf 에만 & 가 붙을까요? 5주차에 두 값을 맞바꾸는 try_swap 을 만들었는데, 함수 안에서는 분명히 바뀌었는데 밖에 나오면 그대로였습니다. 그때 "원본을 바꾸려면 주소를 넘겨야 한다"고만 하고 미뤄 두었습니다.
kyulingcompany.com
6주차: 포인터 기초
들어가며 지금까지 우리는 설명하지 않고 넘어간 것이 세 가지 있습니다. 2주차에 scanf("%d", &age); 를 쓰면서 "& 를 빼먹으면 안 된다"고만 했습니다. 그런데 printf("%d", age); 에는 & 가 없습니다. 왜 scanf 에만 & 가 붙을까요? 5주차에 두 값을 맞바꾸는 try_swap 을 만들었는데, 함수 안에서는 분명히 바뀌었는데 밖에 나오면 그대로였습니다. 그때 "원본을 바꾸려면 주소를 넘겨야 한다"고만 하고 미뤄 두었습니다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
5주차: 함수와 모듈화 들어가며 4주차에 배열을 정렬하는 버블 정렬을 만들었습니다. 그런데 한 프로그램 안에서 점수 배열도 정렬하고, 나이 배열도 정렬하고, 키 배열도 정렬해야 한다면 어떻게 할까요? 지금까지 배운 것만으로는 정렬 코드를 세 번 복사해서 붙여 넣는 수밖에 없습니다. 그러다 정렬 코드에서 버그를 하나 발견하면? 세 군데를 똑같이 고쳐야 하고, 한 군데라도 빼먹으면 어떤 배열은 제대로 정렬되고 어떤 배열은 안 되는, 찾기 아주 어려운 버그가 생깁니다.
kyulingcompany.com
5주차: 함수와 모듈화
들어가며 4주차에 배열을 정렬하는 버블 정렬을 만들었습니다. 그런데 한 프로그램 안에서 점수 배열도 정렬하고, 나이 배열도 정렬하고, 키 배열도 정렬해야 한다면 어떻게 할까요? 지금까지 배운 것만으로는 정렬 코드를 세 번 복사해서 붙여 넣는 수밖에 없습니다. 그러다 정렬 코드에서 버그를 하나 발견하면? 세 군데를 똑같이 고쳐야 하고, 한 군데라도 빼먹으면 어떤 배열은 제대로 정렬되고 어떤 배열은 안 되는, 찾기 아주 어려운 버그가 생깁니다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
26. 어휘를 늘리자 무너진 것 — 잣대가 틀려서 두 번 오진했고, 고치고 나니 판정선을 넘었습니다 25편 끝에 "어휘를 늘려 본 적 없는 조합을 제대로 재 보겠다"고 적었습니다. 큐브 색을 셋에서 다섯으로, 받침을 둘에서 셋으로 늘리자 옛 어휘에서 96%였던 성적이 24%로 떨어졌습니다. 이 편은 그 24%를 91%까지 끌어올린 일주일의 기록입니다. 중간에 원인을 두 번 잘못 짚었는데, 두 번 다 정책이 아니라 제 잣대가 틀려서였습니다. 어휘를 늘리면 무엇을 재나 지금까지의 어휘는 큐브 세 개(red, green,…
kyulingcompany.com
26. 어휘를 늘리자 무너진 것 — 잣대가 틀려서 두 번 오진했고, 고치고 나니 판정선을 넘었습니다
25편 끝에 "어휘를 늘려 본 적 없는 조합을 제대로 재 보겠다"고 적었습니다. 큐브 색을 셋에서 다섯으로, 받침을 둘에서 셋으로 늘리자 옛 어휘에서 96%였던 성적이 24%로 떨어졌습니다. 이 편은 그 24%를 91%까지 끌어올린 일주일의 기록입니다. 중간에 원인을 두 번 잘못 짚었는데, 두 번 다 정책이 아니라 제 잣대가 틀려서였습니다. 어휘를 늘리면 무엇을 재나 지금까지의 어휘는 큐브 세 개(red, green, yellow)와 받침 두 개(blue, purple)였습니다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
25. 눈을 밖에 달다 — 정책은 여전히 눈을 감았는데, 파지는 오라클급이 됐습니다 24편에서 시즌 3를 닫으며 "눈"을 못 푼 것 1순위로 적었습니다. 정책 안에 눈을 넣으면 지름길이 이기고, 나중에 붙이면 무익했습니다. 이 편은 방향을 바꿉니다. 정책은 그대로 눈을 감겨 두고, 정책 밖에서 손목 카메라를 읽는 작은 망이 내려가는 도중에 좌표 입력을 밀어 줍니다. 재학습 없이 하루 만에, 전체 작업공간 30시행에서 24가 28이 됩니다. 정책을 고치지 않고 정책을 움직이는 법 시즌 3의 마지막 정책 v17은 좌표 열 개와…
kyulingcompany.com
25. 눈을 밖에 달다 — 정책은 여전히 눈을 감았는데, 파지는 오라클급이 됐습니다
24편에서 시즌 3를 닫으며 "눈"을 못 푼 것 1순위로 적었습니다. 정책 안에 눈을 넣으면 지름길이 이기고, 나중에 붙이면 무익했습니다. 이 편은 방향을 바꿉니다. 정책은 그대로 눈을 감겨 두고, 정책 밖에서 손목 카메라를 읽는 작은 망이 내려가는 도중에 좌표 입력을 밀어 줍니다. 재학습 없이 하루 만에, 전체 작업공간 30시행에서 24가 28이 됩니다. 정책을 고치지 않고 정책을 움직이는 법 시즌 3의 마지막 정책 v17은 좌표 열 개와 지시문, 시간을 받아 큐브를 집습니다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
24. 시즌 3를 닫으며 — 언어로 시키는 로봇은 어디까지 왔나 19편에서 데이터 공장을 차리고 보기 좋게 실패한 뒤, 열일곱 번째 정책까지 왔습니다. 이 편은 23편 끝에 약속한 먼 쪽 실험의 결과로 시작해서, 시즌 3가 무엇을 풀었고 무엇을 못 풀었는지, 그리고 다음에 무엇을 하면 좋을지를 정리합니다. 먼 쪽에도 같은 처방을 23편에서 로봇 몸통 앞 구역에 데이터를 더 넣자 그 구역만이 아니라 전체 성적이 올랐습니다. 그때 적어 둔 의심이 하나 있었습니다. 데이터가 1,000편에서 2,500편으로 늘었으니, 오른 것이 "몸통…
kyulingcompany.com
24. 시즌 3를 닫으며 — 언어로 시키는 로봇은 어디까지 왔나
19편에서 데이터 공장을 차리고 보기 좋게 실패한 뒤, 열일곱 번째 정책까지 왔습니다. 이 편은 23편 끝에 약속한 먼 쪽 실험의 결과로 시작해서, 시즌 3가 무엇을 풀었고 무엇을 못 풀었는지, 그리고 다음에 무엇을 하면 좋을지를 정리합니다. 먼 쪽에도 같은 처방을 23편에서 로봇 몸통 앞 구역에 데이터를 더 넣자 그 구역만이 아니라 전체 성적이 올랐습니다. 그때 적어 둔 의심이 하나 있었습니다. 데이터가 1,000편에서 2,500편으로 늘었으니, 오른 것이 "몸통 앞 밀도" 덕인지 "데이터 총량" 덕인지 섞여 있다는 것입니다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
혓바늘 돋아서 혀가 지금 엄청 아프네요. 그리고 이가 깨졌는데.... 망할.. 일본에서 임플란트 해야 하나 봅니다. ㅠㅠ
020
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
ai를 통해서 내가 확인 못하는 내용이라던가 예제의 테스트, 빌드 결과의 스크린샷을 도움받는 거 외에는 진짜 열심히 적으면서 살고있습니다. ㅠㅠ 이전 글하고는 많이 느낌이 다르지만 최대한 살려서 해봐야죠. 최신 gcc-13 베이스로 글을 적고 있는데... 잠은 자면서 살고있어요.
020
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
4주차: 배열과 문자열 들어가며 3주차에서 조건문과 반복문을 배웠습니다. 이제 프로그램이 "상황에 따라 다르게", "같은 일을 여러 번" 할 수 있게 됐습니다. 그런데 한 가지 불편한 점이 남아 있습니다. 지금까지 우리가 다룬 변수는 값을 딱 하나씩만 담을 수 있었습니다. 학생 다섯 명의 점수를 저장해야 한다고 해 봅시다. 2주차에서 배운 방법으로는 이렇게 할 수밖에 없습니다. int score1 = 85; int score2 = 90; int score3 = 78; int score4 = 92; int score5 = 88; …
kyulingcompany.com
4주차: 배열과 문자열
들어가며 3주차에서 조건문과 반복문을 배웠습니다. 이제 프로그램이 "상황에 따라 다르게", "같은 일을 여러 번" 할 수 있게 됐습니다. 그런데 한 가지 불편한 점이 남아 있습니다. 지금까지 우리가 다룬 변수는 값을 딱 하나씩만 담을 수 있었습니다. 학생 다섯 명의 점수를 저장해야 한다고 해 봅시다. 2주차에서 배운 방법으로는 이렇게 할 수밖에 없습니다. int score1 = 85; int score2 = 90; int score3 = 78; int score4 = 92; int score5 = 88; …
000
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
3주차: 연산자와 제어문 들어가며 지난주에는 값을 담는 법을 배웠습니다. int 상자에 정수를, double 상자에 실수를 넣고, printf 로 꺼내 보고, scanf 로 키보드에서 받아 넣었습니다. 그런데 지금까지 만든 프로그램은 모두 한 가지 공통점이 있습니다. 위에서 아래로 한 번 쭉 실행되고 끝난다는 것입니다. 입력이 무엇이든 같은 줄을 같은 순서로 실행합니다. 실제 프로그램은 그렇지 않습니다. 계산기는 입력한 두 수를 더하고, 곱하고, 나눕니다. → 연산자
kyulingcompany.com
3주차: 연산자와 제어문
들어가며 지난주에는 값을 담는 법을 배웠습니다. int 상자에 정수를, double 상자에 실수를 넣고, printf 로 꺼내 보고, scanf 로 키보드에서 받아 넣었습니다. 그런데 지금까지 만든 프로그램은 모두 한 가지 공통점이 있습니다. 위에서 아래로 한 번 쭉 실행되고 끝난다는 것입니다. 입력이 무엇이든 같은 줄을 같은 순서로 실행합니다. 실제 프로그램은 그렇지 않습니다. 계산기는 입력한 두 수를 더하고, 곱하고, 나눕니다. → 연산자
000
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
2주차: C 언어 기본 문법 – 변수와 자료형 들어가며 1주차에 만든 프로그램들은 모두 정해진 글자를 그대로 찍기만 했습니다. 자기소개 프로그램도, 배너도, 몇 번을 실행하든 똑같은 화면이 나옵니다. 계산기라고 이름 붙인 프로그램조차 "계산 기능은 다음 주차에 구현됩니다"라는 안내문만 보여 줬습니다. 진짜 프로그램은 다릅니다. 계산기는 사용자가 넣은 숫자를 기억해 두었다가 더하고, 게임은 플레이어의 체력과 점수를 기억하면서 계속 바꾸고, 메모장은 우리가 친 글자를 기억해서 파일로 저장합니다. 프로그램이 "기억"을 하려면 무엇이…
kyulingcompany.com
2주차: C 언어 기본 문법 – 변수와 자료형
들어가며 1주차에 만든 프로그램들은 모두 정해진 글자를 그대로 찍기만 했습니다. 자기소개 프로그램도, 배너도, 몇 번을 실행하든 똑같은 화면이 나옵니다. 계산기라고 이름 붙인 프로그램조차 "계산 기능은 다음 주차에 구현됩니다"라는 안내문만 보여 줬습니다. 진짜 프로그램은 다릅니다. 계산기는 사용자가 넣은 숫자를 기억해 두었다가 더하고, 게임은 플레이어의 체력과 점수를 기억하면서 계속 바꾸고, 메모장은 우리가 친 글자를 기억해서 파일로 저장합니다. 프로그램이 "기억"을 하려면 무엇이 필요할까요? 그 답이 이번 주의 주제인 …
000
규링은 규링규링~ @kyulinglee.bsky.social · 28/09/2026
리눅스 C 프로그래밍 시리즈 다시 연재합니다. ㅠㅠ
kyulingcompany.com
1주차: 리눅스 개발 환경 구축과 첫 C 프로그램
들어가며 C 프로그래밍을 배우는 여정을 시작하신 것을 환영합니다! 이번 글에서는 리눅스 환경에서 C 프로그래밍을 시작하기 위한 모든 준비 과정을 다룹니다. 많은 분들이 Windows 환경에 익숙하실 텐데요, 왜 굳이 리눅스에서 C를 배워야 할까요? 리눅스는 C 언어로 만들어진 운영체제입니다. 리눅스 커널 자체가 C로 작성되었고, 대부분의 시스템 도구들도 C로 개발되었죠. 따라서 리눅스 환경은 C 프로그래밍을 배우기에 가장 자연스러운 환경입니다. 또한 서버 개발, 임베디드 시스템, 시스템 프로그래밍 등 실무 환경의 대부분이 리눅스 기반이기 때문에, 리눅스에 익숙해지는 것은 개발자로서 필수적인 역량입니다.
044
규링은 규링규링~ @kyulinglee.bsky.social · 20/09/2026
PSPP 강의 9편 — 스크립트로 돌리기와 자동화 이 시리즈의 PSPP 출력은 전부 GUI 없이 만들었다. 신택스 파일 15개를 셸 스크립트 하나로 돌리고, 텍스트 출력에서 숫자를 뽑아 대조표를 만들었다. 이 편은 그 방법이다. 그리고 이 대목이 PSPP가 SPSS보다 나은 지점이다. 배치 모드 기본 pspp -b가 신택스 파일을 GUI 없이 실행한다. -o로 출력 파일을, -O format=으로 형식을 정한다. export LC_ALL=C.UTF-8 pspp -b syntax/04_ttest.sps -o…
kyulingcompany.com
PSPP 강의 9편 — 스크립트로 돌리기와 자동화
이 시리즈의 PSPP 출력은 전부 GUI 없이 만들었다. 신택스 파일 15개를 셸 스크립트 하나로 돌리고, 텍스트 출력에서 숫자를 뽑아 대조표를 만들었다. 이 편은 그 방법이다. 그리고 이 대목이 PSPP가 SPSS보다 나은 지점이다. 배치 모드 기본 pspp -b가 신택스 파일을 GUI 없이 실행한다. -o로 출력 파일을, -O format=으로 형식을 정한다. export LC_ALL=C.UTF-8 pspp -b syntax/04_ttest.sps -o output/04.txt -O format=txt -O width=100 pspp -b syntax/04_ttest.sps -o output/04.html -O format=html …
000
규링은 규링규링~ @kyulinglee.bsky.social · 20/09/2026
PSPP 강의 8편 — 안 되는 것과 우회로 이 편에서는 PSPP에 없는 절차를 일부러 던져 본다. 어떤 오류가 나는지, 오류 메시지가 무엇을 말해 주는지, 그리고 같은 질문에 PSPP로 답할 우회로가 있는지다. 앞 편들이 "된다"를 보였다면 이 편은 "여기서 갈린다"를 보인다. 데이터 data/training_survey.sav. 반복측정 설계(사전·사후 × 집단), 혼합모형, 편상관, Chart Builder 그래프, 그리고 SPSS 전용 고급 절차 열두 가지를 시도한다. 메뉴에서 먼저 보인다 1편에서 본 PSPPIRE의…
kyulingcompany.com
PSPP 강의 8편 — 안 되는 것과 우회로
이 편에서는 PSPP에 없는 절차를 일부러 던져 본다. 어떤 오류가 나는지, 오류 메시지가 무엇을 말해 주는지, 그리고 같은 질문에 PSPP로 답할 우회로가 있는지다. 앞 편들이 "된다"를 보였다면 이 편은 "여기서 갈린다"를 보인다. 데이터 data/training_survey.sav. 반복측정 설계(사전·사후 × 집단), 혼합모형, 편상관, Chart Builder 그래프, 그리고 SPSS 전용 고급 절차 열두 가지를 시도한다. 메뉴에서 먼저 보인다 1편에서 본 PSPPIRE의 Analyze 메뉴에는 General Linear Model 항목 자체가 없다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 20/09/2026
PSPP 강의 7편 — 데이터 관리와 매크로 이 편에서는 분석 자체보다 그 앞뒤에 필요한 것들을 다룬다. 일부 케이스만 고르기, 가중치 걸기, 집단별로 나눠 돌리기, 집계값을 각 케이스에 붙이기, 파일 병합, 그리고 반복 작업을 줄이는 매크로다. 덤으로 단변량 GLM, K-평균 군집, ROC 곡선도 확인한다. PSPP에만 있는 함정이 하나 나온다. 데이터 data/training_survey.sav. 이 편의 신택스는 활성 데이터를 바꾸지만 저장하지 않으니 파일은 그대로다. 메뉴로 하기 Data 메뉴에 Select Cases,…
kyulingcompany.com
PSPP 강의 7편 — 데이터 관리와 매크로
이 편에서는 분석 자체보다 그 앞뒤에 필요한 것들을 다룬다. 일부 케이스만 고르기, 가중치 걸기, 집단별로 나눠 돌리기, 집계값을 각 케이스에 붙이기, 파일 병합, 그리고 반복 작업을 줄이는 매크로다. 덤으로 단변량 GLM, K-평균 군집, ROC 곡선도 확인한다. PSPP에만 있는 함정이 하나 나온다. 데이터 data/training_survey.sav. 이 편의 신택스는 활성 데이터를 바꾸지만 저장하지 않으니 파일은 그대로다. 메뉴로 하기 Data 메뉴에 Select Cases, Weight Cases, Split File, Aggregate, Sort Cases가 있다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 20/09/2026
PSPP 강의 6편 — 신뢰도, 요인분석, 비모수 이 편에서는 설문 척도를 다룬다. 만족도 5문항의 내적 일관성(Cronbach α), 요인구조(주성분 분석), 그리고 정규성을 가정하지 않는 비모수 검정 세 가지다. 시리즈에서 PSPP와 SPSS의 값이 처음으로 어긋나는 곳이 여기다. 데이터 data/training_survey.sav의 q1~q5는 공통 요인 하나에 노이즈를 더해 만들었다. 그러니 α는 .7~.8, 첫 요인 하나가 분산의 절반 이상을 설명해야 정상이다. 비모수 검정은 4편의 t-검정과 같은 질문을 순위로 다시…
kyulingcompany.com
PSPP 강의 6편 — 신뢰도, 요인분석, 비모수
이 편에서는 설문 척도를 다룬다. 만족도 5문항의 내적 일관성(Cronbach α), 요인구조(주성분 분석), 그리고 정규성을 가정하지 않는 비모수 검정 세 가지다. 시리즈에서 PSPP와 SPSS의 값이 처음으로 어긋나는 곳이 여기다. 데이터 data/training_survey.sav의 q1~q5는 공통 요인 하나에 노이즈를 더해 만들었다. 그러니 α는 .7~.8, 첫 요인 하나가 분산의 절반 이상을 설명해야 정상이다. 비모수 검정은 4편의 t-검정과 같은 질문을 순위로 다시 묻는다. 메뉴로 하기
000
규링은 규링규링~ @kyulinglee.bsky.social · 20/09/2026
PSPP 강의 5편 — 상관, 회귀, 로지스틱 이 편에서는 변수 사이의 관계를 본다. 상관행렬, 연봉을 나이·학력·부서로 설명하는 다중회귀, 재수강 의향을 만족도·향상분·집단으로 예측하는 로지스틱 회귀다. 데이터 data/training_survey.sav. 연봉은 나이, 학력, 개발부서 여부의 함수로 만들었으니 회귀의 R²가 .6~.7 근처로 나와야 정상이다. 재수강 의향은 만족도와 향상분에 의존하도록 만들었다. 메뉴로 하기 Analyze > Bivariate Correlation이 상관, Analyze > Regression…
kyulingcompany.com
PSPP 강의 5편 — 상관, 회귀, 로지스틱
이 편에서는 변수 사이의 관계를 본다. 상관행렬, 연봉을 나이·학력·부서로 설명하는 다중회귀, 재수강 의향을 만족도·향상분·집단으로 예측하는 로지스틱 회귀다. 데이터 data/training_survey.sav. 연봉은 나이, 학력, 개발부서 여부의 함수로 만들었으니 회귀의 R²가 .6~.7 근처로 나와야 정상이다. 재수강 의향은 만족도와 향상분에 의존하도록 만들었다. 메뉴로 하기 Analyze > Bivariate Correlation이 상관, Analyze > Regression > Linear가 선형회귀, Regression > Binary Logistic이 로지스틱이다. 상관 대화상자는 변수를 여러 개 넣으면 행렬을 낸다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 20/09/2026
PSPP 강의 4편 — t-검정과 분산분석 이 편에서는 평균을 비교한다. 실험군과 대조군의 점수 향상분이 다른가(독립표본 t), 교육 전후 점수가 달라졌는가(대응표본 t), 만족도 평균이 보통(3)과 다른가(일표본 t), 부서에 따라 연봉이 다른가(일원분산분석과 사후검정)다. 데이터 data/training_survey.sav. 실험군 향상분은 약 +8, 대조군은 약 +1이 되도록 만들었으니 독립표본 t는 유의해야 정상이다. 연봉은 개발부서가 높게 설계돼 있어 분산분석도 유의해야 한다. 메뉴로 하기 Analyze >…
kyulingcompany.com
PSPP 강의 4편 — t-검정과 분산분석
이 편에서는 평균을 비교한다. 실험군과 대조군의 점수 향상분이 다른가(독립표본 t), 교육 전후 점수가 달라졌는가(대응표본 t), 만족도 평균이 보통(3)과 다른가(일표본 t), 부서에 따라 연봉이 다른가(일원분산분석과 사후검정)다. 데이터 data/training_survey.sav. 실험군 향상분은 약 +8, 대조군은 약 +1이 되도록 만들었으니 독립표본 t는 유의해야 정상이다. 연봉은 개발부서가 높게 설계돼 있어 분산분석도 유의해야 한다. 메뉴로 하기 Analyze > Compare Means 아래에 Means, One Sample T Test, Independent Samples T Test, Paired Samples T Test, One Way ANOVA가 있다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 20/09/2026
PSPP 강의 3편 — 기술통계와 교차표 이 편에서는 분석의 첫 단계인 빈도표, 기술통계량, 상자그림, 그리고 교차표와 카이제곱 검정을 돌린다. "실험군이 대조군보다 재수강 의향이 높은가"가 이 편의 질문이다. 데이터 2편에서 만든 data/training_survey.sav를 연다. 범주형 변수(gender, dept, edu, group, reenroll)는 빈도표로, 연속형 변수(age, pre_score, post_score, gain, sat_mean, salary)는 기술통계량으로 본다. 교차표는 group ×…
kyulingcompany.com
PSPP 강의 3편 — 기술통계와 교차표
이 편에서는 분석의 첫 단계인 빈도표, 기술통계량, 상자그림, 그리고 교차표와 카이제곱 검정을 돌린다. "실험군이 대조군보다 재수강 의향이 높은가"가 이 편의 질문이다. 데이터 2편에서 만든 data/training_survey.sav를 연다. 범주형 변수(gender, dept, edu, group, reenroll)는 빈도표로, 연속형 변수(age, pre_score, post_score, gain, sat_mean, salary)는 기술통계량으로 본다. 교차표는 group × reenroll이다. GET FILE='data/training_survey.sav'. 메뉴로 하기 Analyze > Descriptive Statistics 아래에 Frequencies, Descriptives, Explore, Crosstabs가 있다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 20/09/2026
PSPP 강의 2편 — 데이터 불러오기, 레이블, .sav 저장 이 편에서는 CSV 파일을 읽어 변수 레이블과 값 레이블을 붙이고, 파생 변수를 만들어 .sav로 저장한다. 시리즈 내내 쓸 예제 데이터를 여기서 만든다. 그리고 PSPP가 저장한 .sav를 SPSS가, SPSS가 저장한 .sav를 PSPP가 어떻게 여는지 확인한다. 데이터 어느 회사가 사내 교육 프로그램을 실시하고, 실험군(교육 이수)과 대조군의 전후 평가 점수, 만족도 설문, 재수강 의향을 조사했다는 시나리오의 가상 데이터 200명이다. 저장소의…
kyulingcompany.com
PSPP 강의 2편 — 데이터 불러오기, 레이블, .sav 저장
이 편에서는 CSV 파일을 읽어 변수 레이블과 값 레이블을 붙이고, 파생 변수를 만들어 .sav로 저장한다. 시리즈 내내 쓸 예제 데이터를 여기서 만든다. 그리고 PSPP가 저장한 .sav를 SPSS가, SPSS가 저장한 .sav를 PSPP가 어떻게 여는지 확인한다. 데이터 어느 회사가 사내 교육 프로그램을 실시하고, 실험군(교육 이수)과 대조군의 전후 평가 점수, 만족도 설문, 재수강 의향을 조사했다는 시나리오의 가상 데이터 200명이다. 저장소의 data/training_survey.csv이고, data/make_data.py…
000
규링은 규링규링~ @kyulinglee.bsky.social · 20/09/2026
PSPP 강의 1편 — 설치와 첫 화면 이 편에서는 PSPP를 설치하고, GUI인 PSPPIRE의 창 네 종류와 메뉴 구조를 훑고, 처음 쓰는 사람이 반드시 한 번은 겪는 함정 두 가지를 미리 막는다. 통계는 아직 안 한다. 예제 데이터는 2편에서 만든다. 설치 리눅스 두 가지 길이 있다. 배포판 패키지는 한 줄이지만 버전이 조금 뒤진다. sudo apt install pspp # Ubuntu 24.04 / Mint 22 기준 2.0.0 최신 2.1.1을 쓰려면 Flathub에서 받는다.
kyulingcompany.com
PSPP 강의 1편 — 설치와 첫 화면
이 편에서는 PSPP를 설치하고, GUI인 PSPPIRE의 창 네 종류와 메뉴 구조를 훑고, 처음 쓰는 사람이 반드시 한 번은 겪는 함정 두 가지를 미리 막는다. 통계는 아직 안 한다. 예제 데이터는 2편에서 만든다. 설치 리눅스 두 가지 길이 있다. 배포판 패키지는 한 줄이지만 버전이 조금 뒤진다. sudo apt install pspp # Ubuntu 24.04 / Mint 22 기준 2.0.0 최신 2.1.1을 쓰려면 Flathub에서 받는다.
001
규링은 규링규링~ @kyulinglee.bsky.social · 20/09/2026
PSPP 강의 0편 — PSPP는 SPSS를 얼마나 대체할 수 있나 TL;DR SPSS의 .sav 파일과 .sps 신택스는 GNU PSPP에서 그대로 열리고 그대로 돌아간다. 반대 방향도 된다. 빈도·교차표·t-검정·분산분석·상관·회귀·로지스틱·신뢰도·요인분석·비모수 검정은 PSPP가 인쇄하는 소수 자리까지 SPSS와 같은 값을 낸다. 반복측정 GLM, 혼합모형, 편상관, 다항·순서형 로지스틱, 생존분석, 판별분석, Chart Builder 그래프, Python·R 연동은 PSPP에 없고 "not yet…
kyulingcompany.com
PSPP 강의 0편 — PSPP는 SPSS를 얼마나 대체할 수 있나
TL;DR SPSS의 .sav 파일과 .sps 신택스는 GNU PSPP에서 그대로 열리고 그대로 돌아간다. 반대 방향도 된다. 빈도·교차표·t-검정·분산분석·상관·회귀·로지스틱·신뢰도·요인분석·비모수 검정은 PSPP가 인쇄하는 소수 자리까지 SPSS와 같은 값을 낸다. 반복측정 GLM, 혼합모형, 편상관, 다항·순서형 로지스틱, 생존분석, 판별분석, Chart Builder 그래프, Python·R 연동은 PSPP에 없고 "not yet implemented"라고 정직하게 말한다. 학부 통계, 설문 분석, 논문의 기초 분석이면 PSPP로 충분하다. "SPSS 대신 PSPP 써도 되나요?"라는 질문에 대한 답은 대개 "기초 통계는 됩니다" 정도로 끝난다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 20/09/2026
23. 눈을 돌려주는 법 — 눈은 답이 아니었고, 자리가 답이었습니다 22편에서 정책은 이미지를 지운 뒤에야 지시문을 읽었습니다. 그러면 이미지를 어떻게 돌려줘야 할까요. 이 편은 손목 카메라를 두 가지 순서로 붙여 보고, 되묻는 주기를 바꿔 보고, 그래도 남는 실패의 자리를 지도에 찍어 본 뒤, 눈이 아니라 데이터를 어디에 더 넣느냐가 답이었다는 결말에 도착합니다. 손목 카메라라면 다를까요 22편의 지름길은 카메라에 팔이 보이기 때문에 생겼습니다. 팔이 어디로 가는지 보이면 다음 행동을 그냥 따라 하면 되니까요.
kyulingcompany.com
23. 눈을 돌려주는 법 — 눈은 답이 아니었고, 자리가 답이었습니다
22편에서 정책은 이미지를 지운 뒤에야 지시문을 읽었습니다. 그러면 이미지를 어떻게 돌려줘야 할까요. 이 편은 손목 카메라를 두 가지 순서로 붙여 보고, 되묻는 주기를 바꿔 보고, 그래도 남는 실패의 자리를 지도에 찍어 본 뒤, 눈이 아니라 데이터를 어디에 더 넣느냐가 답이었다는 결말에 도착합니다. 손목 카메라라면 다를까요 22편의 지름길은 카메라에 팔이 보이기 때문에 생겼습니다. 팔이 어디로 가는지 보이면 다음 행동을 그냥 따라 하면 되니까요.
000
규링은 규링규링~ @kyulinglee.bsky.social · 20/09/2026
22. 언어는 정말 들었나 — 눈을 감겨야 들렸습니다 21편의 27/30을 공개하고 나니 제목이 눈에 걸렸습니다. "언어로 시키는 로봇"이라고 해 놓고, 정작 어느 큐브를 집을지는 정책이 아니라 우리가 짠 코드 한 줄이 정하고 있었습니다. 이 편은 그 한 줄을 정책에게 돌려주러 갔다가 두 번 전멸하고, 정책에게 이미지를 아예 보여 주지 않은 뒤에야 지시문을 읽는 로봇을 만나는 이야기입니다. 27/30은 언어의 성적이 아니었습니다 21편의 2단 구조를 다시 봅니다. 지각망이 큐브 3개와 받침 2개의 위치, 그러니까 좌표 10개를…
kyulingcompany.com
22. 언어는 정말 들었나 — 눈을 감겨야 들렸습니다
21편의 27/30을 공개하고 나니 제목이 눈에 걸렸습니다. "언어로 시키는 로봇"이라고 해 놓고, 정작 어느 큐브를 집을지는 정책이 아니라 우리가 짠 코드 한 줄이 정하고 있었습니다. 이 편은 그 한 줄을 정책에게 돌려주러 갔다가 두 번 전멸하고, 정책에게 이미지를 아예 보여 주지 않은 뒤에야 지시문을 읽는 로봇을 만나는 이야기입니다. 27/30은 언어의 성적이 아니었습니다 21편의 2단 구조를 다시 봅니다. 지각망이 큐브 3개와 받침 2개의 위치, 그러니까 좌표 10개를 읽습니다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 16/09/2026
21. 눈을 붙이다 — 평균은 멀쩡한데 꼬리가 망치고 있었습니다 20편에서 병목은 눈으로 확정됐습니다. 좌표를 공짜로 주면 92%, 안 주면 0%입니다. 이 편에서는 그 눈을 실제로 만들어 붙입니다. 그 과정에서 진단 도구가 세 번째로 고장 나고, 마지막에는 "학습 데이터의 평균 오차"가 아니라 드물게 크게 틀린 49편이 범인이었다는 결말에 도착합니다. 이미지에 정보가 없는 걸까요, 못 꺼내는 걸까요 두 가능성의 처방이 완전히 다릅니다. 정보가 없으면 해상도와 시점을 손봐야 하고, 있는데 못 꺼내는 거라면 추출 방식을 손봐야…
kyulingcompany.com
21. 눈을 붙이다 — 평균은 멀쩡한데 꼬리가 망치고 있었습니다
20편에서 병목은 눈으로 확정됐습니다. 좌표를 공짜로 주면 92%, 안 주면 0%입니다. 이 편에서는 그 눈을 실제로 만들어 붙입니다. 그 과정에서 진단 도구가 세 번째로 고장 나고, 마지막에는 "학습 데이터의 평균 오차"가 아니라 드물게 크게 틀린 49편이 범인이었다는 결말에 도착합니다. 이미지에 정보가 없는 걸까요, 못 꺼내는 걸까요 두 가능성의 처방이 완전히 다릅니다. 정보가 없으면 해상도와 시점을 손봐야 하고, 있는데 못 꺼내는 거라면 추출 방식을 손봐야 합니다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 16/09/2026
20. 세 번 기각당한 가설 — “안 본다”에서 “봐도 못 읽는다”까지 19편의 정책은 순서만 외우고 눈을 뜨지 않았습니다. 그래서 "뭘 더 주면 될까"를 세 번 시도했습니다. 데이터를 3배로, 눈의 학습을 열어 주고, 카메라를 3대로. 세 번 다 기각됐습니다. 이 편은 그 세 번의 실패와, 그 뒤에야 던진 다른 질문에 대한 기록입니다. 가설 1과 2 — 데이터를 늘리고 눈을 열다 첫 정책은 300편으로 배웠고, 이미지 인코더는 얼린 채였습니다(기본 레시피가 그렇습니다). 그래서 두 가지를 한꺼번에 바꿨습니다.
kyulingcompany.com
20. 세 번 기각당한 가설 — “안 본다”에서 “봐도 못 읽는다”까지
19편의 정책은 순서만 외우고 눈을 뜨지 않았습니다. 그래서 "뭘 더 주면 될까"를 세 번 시도했습니다. 데이터를 3배로, 눈의 학습을 열어 주고, 카메라를 3대로. 세 번 다 기각됐습니다. 이 편은 그 세 번의 실패와, 그 뒤에야 던진 다른 질문에 대한 기록입니다. 가설 1과 2 — 데이터를 늘리고 눈을 열다 첫 정책은 300편으로 배웠고, 이미지 인코더는 얼린 채였습니다(기본 레시피가 그렇습니다). 그래서 두 가지를 한꺼번에 바꿨습니다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 16/09/2026
19. 언어로 시키는 로봇 — 데이터 공장을 차리고, 보기 좋게 실패했습니다 시즌 3의 시작입니다. 18편까지는 "걷게 만들고 의심하기"였다면, 이번에는 과제가 통째로 바뀝니다. 걷기가 아니라 테이블 위 물건 옮기기, 강화학습이 아니라 모방학습, 관절 숫자가 아니라 카메라와 문장입니다. 이 편에서는 데이터 공장을 세우고 첫 정책을 학습시킨 뒤, loss가 100배 떨어졌는데 성공률이 0인 상황을 만납니다. 왜 갑자기 팔인가요 시즌 1~2의 G1은 이제 걷고, 돌고, 밀쳐도 버티고, 16cm 계단을 오릅니다. 잘하는데, 한 가지를…
kyulingcompany.com
19. 언어로 시키는 로봇 — 데이터 공장을 차리고, 보기 좋게 실패했습니다
시즌 3의 시작입니다. 18편까지는 "걷게 만들고 의심하기"였다면, 이번에는 과제가 통째로 바뀝니다. 걷기가 아니라 테이블 위 물건 옮기기, 강화학습이 아니라 모방학습, 관절 숫자가 아니라 카메라와 문장입니다. 이 편에서는 데이터 공장을 세우고 첫 정책을 학습시킨 뒤, loss가 100배 떨어졌는데 성공률이 0인 상황을 만납니다. 왜 갑자기 팔인가요 시즌 1~2의 G1은 이제 걷고, 돌고, 밀쳐도 버티고, 16cm 계단을 오릅니다. 잘하는데, 한 가지를 못 합니다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 15/09/2026
바이브코딩으로 여러가지 것들이 많이 많들어지고 있지만, 서비스들 외에 깊이가 제대로 있어야 하는 것에도 그런 거 없이 그냥 ai한테 딸깍하고는 대충 말하는 사람들이 많아서 한번 써봅니다. 쓴 소리 듣을 껍니다. 그렇지만 이런 이야기 하는 사람 되어야죠.
kyulingcompany.com
AI 딸깍 시대에도 CS 기초는 스스로 공부해야 한다
TL;DR — 바이브코딩으로 결과물은 나오지만 실력은 남지 않는다. 세계적인 전공 명저가 웹에 무료로 공개되어 있고, 스탠포드·CMU·하버드·MIT는 AI 활용 과목을 새로 열면서도 기초 코어(C/어셈블리, 시스템, 알고리즘, 이론)는 손대지 않았다. 대학이 지키는 순서는 명확하다. 기초를 직접 익힌 다음에 에이전트를 지휘한다. CS 전공자가 택한 어려운 길은 취업이든 직접 서비스 개발이든 어느 쪽으로 가도 값이 오르는 선택이었고, 우리도 그 순서를 지켜야 한다. 1. "운영체제 만들었어요"의 정체
000
규링은 규링규링~ @kyulinglee.bsky.social · 15/09/2026
이번에는 환경만 바꿔서 하는 강화학습에 대한 글들을 정리해봤습니다. 돌려보는 환경 구축해서 해보는 건 되는데... 이녀석은 genesis보다 엄청 리소스를 많이 먹는 녀석이라 돌리는 것만으로도 빡세네요. kyulingcompany.com/%ea%b0%95%ec%9d%…
kyulingcompany.com
Isaac Lab으로 휴머노이드 강화학습 - Kyuling Company
NVIDIA Isaac Sim과 Isaac Lab으로 Unitree G1을 걷게 만든 기록입니다. 전 15편이고, 앞에서부터 순서대로 읽도록 짜여 있습니다. 각 편은 실행한 명령과 실측한 숫자를 그대로 싣고, 예측이 빗나간 것도 빗나간 대로 적었습니다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 15/09/2026
10. 이식 실패의 분해 — 공식 보상을 통째로 옮기면 왜 조각상이 되나 이번 단계 목표: 09편에서 공식 보상 세트를 통째로 옮기자 로봇이 걷기를 포기하고 서 버렸습니다. 이번 편은 그 "조각상"의 원인을 요인 실험으로 쪼갭니다. 로봇 모델 탓인가, 커리큘럼 탓인가, 밀치기 탓인가. 답은 셋 다 아니었고, 대신 보상 항목이 로봇에 따라 의미가 바뀌는 장면과 커리큘럼이 정지 정책에게 해킹당하는 장면을 보게 됩니다. 출발점 — 통이식은 5개 seed 전부 조각상 09편의 L6은 다중 seed로 승격해도 결과가 같았습니다.
kyulingcompany.com
10. 이식 실패의 분해 — 공식 보상을 통째로 옮기면 왜 조각상이 되나
이번 단계 목표: 09편에서 공식 보상 세트를 통째로 옮기자 로봇이 걷기를 포기하고 서 버렸습니다. 이번 편은 그 "조각상"의 원인을 요인 실험으로 쪼갭니다. 로봇 모델 탓인가, 커리큘럼 탓인가, 밀치기 탓인가. 답은 셋 다 아니었고, 대신 보상 항목이 로봇에 따라 의미가 바뀌는 장면과 커리큘럼이 정지 정책에게 해킹당하는 장면을 보게 됩니다. 출발점 — 통이식은 5개 seed 전부 조각상 09편의 L6은 다중 seed로 승격해도 결과가 같았습니다.
000
규링은 규링규링~ @kyulinglee.bsky.social · 15/09/2026
11. 시간이라는 성분 — 우리가 몰랐던 33배 이번 단계 목표: 10편의 마지막 단서를 확인합니다. 원판은 50,000 iteration을 학습한다는 것. 같은 셀을 1,500에서 10,000으로 늘리자 조각상이 걷기 시작했고, 그 시점을 셀마다 재어 지도를 그렸습니다. 교차 평가의 진단이 어느 칸이 영원히 안 걷는지 미리 맞히는 장면과, 예측 장부의 마지막 반전까지 담습니다. 33배 우리 예산 1,500은 05편에서 정한 값입니다. 범용 스택은 150 iteration쯤에 넘어지지 않게 되고 1,000 전에 걸음이 안정됐으니…
kyulingcompany.com
11. 시간이라는 성분 — 우리가 몰랐던 33배
이번 단계 목표: 10편의 마지막 단서를 확인합니다. 원판은 50,000 iteration을 학습한다는 것. 같은 셀을 1,500에서 10,000으로 늘리자 조각상이 걷기 시작했고, 그 시점을 셀마다 재어 지도를 그렸습니다. 교차 평가의 진단이 어느 칸이 영원히 안 걷는지 미리 맞히는 장면과, 예측 장부의 마지막 반전까지 담습니다. 33배 우리 예산 1,500은 05편에서 정한 값입니다. 범용 스택은 150 iteration쯤에 넘어지지 않게 되고 1,000 전에 걸음이 안정됐으니 넉넉하다고 본 거죠.
000
규링은 규링규링~ @kyulinglee.bsky.social · 15/09/2026
09. 보이지 않는 심판 — 정책이 채점 기준을 못 볼 때 이번 단계 목표: 08편에서 위상 게이트는 네 번 연속 무시당했습니다. 용의자 넷을 하나씩 지워 나가면서, 정작 목록에 없던 진범을 찾습니다. 그리고 핵심 단들을 5개 seed로 재학습해 여기까지의 이야기가 운이었는지 확인합니다. 용의자 넷 08편 끝에 남은 가설은 이랬습니다. 경쟁 항목 — feet_air_time이 잰걸음을 지지하고 있다 최적화 실패 — 명세상 정렬이 최적인데 탐색이 못 간다 가중치 부족 — 0.5가 작다
kyulingcompany.com
09. 보이지 않는 심판 — 정책이 채점 기준을 못 볼 때
이번 단계 목표: 08편에서 위상 게이트는 네 번 연속 무시당했습니다. 용의자 넷을 하나씩 지워 나가면서, 정작 목록에 없던 진범을 찾습니다. 그리고 핵심 단들을 5개 seed로 재학습해 여기까지의 이야기가 운이었는지 확인합니다. 용의자 넷 08편 끝에 남은 가설은 이랬습니다. 경쟁 항목 — feet_air_time이 잰걸음을 지지하고 있다 최적화 실패 — 명세상 정렬이 최적인데 탐색이 못 간다 가중치 부족 — 0.5가 작다
000