
객관적인 시선에서 양심에 손을 얹고 생각해보자. 이번 주에 난 한 것이 없다. 이렇게까지 붕 뜬 주차가 있었나?
기본 목표: malloc lab을 통해 메모리 할당 시 일어나는 동작과 고려해야 할 사항들에 대해 공부하자.
처음에는 협업을 통해서 짧은 기간 안에 많은 양의 과제 및 개념을 이해하는 것을 목표로 하였으나 그렇게 하지 않았다. 아쉽다.
금요일에 시작했다.
일단 최대한 빨리 Github Projects에 있는 개념 학습을 끝내는 것이 목표였다. 늦어도 토요일 낮 시간까지는 끝내고자 목표를 세웠다.
CSAPP의 9.9절을 읽으면 최소 요건을 만족하는 malloc()을 만들 수 있다는 것은 발제 시간의 안내를 통해 알고 있었다. 따라서, 토요일에는 9.9절을 읽기 시작하는 것이 목표였다. 그리고 implicit free list 방식에 해당하는 최소 malloc()을 최대한 빨리 구현하는 것이 목표였다.
내가 생각하기에는 next fit과 best fit은 개념적으로만 알면 될 것 같고, 가장 좋은 성능을 내는 것은 seglist + first-fit 방식일 거라고 생각했다. 그래서 남은 시간에 explicit과 seglist를 구현하여 개선하는 것이 최종 목표였다.
WIL을 쓸 때마다 느끼는 거지만 WIL의 내용은 날마다 작성해야 한다. 느낀 점이 흐릿해지고 뭘 했는지 잘 기억이 나지 않는다.
다행히도, 'todo mate'와 Github 커밋 이력 덕분에 학습 이력을 추적할 수 있었다.
Github Projects에 있는 학습 키워드들에 대해서 모두 학습했다. AI를 활용했고 아주 얕은 수준으로 공부하기는 했지만 블로그에 정리하며 이해하려고 노력했다. 하지만 누군가에게 설명할 수 있거나 질문이 들어왔을 때 대답할 수 있는 수준으로 공부하지 않아서 아쉬움이 남는다. 블로그에 정리한 글도 AI 답변을 그대로 복사 붙여넣기한 수준에 지나지 않는다. 내 머릿속에 들어 있는 내용이 아니라 그때 잠시 이해했다고 생각한 내용일 뿐이다.
(https://velog.io/@soldbone/TIL-week7-malloc-lab-사전-개념-학습)
CSAPP 9.11장까지 읽었다. malloc 구현에 들어가기 전에 개념을 짚어주는 부분이다. 그리고 책을 읽으면서 내가 이해한 내용을 TIL에 그대로 작성하였다.
(https://velog.io/@soldbone/TIL-week7-malloc-lab-CSAPP-9.9절-읽기)
결론적으로 현재 공부하고 있는 내용이 이전에 공부했던 내용이고 내용이 중복되는 것이 거의 확실하다면 건너 뛸 줄도 알아야 한다.
그리고 이 날에 바로 매크로 구현까지는 끝내고 자러 갈 수 있었는데 그러지 않았다. CSAPP 교재의 9.9절 개념을 보고 이해하는 것이 목표였는데 이미 이루었기 때문에 핑계도 충분했다. 이런 저런 이유로 같은 교육장 사람들과 밖에 나가서 노는 것을 선택하였고 그래서 일정이 자연스레 더 지연되었다고 생각한다.
그래서 내가 생각하는 것보다 훨씬 일정이 타이트해지기 시작했던 것 같다. 다음 날도 교육장 사람들과 '탐험'을 가는 날이었기 때문이다.
사실 이 날이 일정이 지연된 가장 큰 부분을 차지한다. 이 날은 '탐험'을 떠나기로 한 날이었다. 스마트폰의 지도 앱이나 전자기기 등을 사용하지 않고 나침반과 미리 출력한 지도만 가지고 성저 저수지까지 찾아갔다 오는 것이 목표였다.
결과적으로 다들 재밌어 했고, 벚꽃도 예뻤고, 폐가도 찾았고, 거위도 보는 등 은근히 재밌는 일들이 많기는 했지만 시간을 너무 많이 사용했다.
출발 일정 자체도 너무 지연되었고 특히 밥을 오래 먹으면서 점심부터 저녁 시간까지를 거의 다 사용하게 되었다. 일요일 전체가 사실상 사라진 셈이었다. 점심 시간부터 저녁 시간까지의 가용한 시간을 모두 탐험에 사용했다. 이 부분이 아쉽다.
그래도 일요일에 매크로는 구현을 했다. 토요일에 몇 개의 매크로의 동작 방식은 velog에 정리해 둔 상태라서 그렇게 오래 걸리지는 않았다. 이 날에는 지금 생각보니 이상하리만치 한 것이 없다. 그래도 자정까지 시간이 없지는 않았는데 너무 루즈해졌던 것 같다. 시간이 많이 주어지니까 오히려 빨리 끝내야 하는 일에 지나치게 많은 시간을 들인다는 생각도 든다.
이때부터 아마 마음이 엄청나게 급해졌을 거다. 교육장에서는 이미 다들 성능 파인 튜닝을 위해서 노력하고 있었고 내가 모르는 내용에 대해서 토론을 시작한 지 오래였다. 사실상 내가 개념 공부를 하고 있던 시점부터 이미 구현에 들어갔던 팀이 있었던 것 같다. 다른 사람들은 잘하는 것 같은데 나만 뒤쳐진 느낌이 드니 AI를 안 쓰기가 어려웠다. 그리고 마감 기한도 하루가 남은 상태이니 급해질 수밖에 없었다.
그래서 그런지는 몰라도 이때부터 AI를 미친 듯이 사용하기 시작했다. 아무런 이해도 없이 AI 사용해서 답을 얻는 것이 의미가 없는 줄 알면서도 그렇게 했다. 동시에 AI를 사용해서 얻은 답을 이해하는 데에도 시간이 오래 걸리는 내 자신을 보면서 도대체 AI 활용의 정도를 어떻게 맞춰야 하는 것인지 혼란스러웠다.
그럼에도 먼저 했던 것은 CSAPP 책에서 개념을 설명하는 부분 읽는 것을 마무리하는 것이었다. 이후에는 책에 나와 있는 구현 내용을 로컬 개발환경에서 따라 쳐보기 시작했다. 책에 있는 순서대로 구현을 해 나갔다.
mm_init()extend_heap()mm_free()coalesce()놀랍게도 그냥 따라치는 건데도 말도 안 되는 오타와 실수들이 있어서 나중에 에러가 발생했다. 이때 디버깅을 직접 해봤으면 좋았을 텐데 그렇게 하지 않아서 아쉬웠다. GDB도 사용해보고 싶었는데 이것도 하지 않았다.
에러 나자마자 거의 즉각적으로 AI에게 해결방법을 물어본 것이 아직도 후회된다. 한편으로는 그 당시 마음도 급하고 일정도 촉박했기에 다시 돌아가도 같은 선택을 할 것 같기도 하다.
월요일에 mm_alloc()을 만들어 놓기만 하고 이해하지 못했다. 그래서 화요일에는 먼저 해당 함수를 이해하는 것부터 시작했다. 이후에는 책에 있는 내용을 그대로 따라 쳤다.
find_fit()place()이 과정에서 realloc() 함수도 잘못 구현되어 있어서 수정하는 과정을 거쳤다. AI를 사용하지 않고 혼자 디버깅을 하려고 했다면 에러 원인을 찾을 수 있었을까? 아닐 것 같다.
당연히 seglist는 진행하지 못했고 다른 메모리 사용량 최적화 방식도 생각해보지 못했다.
전반적으로 너무 아쉽게 끝난 주차였다.
지난 주차에 만들었던 미니 DB에 B+ Tree 기반의 인덱스를 적용한 뒤, 100만 건 수준의 대용량 레코드를 생성하고 테스트하는 방법을 알아보는 것이 요구사항이었다.
전날인 화요일 저녁에 수요 코딩회 진행 방식에 대해 팀원들끼리 간략하게 진행 방식을 정한 상태였다. 그런데 이것이 오히려 안 좋게 작용했을 수도 있겠다는 생각이 들었다. 내가 이해한 것과 다른 팀원들이 이해한 진행 방식이 조금 달랐던 것 같다.
원래 생각했던 진행 방식은 다음과 같았다.
위의 과정을 반복하고자 했었는데 잘 되지 않았다.
여러 가지 이유가 있었다.
특히 가장 후회가 되는 것은 내가 생각한 협업 방식과 진행 방식 사이의 괴리가 생긴 시점에 강력한 이의제기를 하지 않았다는 것이다.
2~3번 정도 이야기하기는 했으나 너무 장난스럽게 말했고, 나의 불편한 감정과 생각이 전달되도록 말하지 못했다. 추가하는 기능에 대한 팀 단위의 이해 없이 한 명만 바이브 코딩만 하는 상황이 못마땅 했는데 제대로 표현을 못했다.
하지만 이미 프로젝트의 운전대를 잡고 있는 쪽이 내 쪽이 아니었기 때문에 별다른 선택지가 없기도 했다. 이미 프로젝트는 커지고 있었고 오류가 있어서 수정되는 상황이라 중간에 멈출 수도 없었다.
처음 진행 방식을 정할 때는 굉장히 보람차고 알찬 수요코딩회가 될 줄 알았는데 별다른 효용 없이 끝난 것 같아 많이 아쉽다.
알게 된 것이 하나 있다면 아직 도식화는 AI가 완벽히 하지는 못한다는 사실은 알았다. 도식화 수준이 낮기는 해도 프로젝트 구조를 이해하는 데 도움이 됐다는 팀원이 있기는 했다.
기본 목표: malloc lab을 통해 메모리 할당 시 일어나는 동작과 고려해야 할 사항들에 대해 공부하자.
- 문제해결/구현: 주어진 문제를 주어진 시간 내에 해결하는 능력을 기르자.
- 품질: 테스트 케이스를 통과하는 버그 없는 코드를 만들자.
- 협업: 팀원들 간의 동료 학습을 통해서 혼자서는 해내지 못할 복잡한 과제와 어려운 개념에 대한 공부를 수행하자.
(척도: 매우 불만족, 불만족, 보통, 만족, 매우 만족)
만족도 평가: 매우 불만족
퀴즈를 치르고 난 뒤 느낀 것이 있다. 나는 핵심 키워드 혹은 현재 주차에서 기본이 되는 C언어에 대해 이해를 깊게 하고 있지 않았다.
개념 공부도 AI를 이용했기 때문에 금방 휘발되어 버릴 정도의 얕은 이해 정도만 했다. 그리고 구현 과정에서도 그저 교재에 있는 코드를 보고 따라치거나 AI가 준 코드를 그대로 사용하는 수준에서 그쳤다.
내가 느끼기에는 이번 주차에 내가 제대로 한 것이 없다. 차라리 다음과 같은 것들을 해보는 게 나았을 것 같다.
이번 주는 의도치 않게 내가 할 수 있는 일을 끝내 놓지 않고 너무 많이 놀게 된 주차였다. 토요일 저녁과 일요일 중 일부면 사실 그렇게 큰 지장이 있는 정도는 아니지만 나는 원래 일요일까지 시간을 써야 과제를 끝낼 수 있는 진행 속도를 가지고 있다. 물론, 일요일 외출이 그렇게까지 길어질 줄 몰랐기 때문에 생긴 일이긴 하지만 매우 아쉽다.
그렇다고 토요일에 나간 것이나 일요일에 나간 것을 후회하지는 않는다. 재밌기도 했고 스트레스 해소도 됐다.
그리고 1:1로 커피챗을 처음 해보았다. 사실 횡설수설하느라 말은 잘 못한 것 같고 원래 물어보고 싶었던 시시콜콜한 얘기들도 꺼내지 못했지만 나름 도움이 된 시간이었다. 딱히 내가 잘한 것 같지는 않은데 나에게 칭찬을 해주시려고 하셨는데, 그 마음은 감사했지만 오히려 내가 잘하고 있는지 생각해보게 된 것 같다. 칭찬을 받을 만한 일을 하지 않았다는 사실을 객관적으로 생각해볼 수 있었다.
다음에는 조금 더 코치님들의 이야기를 들어보고 싶다. 개발자가 된 이유, 취미는 무엇이고 일상에서의 행복은 어떻게 찾으시는지, 목표나 목적을 어떤 식으로 설정하시는지 물어보고 싶다.
결국에는 코치님의 말씀대로 매 주차별로 지난 주에 아쉬웠던 것을 기반으로 새로운 목표를 세우며 피드백 해 나가는 수밖에 없다.
위와 같은 목표들을 설정해야 한다.
다음 주차에는 코드를 최대한 스스로 구현해 보는 것을 목표로 하여 진행해볼까 한다. 스스로 구현하려고 노력한 동료들이 있었는데 그 방식이 좋아보였다.
잠을 제외하고 내 자신에게 너무 관대한 것 같은 느낌도 든다. 차라리 잠을 자고 하루 하루를 알차게 쓰는 방향으로 방향을 트는 것이 맞을 것 같다.
가장 큰 걱정은 점점 스스로에 대한 피드백도 약해지고 공부도 얕은 수준으로 하고 있으며 과제도 AI가 내놓은 결과물을 그대로 사용하는 데 그치고 있다는 것이다.
점점 더 나은 방향으로 나아갈 수 있도록 의식적으로 노력하는 것이 좋겠다.
회고를 쓰면서도 이렇게까지 쓸 말이 생각이 안 나는 건 당황스럽다.
