Repository navigation
Expand file tree
/
Copy pathroadmap-data.js
More file actions
1484 lines (1454 loc) · 133 KB
/
Copy pathroadmap-data.js
File metadata and controls
1484 lines (1454 loc) · 133 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
// 2026 한국 채용시장 기반 개발자 성장 로드맵 데이터
// 각 항목에 curriculum 필드로 상세 학습 내용 포함
const ROLES = {
FE: { label: "Frontend", color: "#E74C3C", icon: "\u{1F5A5}" },
BE: { label: "Backend", color: "#1ABC9C", icon: "\u2699\uFE0F" },
DevOps: { label: "DevOps", color: "#F39C12", icon: "\u{1F527}" },
AI: { label: "AI / LLM Agent", color: "#8E44AD", icon: "\u{1F916}" },
};
const LEVELS = ["Junior \u2192 Mid", "Mid \u2192 Senior", "Senior \u2192 Staff+"];
const data = {
// ============================================================
// FRONTEND
// ============================================================
FE: {
"Junior \u2192 Mid": {
summary: "\"써봤다\"에서 \"왜 이걸 쓰는지 설명할 수 있다\"로",
keyMessage: "프레임워크의 사용법을 넘어서, 동작 원리와 선택의 이유를 설명할 수 있어야 합니다. 다른 사람의 코드를 리뷰할 수 있는 수준이 목표.",
tracks: [
{
name: "\u{1F3AF} 최우선",
items: [
{
skill: "TypeScript 심화",
action: "제네릭, 유틸리티 타입, 타입 가드를 실무 코드에 적용. 타입으로 버그를 방지한 사례를 만들어라.",
how: "기존 JS 프로젝트를 TS로 마이그레이션 해보기",
curriculum: [
{ topic: "제네릭(Generics) 마스터", desc: "함수/클래스/인터페이스에 제네릭 적용. extends로 제약 조건 걸기, infer 키워드로 타입 추출. 실무에서 API 응답 타입을 제네릭으로 추상화하는 패턴 익히기." },
{ topic: "유틸리티 타입 활용", desc: "Partial, Required, Pick, Omit, Record, ReturnType 등 빌트인 유틸리티 타입 사용법. 커스텀 유틸리티 타입(DeepPartial, Nullable 등) 직접 만들어보기." },
{ topic: "타입 가드 & 타입 좁히기", desc: "typeof, instanceof, in 연산자, 사용자 정의 타입 가드(is 키워드). discriminated union으로 안전한 분기 처리 패턴." },
{ topic: "타입 레벨 프로그래밍 입문", desc: "Conditional Type, Mapped Type, Template Literal Type. 실무에서 API 라우트 타입이나 이벤트 핸들러 타입을 자동 생성하는 패턴." },
{ topic: "TS 컴파일러 설정 이해", desc: "tsconfig.json 핵심 옵션(strict, paths, baseUrl, moduleResolution). Project References로 모노레포 내 TS 프로젝트 연결." },
]
},
{
skill: "상태 관리 설계",
action: "서버 상태(TanStack Query)와 클라이언트 상태(Zustand/Redux)를 분리하는 이유를 이해하고 적용.",
how: "API 호출을 TanStack Query로 전환하는 PR 작성",
curriculum: [
{ topic: "서버 상태 vs 클라이언트 상태", desc: "왜 구분해야 하는지 이해. 서버 상태: 캐싱, 백그라운드 리프레시, stale-while-revalidate 전략. 클라이언트 상태: UI 토글, 폼 입력, 라우트 파라미터 등." },
{ topic: "TanStack Query 핵심", desc: "useQuery/useMutation/useInfiniteQuery 사용법. queryKey 설계 전략, staleTime/gcTime 최적화, optimistic update 패턴, prefetching." },
{ topic: "Zustand 실무 패턴", desc: "스토어 분리 전략(feature별 슬라이스), 미들웨어(persist, devtools, immer), 셀렉터 최적화로 불필요한 리렌더링 방지." },
{ topic: "Redux Toolkit(선택)", desc: "createSlice, createAsyncThunk, RTK Query. 기존 Redux 레거시 코드를 RTK로 마이그레이션하는 패턴. 언제 Redux가 필요하고 언제 과한지 판단 기준." },
{ topic: "상태 관리 아키텍처 결정", desc: "프로젝트 규모와 복잡도에 따른 상태 관리 도구 선택 기준. Context API만으로 충분한 경우, Zustand가 적합한 경우, Redux가 필요한 경우의 판단 매트릭스." },
]
},
{
skill: "컴포넌트 설계 패턴",
action: "Compound Component, Render Props, Custom Hook 패턴을 상황에 맞게 선택 적용.",
how: "팀 공통 컴포넌트를 리팩토링하며 패턴 적용",
curriculum: [
{ topic: "합성 컴포넌트(Compound Component)", desc: "Select, Tabs, Accordion 같은 UI를 부모-자식 간 암묵적 상태 공유로 구현. React.Children, Context API 활용. 사용자에게 유연한 API 제공하는 설계." },
{ topic: "Custom Hook 추출 패턴", desc: "로직과 UI 분리 원칙. useForm, useDebounce, useIntersectionObserver 같은 재사용 훅 설계. 훅 합성(composition)으로 복잡한 로직 구성." },
{ topic: "Headless UI 패턴", desc: "스타일 없이 로직만 제공하는 컴포넌트/훅 설계. Radix UI, Headless UI 라이브러리의 설계 철학 이해. 접근성(a11y) 내장 컴포넌트 만들기." },
{ topic: "컴포넌트 인터페이스 설계", desc: "Props API 설계 원칙: 일관성, 최소한의 표면적, 합리적인 기본값. children vs render props vs slots 패턴 선택 기준. 다형성(as prop) 패턴." },
{ topic: "폴더 구조 & 모듈화", desc: "Feature-based vs Layer-based 구조. 배럴 파일(index.ts) 활용과 주의점. 컴포넌트-훅-유틸-타입의 co-location 원칙." },
]
},
]
},
{
name: "\u{1F4C8} 성장 가속",
items: [
{
skill: "웹 성능 기초",
action: "Lighthouse 점수를 읽고, Core Web Vitals(LCP/FID/CLS) 각각의 의미와 개선법을 설명.",
how: "팀 서비스의 성능 리포트를 작성해서 공유",
curriculum: [
{ topic: "Core Web Vitals 이해", desc: "LCP(Largest Contentful Paint): 메인 콘텐츠 로딩 속도. FID/INP(Interaction to Next Paint): 상호작용 반응성. CLS(Cumulative Layout Shift): 시각적 안정성. 각 메트릭의 Good/Needs Improvement/Poor 기준." },
{ topic: "Lighthouse & Chrome DevTools", desc: "Lighthouse 리포트 각 항목 해석법. Performance 탭의 Flame Chart 읽기. Network 탭에서 워터폴 분석. Coverage 탭으로 미사용 코드 찾기." },
{ topic: "이미지 최적화", desc: "WebP/AVIF 포맷 적용, lazy loading(loading='lazy'), srcset/sizes로 반응형 이미지, next/image 활용. blur placeholder 패턴." },
{ topic: "JavaScript 로딩 최적화", desc: "코드 스플리팅(React.lazy + Suspense), dynamic import, 트리 쉐이킹 원리. defer vs async 스크립트. 서드파티 스크립트 관리." },
{ topic: "렌더링 성능", desc: "React.memo, useMemo, useCallback의 올바른 사용 시점(과도한 메모이제이션 주의). 가상화(react-window/tanstack-virtual)로 긴 리스트 성능 해결. key prop의 역할과 리렌더링 관계." },
]
},
{
skill: "테스트 작성",
action: "Testing Library로 컴포넌트 테스트, MSW로 API 모킹 테스트를 자연스럽게 작성.",
how: "새 기능 PR에 테스트를 기본 포함하는 습관",
curriculum: [
{ topic: "Testing Library 철학", desc: "\"사용자 관점에서 테스트한다\" 원칙 이해. getByRole, getByText 등 접근성 기반 쿼리 우선. 구현 세부사항이 아닌 행위(behavior) 테스트." },
{ topic: "컴포넌트 테스트 패턴", desc: "render, screen, fireEvent, waitFor 활용. 비동기 컴포넌트 테스트(act 경고 해결). Provider 감싸기 패턴(QueryClient, Router, Theme 등)." },
{ topic: "MSW(Mock Service Worker)", desc: "브라우저/Node.js 환경 모두 동작하는 API 모킹. handler 정의, 시나리오별 응답 변경. 에러 응답, 지연 응답 시뮬레이션." },
{ topic: "테스트 전략 수립", desc: "테스트 피라미드: Unit > Integration > E2E 비율. 무엇을 테스트하고 무엇을 안 할지 판단. 비즈니스 로직 중심 테스트 우선." },
{ topic: "E2E 테스트 입문", desc: "Playwright/Cypress 기본 사용법. Page Object 패턴. CI에서 E2E 테스트 실행 설정. Visual Regression 테스트 개념." },
]
},
{
skill: "빌드 도구 이해",
action: "Vite/Webpack 설정을 읽고 수정 가능. 번들 사이즈 분석 결과를 해석.",
how: "bundle-analyzer로 팀 프로젝트 분석 공유",
curriculum: [
{ topic: "Vite 동작 원리", desc: "ESM 기반 개발 서버의 장점(no-bundle). esbuild/SWC로 빠른 변환. Rollup 기반 프로덕션 빌드. vite.config.ts 핵심 설정(alias, proxy, plugins)." },
{ topic: "번들 사이즈 분석", desc: "rollup-plugin-visualizer / webpack-bundle-analyzer 사용법. 큰 의존성 식별 및 대체(moment→dayjs, lodash→lodash-es). tree-shaking이 동작하지 않는 경우 진단." },
{ topic: "환경 변수 & 설정 관리", desc: ".env 파일 계층 구조, VITE_ prefix 규칙. 빌드 타임 vs 런타임 환경 변수 차이. define으로 컴파일 타임 상수 주입." },
{ topic: "플러그인 시스템 이해", desc: "Vite 플러그인 훅(transform, resolveId, load) 이해. 자주 쓰는 플러그인: SVG, PWA, compression. 간단한 커스텀 플러그인 작성." },
]
},
]
},
{
name: "\u{1F4A1} 차별화",
items: [
{
skill: "SSR/SSG 이해",
action: "Next.js App Router에서 Server Component vs Client Component 선택 기준을 설명.",
how: "새 페이지를 RSC 기반으로 설계해보기",
curriculum: [
{ topic: "서버 컴포넌트(RSC) 핵심 개념", desc: "서버에서만 실행되는 컴포넌트의 장점: 번들 크기 제로, DB/파일시스템 직접 접근. 'use client' 경계 설정 원칙. 서버/클라이언트 컴포넌트 합성 패턴." },
{ topic: "App Router 데이터 페칭", desc: "서버 컴포넌트에서 async/await 직접 사용. fetch의 캐싱/재검증 옵션(revalidate, tags). generateStaticParams로 정적 경로 생성." },
{ topic: "Streaming & Suspense", desc: "서버에서 점진적 HTML 스트리밍. loading.js와 Suspense boundary로 로딩 UI 설계. 부분 프리렌더링(PPR) 개념." },
{ topic: "SSR vs SSG vs ISR 선택 기준", desc: "완전 동적(SSR), 완전 정적(SSG), 증분 정적 재생성(ISR)의 차이와 적합한 유스케이스. 하이브리드 렌더링 전략." },
]
},
{
skill: "AI 도구 활용",
action: "Cursor/Copilot을 단순 자동완성이 아닌 리팩토링\xb7테스트 생성에 전략적으로 활용.",
how: "AI 도구로 생산성 개선한 사례를 팀에 공유",
curriculum: [
{ topic: "Cursor/Copilot 효율적 사용법", desc: "코드 맥락 제공 전략(파일 참조, 주석 가이드). 프롬프트로 리팩토링 지시하기. 테스트 코드 자동 생성 후 검증 패턴. .cursorrules / copilot instructions 설정." },
{ topic: "Claude Code 활용", desc: "터미널 기반 AI 코딩 어시스턴트 활용. 코드 리뷰, 버그 분석, 리팩토링 제안 받기. 멀티 파일 작업과 프로젝트 컨텍스트 활용." },
{ topic: "AI 코드 리뷰 & 검증", desc: "AI가 생성한 코드의 품질 검증 체크리스트. 보안 취약점, 엣지 케이스, 성능 이슈 확인. AI 도구의 한계(환각, 레거시 API 추천 등) 인식." },
]
},
]
}
,
{
name: "🤝 소프트 스킬",
items: [
{
skill: "효과적인 질문 & 커뮤니케이션",
action: "모르는 것을 구체적으로 정리하여 질문. '내가 시도한 것, 예상 결과, 실제 결과'를 명확히 표현.",
how: "매일 질문/논의 내용을 노트에 정리하는 습관",
curriculum: [
{ topic: "구조화된 질문법", desc: "질문 전 자신이 무엇을 모르는지 파악. '시도한 것 → 예상 결과 → 실제 결과 → 추측 원인' 형식으로 정리. 모호한 질문은 시간을 낭비하고, 구체적 질문은 빠른 해결로 이어짐." },
{ topic: "코드 리뷰 수용 & 활용", desc: "리뷰 피드백을 방어적으로 받지 않기. 'Why'를 질문해서 맥락 이해. 반복되는 피드백을 패턴으로 인식하고 개선. 좋은 리뷰를 노트하는 습관." },
{ topic: "업무 상황 공유", desc: "진행 상황을 적절한 타이밍에 공유(블로커, 지연, 완료). 도움이 필요한 시점을 스스로 판단. 데일리 스탠드업에서 효과적으로 상황 전달하는 방법." },
{ topic: "기술 학습 루틴", desc: "'기술 스택보다 왜 그 기술을 썼는지 설명하는 것'이 더 중요. 기본기(자료구조, 알고리즘, 언어) 반복 학습. 사이드 프로젝트로 새로운 기술 경험. 경험의 양보다 질 중시." },
]
},
]
},
{
name: "🎯 면접 대비",
items: [
{
skill: "코딩 인터뷰 & CS 기본기",
action: "LeetCode Medium 수준 문제를 45분 내 풀 수 있는 실력. 자료구조/알고리즘/OS/네트워크 기초를 설명할 수 있어야 한다.",
how: "주 3회 이상 알고리즘 문제 풀이, 풀이 과정을 말로 설명하는 연습",
curriculum: [
{ topic: "자료구조 & 알고리즘 핵심", desc: "배열, 연결리스트, 스택/큐, 해시맵, 트리, 그래프 구현과 시간복잡도. 정렬(퀵/머지/힙), 이진탐색, BFS/DFS, 동적 프로그래밍 패턴. LeetCode Top 100 문제 숙달." },
{ topic: "CS 기초 (OS/네트워크/DB)", desc: "프로세스 vs 스레드, 동기/비동기, 교착상태. HTTP/TCP/DNS 동작 원리. 인덱싱, 트랜잭션 격리 수준, 정규화. 면접에서 왜를 설명할 수 있는 수준." },
{ topic: "코딩 면접 실전 기술", desc: "Think Aloud: 문제 풀이 과정을 말로 설명하는 습관. 엣지 케이스 먼저 확인. 브루트포스 → 최적화 순서로 접근. Google Docs / 화이트보드 코딩 연습." },
{ topic: "포트폴리오 & 이력서", desc: "프로젝트별 문제→해결→결과 구조로 정리. 기술 선택의 이유를 설명할 수 있는 깊이. GitHub 활동과 코드 품질 관리. 이력서는 정량적 성과 중심." },
]
},
]
}
]
},
"Mid \u2192 Senior": {
summary: "\"내 코드\"에서 \"팀의 기술 방향\"으로",
keyMessage: "개인의 구현 능력을 넘어서, 팀 전체의 코드 품질과 아키텍처를 이끄는 역할. 기술 의사결정의 근거를 문서화하고 설득할 수 있어야 합니다.",
tracks: [
{
name: "\u{1F3AF} 최우선",
items: [
{
skill: "프론트엔드 아키텍처",
action: "모노레포(Turborepo/Nx) 구조 설계, 공유 컴포넌트 라이브러리 운영.",
how: "팀 프로젝트의 모노레포 전환 RFC 작성",
curriculum: [
{ topic: "모노레포 도구 비교 & 선택", desc: "Turborepo vs Nx vs pnpm workspace. 각 도구의 캐싱 전략, task 파이프라인, 의존성 그래프 시각화. 팀 규모와 프로젝트 복잡도에 따른 선택 기준." },
{ topic: "패키지 구조 설계", desc: "packages/ 디렉토리 설계: ui(컴포넌트), config(ESLint/TS 설정), utils(공통 유틸). 패키지 간 의존성 방향 원칙. internal package vs published package 구분." },
{ topic: "공유 컴포넌트 라이브러리 운영", desc: "Storybook으로 컴포넌트 문서화. Changesets로 버전 관리. 소비 팀과의 계약(API stability) 관리. 브레이킹 체인지 전파 전략." },
{ topic: "빌드 최적화 & CI 설계", desc: "영향받는 패키지만 빌드/테스트(affected). Remote caching으로 CI 시간 단축. 모노레포에서의 배포 파이프라인 설계." },
{ topic: "마이그레이션 전략", desc: "기존 멀티레포에서 모노레포로 점진적 전환. git subtree/submodule에서 마이그레이션. 팀 설득을 위한 RFC 작성 패턴(문제 정의, 대안 비교, 마이그레이션 플랜)." },
]
},
{
skill: "성능 최적화 심화",
action: "코드 스플리팅 전략, 이미지 최적화 파이프라인, 렌더링 병목 진단\xb7해결.",
how: "성능 개선 프로젝트를 주도하고 Before/After 정량 측정",
curriculum: [
{ topic: "고급 코드 스플리팅", desc: "Route-based 이상의 스플리팅: 컴포넌트 레벨, 라이브러리 레벨 분리. prefetch/preload 전략으로 사용자 동선 예측 로딩. React.lazy + Suspense의 에러 바운더리 통합." },
{ topic: "렌더링 파이프라인 최적화", desc: "Chrome Performance 프로파일러 심화 사용. Long Task 식별 및 분해. requestIdleCallback / requestAnimationFrame 활용. CSS containment로 레이아웃 격리." },
{ topic: "네트워크 최적화", desc: "HTTP/2 멀티플렉싱 활용. Resource Hints(preconnect, prefetch, preload, prerender). Service Worker 캐싱 전략(Cache First, Network First, Stale While Revalidate)." },
{ topic: "메모리 & 런타임 최적화", desc: "Chrome Memory 탭으로 메모리 릭 탐지. 이벤트 리스너, 타이머, 클로저 관련 릭 패턴. WeakRef/WeakMap 활용. 대규모 데이터 처리 시 Web Worker 활용." },
{ topic: "성능 모니터링 체계", desc: "RUM(Real User Monitoring) 도구 도입. Performance Observer API로 커스텀 메트릭 수집. 성능 버짓 설정 및 CI에서 자동 검증. 성능 대시보드 구축." },
]
},
{
skill: "기술 의사결정 문서화",
action: "ADR(Architecture Decision Record) 작성, 기술 선택의 트레이드오프를 팀에 설명.",
how: "분기 1회 이상 기술 의사결정 문서 작성",
curriculum: [
{ topic: "ADR 작성법", desc: "제목, 상태, 컨텍스트, 결정, 결과 구조. 왜 이 결정을 내렸는지(근거), 어떤 대안을 검토했는지(트레이드오프), 결정의 영향 범위를 명확히 기록." },
{ topic: "RFC(Request for Comments) 프로세스", desc: "대규모 기술 변경 전 팀 합의를 위한 RFC 작성. 문제 정의 → 제안 → 대안 비교 → 마이그레이션 플랜 → 리스크 구조. 피드백 수렴 및 의사결정 프로세스." },
{ topic: "기술 트레이드오프 분석", desc: "성능 vs 개발 생산성, 유연성 vs 단순성, 일관성 vs 자율성 등 흔한 트레이드오프 프레임워크. 정량적 비교(벤치마크, 번들 사이즈)와 정성적 비교(DX, 학습 곡선)." },
{ topic: "기술 부채 가시화", desc: "기술 부채를 비즈니스 임팩트로 번역하는 방법. 개발 속도 저하, 장애 빈도, 온보딩 비용 등 지표 활용. 경영진이 이해할 수 있는 언어로 기술 투자 설득." },
]
},
]
},
{
name: "\u{1F4C8} 성장 가속",
items: [
{
skill: "브라우저 내부 동작",
action: "렌더링 파이프라인(Parse\u2192Style\u2192Layout\u2192Paint\u2192Composite) 이해, 리플로우 최소화 전략.",
how: "Chrome DevTools Performance 탭으로 실제 병목 분석",
curriculum: [
{ topic: "Critical Rendering Path", desc: "HTML 파싱 → DOM 트리, CSS 파싱 → CSSOM 트리, 두 트리 합성 → 렌더 트리. 렌더 블로킹 리소스 식별과 최적화. preload scanner의 역할." },
{ topic: "레이아웃 & 페인트 최적화", desc: "리플로우(Layout) 트리거 속성(width, height, top 등) vs 리페인트만 트리거하는 속성(color, opacity). Composite만 발생하는 속성(transform, opacity with will-change)." },
{ topic: "JavaScript 엔진 기초", desc: "V8의 파싱-컴파일-실행 과정. JIT 컴파일의 기본 원리. 히든 클래스(Hidden Class)와 인라인 캐싱. 메인 스레드 블로킹 이해." },
{ topic: "이벤트 루프 심화", desc: "마이크로태스크(Promise, queueMicrotask) vs 매크로태스크(setTimeout, I/O). requestAnimationFrame의 실행 시점. 브라우저 렌더링 프레임 주기(16.67ms)와의 관계." },
]
},
{
skill: "디자인 시스템 구축",
action: "토큰 체계, 컴포넌트 API 설계, 버전 관리, Storybook 운영.",
how: "팀 디자인 시스템의 일부를 직접 설계\xb7배포",
curriculum: [
{ topic: "디자인 토큰 체계", desc: "Global Token(원시값) → Semantic Token(의미) → Component Token(컴포넌트 전용). CSS 변수 기반 토큰 시스템 구축. 다크모드 지원을 위한 토큰 구조." },
{ topic: "컴포넌트 API 설계 원칙", desc: "일관된 네이밍(size, variant, color scheme). 접근성(WAI-ARIA) 내장. forwardRef/polymorphic 지원. 스타일 오버라이드 전략(className, style, CSS 변수)." },
{ topic: "Storybook 운영", desc: "Story 작성 패턴(CSF3). Controls/Actions 활용 인터랙티브 문서. Chromatic으로 Visual Regression 테스트. Storybook Interaction Testing." },
{ topic: "배포 & 버전 관리", desc: "npm 패키지 퍼블리싱 파이프라인. Changesets로 시맨틱 버전 관리. Changelog 자동 생성. 소비 팀과의 브레이킹 체인지 커뮤니케이션." },
]
},
{
skill: "코드 리뷰 리더십",
action: "아키텍처 관점의 리뷰, 팀 코딩 컨벤션 수립, 주니어 성장을 돕는 피드백.",
how: "코드 리뷰 가이드라인 문서를 팀에 제안",
curriculum: [
{ topic: "효과적인 코드 리뷰", desc: "무엇을 봐야 하는가: 설계 > 로직 > 스타일 순서. Nit vs Blocking 코멘트 구분. 질문형 피드백('이렇게 하면 어떨까요?')으로 학습 유도." },
{ topic: "팀 컨벤션 수립", desc: "ESLint/Prettier 규칙 설정과 근거 문서화. 컴포넌트 네이밍, 파일 구조, import 순서 등 합의. 자동화 가능한 것(lint)과 사람이 판단해야 하는 것 구분." },
{ topic: "주니어 멘토링", desc: "코드 리뷰를 성장 기회로 활용. 정답을 알려주기보다 생각의 방향 제시. 페어 프로그래밍 세션 운영. 기술 공유 세션(Tech Talk) 주도." },
]
},
]
},
{
name: "\u{1F4A1} 차별화",
items: [
{
skill: "AI 통합 UI 설계",
action: "LLM 스트리밍 응답 UI, 채팅 인터페이스, AI 기능의 UX 패턴 설계.",
how: "AI 기반 기능의 프론트엔드를 설계\xb7구현 주도",
curriculum: [
{ topic: "스트리밍 UI 구현", desc: "Server-Sent Events(SSE) / ReadableStream으로 토큰 단위 스트리밍 렌더링. 타이핑 효과, 마크다운 점진적 파싱. Vercel AI SDK의 useChat/useCompletion 활용." },
{ topic: "AI 대화 인터페이스", desc: "메시지 히스토리 관리, 컨텍스트 윈도우 표시, 재생성/편집 기능. 코드 블록 하이라이팅, 수식 렌더링 등 리치 콘텐츠 처리. 멀티턴 대화의 UX 흐름 설계." },
{ topic: "AI UX 패턴", desc: "로딩 상태(스켈레톤 vs 스피너 vs 프로그레스), 에러 핸들링(재시도, 폴백), 피드백 수집(좋아요/싫어요). 자신감 스코어 표시, 출처 인용 UI." },
]
},
{
skill: "마이크로 프론트엔드",
action: "Module Federation으로 독립 배포 가능한 아키텍처 이해.",
how: "PoC로 하나의 서비스를 독립 배포 가능하게 분리",
curriculum: [
{ topic: "Module Federation 기초", desc: "Webpack 5 Module Federation Plugin 설정. Host/Remote 개념. 공유 의존성(shared) 관리. 런타임 통합 vs 빌드 타임 통합의 차이." },
{ topic: "마이크로 FE 아키텍처 패턴", desc: "라우트 기반 분리, 컴포넌트 기반 분리. 공유 상태 관리(이벤트 버스, Custom Events). 스타일 격리(Shadow DOM, CSS Modules, CSS-in-JS 스코핑)." },
{ topic: "도입 판단 기준", desc: "마이크로 FE가 필요한 상황: 독립 팀 배포, 이종 기술 스택 공존. 불필요한 상황: 단일 팀, 동일 기술 스택. 복잡성 비용 vs 팀 자율성 트레이드오프." },
]
},
]
}
,
{
name: "🤝 소프트 스킬",
items: [
{
skill: "기술 글쓰기 & 영향력",
action: "기술 블로그, 내부 위키, RFC 작성으로 지식을 체계적으로 전파. 권위 없이 영향력을 행사하는 '지혜의 전파' 단계.",
how: "월 1회 이상 기술 글(내부 위키/블로그) 작성, 분기 1회 Tech Talk",
curriculum: [
{ topic: "기술 문서 작성법", desc: "문제 정의 → 해결 과정 → 결과 → 배운 점 구조. 독자 수준에 맞는 글쓰기. 장애 포스트모템, 기술 제안서, 아키텍처 문서 작성 패턴." },
{ topic: "영향력 있는 설득", desc: "권위 없이 영향력 행사하기(테크리드의 핵심 역량). 데이터와 근거 기반 기술 제안. 반대 의견을 존중하며 합의 도출. 기술 트레이드오프를 비개발자에게도 설명." },
{ topic: "멘토링 & 팀 성장", desc: "주니어의 성장을 돕는 코드 리뷰 — 정답보다 사고 방향 제시. 1:1 미팅으로 성장 목표 함께 설정. 팀 내 기술 공유 세션 주도. 배민 기술블로그: '시니어는 주변에 긍정적 영향을 주는 사람'." },
{ topic: "기술 부채 커뮤니케이션", desc: "기술 부채를 비즈니스 임팩트로 번역. '리팩토링' 대신 '개발 속도 향상 프로젝트'. 개발 속도 저하, 장애 빈도, 온보딩 비용 등 지표 활용." },
]
},
]
},
{
name: "🎯 면접 대비",
items: [
{
skill: "시스템 디자인 & 행동 면접",
action: "대규모 시스템 설계를 화이트보드에 그릴 수 있고, STAR 방법론으로 경험을 구조화하여 전달.",
how: "월 2회 시스템 디자인 모의면접, 주요 경험 STAR 형식 정리",
curriculum: [
{ topic: "시스템 디자인 기초", desc: "URL 단축기, 채팅 시스템, 뉴스 피드 등 클래식 문제. 요구사항 정의 → 개략 설계 → 상세 설계 → 트레이드오프 논의 순서. 확장성, 가용성, 일관성 개념." },
{ topic: "시스템 디자인 심화", desc: "분산 시스템: 샤딩, 복제, CAP 정리, 일관성 해싱. 메시지 큐(Kafka), 캐시(Redis), CDN, 로드밸런서 설계. 실제 서비스(YouTube, Twitter, Uber) 아키텍처 분석." },
{ topic: "행동 면접 (STAR)", desc: "Situation→Task→Action→Results 구조로 경험 정리. Amazon LP 14가지, 쿠팡 리더십 원칙 대비. 우리가 아닌 내가 한 것을 구체적으로. 실패 경험도 긍정적 학습으로 표현." },
{ topic: "모의 면접 & 피드백", desc: "동료와 모의 면접(Mock Interview) 정기 진행. 면접관 역할도 경험해 평가 기준 이해. 녹화/녹음으로 자기 피드백. Pramp, interviewing.io 등 플랫폼 활용." },
]
},
]
}
]
},
"Senior \u2192 Staff+": {
summary: "\"팀의 기술\"에서 \"조직의 기술 전략\"으로",
keyMessage: "여러 팀에 걸친 기술 전략을 수립하고, 기술 문화를 형성합니다. \"무엇을 안 할지\" 결정하는 것이 핵심.",
tracks: [
{
name: "\u{1F3AF} 핵심 역량",
items: [
{
skill: "조직 횡단 아키텍처",
action: "여러 팀의 프론트엔드 통합 전략, 공유 플랫폼 설계, 기술 표준 수립.",
how: "전사 프론트엔드 기술 전략 문서 작성\xb7합의 도출",
curriculum: [
{ topic: "전사 기술 표준 수립", desc: "프레임워크 선택(React/Vue/etc), 빌드 도구, 테스트 도구, 린팅 규칙 등 전사 표준 정의. 표준화 vs 팀 자율성의 균형. 예외 허용 정책(opt-out)." },
{ topic: "공유 플랫폼 전략", desc: "디자인 시스템, 인증 모듈, 분석 SDK 등 공유 플랫폼 범위 결정. Platform Team 운영 모델. 소비 팀의 피드백 루프 설계. Inner Source 문화." },
{ topic: "기술 마이그레이션 전략", desc: "대규모 마이그레이션(프레임워크 전환, 언어 전환) 계획 수립. Strangler Fig 패턴으로 점진적 전환. 마이그레이션 진행률 추적 및 데드라인 관리." },
{ topic: "크로스 팀 기술 거버넌스", desc: "아키텍처 리뷰 보드(ARB) 운영. 기술 RFC 프로세스 표준화. 팀 간 의존성 관리. 기술 레이더 운영으로 도구/기술 도입 가시화." },
]
},
{
skill: "기술 문화 형성",
action: "코드 리뷰 문화, 기술 공유 세션, 채용 기술 면접 프로세스 설계.",
how: "분기별 기술 세미나 운영, 면접 루브릭 설계",
curriculum: [
{ topic: "엔지니어링 핸드북", desc: "온보딩 가이드, 코딩 컨벤션, 아키텍처 가이드, 배포 프로세스 등을 종합한 엔지니어링 핸드북 작성. 살아있는 문서(living document)로 유지하는 방법." },
{ topic: "기술 면접 프로세스 설계", desc: "구조화된 면접: 코딩 테스트, 시스템 설계, 행동 면접 각 단계 설계. 루브릭 기반 평가로 일관성 확보. 면접관 트레이닝 프로그램." },
{ topic: "기술 공유 문화", desc: "Tech Talk, 아키텍처 리뷰, 장애 포스트모템 공유 세션 운영. 기술 블로그 운영(팀/회사). 외부 컨퍼런스 발표 지원 및 장려." },
{ topic: "개발자 경험(DX) 투자", desc: "빌드 속도, 로컬 개발 환경, CI/CD 속도 등 DX 메트릭 정의. 개발 도구 투자의 ROI를 경영진에게 설명하는 프레임워크. Developer Satisfaction Survey 운영." },
]
},
{
skill: "기술 부채 전략",
action: "비즈니스 임팩트 기준으로 기술 부채 우선순위를 정하고 경영진을 설득.",
how: "기술 부채 대시보드 구축, ROI 기반 개선 로드맵",
curriculum: [
{ topic: "기술 부채 분류 & 정량화", desc: "유형 분류: 설계 부채, 코드 품질 부채, 인프라 부채, 테스트 부채. 각 유형별 영향 측정: 장애 빈도, 개발 속도 저하, 온보딩 비용 증가 등." },
{ topic: "투자 우선순위 결정", desc: "비즈니스 임팩트 x 해결 비용 매트릭스. 빠르게 해결 가능한 Quick Win vs 장기 투자가 필요한 항목 분류. 20% 규칙(매 스프린트 20%를 기술 부채에 투자) 등 운영 모델." },
{ topic: "경영진 커뮤니케이션", desc: "기술 용어를 비즈니스 언어로 번역. '리팩토링' 대신 '개발 속도 2배 향상 프로젝트'. 대시보드로 진행 상황 가시화. 비투자 시 리스크(장애, 이탈 등) 정량화." },
]
},
]
}
,
{
name: "🤝 소프트 스킬",
items: [
{
skill: "조직 리더십 & 외부 영향력",
action: "경영진에게 기술 투자를 비즈니스 언어로 설명. 외부 컨퍼런스/블로그로 기술 브랜딩. 채용 면접 프로세스 설계.",
how: "연 2회 이상 외부 발표, 기술 투자 ROI 보고서 작성",
curriculum: [
{ topic: "경영진 커뮤니케이션", desc: "기술 용어를 비즈니스 언어로 번역하는 능력. 기술 부채의 비용을 장애 빈도, 개발 속도 저하, 인재 이탈로 정량화. 투자하지 않을 때의 리스크 시나리오 제시. 대시보드로 진행 상황 가시화." },
{ topic: "채용 면접관 역량", desc: "구조화된 면접 루브릭 설계. 코딩/시스템 설계/행동 면접 각 단계 운영. 면접관 캘리브레이션으로 평가 일관성 확보. 후보자 경험이 긍정적이도록 프로세스 설계." },
{ topic: "외부 브랜딩 & 커뮤니티", desc: "기술 블로그 운영, 컨퍼런스 발표, 오픈소스 기여로 회사 기술 브랜딩. 커뮤니티 리더십으로 채용 파이프라인 확대. 업계 네트워크 구축. 기술 레이더 운영으로 트렌드 파악." },
]
},
]
},
{
name: "🎯 면접 대비",
items: [
{
skill: "Staff+ 레벨 면접 전략",
action: "조직 임팩트 중심의 경험 정리. 기술 전략 제안, 대규모 시스템 설계, 크로스팀 리더십을 증명.",
how: "주요 프로젝트별 임팩트 정량화 문서 작성, Staff 레벨 모의면접",
curriculum: [
{ topic: "Staff 레벨 시스템 디자인", desc: "단일 서비스가 아닌 플랫폼/인프라 레벨 설계. 멀티 리전, 재해 복구, 비용 최적화 포함. 기술 선택의 비즈니스 임팩트 설명. Netflix L6, Google L6+ 수준." },
{ topic: "임팩트 스토리 구조화", desc: "각 프로젝트의 비즈니스 임팩트 정량화(매출, 비용 절감, 성능 개선). 조직 차원 영향력(팀 생산성, 채용, 문화 변화). 기술 의사결정의 근거와 결과를 데이터로 설명." },
{ topic: "빅테크 Staff+ 면접 특성", desc: "Google L6+: 조직 전체 기술 전략 질문. Amazon L7: LP 기반 깊은 Dive Deep. Meta E6+: 조직 영향력과 기술 비전. Apple ICT5+: 제품 관점 + 기술 깊이 동시 평가." },
]
},
]
}
]
}
},
// ============================================================
// BACKEND
// ============================================================
BE: {
"Junior \u2192 Mid": {
summary: "\"동작하는 코드\"에서 \"설명할 수 있는 코드\"로",
keyMessage: "API를 만드는 것을 넘어서, 왜 이렇게 설계했는지 트레이드오프를 설명할 수 있어야 합니다.",
tracks: [
{
name: "\u{1F3AF} 최우선",
items: [
{
skill: "DB 쿼리 튜닝",
action: "EXPLAIN 분석, 인덱스 전략, N+1 문제 진단\xb7해결. 느린 쿼리를 직접 개선한 경험.",
how: "슬로우 쿼리 로그를 분석하고 인덱스 추가 PR",
curriculum: [
{ topic: "EXPLAIN 분석 마스터", desc: "EXPLAIN ANALYZE 결과 읽기: type(ALL, range, ref, eq_ref), rows, Extra(Using filesort, Using temporary). 실행 계획에서 풀 스캔, 인덱스 스캔, 커버링 인덱스 구분." },
{ topic: "인덱스 전략", desc: "B-Tree 인덱스 동작 원리. 복합 인덱스의 컬럼 순서 결정 기준(카디널리티, 쿼리 패턴). 커버링 인덱스로 디스크 I/O 제거. 인덱스 과다 생성의 부작용(쓰기 성능 저하)." },
{ topic: "N+1 문제 해결", desc: "JPA에서 N+1 발생 원인(LAZY loading). 해결법: Fetch Join, @EntityGraph, @BatchSize. 각 해결법의 트레이드오프(메모리 vs 쿼리 수). SQL에서 직접 확인하는 습관." },
{ topic: "쿼리 최적화 실전", desc: "서브쿼리 vs JOIN 성능 차이. WHERE 절 인덱스 활용 여부 확인(함수 적용 시 인덱스 무효화). LIMIT/OFFSET 대신 Cursor-based Pagination. 대량 데이터 처리 시 배치 쿼리." },
{ topic: "슬로우 쿼리 모니터링", desc: "MySQL slow_query_log 설정 및 분석. pt-query-digest로 자주 실행되는 슬로우 쿼리 식별. APM(Datadog, New Relic) DB 쿼리 모니터링 활용." },
]
},
{
skill: "Spring 심화",
action: "DI/AOP 동작 원리, 트랜잭션 전파, 예외 처리 전략을 이해하고 설명.",
how: "팀 코드의 @Transactional 사용 패턴 리뷰\xb7정리",
curriculum: [
{ topic: "IoC / DI 동작 원리", desc: "BeanFactory와 ApplicationContext 차이. 빈 생성 주기(Singleton, Prototype 등). @Autowired vs 생성자 주입(권장 이유). 순환 참조 문제 진단 및 해결." },
{ topic: "AOP(관점 지향 프로그래밍)", desc: "프록시 기반 AOP 동작 원리(JDK Dynamic Proxy vs CGLIB). @Aspect, @Around, @Before, @After 사용법. 로깅, 인증, 트랜잭션에 AOP 적용. self-invocation 문제 이해." },
{ topic: "@Transactional 심화", desc: "전파 레벨(REQUIRED, REQUIRES_NEW, NESTED 등) 실무 시나리오별 선택. readOnly=true의 성능 효과. 프록시 기반 동작의 제약(같은 클래스 내 호출 시 트랜잭션 미적용). 롤백 규칙(checked vs unchecked)." },
{ topic: "예외 처리 전략", desc: "@ExceptionHandler, @ControllerAdvice로 전역 예외 처리. 비즈니스 예외 vs 시스템 예외 분류. ErrorResponse DTO 설계. 에러 코드 체계 수립(팀 레벨)." },
{ topic: "Spring Security 기초", desc: "인증(Authentication) vs 인가(Authorization) 흐름. SecurityFilterChain 구조. JWT 토큰 기반 인증 구현. OAuth2/OIDC 연동 기초." },
]
},
{
skill: "테스트 전략",
action: "Unit/Integration 테스트 구분, TestContainer 활용, 테스트 데이터 관리.",
how: "새 기능에 테스트 커버리지 80% 이상 달성",
curriculum: [
{ topic: "테스트 피라미드 적용", desc: "Unit 테스트: 서비스 로직, 도메인 모델 중심. Integration 테스트: Repository, 외부 API 연동. E2E 테스트: 핵심 비즈니스 시나리오. 각 레벨 적정 비율(70/20/10)." },
{ topic: "JUnit 5 & Mockito 실전", desc: "@Test, @BeforeEach, @ParameterizedTest 활용. Mockito: when/verify/ArgumentCaptor. mock vs spy 차이. BDD 스타일(given-when-then) 테스트 작성." },
{ topic: "Testcontainers 활용", desc: "MySQL, Redis, Kafka 등 실제 인프라를 Docker 컨테이너로 테스트. @Testcontainers + @Container 설정. 테스트 격리와 데이터 정리 전략." },
{ topic: "테스트 데이터 관리", desc: "Fixture/Factory 패턴으로 테스트 데이터 생성. 테스트 간 독립성 보장. @Sql로 테스트 데이터 초기화. Builder 패턴으로 유연한 테스트 데이터 생성." },
{ topic: "테스트 가능한 코드 설계", desc: "의존성 주입으로 테스트 용이한 구조. 시간, 랜덤 등 비결정적 요소 추상화. 인터페이스 기반 설계로 Mock 교체 용이성 확보." },
]
},
]
},
{
name: "\u{1F4C8} 성장 가속",
items: [
{
skill: "Redis 실무 활용",
action: "캐싱 전략(Cache-Aside/Write-Through), TTL 설계, 캐시 무효화 처리.",
how: "자주 호출되는 API에 Redis 캐싱 적용",
curriculum: [
{ topic: "Redis 자료구조 활용", desc: "String(캐싱, 세션), Hash(객체 저장), List(큐), Set(중복 제거, 추천), Sorted Set(랭킹, 타임라인). 각 자료구조의 시간 복잡도와 적합한 유스케이스." },
{ topic: "캐싱 패턴", desc: "Cache-Aside(Lazy Loading): 읽기 시 캐시 확인 → 미스 시 DB 조회 후 캐시 저장. Write-Through: 쓰기 시 캐시+DB 동시 갱신. Write-Behind: 비동기 DB 반영. 각 패턴의 일관성/성능 트레이드오프." },
{ topic: "TTL 설계 & 캐시 무효화", desc: "TTL 설정 기준(데이터 갱신 주기, 허용 가능한 불일치 시간). 캐시 스탬피드(Thundering Herd) 방지: 확률적 TTL, Lock 기반 갱신. 이벤트 기반 무효화 전략." },
{ topic: "분산 환경 Redis", desc: "분산 락(Redisson, SETNX): 동시성 제어. Redis Pub/Sub: 실시간 알림, 캐시 무효화 브로드캐스트. Redis Sentinel/Cluster 기본 개념." },
]
},
{
skill: "Docker & CI/CD",
action: "Dockerfile 작성, 멀티스테이지 빌드, GitHub Actions 파이프라인 이해.",
how: "팀 서비스의 Dockerfile을 직접 최적화",
curriculum: [
{ topic: "Dockerfile 작성 & 최적화", desc: "멀티스테이지 빌드로 이미지 크기 최소화. 레이어 캐싱 활용(의존성 먼저 복사). .dockerignore 설정. non-root 유저 실행. 보안 스캐닝(trivy)." },
{ topic: "docker-compose 활용", desc: "로컬 개발 환경 구성(앱 + DB + Redis + Kafka). 볼륨/네트워크 설정. depends_on과 healthcheck. 환경별 compose 파일 분리." },
{ topic: "GitHub Actions CI/CD", desc: "Workflow 문법(triggers, jobs, steps). 캐싱(actions/cache)으로 빌드 속도 개선. 환경별 배포(dev/staging/prod). Secrets 관리. Matrix build로 멀티 버전 테스트." },
{ topic: "배포 전략 기초", desc: "Blue-Green, Rolling Update, Canary 배포 개념과 차이. Docker 이미지 태깅 전략(git SHA, semantic version). 롤백 절차 수립." },
]
},
{
skill: "코드 설계",
action: "SOLID 원칙을 실무에 적용, 레이어드 아키텍처의 각 층 역할 이해.",
how: "레거시 코드 리팩토링 시 설계 원칙 적용 사례",
curriculum: [
{ topic: "SOLID 원칙 실무 적용", desc: "SRP: 하나의 클래스는 하나의 변경 이유만. OCP: 확장에 열려 있고 수정에 닫혀 있는 구조(Strategy 패턴). LSP: 하위 타입 치환. ISP: 인터페이스 분리. DIP: 추상화에 의존." },
{ topic: "레이어드 아키텍처", desc: "Controller → Service → Repository 각 층의 책임. DTO vs Entity 변환 위치. Service 간 호출 규칙. 도메인 로직은 Service가 아닌 도메인 모델에." },
{ topic: "디자인 패턴 실전", desc: "Strategy: 결제 방식 분기. Template Method: 공통 프로세스에서 단계별 커스터마이징. Factory: 객체 생성 로직 캡슐화. Observer: 이벤트 기반 처리." },
{ topic: "리팩토링 기법", desc: "Extract Method, Extract Class, Move Method. Feature Envy(남의 데이터를 자꾸 가져다 쓰는 코드) 해결. Long Method 분해. Guard Clause로 중첩 조건문 제거." },
]
},
]
},
{
name: "\u{1F4A1} 차별화",
items: [
{
skill: "Kafka 기초",
action: "Producer/Consumer 모델, 토픽 개념, 비동기 이벤트 처리의 필요성 이해.",
how: "팀에서 사용 중인 Kafka 토픽 구조를 문서화",
curriculum: [
{ topic: "Kafka 핵심 개념", desc: "Topic, Partition, Offset, Consumer Group. Producer가 메시지를 보내고, Consumer가 구독하는 Pub/Sub 모델. 파티션 키를 통한 순서 보장." },
{ topic: "Spring Kafka 기초", desc: "@KafkaListener로 메시지 소비. KafkaTemplate으로 메시지 생산. 직렬화/역직렬화(JSON, Avro). 에러 핸들링(@RetryableTopic, DLT)." },
{ topic: "이벤트 드리븐 아키텍처 입문", desc: "동기 API 호출 vs 비동기 이벤트의 차이. 이벤트 발행의 이점: 서비스 간 결합도 감소, 장애 격리. 주문 → 결제 → 알림 흐름을 이벤트로 설계하는 예시." },
]
},
{
skill: "AI 도구 활용",
action: "Claude Code/Cursor로 코드 리뷰, 테스트 생성, 리팩토링 지원.",
how: "AI 도구 활용 워크플로우를 팀에 공유",
curriculum: [
{ topic: "AI 코딩 어시스턴트 실전 활용", desc: "코드 리뷰 요청, 테스트 코드 생성, 복잡한 로직 설명 요청. 프로젝트 컨텍스트를 효과적으로 전달하는 프롬프트 전략." },
{ topic: "AI 기반 디버깅", desc: "에러 로그를 AI에게 분석 요청. 스택 트레이스 해석 지원. 성능 병목 원인 추론. 레거시 코드 이해 지원." },
{ topic: "AI 도구 한계 인식", desc: "환각(Hallucination) 가능성 항상 염두. 보안 민감 코드(API 키, 인증 로직) AI 전달 주의. 생성 코드 반드시 리뷰. 최신 API 변경 미반영 가능성." },
]
},
]
}
,
{
name: "🤝 소프트 스킬",
items: [
{
skill: "효과적인 질문 & 커뮤니케이션",
action: "모르는 것을 구체적으로 정리하여 질문. '내가 시도한 것, 예상 결과, 실제 결과'를 명확히 표현.",
how: "매일 질문/논의 내용을 노트에 정리하는 습관",
curriculum: [
{ topic: "구조화된 질문법", desc: "질문 전 자신이 무엇을 모르는지 파악. '시도한 것 → 예상 결과 → 실제 결과 → 추측 원인' 형식으로 정리. 모호한 질문은 시간을 낭비하고, 구체적 질문은 빠른 해결로 이어짐." },
{ topic: "코드 리뷰 수용 & 활용", desc: "리뷰 피드백을 방어적으로 받지 않기. 'Why'를 질문해서 맥락 이해. 반복되는 피드백을 패턴으로 인식하고 개선. 좋은 리뷰를 노트하는 습관." },
{ topic: "업무 상황 공유", desc: "진행 상황을 적절한 타이밍에 공유(블로커, 지연, 완료). 도움이 필요한 시점을 스스로 판단. 데일리 스탠드업에서 효과적으로 상황 전달하는 방법." },
{ topic: "기술 학습 루틴", desc: "'기술 스택보다 왜 그 기술을 썼는지 설명하는 것'이 더 중요. 기본기(자료구조, 알고리즘, 언어) 반복 학습. 사이드 프로젝트로 새로운 기술 경험. 경험의 양보다 질 중시." },
]
},
]
},
{
name: "🎯 면접 대비",
items: [
{
skill: "코딩 인터뷰 & CS 기본기",
action: "LeetCode Medium 수준 문제를 45분 내 풀 수 있는 실력. 자료구조/알고리즘/OS/네트워크 기초를 설명할 수 있어야 한다.",
how: "주 3회 이상 알고리즘 문제 풀이, 풀이 과정을 말로 설명하는 연습",
curriculum: [
{ topic: "자료구조 & 알고리즘 핵심", desc: "배열, 연결리스트, 스택/큐, 해시맵, 트리, 그래프 구현과 시간복잡도. 정렬(퀵/머지/힙), 이진탐색, BFS/DFS, 동적 프로그래밍 패턴. LeetCode Top 100 문제 숙달." },
{ topic: "CS 기초 (OS/네트워크/DB)", desc: "프로세스 vs 스레드, 동기/비동기, 교착상태. HTTP/TCP/DNS 동작 원리. 인덱싱, 트랜잭션 격리 수준, 정규화. 면접에서 왜를 설명할 수 있는 수준." },
{ topic: "코딩 면접 실전 기술", desc: "Think Aloud: 문제 풀이 과정을 말로 설명하는 습관. 엣지 케이스 먼저 확인. 브루트포스 → 최적화 순서로 접근. Google Docs / 화이트보드 코딩 연습." },
{ topic: "포트폴리오 & 이력서", desc: "프로젝트별 문제→해결→결과 구조로 정리. 기술 선택의 이유를 설명할 수 있는 깊이. GitHub 활동과 코드 품질 관리. 이력서는 정량적 성과 중심." },
]
},
]
}
]
},
"Mid \u2192 Senior": {
summary: "\"기능 구현\"에서 \"시스템 설계\"로",
keyMessage: "개별 API가 아닌 시스템 전체를 보는 시야. 장애 상황에서 원인을 진단하고 팀을 이끌어 복구할 수 있어야 합니다.",
tracks: [
{
name: "\u{1F3AF} 최우선",
items: [
{
skill: "MSA 설계",
action: "서비스 경계 정의, 이벤트 기반 통신, 사가 패턴, 서킷 브레이커 적용.",
how: "모놀리스에서 서비스 분리 RFC 작성\xb7실행",
curriculum: [
{ topic: "서비스 경계 정의", desc: "도메인 기반 서비스 분리(Bounded Context). 기능 응집도 vs 데이터 응집도. 서비스 간 공유 데이터 처리 전략. 너무 작은 서비스(Nano Service)의 위험." },
{ topic: "서비스 간 통신 패턴", desc: "동기(REST, gRPC) vs 비동기(Kafka, RabbitMQ). API Gateway 패턴. BFF(Backend for Frontend). Service Discovery(Eureka, Consul)." },
{ topic: "Saga 패턴", desc: "분산 트랜잭션 대안으로서의 Saga. Choreography(이벤트 기반) vs Orchestration(중앙 조정) 방식. 보상 트랜잭션(Compensating Transaction) 설계. 멱등성 보장." },
{ topic: "서킷 브레이커 & 복원력", desc: "Resilience4j/Hystrix로 서킷 브레이커 구현. Closed → Open → Half-Open 상태 전이. Fallback 전략. Bulkhead 패턴으로 장애 격리. Retry with backoff." },
{ topic: "분산 데이터 관리", desc: "Database per Service 패턴. CQRS(Command Query Responsibility Segregation). Event Sourcing 개념. API Composition으로 분산 쿼리. Eventually Consistency 허용 범위 결정." },
]
},
{
skill: "동시성 & 분산 시스템",
action: "분산 락, 낙관적/비관적 잠금, 멱등성 설계, Eventually Consistent 이해.",
how: "동시성 이슈 해결 사례를 포스트모템으로 문서화",
curriculum: [
{ topic: "낙관적 vs 비관적 잠금", desc: "낙관적(Optimistic): @Version으로 충돌 감지, 재시도 전략. 비관적(Pessimistic): SELECT FOR UPDATE로 행 잠금. 각각 적합한 상황(낮은 경합 vs 높은 경합)." },
{ topic: "분산 락(Distributed Lock)", desc: "Redis 기반 분산 락(Redisson, SETNX+TTL). ZooKeeper 기반 락. 락의 TTL 설계(너무 짧으면 중복 실행, 너무 길면 데드락). Fencing Token으로 안전한 락 사용." },
{ topic: "멱등성(Idempotency) 설계", desc: "같은 요청을 여러 번 보내도 결과가 같은 API 설계. Idempotency Key 패턴. 중복 결제 방지. 메시지 큐에서 At-Least-Once 처리 시 멱등성 필수." },
{ topic: "CAP 정리 & 일관성 모델", desc: "CAP(Consistency, Availability, Partition tolerance) 정리 이해. Strong Consistency vs Eventual Consistency. 비즈니스 요구사항에 따른 일관성 레벨 선택(결제 vs 추천)." },
{ topic: "동시성 테스트", desc: "CountDownLatch, ExecutorService로 동시 요청 시뮬레이션. Race Condition 재현 테스트 작성. 스트레스 테스트 도구(K6, JMeter) 활용." },
]
},
{
skill: "JVM & 성능 튜닝",
action: "GC 튜닝, 스레드 덤프 분석, 커넥션 풀 최적화, APM 활용 병목 진단.",
how: "프로덕션 성능 이슈를 프로파일링으로 해결",
curriculum: [
{ topic: "JVM 메모리 구조", desc: "Heap(Young/Old Gen), Metaspace, Stack. 각 영역의 역할과 OOM 발생 시나리오. -Xms, -Xmx, -XX:MaxMetaspaceSize 설정 가이드." },
{ topic: "GC(Garbage Collection) 이해", desc: "GC 알고리즘: Serial, Parallel, G1, ZGC, Shenandoah. G1GC 동작 원리(Region 기반). GC 로그 분석(gc.log). GC 튜닝: pause time vs throughput 목표." },
{ topic: "스레드 덤프 분석", desc: "jstack으로 스레드 덤프 생성. BLOCKED, WAITING, TIMED_WAITING 상태 해석. 데드락 탐지. 스레드 풀 크기 최적화(CPU bound vs I/O bound)." },
{ topic: "커넥션 풀 최적화", desc: "HikariCP 설정: maximumPoolSize, connectionTimeout, idleTimeout. 적정 풀 사이즈 공식(connections = (core_count * 2) + disk_spindles). 커넥션 릭 탐지." },
{ topic: "APM 활용 병목 진단", desc: "Datadog/New Relic/Pinpoint로 트랜잭션 추적. 느린 트랜잭션 식별. DB 쿼리, 외부 API 호출, 캐시 미스 등 병목 포인트 시각화. 커스텀 메트릭 추가." },
]
},
]
},
{
name: "\u{1F4C8} 성장 가속",
items: [
{
skill: "Kafka 심화",
action: "파티셔닝 전략, 컨슈머 그룹 리밸런싱, 정확히 한번 처리(Exactly-Once).",
how: "이벤트 드리븐 아키텍처 전환 프로젝트 주도",
curriculum: [
{ topic: "파티셔닝 전략", desc: "파티션 수 결정 기준(처리량, 컨슈머 수). 파티션 키 설계(순서 보장이 필요한 데이터). 핫 파티션 문제와 해결. 파티션 리파티셔닝." },
{ topic: "컨슈머 그룹 & 리밸런싱", desc: "컨슈머 그룹 메커니즘. Cooperative Sticky Assignor로 리밸런싱 영향 최소화. 컨슈머 랙(Lag) 모니터링. 컨슈머 스케일 아웃 전략." },
{ topic: "Exactly-Once Semantics", desc: "Idempotent Producer(enable.idempotence). Transactional Producer/Consumer. 정확히 한번 처리의 비용과 제약. At-Least-Once + 멱등성으로 대체하는 실용적 접근." },
{ topic: "스키마 관리", desc: "Schema Registry(Avro/Protobuf). 스키마 호환성(backward, forward, full). 스키마 진화(evolution) 전략. 다운타임 없는 스키마 변경." },
]
},
{
skill: "모니터링 & 장애 대응",
action: "APM 설정, 알림 정책, 장애 원인 분석 주도, 포스트모템 작성.",
how: "온콜 로테이션 참여, 장애 대응 런북 작성",
curriculum: [
{ topic: "모니터링 체계 구축", desc: "4 Golden Signals: Latency, Traffic, Errors, Saturation. RED Method(Rate, Errors, Duration). USE Method(Utilization, Saturation, Errors). 서비스별 핵심 메트릭 정의." },
{ topic: "알림 정책 설계", desc: "알림 피로(Alert Fatigue) 방지. SLI/SLO 기반 알림(에러 버짓 소진률). 단계별 에스컬레이션(Warning → Critical → Page). 알림 채널(Slack, PagerDuty) 설정." },
{ topic: "장애 대응 프로세스", desc: "Incident Commander 역할. 장애 타임라인 기록. 커뮤니케이션 채널 운영. 롤백/핫픽스 의사결정 프로세스. 고객 커뮤니케이션." },
{ topic: "포스트모템 문화", desc: "비난 없는(Blameless) 포스트모템. 구조: 타임라인, 영향 범위, 근본 원인, 액션 아이템. 반복 장애 방지를 위한 시스템 개선. 포스트모템 공유 세션 운영." },
]
},
{
skill: "DDD & 아키텍처",
action: "도메인 모델링, 바운디드 컨텍스트, 헥사고날 아키텍처 적용.",
how: "핵심 도메인 하나를 DDD로 재설계",
curriculum: [
{ topic: "전략적 DDD", desc: "도메인, 서브도메인(Core/Supporting/Generic) 구분. Bounded Context 식별과 Context Map. 유비쿼터스 언어(Ubiquitous Language) 정의. 도메인 전문가와의 협업." },
{ topic: "전술적 DDD", desc: "Entity vs Value Object. Aggregate와 Aggregate Root. Domain Event. Repository 패턴. Domain Service vs Application Service 구분." },
{ topic: "헥사고날 아키텍처", desc: "Port와 Adapter 개념. 인바운드 포트(Use Case), 아웃바운드 포트(인터페이스). 의존성 방향: 외부 → 도메인. 테스트 용이성과 기술 독립성 달성." },
{ topic: "이벤트 스토밍", desc: "도메인 이벤트 식별 워크샵. Command, Event, Policy, Read Model, Aggregate 매핑. Bounded Context 도출. 시스템 설계로의 전환." },
]
},
]
},
{
name: "\u{1F4A1} 차별화",
items: [
{
skill: "AI API 통합",
action: "LLM API 연동, RAG 파이프라인 서버 구현, 프롬프트 관리 시스템.",
how: "AI 기능 백엔드 서비스 설계\xb7구축 주도",
curriculum: [
{ topic: "LLM API 연동 설계", desc: "OpenAI/Claude/Gemini API 통합. 스트리밍 응답(SSE) 서버 구현. Rate Limiting 및 비용 제어. API Key 관리 및 로테이션. Fallback 모델 전략." },
{ topic: "RAG 백엔드 서비스", desc: "문서 임베딩 파이프라인(청킹 → 임베딩 → 벡터 DB 저장). 벡터 DB(Pinecone, Weaviate, pgvector) 선택 기준. 검색 최적화(Hybrid Search, Re-ranking). 결과 캐싱." },
{ topic: "프롬프트 관리 시스템", desc: "프롬프트 버전 관리. A/B 테스트 인프라. 프롬프트 템플릿 엔진. 모니터링(토큰 사용량, 응답 품질, 레이턴시) 대시보드." },
]
},
{
skill: "클라우드 네이티브",
action: "EKS 운영 이해, 서버리스 적용 판단, IaC(Terraform) 기본 활용.",
how: "새 서비스를 컨테이너 기반으로 설계\xb7배포",
curriculum: [
{ topic: "Kubernetes 기본 운영", desc: "Pod, Deployment, Service, Ingress 개념. ConfigMap/Secret 관리. 리소스 요청/제한(requests/limits) 설정. 로그 확인(kubectl logs) 및 디버깅(kubectl exec)." },
{ topic: "서버리스 판단 기준", desc: "Lambda/Cloud Functions 적합한 경우: 이벤트 드리븐, 비정기 실행, 간단한 처리. 부적합한 경우: 긴 실행 시간, 상태 유지 필요, 콜드 스타트 민감. 비용 비교." },
{ topic: "Terraform 기초", desc: "HCL 문법으로 인프라 정의. terraform plan/apply 워크플로우. 상태 파일(state) 원격 관리(S3 + DynamoDB). 모듈 재사용 패턴." },
]
},
]
}
,
{
name: "🤝 소프트 스킬",
items: [
{
skill: "기술 글쓰기 & 영향력",
action: "기술 블로그, 내부 위키, RFC 작성으로 지식을 체계적으로 전파. 권위 없이 영향력을 행사하는 '지혜의 전파' 단계.",
how: "월 1회 이상 기술 글(내부 위키/블로그) 작성, 분기 1회 Tech Talk",
curriculum: [
{ topic: "기술 문서 작성법", desc: "문제 정의 → 해결 과정 → 결과 → 배운 점 구조. 독자 수준에 맞는 글쓰기. 장애 포스트모템, 기술 제안서, 아키텍처 문서 작성 패턴." },
{ topic: "영향력 있는 설득", desc: "권위 없이 영향력 행사하기(테크리드의 핵심 역량). 데이터와 근거 기반 기술 제안. 반대 의견을 존중하며 합의 도출. 기술 트레이드오프를 비개발자에게도 설명." },
{ topic: "멘토링 & 팀 성장", desc: "주니어의 성장을 돕는 코드 리뷰 — 정답보다 사고 방향 제시. 1:1 미팅으로 성장 목표 함께 설정. 팀 내 기술 공유 세션 주도. 배민 기술블로그: '시니어는 주변에 긍정적 영향을 주는 사람'." },
{ topic: "기술 부채 커뮤니케이션", desc: "기술 부채를 비즈니스 임팩트로 번역. '리팩토링' 대신 '개발 속도 향상 프로젝트'. 개발 속도 저하, 장애 빈도, 온보딩 비용 등 지표 활용." },
]
},
]
},
{
name: "🎯 면접 대비",
items: [
{
skill: "시스템 디자인 & 행동 면접",
action: "대규모 시스템 설계를 화이트보드에 그릴 수 있고, STAR 방법론으로 경험을 구조화하여 전달.",
how: "월 2회 시스템 디자인 모의면접, 주요 경험 STAR 형식 정리",
curriculum: [
{ topic: "시스템 디자인 기초", desc: "URL 단축기, 채팅 시스템, 뉴스 피드 등 클래식 문제. 요구사항 정의 → 개략 설계 → 상세 설계 → 트레이드오프 논의 순서. 확장성, 가용성, 일관성 개념." },
{ topic: "시스템 디자인 심화", desc: "분산 시스템: 샤딩, 복제, CAP 정리, 일관성 해싱. 메시지 큐(Kafka), 캐시(Redis), CDN, 로드밸런서 설계. 실제 서비스(YouTube, Twitter, Uber) 아키텍처 분석." },
{ topic: "행동 면접 (STAR)", desc: "Situation→Task→Action→Results 구조로 경험 정리. Amazon LP 14가지, 쿠팡 리더십 원칙 대비. 우리가 아닌 내가 한 것을 구체적으로. 실패 경험도 긍정적 학습으로 표현." },
{ topic: "모의 면접 & 피드백", desc: "동료와 모의 면접(Mock Interview) 정기 진행. 면접관 역할도 경험해 평가 기준 이해. 녹화/녹음으로 자기 피드백. Pramp, interviewing.io 등 플랫폼 활용." },
]
},
]
}
]
},
"Senior \u2192 Staff+": {
summary: "\"시스템 설계\"에서 \"기술 전략\"으로",
keyMessage: "조직 전체의 기술 방향을 설정하고, 여러 팀에 걸친 아키텍처 결정을 내립니다.",
tracks: [
{
name: "\u{1F3AF} 핵심 역량",
items: [
{
skill: "조직 아키텍처 전략",
action: "여러 팀의 서비스 간 의존성 관리, 플랫폼 전략, 기술 표준 수립.",
how: "전사 백엔드 기술 로드맵 작성, 아키텍처 리뷰 위원회 운영",
curriculum: [
{ topic: "서비스 의존성 거버넌스", desc: "서비스 의존성 그래프 시각화 및 관리. 순환 의존성 제거 전략. 공유 라이브러리 vs 서비스 복제 판단. API 버전 관리 정책(URL versioning, Header versioning)." },
{ topic: "플랫폼 팀 전략", desc: "Team Topologies(Stream-aligned, Platform, Enabling, Complicated-subsystem) 적용. 플랫폼 팀이 제공할 서비스 범위 결정. 셀프서비스 인프라/도구 설계. X-as-a-Service 모델." },
{ topic: "기술 로드맵 수립", desc: "현재 상태(As-Is) 진단 → 목표 상태(To-Be) 정의 → 마이그레이션 계획. 기술 레이더로 도입/시험/유지/폐기 기술 관리. 분기별 리뷰와 업데이트." },
{ topic: "아키텍처 리뷰 프로세스", desc: "신규 서비스/대규모 변경 시 아키텍처 리뷰 의무화. 리뷰 체크리스트(확장성, 보안, 운영성, 비용). 리뷰 보드 운영 및 의사결정 기록. 경량 리뷰 vs 정식 리뷰 구분." },
]
},
{
skill: "기술 부채 & 투자 판단",
action: "비즈니스 임팩트 기준으로 기술 투자 우선순위 결정, 경영진 설득.",
how: "기술 부채 정량화 프레임워크 구축",
curriculum: [
{ topic: "기술 투자 ROI 분석", desc: "기술 부채의 '이자' 측정: 장애 빈도, 개발 속도 저하, 채용 어려움. 투자 효과 예측: 배포 빈도 개선, MTTR 단축. 비투자 시 리스크 정량화." },
{ topic: "기술 전략 프레젠테이션", desc: "경영진/비기술 이해관계자를 위한 기술 전략 발표. 비즈니스 목표와 기술 투자 연결. 비유와 시각화 활용. Q&A 준비(비용, 기간, 리스크)." },
{ topic: "기술 예산 관리", desc: "클라우드 비용, 라이선스 비용, 인력 비용 종합 관리. FinOps 프랙티스 도입. 비용 최적화 vs 개발 생산성 트레이드오프. 분기별 예산 리뷰." },
]
},
{
skill: "엔지니어링 문화",
action: "코드 리뷰, 장애 대응, 기술 공유 문화를 조직 단위로 설계\xb7운영.",
how: "엔지니어링 핸드북 작성, 기술 면접 프로세스 설계",
curriculum: [
{ topic: "엔지니어링 원칙 수립", desc: "조직의 엔지니어링 원칙(Principles) 정의. '완벽보다 반복 가능한 배포', '측정 가능한 변경' 등. 원칙의 실제 의사결정 적용 사례 축적." },
{ topic: "채용 & 온보딩 설계", desc: "기술 면접 프로세스 설계(코딩테스트, 시스템 설계, 행동 면접). 루브릭 기반 공정한 평가. 30/60/90 온보딩 프로그램. 멘토링 짝 배정." },
{ topic: "성장 프레임워크", desc: "엔지니어링 레더(Career Ladder) 정의. 각 레벨별 기대 역량 명시. 성장 경로 투명화. 매니저 트랙 vs IC 트랙 설계." },
]
},
]
}
,
{
name: "🤝 소프트 스킬",
items: [
{
skill: "조직 리더십 & 외부 영향력",
action: "경영진에게 기술 투자를 비즈니스 언어로 설명. 외부 컨퍼런스/블로그로 기술 브랜딩. 채용 면접 프로세스 설계.",
how: "연 2회 이상 외부 발표, 기술 투자 ROI 보고서 작성",
curriculum: [
{ topic: "경영진 커뮤니케이션", desc: "기술 용어를 비즈니스 언어로 번역하는 능력. 기술 부채의 비용을 장애 빈도, 개발 속도 저하, 인재 이탈로 정량화. 투자하지 않을 때의 리스크 시나리오 제시. 대시보드로 진행 상황 가시화." },
{ topic: "채용 면접관 역량", desc: "구조화된 면접 루브릭 설계. 코딩/시스템 설계/행동 면접 각 단계 운영. 면접관 캘리브레이션으로 평가 일관성 확보. 후보자 경험이 긍정적이도록 프로세스 설계." },
{ topic: "외부 브랜딩 & 커뮤니티", desc: "기술 블로그 운영, 컨퍼런스 발표, 오픈소스 기여로 회사 기술 브랜딩. 커뮤니티 리더십으로 채용 파이프라인 확대. 업계 네트워크 구축. 기술 레이더 운영으로 트렌드 파악." },
]
},
]
},
{
name: "🎯 면접 대비",
items: [
{
skill: "Staff+ 레벨 면접 전략",
action: "조직 임팩트 중심의 경험 정리. 기술 전략 제안, 대규모 시스템 설계, 크로스팀 리더십을 증명.",
how: "주요 프로젝트별 임팩트 정량화 문서 작성, Staff 레벨 모의면접",
curriculum: [
{ topic: "Staff 레벨 시스템 디자인", desc: "단일 서비스가 아닌 플랫폼/인프라 레벨 설계. 멀티 리전, 재해 복구, 비용 최적화 포함. 기술 선택의 비즈니스 임팩트 설명. Netflix L6, Google L6+ 수준." },
{ topic: "임팩트 스토리 구조화", desc: "각 프로젝트의 비즈니스 임팩트 정량화(매출, 비용 절감, 성능 개선). 조직 차원 영향력(팀 생산성, 채용, 문화 변화). 기술 의사결정의 근거와 결과를 데이터로 설명." },
{ topic: "빅테크 Staff+ 면접 특성", desc: "Google L6+: 조직 전체 기술 전략 질문. Amazon L7: LP 기반 깊은 Dive Deep. Meta E6+: 조직 영향력과 기술 비전. Apple ICT5+: 제품 관점 + 기술 깊이 동시 평가." },
]
},
]
}
]
}
},
// ============================================================
// DEVOPS
// ============================================================
DevOps: {
"Junior \u2192 Mid": {
summary: "\"매뉴얼 따라하기\"에서 \"자동화 구축\"으로",
keyMessage: "CLI 명령어를 넘어서, 인프라를 코드로 관리하고 반복 작업을 자동화할 수 있어야 합니다.",
tracks: [
{
name: "\u{1F3AF} 최우선",
items: [
{
skill: "Kubernetes 실무",
action: "Deployment/Service/Ingress 이해, kubectl 디버깅, 리소스 요청/제한 설정.",
how: "팀 서비스의 K8s 매니페스트를 직접 작성\xb7수정",
curriculum: [
{ topic: "핵심 리소스 이해", desc: "Pod: 최소 배포 단위, 사이드카 패턴. Deployment: ReplicaSet 관리, 롤링 업데이트. Service: ClusterIP/NodePort/LoadBalancer. Ingress: L7 라우팅, TLS 종료." },
{ topic: "리소스 관리", desc: "CPU/Memory requests vs limits. QoS 클래스(Guaranteed, Burstable, BestEffort). LimitRange/ResourceQuota로 네임스페이스 자원 제한. VPA(Vertical Pod Autoscaler)로 적정값 추천." },
{ topic: "kubectl 디버깅 마스터", desc: "kubectl describe로 이벤트 확인. kubectl logs -f --previous로 크래시 로그. kubectl exec -it으로 컨테이너 진입. kubectl top으로 리소스 사용량 실시간 확인." },
{ topic: "설정 관리", desc: "ConfigMap: 환경 설정, 설정 파일 마운트. Secret: 민감 정보(base64 인코딩 주의). 환경별 오버레이(Kustomize) 패턴. 설정 변경 시 Pod 재시작 전략." },
{ topic: "네트워킹 기초", desc: "Pod 네트워킹 모델(모든 Pod가 서로 통신 가능). Service DNS 해석(servicename.namespace.svc.cluster.local). NetworkPolicy로 트래픽 제어. Headless Service 활용." },
]
},
{
skill: "Terraform 기초",
action: "HCL 문법, 리소스 정의, 상태 파일 관리, plan/apply 워크플로우.",
how: "기존 수동 생성 리소스를 Terraform으로 임포트",
curriculum: [
{ topic: "HCL 문법 & 리소스 정의", desc: "resource, data, variable, output, locals 블록. 문자열 보간, 조건식, 반복(for_each, count). provider 설정 및 버전 고정." },
{ topic: "상태 파일(State) 관리", desc: "terraform.tfstate의 역할과 중요성. 원격 백엔드(S3 + DynamoDB Lock). 상태 파일 직접 수정 금지 원칙. terraform state mv/rm/import 명령어." },
{ topic: "plan/apply 워크플로우", desc: "terraform plan으로 변경사항 미리보기. terraform apply로 실제 적용. -target으로 특정 리소스만 변경. terraform destroy 위험성 인지." },
{ topic: "모듈 기초", desc: "모듈로 재사용 가능한 인프라 컴포넌트 작성. source(로컬, Git, Registry). 입력 변수와 출력 값. 공개 모듈 레지스트리 활용." },
]
},
{
skill: "CI/CD 파이프라인",
action: "GitHub Actions/Jenkins 파이프라인 작성, 캐싱 전략, 시크릿 관리.",
how: "새 서비스의 CI/CD를 처음부터 구축",
curriculum: [
{ topic: "GitHub Actions 심화", desc: "Workflow 트리거(push, PR, schedule, workflow_dispatch). Job 의존성(needs). Matrix Strategy. 재사용 워크플로우(workflow_call). Composite Actions." },
{ topic: "빌드 속도 최적화", desc: "의존성 캐싱(actions/cache). Docker Layer 캐싱. 병렬 Job 실행. 변경된 파일 기반 선택적 빌드(paths filter)." },
{ topic: "시크릿 & 환경 관리", desc: "GitHub Secrets/Environment Secrets. AWS Secrets Manager/Vault 연동. OIDC로 클라우드 임시 자격 증명. 시크릿 로테이션 자동화." },
{ topic: "배포 파이프라인 설계", desc: "dev → staging → prod 환경 분리. 수동 승인 게이트(Environment protection rules). 롤백 자동화. 배포 알림(Slack 연동)." },
]
},
]
},
{
name: "\u{1F4C8} 성장 가속",
items: [
{
skill: "모니터링 기초",
action: "Prometheus 메트릭 이해, Grafana 대시보드 구성, 기본 알림 설정.",
how: "팀 서비스의 핵심 메트릭 대시보드 구축",
curriculum: [
{ topic: "Prometheus 메트릭 체계", desc: "메트릭 타입: Counter, Gauge, Histogram, Summary. PromQL 기본 쿼리: rate(), increase(), histogram_quantile(). 라벨(Label) 설계. 커스텀 메트릭 노출(/metrics 엔드포인트)." },
{ topic: "Grafana 대시보드", desc: "패널 타입(Time series, Stat, Table, Heatmap). 변수(Variables)로 동적 필터링. 대시보드 구조 설계(Overview → 상세). 팀별 대시보드 템플릿." },
{ topic: "로그 수집 & 분석", desc: "EFK(Elasticsearch + Fluentd + Kibana) 또는 Loki + Grafana 스택. 구조화된 로깅(JSON 로그). 로그 레벨 전략. 로그 보존 정책 및 비용 관리." },
{ topic: "알림 설정 기초", desc: "Alertmanager/Grafana Alerting 설정. 알림 규칙(threshold, 지속 시간). 알림 라우팅(심각도별 채널). 알림 음소거(Silence) 및 억제(Inhibition)." },
]
},
{
skill: "Helm 차트 관리",
action: "values.yaml 구조, 환경별 오버라이드, 차트 버전 관리.",
how: "팀 서비스의 Helm 차트 리뷰\xb7개선",
curriculum: [
{ topic: "Helm 기본 개념", desc: "Chart, Release, Repository 구조. helm install/upgrade/rollback 명령어. Chart.yaml, values.yaml, templates/ 디렉토리 구조." },
{ topic: "템플릿 작성", desc: "Go 템플릿 문법(.Values, .Release, .Chart). if/range/with 제어 구문. _helpers.tpl로 공통 함수. NOTES.txt로 설치 후 안내." },
{ topic: "환경별 설정 관리", desc: "values-dev.yaml, values-prod.yaml로 환경 분리. helm install -f로 오버라이드. helmfile로 여러 릴리스 선언적 관리." },
]
},
{
skill: "GitOps 입문",
action: "ArgoCD 기본 개념, 선언적 배포, 앱 동기화 이해.",
how: "ArgoCD로 스테이징 환경 배포 자동화",
curriculum: [
{ topic: "GitOps 원칙", desc: "Git을 Single Source of Truth로. 선언적 인프라(원하는 상태 기술). 자동 동기화(Git 변경 → 클러스터 반영). 관찰 가능성(drift detection)." },
{ topic: "ArgoCD 설정 & 운영", desc: "Application CRD 작성. Sync Policy(Manual vs Automatic). Prune 정책(삭제된 리소스 처리). Health Check 설정. 멀티 클러스터 관리." },
{ topic: "배포 전략 자동화", desc: "ArgoCD + Kustomize/Helm 연동. ApplicationSet으로 여러 환경 관리. Progressive Delivery(Argo Rollouts 연동). Image Updater로 자동 이미지 업데이트." },
]
},
]
},
{
name: "\u{1F4A1} 차별화",
items: [
{
skill: "보안 기초",
action: "시크릿 관리(Vault/Sealed Secrets), 이미지 스캐닝, 네트워크 정책.",
how: "팀 서비스의 시크릿 관리 방식 개선 제안",
curriculum: [
{ topic: "시크릿 관리", desc: "HashiCorp Vault: 시크릿 엔진, 동적 시크릿, 자동 로테이션. Sealed Secrets: GitOps 환경에서 암호화된 시크릿. External Secrets Operator: 외부 시크릿 관리자 연동." },
{ topic: "컨테이너 보안", desc: "이미지 스캐닝(Trivy, Snyk). 최소 베이스 이미지(distroless, alpine). non-root 실행. read-only 파일시스템. SecurityContext/PodSecurityPolicy." },
{ topic: "네트워크 보안", desc: "NetworkPolicy로 Pod 간 트래픽 제어. mTLS(mutual TLS) with Service Mesh. RBAC(Role-Based Access Control) 설정. Namespace 격리 전략." },
]
},
{
skill: "비용 인식",
action: "클라우드 비용 구조 이해, 리소스 태깅, 기본적인 비용 리포팅.",
how: "월간 비용 리포트 작성\xb7공유",
curriculum: [
{ topic: "클라우드 비용 구조", desc: "AWS/GCP/Azure 주요 서비스 비용 모델. 온디맨드 vs 예약 인스턴스 vs Spot. 데이터 전송 비용(종종 간과됨). 스토리지 비용(S3 티어, EBS 타입)." },
{ topic: "비용 태깅 전략", desc: "팀/서비스/환경별 리소스 태그 체계. Cost Allocation Tags로 비용 분배. 태그 필수 정책(CloudTrail, SCP). 비용 대시보드(AWS Cost Explorer, Kubecost)." },
]
},
]
}
,
{
name: "🤝 소프트 스킬",
items: [
{
skill: "효과적인 질문 & 커뮤니케이션",
action: "모르는 것을 구체적으로 정리하여 질문. '내가 시도한 것, 예상 결과, 실제 결과'를 명확히 표현.",
how: "매일 질문/논의 내용을 노트에 정리하는 습관",
curriculum: [
{ topic: "구조화된 질문법", desc: "질문 전 자신이 무엇을 모르는지 파악. '시도한 것 → 예상 결과 → 실제 결과 → 추측 원인' 형식으로 정리. 모호한 질문은 시간을 낭비하고, 구체적 질문은 빠른 해결로 이어짐." },
{ topic: "코드 리뷰 수용 & 활용", desc: "리뷰 피드백을 방어적으로 받지 않기. 'Why'를 질문해서 맥락 이해. 반복되는 피드백을 패턴으로 인식하고 개선. 좋은 리뷰를 노트하는 습관." },
{ topic: "업무 상황 공유", desc: "진행 상황을 적절한 타이밍에 공유(블로커, 지연, 완료). 도움이 필요한 시점을 스스로 판단. 데일리 스탠드업에서 효과적으로 상황 전달하는 방법." },
{ topic: "기술 학습 루틴", desc: "'기술 스택보다 왜 그 기술을 썼는지 설명하는 것'이 더 중요. 기본기(자료구조, 알고리즘, 언어) 반복 학습. 사이드 프로젝트로 새로운 기술 경험. 경험의 양보다 질 중시." },
]
},
]
},
{
name: "🎯 면접 대비",
items: [
{
skill: "코딩 인터뷰 & CS 기본기",
action: "LeetCode Medium 수준 문제를 45분 내 풀 수 있는 실력. 자료구조/알고리즘/OS/네트워크 기초를 설명할 수 있어야 한다.",
how: "주 3회 이상 알고리즘 문제 풀이, 풀이 과정을 말로 설명하는 연습",
curriculum: [
{ topic: "자료구조 & 알고리즘 핵심", desc: "배열, 연결리스트, 스택/큐, 해시맵, 트리, 그래프 구현과 시간복잡도. 정렬(퀵/머지/힙), 이진탐색, BFS/DFS, 동적 프로그래밍 패턴. LeetCode Top 100 문제 숙달." },
{ topic: "CS 기초 (OS/네트워크/DB)", desc: "프로세스 vs 스레드, 동기/비동기, 교착상태. HTTP/TCP/DNS 동작 원리. 인덱싱, 트랜잭션 격리 수준, 정규화. 면접에서 왜를 설명할 수 있는 수준." },
{ topic: "코딩 면접 실전 기술", desc: "Think Aloud: 문제 풀이 과정을 말로 설명하는 습관. 엣지 케이스 먼저 확인. 브루트포스 → 최적화 순서로 접근. Google Docs / 화이트보드 코딩 연습." },
{ topic: "포트폴리오 & 이력서", desc: "프로젝트별 문제→해결→결과 구조로 정리. 기술 선택의 이유를 설명할 수 있는 깊이. GitHub 활동과 코드 품질 관리. 이력서는 정량적 성과 중심." },
]
},
]
}
]
},
"Mid \u2192 Senior": {
summary: "\"인프라 구축\"에서 \"안정성 설계\"로",
keyMessage: "서비스를 띄우는 것을 넘어서, 장애에 강한 시스템을 설계하고 SRE 프랙티스를 도입합니다.",
tracks: [
{
name: "\u{1F3AF} 최우선",
items: [
{
skill: "KEDA / 고급 스케일링",
action: "커스텀 메트릭 기반 스케일링, cooldownPeriod 튜닝, 스케일 플래핑 방지.",
how: "프로덕션 서비스의 KEDA 설정 최적화",
curriculum: [
{ topic: "HPA 심화", desc: "CPU/Memory 기반 HPA의 한계. Custom Metrics(Prometheus Adapter)으로 확장. 스케일 업/다운 안정화 윈도우. 여러 메트릭 조합(AND/OR 로직)." },
{ topic: "KEDA(Event-Driven Autoscaling)", desc: "ScaledObject 정의. Kafka, RabbitMQ, Redis, Prometheus 등 이벤트 소스 연동. pollingInterval, cooldownPeriod, minReplicaCount 튜닝." },
{ topic: "스케일 플래핑 방지", desc: "스케일링 진동(flapping) 원인 분석. stabilizationWindowSeconds 설정. 스케일 다운 지연으로 트래픽 재증가 대비. 프리웜(Pre-warming) 전략." },
{ topic: "Cluster Autoscaler", desc: "노드 레벨 자동 확장. Karpenter vs Cluster Autoscaler 비교. 노드 그룹 전략(온디맨드 + Spot 혼합). 스케일 다운 안전 장치(PDB)." },
]
},
{
skill: "SRE 프랙티스",
action: "SLI/SLO 정의, 에러 버짓 관리, 포스트모템 문화 정착.",
how: "핵심 서비스 3개의 SLO 정의\xb7모니터링 구축",
curriculum: [
{ topic: "SLI/SLO/SLA 체계", desc: "SLI(Service Level Indicator): 측정 가능한 서비스 품질 지표. SLO(Objective): SLI의 목표값(99.9% 가용성). SLA(Agreement): 고객과의 약속. SLO 설정 절차와 이해관계자 합의." },
{ topic: "에러 버짓(Error Budget)", desc: "SLO = 99.9% → 월간 에러 버짓 = 0.1% = ~43분. 에러 버짓 소진 시 정책: 신규 배포 중단, 안정화 작업 우선. 에러 버짓 대시보드 구축." },
{ topic: "토일(Toil) 관리", desc: "반복적/수동 작업 식별 및 자동화. 토일 비율 목표(50% 이하). 자동화 ROI 계산. 런북(Runbook) → 자동화 스크립트 → 셀프힐링 시스템 진화." },
{ topic: "온콜 운영", desc: "온콜 로테이션 설계. 에스컬레이션 정책. 온콜 핸드오프 절차. 번아웃 방지(보상, 교대 주기). 인시던트 분류 및 우선순위 매트릭스." },
]
},
{
skill: "Terraform 심화",
action: "모듈화, 워크스페이스, 드리프트 감지, 팀 워크플로우 설계.",
how: "전체 인프라를 모듈화된 Terraform으로 재구성",
curriculum: [
{ topic: "모듈 설계 패턴", desc: "재사용 가능한 모듈 작성 원칙. 입력/출력 인터페이스 설계. 모듈 버전 관리(Git tag). 공개 모듈 레지스트리 vs 사내 모듈 레지스트리." },
{ topic: "팀 워크플로우", desc: "Terraform Cloud/Atlantis로 PR 기반 plan/apply. State Locking으로 동시 변경 방지. 코드 리뷰 + plan 결과 리뷰 프로세스. Sentinel/OPA로 정책 적용." },
{ topic: "고급 기능", desc: "dynamic 블록, for_each vs count 선택. terraform_remote_state로 스택 간 참조. terragrunt로 DRY 원칙 적용. 드리프트 감지(terraform plan 정기 실행)." },
{ topic: "마이그레이션 & 리팩토링", desc: "terraform import로 기존 리소스 가져오기. moved 블록으로 리소스 이름 변경. 대규모 리팩토링 시 state mv 활용. 안전한 destroy-then-create vs create-before-destroy." },
]
},
]
},
{
name: "\u{1F4C8} 성장 가속",
items: [
{
skill: "Argo Rollouts",
action: "카나리 배포 전략, 분석 기반 자동 롤백, 트래픽 미러링.",
how: "핵심 서비스에 카나리 배포 파이프라인 구축",
curriculum: [
{ topic: "카나리 배포 설정", desc: "Rollout CRD 작성. 단계별 트래픽 비율(5% → 20% → 50% → 100%). 각 단계 대기 시간(pause). Nginx/Istio/ALB 트래픽 라우팅 연동." },
{ topic: "분석 기반 프로모션", desc: "AnalysisTemplate으로 자동 검증. Prometheus 메트릭 기반 성공/실패 판단(에러율, 레이턴시). 실패 시 자동 롤백. 성공 시 자동 프로모션." },
{ topic: "Blue-Green 배포", desc: "Active/Preview Service 패턴. 전환 전 Preview에서 검증. 즉시 롤백 가능(트래픽 스위치만). 리소스 비용(2배 Pod) 관리." },
]
},
{
skill: "분산 트레이싱",
action: "Jaeger/Tempo 구축, 서비스 간 트레이스 연결, 병목 진단.",
how: "MSA 환경에서 E2E 트레이싱 파이프라인 구축",
curriculum: [
{ topic: "OpenTelemetry 기초", desc: "Trace, Span, Context Propagation 개념. OpenTelemetry Collector 아키텍처. SDK 자동 계측(Auto-instrumentation). W3C Trace Context 표준." },
{ topic: "Jaeger/Tempo 운영", desc: "Jaeger UI로 트레이스 조회 및 분석. Span 간 관계(parent-child, follows-from). 샘플링 전략(확률적, 레이트 기반, 적응형). 스토리지 선택(Elasticsearch, Cassandra, S3)." },
{ topic: "트레이스 기반 디버깅", desc: "느린 트랜잭션의 병목 Span 식별. 서비스 간 호출 체인 시각화. 에러 전파 경로 추적. 트레이스-로그-메트릭 상관관계(Correlation)." },
]
},
{
skill: "네트워크 아키텍처",
action: "VPC 설계, 서브넷 전략, Service Mesh(Istio) 이해.",
how: "프로덕션 VPC를 보안 요구사항에 맞게 재설계",
curriculum: [
{ topic: "VPC 설계 패턴", desc: "멀티 AZ 서브넷 설계(Public/Private/Isolated). NAT Gateway vs VPC Endpoint. Transit Gateway로 멀티 VPC 연결. VPC Peering vs PrivateLink." },
{ topic: "Service Mesh(Istio)", desc: "사이드카 프록시(Envoy) 아키텍처. 트래픽 관리(VirtualService, DestinationRule). mTLS 자동 적용. 관찰 가능성(메트릭, 트레이스, 접근 로그)." },
{ topic: "로드 밸런싱 심화", desc: "L4(NLB) vs L7(ALB) 선택 기준. gRPC 로드 밸런싱. 서비스 디스커버리 패턴. 헬스체크 설계(Liveness vs Readiness vs Startup Probe)." },
]
},
]
},
{
name: "\u{1F4A1} 차별화",
items: [
{
skill: "AI/ML 인프라",
action: "GPU 노드 관리, 모델 서빙 인프라(vLLM/TGI), ML 파이프라인.",
how: "AI 서비스를 위한 GPU 클러스터 구성\xb7운영",
curriculum: [
{ topic: "GPU 노드 관리", desc: "NVIDIA GPU Operator 설치. GPU 리소스 할당(nvidia.com/gpu). GPU 공유(MIG, Time-slicing). 노드 Taint/Toleration으로 GPU 워크로드 격리." },
{ topic: "모델 서빙 인프라", desc: "vLLM: PagedAttention으로 효율적 메모리 관리. TGI(Text Generation Inference): 배치 처리. KServe/Seldon Core: 프로덕션 모델 서빙 플랫폼. 오토스케일링(GPU 사용률 기반)." },
{ topic: "ML 파이프라인 운영", desc: "Kubeflow/Airflow 기반 파이프라인. 데이터 전처리 → 학습 → 평가 → 배포 자동화. 모델 레지스트리(MLflow). A/B 테스트 인프라." },
]
},
{
skill: "FinOps 도입",
action: "비용 가시화 대시보드, 태깅 전략, 리소스 라이트사이징 자동화.",
how: "월 비용 20% 절감 프로젝트 주도",
curriculum: [
{ topic: "비용 가시화", desc: "Kubecost/AWS Cost Explorer/Infracost 활용. 팀/서비스/환경별 비용 분배. 비용 추세 분석 및 이상 탐지. 월간 비용 리뷰 미팅 운영." },
{ topic: "라이트사이징", desc: "VPA 추천값 기반 리소스 조정. AWS Compute Optimizer 활용. 오버프로비저닝 vs 언더프로비저닝 트레이드오프. Spot/Reserved 인스턴스 전략." },
{ topic: "비용 최적화 전략", desc: "미사용 리소스 자동 정리. 개발/스테이징 환경 업무시간 외 축소. S3 Lifecycle Policy로 스토리지 비용 절감. 데이터 전송 비용 최적화." },
]