9.4 KiB
title, source_type, track, status, status_label, difficulty, duration_estimate, prerequisites, parent_project, parent_branch, target_date, created, tags
| title | source_type | track | status | status_label | difficulty | duration_estimate | prerequisites | parent_project | parent_branch | target_date | created | tags | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| daily-task / develop / {{slug}} | daily-task | develop | raw | not-started | intermediate | 120 | ca-skeleton-operational-contract | YYYY-MM-DD | YYYY-MM-DD |
|
daily-task / develop / {{slug}}
Layer:
raw/daily-tasks/develop/— 개발 트랙 일일 실습 과제. 사수가 신입에게 주는 형식의 자율 학습 과제. 매일 아침 1개 수행.status_label:not-started|in-progress|done|abandoneddifficulty:starter(오늘이 처음) |intermediate(기본 흐름 익숙) |advanced(실패 모드 / 트레이드오프 탐구)duration_estimate: 분 단위. 기본 120분 (Pomodoro 4-5개). 단순 일정이 아니라 완료 신호가 뜰 때까지 의 자기 추정치.체계 근거: 본 template 구조는 두 raw 자료로 정당화된다 — 9-section anchor 는 vendor-normative 가이드 (
[[raw/company-tech-blogs/skillable-hands-on-lab-structure]]), 단계 분할·자기평가·회고 원리는 deliberate-practice 개인 블로그 ([[raw/company-tech-blogs/deliberate-practice-software-developers-redgreencode]]) 기반. 두 자료 모두 공식 best practice 가 아니다 — 본 template 도 best practice 가 아닌 운영 가능한 학습 구조로만 인용할 것.
부모 (필수)
- Parent project:
[[raw/project-notes/ca-skeleton-operational-contract]](또는 해당하는 다른 project-note) - 연관 branch (선택, 있을 때만):
[[raw/branch-notes/{{branch-slug}}]]
본 과제가 어느 작업 묶음에 속하는지 명시. parent 없는 과제는 금지 (raw 영구 보관 정책 + ingest 시 추적 불가).
1. 학습 목표
3-5개 측정 가능 목표. "이 과제 끝났을 때 다음을 할 수 있어야 한다" 형식. 근거:
[[raw/company-tech-blogs/skillable-hands-on-lab-structure]]#SKILL-LAB-C1— Learning Objectives 는 hands-on lab 의 7 functional spec 중 첫 anchor.
- L1: <할 수 있어야 하는 것 — 동사로 시작 (예: "ArchUnit rule 로 controller→domain 직접 의존을 빌드 실패로 검출할 수 있다")>
- L2: <...>
- L3: <...>
2. 스토리라인
왜 이 과제가 필요한가. 실무 시나리오 1-2 문단. 단순한 코드 따라치기를 막는 anchor. 근거:
[[raw/company-tech-blogs/skillable-hands-on-lab-structure]]#SKILL-LAB-C2— storyline 이 없으면 lab 은 "clicking things" 가 되고 학습자는 skill 향상 없이 끝난다.
(예시: "ca-tmpl 의 feature-boundary-validation-mapping-contract branch D7 결정 — controller 가 domain object 를 직접 반환하지 않는다 — 을 ArchUnit 으로 강제하려 한다. 다음 신입이 그 결정을 모르고 controller method 의 return type 에 domain entity 를 넣어도 build 가 통과되면 boundary contract 가 사실상 무력화된다. 오늘은 그 단 한 가지 시나리오만 막는 rule 을 작성하고 의도적인 위반으로 빌드를 깬다.")
3. 환경
사용 도구·버전·사전 셋업. 근거:
[[raw/company-tech-blogs/skillable-hands-on-lab-structure]]#SKILL-LAB-C1— Prospective environment + Technologies used.
개발 도구:
- Java: <버전, e.g., 21 LTS>
- Build: <Gradle 8.x / Maven 3.9>
- IDE 권장: <IntelliJ IDEA 2025.x>
- 추가 라이브러리: <ArchUnit / MapStruct / RestAssured 등 — 버전 명시>
사전 셋업:
# repo clone / branch 전환
cd ~/workspace/ca-tmpl
git checkout -b daily-task/develop/{{slug}}
# 빌드 확인
./gradlew clean build
예상 디렉토리 변경:
- 추가/수정될 파일 경로 미리 명시 (예:
adapter-web/src/test/java/.../CleanArchitectureTest.java)
4. 사전 지식
알아야 할 개념·결정. 모르면 wikilink 먼저 정독한 뒤 진행.
[[wiki/concepts/<concept-slug>]]— <왜 필요한지 한 줄>[[raw/branch-notes/<related-branch>]]— <관련 결정>[[raw/official-docs/<source-slug>]]— <인용할 claim>
5. 단계별 과제
Pomodoro (~25분) 단위로 분할. 각 단계는 현재 능력보다 약간 높은 도전이어야 한다 — 너무 쉬우면 학습 0, 너무 어려우면 좌절. 근거:
[[raw/company-tech-blogs/deliberate-practice-software-developers-redgreencode]]#DP-RGC-C2(slightly higher than current ability — Ericsson 연구의 개인 블로그 2차 인용. 공식 best practice 표현 금지),#DP-RGC-C5(25-min Pomodoro 는 권고 시작점일 뿐 규범 아님).
Step 1: <단계 제목> (~25min)
- 무엇을 (What): <구현해야 할 단위. 단일 commit 이 떠올라야 함>
- 어떻게 (How — hint, spoiler 아님): <어떤 클래스를 만져야 하는지 / 어떤 패턴을 찾아야 하는지. 코드 정답 X>
- 합격 신호 (Done when): <이 단계가 끝났음을 어떻게 알 수 있는가 — 명령어 / 로그 / 빨강↔초록 전환 / test name>
Step 2: <단계 제목> (~25min)
- What:
- How (hint):
- Done when:
Step 3: <단계 제목> (~25min)
- What:
- How (hint):
- Done when:
실패 모드 탐구> (~25min)
- What:
- How (hint):
- Done when:
단계 갯수는 difficulty 에 따라: starter=2, intermediate=3-4, advanced=4-5. 총 시간은 frontmatter
duration_estimate와 일치.
6. 검증
객관적 합격 기준. 단계 통과 = 측정 가능한 contract. 느낌 으로 끝내지 않는다. 근거:
[[raw/company-tech-blogs/skillable-hands-on-lab-structure]]#SKILL-LAB-C4(assessment = immediate feedback for success / additional help),[[raw/company-tech-blogs/deliberate-practice-software-developers-redgreencode]]#DP-RGC-C3(objective standard 로 평가 — 단 "objective standard" 의 구체 정의는 본 template 작성자가 합격 명령어로 조작적 정의해야 함).
자동 검증:
# 1) 빌드 + 단위 테스트
./gradlew clean build test
# 합격 기준: exit code 0
# 2) ArchUnit / contract test (해당 시)
./gradlew :adapter-web:test --tests '*CleanArchitectureTest'
# 합격 기준: PASS 로그
# 3) 의도적 위반 빌드 깨기 (해당 시 — rule 검증)
# 임시로 위반 코드 추가 → 빌드 → 실패 확인 → 위반 코드 제거
수동 self-check:
- 위 자동 명령 모두 exit 0
- 의도적 위반 시 정확히 의도된 rule 이름이 실패 메시지에 포함됨
- L1~L3 학습 목표가 실제로 할 수 있다 상태인지 (1줄로 설명 가능)
- commit 메시지가 "왜" 를 답함 ("Add X" 가 아니라 "Enforce X to prevent Y")
7. 결과물
과제가 끝났을 때 남는 산출물. 휘발성 학습이 아니라 재사용 가능한 흔적 을 남긴다. 근거:
[[raw/company-tech-blogs/skillable-hands-on-lab-structure]]#SKILL-LAB-C1— Outcomes 는 7-component spec 의 마지막 anchor.
- commit / PR:
- 브랜치:
daily-task/develop/{{slug}} - commits: <해시 + 1줄 메시지>
- PR URL (있다면):
- 브랜치:
- 신규/변경 파일:
<path/to/file>— <역할 한 줄>
- 학습한 개념 (wiki/concepts 로 ingest 후보):
- <개념 1> —
/ingest시점에wiki/concepts/<slug>로 추출 가능 여부 메모
- <개념 1> —
- 다음 과제 thread (실수·궁금증·심화 주제):
- <오늘 막혔던 지점에서 자연스럽게 파생되는 과제 후보 — 내일 또는 다음 주 daily-task 시드>
8. 회고
과제 끝난 직후 5분 회고. 빈칸으로 두지 말 것. 빈 회고 = 학습 손실. 근거:
[[raw/company-tech-blogs/deliberate-practice-software-developers-redgreencode]]#DP-RGC-C4— "After you finish each problem, ask yourself if you can improve any aspect of your problem-solving process based on your experience with that problem."
- 막혔던 곳 (몇 분 / 어디서):
- 예상과 다른 점 (가정이 깨진 부분):
- 다음 반복에서 개선할 점 (방법론 / 도구 / 정보 수집 순서):
- 부수 효과로 발견한 것 (의도 외 학습):
- 이 과제의 난이도가 적정했는가 (
너무 쉬움/적정/너무 어려움— frontmatterdifficulty조정 신호):
9. 출처
본 과제의 구조 근거 + 도메인 근거.
| Source | 정당화 영역 |
|---|---|
[[raw/company-tech-blogs/skillable-hands-on-lab-structure]] |
template 9-section 구조 자체 (§1, §2, §3, §6, §7) |
[[raw/company-tech-blogs/deliberate-practice-software-developers-redgreencode]] |
§5 단계 분할 + §6 objective 평가 + §8 reflection 원리 |
[[raw/official-docs/<...>]] |
도메인 결정 근거 (Spring Boot / Java spec / Jackson 등) |
[[raw/branch-notes/<...>]] |
본 과제가 검증하려는 branch 결정 |
10. 완료 후 정리
done 으로 바뀌는 순간 채움.
/ingest가 이 섹션을 기준으로 wiki 영역으로 promotable 항목 추출.
- 최종 status_label:
done|abandoned - 소요 시간 실측: <분> (vs frontmatter
duration_estimate<분>) — 차이 분석은 §8 회고에 - promotable 후보:
actually-implemented→ 어느 branch-note 의 어느 결정과 연결되는지locally-verified→ 어떤 명령으로 검증됐는지
- 추출하지 않을 항목 (단순 학습 / 폐기):