Pintos 학습 프로세스 ver1.0
들어가며
Pintos부터는 정말 팀원 간에 협업을 시작해 보자는 생각으로 한 카테고리에 대해 일단 3등분으로 나눈 뒤 각자 해보기로 했다. 이렇게 하니 일단 잘 돌아가는 듯했으나, 다시 되돌아보니 그저 운이 좋은 것이었다.
일단 '무조건 3등분으로 나누고 시작하는 방식'은 팀 전체에 대해 해당 카테고리에 대한 작업 이해도가 공유되지 않는다. 그리고 개인 간 작업 이해도는 천차만별이다. 누구는 배경 지식을 풍부하게 가지고 있어 금방 작업에 몰입할 수 있지만, 다른 누군가는 역할을 분담받고 나서 갈피를 잡지 못하는, 마치 허허벌판에 떨어진 느낌을 받고 헤맬 수도 있다.
또한 분할 후에, 정말 의존성이 있는 작업이 생긴다면 굉장히 곤란해진다. 모든 팀원에게 있어 특정 구조체가 필요한데 이것이 한 팀원이 만드는 것으로 되어 있다면? 나머지 둘한테는 해당 구조체가 없다. 그러면 구조체가 정의되고 그 코드를 공유하고 그것이 어떤 역할을 하는지까지 설명을 듣기 전까지 손가락만 쪽쪽 빨고 있어야 한다.
비단 구조체 뿐만 아니라 특정 함수에 대한 경우도 마찬가지이다. 어떤 함수에서 다른 하위 함수를 호출하는데, 그 하위 함수가 다른 팀원이 담당하고 있는 영역이라면? 주석 처리로 이러이러한 함수가 들어갈 예정입니다라고 표시해놓아야 하나? 그러면 나중에 또 다른 팀원의 코드를 받아서 함수 선언부터 시작해서 그 함수를 채워넣고, 주석을 지우고 다시 해당 함수를 호출해야 한다. 번거롭게 작업을 여러 번 해야 하는 것이다.
그래서 위의 두 가지 문제점을 아울러서 해결할 수 있는 어떠한 학습 프로세스가 있으면 좋겠다는 생각이 들었고, 서툴지만 우리 조가 나아가야 할 방향성을 제시하는 프로세스를 완성하게 되어 이를 정리해 보고자 한다.
Pintos 학습 프로세스 소개
0. 개요
결국 팀원들이 작업을 나누기 전에 이루어져야 할 것은 해당 카테고리의 전체적인 흐름을 보는 것이다. 다른 말로 큰 그림, 지형도로 표현할 수 있다.
각 팀원의 상이한 작업 이해도에 대한 간극을 메우고, 팀원 모두가 높은 작업 이해도를 가진 상태에서 우리가 지금 해당 카테고리에서 어떤 문제를 해결하고 있고, 나(팀원) 자신은 이를 어떻게 진행하고 있는지를 알면서 작업하는 것이 목표이다. 이를 통해 내가 하는 일에 대한 갈피를 정확히 잡고 작업에 몰입할 수 있게 된다.
1. 사전 분석
이 단계에서는 팀원 각자가 전체 흐름을 그리기 위한 재료를 수집한다. 수집할 재료들은 팀원 수에 맞게 아래와 같이 나눠진다.
- 문제 정의 및 대략적인 전체 흐름 파악
- 해당 카테고리에서 뭐가 문제이고, 이걸 왜 해결해야 하는가?
- 이를 해결하면서 얻을 수 있는 것(학습목적)은 무엇인가?
- 해결해야 할 문제들을 대략적으로 어떻게 해결할 수 있고, 대충 어떻게 흘러가는가?
- 현재 상태 분석
- 지금 pintos는 해당 카테고리에 대해 어떤 부분이 어떤 방식으로 동작하고 있나?
- 그 부분들이 대략적으로 각각 어떻게 바뀌어야 할 것 같나?
- 테스트 파일 분석
- 어떤 테스트가 있나?
- 각 테스트는 어떤 부분을 테스트하나?
- 이를 통과하기 위해 어떻게 되어야 하나?
누가 무엇을 수집할지는 카테고리 별로 자유롭게 순서를 바꿔가면서 진행하면 된다.
2. 준비 세션
각자 재료 수집이 끝났다면, 함께 모여 이를 공유하고 분석하면서 전체적인 그림으로 합치는 시간을 가진다. 그리고 이제 해당 카테고리에서 무엇이 문제이고 대략적으로 어떤 흐름으로 해결해야 할지가 명확해졌다면, 그 다음에는 구체적으로 어떻게 해결해야 할지에 대한 세부적인 흐름들을 토론해 본다.
그리고 세부적인 흐름들을 짚어봤다면, 이를 바탕으로 공통으로 사용할 초기 코드를 작성한다. 여기에는 공통 인터페이스(구조체)나 함수 정의가 포함되어 있어야 한다. 그리고 함수 정의 부분에는 각 함수에 대해 TODO 주석을 붙여 놓는다. 결과적으로 각 팀원들이 해야 할 일은 초기 해당 카테고리 구현이라는 추상적인 목표에서 각자 맡은 부분의 TODO 해결이라는 구체적인 해결 목표로 바뀌게 된다.
3. 작업 분담 및 구현
각 팀원은 초기 코드에서 시작해 브랜치를 파서 각자 맡은 부분을 구현하게 된다. 이때 의존적인 작업이 될 수 있는 공통 인터페이스와 함수 시그니처들이 모두 포함되어 있기 때문에, 다른 팀원이 이를 추가해 주기를 기다릴 필요 없이 자유롭게 함수를 호출하며 본인이 맡은 부분의 구현을 진행할 수 있다.
이 단계에서 본인이 맡은 구현이 먼저 끝난 사람은 다른 팀원의 작업에 대해 클론 코딩을 해볼 수도 있다. 이미 사전에 전체 작업에 대한 높은 이해도를 쌓아놓았기 때문에 쉽게 돌입할 수 있다. 그렇게 다른 팀원보다 빠르게 먼저 진행해본 뒤에, 그 팀원이 막힐 때 기술적인 자문을 줄 수 있는 리드 역할을 담당할 수 있게 되면 가장 좋다.
4. 통합 세션
모든 팀원이 맡은 작업이 끝나면, 최종적으로 모여서 각자 구현한 부분의 진행 결과를 나누는 시간을 가진다. 그 다음 한 사람의 컴퓨터에 모든 팀원의 코드를 작업 의존도의 유무에 따라 순차적으로 통합한 뒤, 이를 테스트해본다. 해당 카테고리에 대한 모든 테스트가 통과했다면 일련의 프로세스가 성공적으로 끝났다고 볼 수 있다.
마치면서
이 프로세스는 아직 검증되지 않았다는 점에서 우선적으로 우리 조에 대해 하나의 카테고리에 대한 구현을 진행하면서 적용해볼 필요가 있다.
그리고 각 프로세스의 과정에서 제한적인 목적으로 AI를 활용해 최소한의 방향성에 대한 코칭을 받을 수 있다. 답지로 사용하지 않는 선에서 최소한의 방향성에 대한 도우미 역할로 사용한다면, 방향을 잡지 못해 낭비 되는 시간을 최소화하면서 학습 효과는 최대화할 수 있다고 생각한다. 최소한의 방향성에 대한 질문에 대해 본인의 서술 위주로 진행하면서 이를 코칭받는 형태로 진행하는 것을 하나의 예로 들 수 있다.
그렇게 하나의 카테고리를 성공적으로 작업을 마치고 나서, 이 학습 프로세스를 반 전체에 공유하는 것이 첫 번째 목표이다. 그리고 다듬고 발전해서 최종적으로는 정글 전체에 대한 Pintos 표준 학습 프로세스로 자리잡는 것이 두 번째 거창한 목표이다. (개인적으로 아마 두 번째는 힘들 것 같다고 생각한다.)
'크래프톤 정글 > Code 정글(C언어)' 카테고리의 다른 글
[Pintos] Threads: Advanced Scheduler - 큰 그림 그리기 및 공유 템플릿 만들기 (1) | 2025.05.12 |
---|---|
[Pintos] Threads: Priority Scheduling - 동기화 Primitive 단계별로 수정하기 (0) | 2025.05.11 |
[Pintos] Threads: Alarm Clock 단계별 구현 및 테스트하기 (0) | 2025.05.09 |
[Pintos] Pintos를 시작하면서 - 협업에 대한 고민, AI의 활용 범위 (0) | 2025.05.09 |
[WebProxy] 캐시 기능이 추가된 동시성 프록시 서버 단계별 구현 및 테스트하기 (0) | 2025.05.07 |