멘토링 기간 | 기본 4개월 (17주) *월 단위 연장 가능 |
멘토링 방식 | 1. 주 1회 1시간 화상 멘토링 (Slack으로 멘토님과 상시 소통)
2. 시니어 개발자의 꼬리질문 멘토링 방식
3. 프로젝트 가이드 및 Github로 상시 코드 리뷰
4. 멘토링 녹음본 및 스크립트 제공
5. 이력서, 기술 면접, 포트폴리오 등 커리어 코칭 |
멘토링 커리큘럼은 멘티의 현재 실력과 경험에 맞춰 맞춤형으로 진행됩니다.
선정된 멘토님과의 멘토링 과정에서 개인별 커스터마이징되며, 이미 실무 경험이나
기본 내용을 숙지하고 계신 분들은 심화 과정에 안내된 내용 중심으로 바로 진행할 수 있습니다.
Step 00. 숙지사항
F-Lab은 기술을 제대로 알고 쓰는 것에 중점을 두고 있습니다. 단순하게 “기업의 채용 우대 사항에 있는 특정 기술을 경험해 봤다” 정도만으로는 커리어를 향상시키기 어렵기 때문입니다.
F-Lab의 커리큘럼은 단순히 완주하는 것이 목표가 아닙니다.
많은 분들이 끊임없이 공부에 몰두하더라도, 좋은 회사에 입사하지 못하는 주된 이유는 진도를 나가는 데에만 급급하여 필요한 지식을 제대로 습득하지 못하고 넘어가게 되어, 면접에서 깊이 있는 답변을 하지 못하기 때문입니다. 분명히 공부했음에도 불구하고 면접에 가면 말이 나오지 않는 이유 또한 이 때문입니다.
사용하는 기술에 대해 깊게 학습하면, 면접에서도 깊이 있는 답변을 할 수 있습니다. 이는 좋은 인상을 줄 뿐 아니라, 개발자로서 학습한 지식을 코드에 적용하는 능력도 향상시킵니다. 깊은 학습은 개발 실력 자체를 향상시켜주며, 이는 본질적인 개발 역량의 향상을 의미합니다.
따라서 F-Lab에서는 멘토와 멘티가 1:1로 맞춤형 학습을 진행합니다. 멘티 개개인의 학습 수준과 방식에 맞춰진 커리큘럼을 통해, 꾸준하고 깊이 있는 학습 습관을 기르는 것이 중요합니다. 이를 통해 멘티님은 상위권 개발자로 성장할 수 있습니다.
Step 01. 이론 학습 (4주)
아래 순서대로 책을 읽게 됩니다. 이론은 4주로 잡혀있지만, 멘토링 기간 내내 읽으며 기본기와 기초를 익힙니다.
•
C++ (멘티의 성향이나 상황에 따라서, C#이나 GoLang으로 진행할 수 있습니다.)
•
디버깅
•
운영체제
•
Design Pattern
•
객체 지향
•
디버깅
•
멀티 스레드
•
MySQL
Step 02. 소켓 서버 프로젝트 (2주)
간단한 채팅 서버를 작성하며, 실시간 상태 기반 소켓 서버의 개념을 이해합니다.
실시간 서버를 구현한다는 의미와 패킷을 처리하는 로직을 작성해보면서, 소켓 서버에 익숙해지는 과정을 거치게 됩니다.
진행 원칙
•
간단한 채팅 서버 구현을 목표로 합니다.
◦
복잡한 기능에 대한 요청보다는 2주 내에 완료하는 것을 목표로 합니다.
•
소켓 클라이언트도 간단히 작성해서 채팅 예제를 완성합니다.
◦
소켓 클라이언트는 콘솔 어플리케이션으로 구성합니다.
진행 내용
•
멘토님의 코드 리뷰를 통해 이론을 코드에 적용하는 법과 더 좋은 코드를 작성하는 법 학습
•
소켓 연결, 해제, 패킷 송/수신 과정을 통한 통신 원리에 대한 이해
•
채팅 서버가 소켓 서버로 이루어지는 실시간 서버의 근간이며 이를 확장하고 성능을 높여가며 발전해왔음을 이해합니다.
Step 03. 로비 기반 게임 서버 프로젝트 (5주)
실시간 서버를 구현한다는 의미와 패킷을 처리하는 로직을 작성해보면서, 소켓 서버에 익숙해지는 과정을 거치게 됩니다.
실시간 패킷 처리 서버를 구현하며, 상태 기반 서버 방식의 게임 서버를 구축합니다.
진행 원칙
•
반드시 테스트 클라이언트와 함께 작성해야 합니다.
◦
서버의 동작 검증은 클라이언트와 함께 해야 하는데, HTTP 프로토콜과 달리 전용 프로토콜로 구현되는 게임 서버를 위한 테스트 클라이언트는 서버 개발자가 작성해야 합니다.
◦
또한 이렇게 만들어진 클라이언트로 서버 성능 테스트를 진행하게 됩니다.
•
프로젝트는 기능을 1개만 만들더라도 수준 높게 만드는 것을 목표로 합니다.
•
멀티 스레드 프로그래밍 시 주의 사항에 대해 체득하게 됩니다.
◦
POSA 2, 멀티 스레드 디자인 패턴 등을 활용해 어플리케이션의 잠금과 대기를 줄이는 법을 알게 됩니다.
진행 내용
•
실시간 패킷 처리를 통해, 컨텐츠 로직을 구현해 봅니다.
•
다양한 패킷을 구현하고, 이를 동기화하도록 로직을 구성합니다.
◦
방 목록/입장/퇴장/이동/공격/사망/부활
•
메모리 기반의 데이터를 동기화 하는 방식으로, 고성능 게임 서버의 원리와 방식을 이해합니다.
•
정의한 기능을 멘토님과 함께 구현해보며 그 기능의 퀄리티를 높힐 수 있는 다양한 방법을 고민
Step 04. 1차 성능테스트(2주)
대용량 트래픽을 처리해내기 위해선 주어진 하드웨어 내에서 최대한의 성능을 이끌어낼 수 있는 능력을 갖추고 있어야 합니다.
이를 위해 내가 구성한 서버가 얼마나 많은 트래픽을 받아낼 수 있는지 배포한 서버에 성능 테스트를 진행합니다. 그리고 모니터링 도구들을 활용하여 CPU, 메모리 지표와 같은 여러 성능 지표를 확인하고 이를 기반으로 성능을 튜닝해 나갑니다.
이 과정을 바탕으로 멘토링이 종료되고 나서도 지속적으로 성능 테스트와 튜닝을 진행할 능력을 갖추게 됩니다.
진행 환경
•
동시 접속자 수와 이에 따른 패킷 처리 수를 확인할 수 있도록 합니다.
•
병목 지점을 파악할 수 있도록 로그를 상세화합니다.
진행 내용
•
실시간 서버 개발 시, 만들어둔 테스트 클라이언트를 성능 테스트용으로 개조하고, 각종 로그와 프로파일링 툴을 통해서 성능을 확인합니다.
Step 05. 데이터 베이스 적용 (2주)
구현된 실시간 서버의 게임 결과/보상을 저장하고 불러오는 구현을 합니다.
진행 원칙
•
실시간 게임 서버에서 데이터베이스를 처리하는 방법을 숙지합니다.
◦
데이터베이스 값이 덮여 쓰여지지 않도록 관제하는 방법을 배웁니다.
•
데이터베이스에서 데이터를 읽어와서 패킷을 전달하는 처리가 블러킹 포인트가 되지 않도록 합니다.
진행 내용
•
DB 라이브러리 사용법을 익힙니다.
•
메모리와 데이터 베이스 간의 데이터 관리 규칙 및 저장 규칙에 대한 이해도를 높여, DB를 사용하는 실시간 게임 서버에서의 접근 방법을 이해합니다.
•
비동기로 DB를 사용함으로써, 넌 블러킹/비동기 고성능 서버를 이해합니다.
Step 06. 2차 성능테스트 (1주)
DB 처리를 추가한 현황을 바탕으로, 성능 테스트를 추가로 진행합니다.
진행 환경
•
DB 처리가 추가됐음에도 성능 저하가 없었는지 확인합니다.
•
데이터베이스 데이터가 많이 쌓여도 문제가 없는지 확인합니다.
진행 내용
•
이전에 구현하고 사용했던 테스트 클라이언트를 이용해 성능 테스트를 진행합니다.
•
데이터베이스의 데이터 양이 늘어나고, 지연 시간이 발생해도 실시간 패킷 처리에 문제가 없는지 확인합니다.
•
특정 쿼리만 느렸을 경우에도, 다른 DB 처리도 느려지지 않는 모델로 구성되어있는지 확인합니다.
◦
DB 처리를 한 개의 스레드에서 처리하는 것인지, 여러 개 스레드에서 처리하는 것인지에 따라 다른 의미와 장단을 가졌음을 이해합니다.
Step 07. 실시간 서버 심화 가이드 (1주)
고성능 게임 서버를 만들기 위해선 어떻게 해야 되는지, 앞으로 프로젝트를 어떻게 발전시켜 나가야 하는지 학습합니다.
또한 심화 코스를 진행하게 된다면 어떠한 학습들을 진행하게 되는지 학습합니다.
진행 내용
•
심화 코스에 대한 설명
•
프로젝트의 아쉬웠던 디테일이나 조금 더 발전할 수 있는 포인트를 짚어드립니다.
•
코드 리뷰 과정과 멘토링 과정에서 느꼈던 장점과 (개인적)발전 방향과 과정에 대해서 정리합니다.
(연장시) 심화코스 진행
7단계까지 진행했다면 깊이있게 개발하는 방법을 익혀 스스로 성장할 수 있는 상태가 되셨을 겁니다. 하지만 더 많은 것들을 해보고 싶으시다면 연장 멘토링을 통해 심화코스를 계속 진행하실 수 있습니다.
진행 내용
•
MMORPG 서버 구현
◦
MMORPG 서버 구조
▪
분산 서버 아키텍쳐 설계
◦
다수의 사용자가 몰려있는 환경에서의 패킷 처리 방법
◦
다수의 패킷을 처리하면서도 응답성을 떨어뜨리지 않는 방법
▪
이러한 구현에 대한 검증
◦
NPC를 구현하는 방법
▪
NPC를 동작시키는 방법
▪
NPC 처리를 사용자에게 전달하는 방법
◦
투사체 스킬을 구현하는 방법
▪
투사체를 서버에서 처리하는 방법
▪
클라이언트에서 처리하는 방법
◦
버프/디버프 스킬을 구현하는 방법
▪
쿨타임 처리
▪
백그라운드에서 스킬을 동작 시키고 이를 전달하는 방법
◦
타격/피격 충돌 처리
▪
넌 타게팅
▪
타게팅
◦
소환수를 구현하는 방법
◦
아이템 구현 방법
▪
인벤토리 구현
▪
다양한 아이템 사용
•
주문서
•
스킬 북
•
장비
•
사용성 아이템
◦
브로드 캐스트 최적화
▪
지역 단위 브로드 캐스트
▪
브로드 캐스트 부하 분산 방법
•
패킷
◦
최적화
▪
압축
▪
암호화
◦
프로토콜
▪
protobuf
▪
flatbuffers
▪
json
•
테스트 클라이언트 심화
◦
스크립트 기반 동작 시스템
◦
정의 데이터 기반 동작 시스템
▪
Yaml, json
◦
고성능 병렬 처리
•
컴퓨터 과학 기초 ++
◦
말록랩
◦
운영체제 가볍게 만들어보기
◦
운영체제 원리 이해를 위한 다양한 미니 프로젝트
•
비동기 심화
◦
멀티 스레드 심화
◦
병렬 처리 심화
•
성능 테스트 심화
◦
다양한 시나리오를 수행하는 테스트 클라이언트 보강
◦
볼 수 있는 성능 지표 보강
◦
운영체제 성능 로그를 확인하고, 각 지표가 가지는 의미에 대한 상세한 설명 및 이해도 높이기
•
웹 서버
◦
ASP.NET CORE 웹 서버 구현
◦
Ocelot (API Gateway) 사용
▪
MSA 아키텍쳐
◦
웹 서버와 소켓 서버를 연동한 아키텍쳐와 메커니즘
▪
gRPC
▪
RabbitMQ
▪
Kafka
•
데이터베이스
◦
분산 디비
▪
MongoDB
◦
MetricDB
◦
GraphDB
공통 커리큘럼
F-Lab 멘토링은 단순히 정해진 요구사항을 따라 구현하는 프로젝트 멘토링이 아닙니다.
모든 과정에서 이론을 기반으로, 스스로 생각하게 만들어 이유를 고민할 수 있도록 훈련합니다.
이를 통해 “왜 이렇게 설계했는지”, “왜 이 기술을 선택했는지”를 명확히 설명할 수 있는 개발자로 성장하게 됩니다. 이러한 접근 방식이 F-Lab 멘티들의 포트폴리오와 면접 결과가 좋은 이유입니다.
상위권 개발자로 성장하기 위한 커리큘럼의 큰 틀은 정해져 있으나, 멘티의 상황 분석과 현재 수준·목표에 맞추어 유연하게 조정하며 진행됩니다.
멘티의 학습 속도와 상황에 따라 커리큘럼 진행 기간은 달라질 수 있습니다.
멘토링 기간 내에 정규 커리큘럼 외에도, 필요한 시점에 멘토님께 이력서 피드백, 모의 면접을 요청할 수 있으며, 합격 이후의 회사 선택 기준, 처우 협상 방법, 커리어 방향성에 대해서도 조언을 받을 수 있습니다.
멘토님은 단순한 강사가 아닌, 멘티의 상황에 맞춰 함께 고민하는 ‘멘토님’의 역할을 수행합니다.
멘토링 수료 이후에는 F-Lab 커뮤니티를 통해 지속적인 성장과 커리어 지원을 받을 수 있습니다.
커뮤니티에서는 성장과 효과적인 구직을 주제로 한 세미나를 지속적으로 운영하며, 수료생 간 스터디, 네트워킹, 모각코, 알고리즘 스터디 등이 활발히 이루어집니다.
또한 멘토님들도 커뮤니티에 함께 참여하고 있어, 멘토링 종료 이후에도 높은 수준의 피드백과 자극을 지속적으로 받을 수 있습니다.
