F-LAB을 시작하기 전에

개요

  •  F-LAB 멘토링을 진행하기 전, 멘토링을 통한 목표 및 전략들을 해당 문서에 정리하고자 한다.
    • 멘토링 과정 중에는 유동적으로 목표 및 전략들이 수정될 수 있다

멘토링 정보

  • 멘토링 종류: Java Backend 과정 4개월
  • 준비 기간: 2025. 02. 17 ~ 2025. 02. 28
  • 기간: 2025. 02. 28. ~ 2025. 06. 26.

목표

이직

  • WHY?
    • 주위에 훌륭한 개발자들이 많을 수록 크게 성장했던 경험을 통해, 환경의 중요성을 깨닫게 되었다
    • 내 연차와 나이를 고려했을 때, 좋은 개발자로 성장하기에 굉장히 중요한 시점 같다

💁🏻‍♂️  어떤 회사로 이직을 원하는데?

  • IT 자체 서비스를 하며, 열정이 가득한 개발자들이 많은 회사 ▶️ 성장하기 좋은 환경인 회사

⚽  목표를 이루기 위해 무엇을 해야할까

  • 먼저 스스로를 돌아봐야 한다
    • 내가 ‘네카라쿠배’에 들어갈 수 있는 인재가 맞을까?
    • 현재 내 실력과 네카라쿠배가 원하는 인재상을 비교해보니 부족한 점이 보인다.
      이를 보완하기 위해 구체적인 학습 목표를 세워야 한다
  • 내가 들어가고 싶은 회사들의 서버 개발 채용 공고를 보면 다음과 같다
  • 주요 공통 키워드 들만 정리해 보자
    • 기술 스택: JAVA, Kotlin, Spring, RDB, Hadoop, Redis 등등..
    • MSA
    • 비동기 처리 경험
    • 대용량 트래픽(데이터) 경험
  • 위 공고를 보면서 그들이 원하는 모든 요구 사항들에 대해 스스로 과연 명확하게 이해하고 있나?
    • 모두 명확하게 이해가 갔다면, 바로 지원부터 했겠지
    • 설령 잘못 이해했다 하더라도, 스스로가 명확하다면 일단 지원부터 했을게 자명하다
    • 하지만 선뜻 지원하기 어렵지 않나? 결국 요구 조건조차 스스로 명확하게 이해하지 못했다는 뜻이다
  • 예를 들어 “네카라쿠배” 채용 공고를 보면 항상 빠지지 않는 "대용량 트래픽 처리", "대용량 데이터 처리"
    • 저 두 단어에 얼마나 많은 의미가 함축되어 있을까?
    • 아주 단순하게 생각해도 최소 아래와 같은 뎁스를 가질 것이라 판단된다 
      1. 단일 프로세스에서의 최적화를 고려할 줄 아는가?
      2. 단일  프로세스에서 어디가 가장 병목이 발생하는지 명확히 모니터링할 줄 아는가?
        • 모니터링 할 줄 안다는 것은 적어도 측정된 데이터를 명확하게 이해한다는 것이다
        • 그러한 OS, 네트워크, 하드웨어에 대한 지식이 충분한가?
        • 모니터링한 정보를 토대로 어떻게 최적화할 것인가? 
          • 주어진 자원에 대한 활용을 얼마나 합리적으로 운용할 줄 아는가?
          • 즉, 내 코드 한 줄이 어떻게 물리적 자원을 사용하고 있는지 아는가?
      3. 단일  프로세스에서의 최적화를 더 이상 할 수 있는지 없는지 무엇을 근거로 판단하는가?
      4. 멀티 프로세스(분산) 환경을 설계할 수 있는가?
      5. 멀티 프로세스 환경에서는 어떠한 문제들이 발생될지 이해하고 있는가?
        • 만약 동기화 문제에 대한 인식이 명확하다면 그에 대한 적절한 설루션을 선택할 수 있는가?
        • 특정 기술 스택들에 대한 최소한의 이해도가 있는가?
        • 기술의 장/단점을 이해하려 얼마나 노력했는가?
      6. 이에 대한 Trade-off를 얼마나 잘 고려할 수 있는가?
        • 즉, 진화하고/성장하는 트래픽에 대한 대응 감각이 있는가?

✍🏻  어떤 전략을 세워야 할 까

1. 그들이 요구하는 바를 명확히 이해해야 한다

  • 스스로 돌이켜 보자. 
    지금껏 업무를 할 때, 요구 사항에 대해 명확히 이해가 될 때까지 질문을 하고,
    궁금증이 해소가 되었을 때야 비로소 본격적인 개발을 시작하지 않았나?

    요구 사항에 대한 이해가 명확하지 않은 채, 만약 요구 사항과 다르게 열심히 개발한다면,
    허공에 삽질을 하고 있는 것과 다름없지 않은가?
    • 그런데 왜 채용 공고의 요구 사항에 대해 명확히 이해가 될 때까지, 스스로 정리하지 않았을까?
      1. 결국, 그동안 내가 개발자로서 마인드 셋이 부족했다는 뜻이다 
        • 개발자로서 스스로 문제를 정의하고, 해결 방법을 찾아보고, 검증해보아야 한다
        • 지난 2년간 비기술적인 분야에 가까웠으나,
          맡은 도메인에 관련해서 수 없이 문제를 정의하고 해결 방법을 찾아보고
          결과를 검증하며 좋은 성과를 내지 않았나?
        • 지난 2년간 기획적으로 해왔던 일을, 이제 기술적으로 해보면 되는 일이다.
      2. (현재의 나에겐) 문제가 (많이) 어렵기 때문이다
        • 최근 2년의 업무를 떠올려보자, 당장 요구 사항에 대해 명확히 이해가 되지 않았더라도,
          현재 갖고 있는 도메인 지식을 토대로 빠르게 분석하며 요구 사항이 맞는지 검증하지 않았나?
        • 즉, 당시 업무에 있어서 새로운 요구 사항이라 할지라도
          나는 스스로 문제를 정의하고 해결할 수 있는 힘을 갖추고 있었다
          • 요구 사항을 해결하기 위해 문제를 스스로 해결하는 힘. 과연 내가 처음부터 가지고 있었을까?
            • 아니다, 그동안 차곡차곡 쌓아 올린 도메인 지식 덕분이었다
            • 결국, 당장 문제의 어려움이 높아 선뜻 도전할 생각을 안 하게 된 것이 아닐까?

2. 어려운 문제를(요구 사항) 잘게 쪼개어 가장 쉬운 것부터 제대로 쌓아 올리자 (Feat. 분할 정복)

  • 요구 사항에 대해 명확히 이해가 안 간다는 것은, 요구 사항 안에 숨겨진 배경 지식이 부족하다는 뜻이다
  • 즉, 채용 공고의 요구 사항을 기준으로 아직도 기초가 부족하다는 뜻이다
    • 한 번에 어려운 걸 이해하려는 마법 같은 요행을 바라지 말자
    • 곱셈, 나눗셈의 원리를 이해 못 하고 몇 가지 계산 케이스를 외우기만 해서 방정식을 풀 수 있겠는가?
    • 프로그래머가 암기로 일할 수 있는 영역은 명백한 한계가 있다
      • 가장 빨리 AI로 대체되는 개발자가 될 것인가? 가장 오래 일하는 개발자가 될 것인가
      • 사람은 뭔가 하나를 배우고 이거 확실히 알았을 때,
        추가로 이만큼 더 배우고, 이만큼 더 배우고, 이만큼 더 배우고. 즉, 연상이라고도 하지?
        그런 학습법이 가장 잘 맞는 게 사람이다
      • 그게 아니라 이 많은 것을 처음 던져주고 '자 다 배워봐' 그러면 놓치는 게 사람이다.
      • 실제 책 한 권 읽어도 거기에 있는 글자를 제대로 다 읽지 않지 않았나
      • 그래서 작은 것부터 시작해서 올려 나가는 게 사람이 배우는 방법이다
        • 즉, 요구 사항을 명확히 이해하기 위해, 마치 분할 정복처럼,
          ”대용량 트래픽”에 대한 요구 사항을 여러 뎁스로 나눠 보았던 것처럼,
          바로 해결하기 어려운 큰 문제를 → 해결하기 쉬운 작은 문제들로 작게 작게 쪼개자
        • 그리고 이러한 작은 Task가 큰 목표를 향해 간다는 확고한 믿음을 가지자
        • 문제가 쉬우면 쉬울수록, 나태해지지 않고 계속 쌓아나갈 수 있을 것이다

3. 이론과 실습을 병행하자

  • 나는 무언가 새로운 것을 접했을 때 바로 습득되는 사람이 아니다
    • 보통 새로운 거랑 비슷한 것들 대여섯 번 보면서 '아 이게 이런 패턴이 보이는구나'라고 인식이 필요했다
    • 그동안 내 업무를 돌이켜 보자. 어떤 새로운 문제를 인식하고 정복하는 거 있잖아?
    • 여러 번 테스트하고 실수해 보고, 많은 시행착오 끝에 남에게 설명할 정도로 이해력이 높아지지 않았나?
    • 결과적으로 내가 동료들에게 술술 설명을 해줄 정도로 주도한 프로젝트들은 수많은 실습을 통해 만들어졌다
    • 결국 실습이라는 노력을 하지 않고, 전문성(성과)을 바라는 도둑놈 심보는 되지 말자
  • 추상적인 게 구체화될 때까지 실습하자

4. 지식에 대한 확인은 AI를 활용하자

  • AI에게 지식을 알려달라 요청하는 게 아니라, 
    새롭게 정리한 지식을 내가 명확히 이해한 게 맞는지, 
    잘못 이해한 부분이 있는지 AI를 활용해 보자
  • 즉, 내가 AI에게 질문하는 게 아니라 AI가 나에게 질문하고 그에 대해 내 답변을 검증받는 형식으로
    AI를 활용하는 방법을 구축하자

📚 학습 리스트

CS

  1. OS (리눅스)에 대한 깊이 있는 이해
  2. 네트워크 원리 파악
  3. 필수 알고리즘

기본 기술 스택

  1. JAVA 
  2. Spring
  3. JPA
  4. DB (MySQL)

설계 능력 

  1. OOP
  2. TDD
  3. 병렬 처리
  4. 분산 환경 설계

'F-LAB' 카테고리의 다른 글

멘토링 2회차 (25.03.08)  (0) 2025.03.13
멘토링 1회차 - 인사이트  (0) 2025.03.05
멘토링 1회차 (25.02.28)  (0) 2025.03.03