[크래프톤] 정글 탐험준비

민구입니다·2026년 9월 17일

is_krafton_jungle

목록 보기
6/7
post-thumbnail

탐험 준비 : 정글을 끝까지 가기 위해 준비하는 과정

드디어 한 주가 끝났다.
이번 주는 상당히 어려웠다고 생각한다.

학습한 내용은 아래와 같다.

  • CS APP 3장 (프로그램의 기계수준 표현)
  • C언어를 통한 데이터 구조 구현

자바를 사용해보긴 했지만 C언어의 포인터에 대해 이해하는 시간이 좀 걸렸고,
CS APP 3장은 너무 어려운 파트였다.

정말 대학 전공시간 공부한 것 보다 10배는 열심히 공부한 것 같다.

오늘의 TIL은 3장의 내용과 흐름 어디를 보면 좋을지 적어보려고 한다.

참고로 나는 감기에 걸려 몰입하기 힘들어 아쉬웠다...

3장 : 프로그램의 기계 수준 표현

전부 이해하려고 하면 너무 어려운 장이라 선택과 집중이 필요했다.

어셈블리어를 직접 짜거나 주소를 손으로 계산할 일은 없겠지만,
어떻게 계산되는지, 뭐가 뭐를 의미하는지 알고 가면 분명 도움이 된다.

자세한 내용은 블로그에 정리해 봤다.
CS APP 3장 정리

C 코드가 컴파일러를 거쳐 어셈블리어로 바뀌는 과정을 다루는 장이다.
이 장의 예제는 -Og (디버깅용 최적화) 단계 기준이다.

오퍼랜드는 즉시값($42), 레지스터(%rax), 메모리((%rax)) 세 종류이고, 메모리 주소는 D(Rb, Ri, S) → Rb + Ri × S + D 공식으로 계산된다. 배열 접근 a[i]가 결국 곱셈+덧셈이라는 걸 여기서 볼 수 있다.

lea 는 주소 계산 명령어지만, 컴파일러가 x*3 같은 산술 연산 용도로 쓴다. 메모리 접근 없이 계산만 하므로 빠르다.

mov 는 데이터 이동 명령어로, 크기 접미사(b/w/l/q)로 몇 바이트를 옮길지 지정한다. 타입 간 변환 시 movs(부호 확장), movz(제로 확장)를 쓴다.

조건 분기는 cmp(뺄셈 후 플래그만 세팅) + 조건 jmp로 구현된다. if, for, while 전부 기계 수준에선 비교하고 점프하는 것뿐이다.

함수 호출 규약: 인자 6개까지 레지스터(%rdi, %rsi, %rdx, %rcx, %r8, %r9), 7번째부터 스택. 반환값은 %rax. callee-saved/caller-saved 구분으로 레지스터 충돌을 방지한다.

구조체 정렬: CPU는 데이터를 자기 크기의 배수 주소에서 읽는 게 빠르므로, 컴파일러가 패딩을 넣는다. 멤버를 큰 타입부터 선언하면 패딩 낭비를 줄일 수 있다.

스택은 높은 주소→낮은 주소로 자라며, 함수 호출마다 프레임이 쌓인다. 재귀가 깊어지면 스택 오버플로우가 발생한다.

버퍼 오버플로우: 배열을 넘쳐 쓰면 리턴 주소가 덮어씌워져 공격자 코드가 실행될 수 있다. 이를 막기 위해 스택 카나리, ASLR, NX 비트 같은 방어 기법이 존재한다.


회고

난 나의 뇌에 실망하며 CS APP을 읽었다...
혼자 읽긴 너무 어려우니 AI를 사용하거나 동료에게 물어보는 방법이 좋다고 생각한다.

물론 고능한 분들은 잘 따라갈 수 있을 것이다.
매우 부럽다...

이번 주는 다른 동료들과 6명이서 코어타임을 진행했다.
각자 맡은 파트에 대한 지식을 공부해 다른 팀원들에게 설명해주는 방식으로 진행했다.

이 방식의 장점은 자기 파트에 대한 이해는 확실하게 할 수 있다는 점이다.
책임감도 생기고 설명하면서 다시 한번 모르는 부분과 아는 부분을 확실하게 할 수 있다는 점이 좋았다.

단점도 존재한다.
파트를 나누게 되면 앞 뒤 내용을 모르기 때문에 더 공부하거나 제대로 이해하지 못하는 상황이 생길 수 있다.
또한, 팀 전체의 수준이 비슷할 수록 좋다고 생각한다.

물론 장단점이 존재하는 방법이지만, 한번은 시도해보면 좋을 것이다.

C 언어와 자료구조 구현에 대해선 매우 흥미로웠다.
2주 동안 알고리즘만 하다가 C언어로 자료구조를 구현하니 생각보다 재미있었다.

알고리즘 공부를 열심히 한 것이 도움이 되었다.

트리 문제랑 재귀 문제를 열심히 풀었었는데, 자료구조 구현에 매우 도움이 되었다.
문제는 노드 연결을 어떻게 할 지 고민하는 부분이 많았는데, 재귀에 대한 부분이나 포인터에 대한 이해가 깊을 수록 재밌는 파트였다고 생각한다.

물론 나는 아직 좀 미숙해서 어려웠지만, 배운 것은 많았다.

이번 주는 감기에 걸려 팀원들과 나에게 매우 미안했다...
결론적으로 매우 아쉬운 한 주가 흘렀다.

정글에서 건강 관리는 매우 중요하니 다들 건강 잘 챙기길 바랍니다.


감사합니다 ~!

profile
#경험한_개발자_희망 #AI_함께하기

1개의 댓글

comment-user-thumbnail
5일 전

좋은데요?

답글 달기