금일 온라인으로 1시간 40분(Q&A 포함) 정도 진행했던 "(내가) 성장할 수 있었던 공부 방법 발표" 내용을 공유합니다.

개인 학습 방법을 공유하는 것이기 때문에 모두에게 맞지 않을 수 있습니다. 또한 말로써 전달된 부분은 누락되어 있기 때문에 참고해주시기 바랍니다.

 

 

 

 

목차



 

저는 이랬던 사람입니다.

대학 입학 전까지 컴퓨터 공학이라는 것을 몰랐습니다.

  • 고등학생 때에는 수학, 영어보다 문학, 사회, 역사를 좋아했고 고3 때에는 일러스트레이터, 포토샵 등을 이용하는 그래픽스 디자인 작업을 1년 동안 공부하고 자격증을 취득했습니다.
  • 저와 맞지 않아서 진로 고민을 하게되었고 고등학교 선생님을 통해 컴퓨터 학과를 알게되어 제 수시 성적으로 갈 수 있는 수도권 전문대학의 컴퓨터 정보학과로 무작정 입학했습니다.

소프트웨어 개발자라는 직업 또한 몰랐습니다.

  • 학과 강의나 잘 따라가면서 예식장 주차요원, 전산실 계약직 등의 아르바이트를 하며 생활비와 용돈 벌이를 했습니다.
  • 한 학기를 남겨 놓고 공군에 입대하여 청주 17 전비에서 복무하다가 2019년 5월에 전역했습니다.

졸업이 눈앞에 보일 때 취업을 위한 공부를 시작했습니다.

  • 마지막 학기를 한달 남긴 시점까지 물류 센터와 B마트에서 계약직으로 일을 하다가 늦게 취업 고민을 하였습니다.
  • "전공이라도 살려보자" 라는 생각으로 관련 직업 군을 찾아보게 되었고 취업을 위해 개발 공부를 시작하게 되었습니다.

 

 

 

공부, 취업 이력

- 2020년 9 ~ 10월
    - 스프링 기반 API를 만들어보는 1달 짜리 온라인 과정 수강
    - 대학 강의와 병행 (월~일, 하루 14시간 투자)
    - 채용 공고, 면접 자료, 서적에서 키워드 수집 및 학습
- 2020년 11 ~ 12월
    - 대학 생활비 대출을 이용하여 온라인 부트캠프, 멘토링 참여
    - 개인 프로젝트, 대학 강의와 개인 공부 병행 (월~토, 하루 12시간 투자)
    - 채용 공고, 면접 자료, 서적 + 개발 커뮤니티 키워드 수집 및 학습, 블로그 시작
- 2020년 12 ~ 21년 2월
    - IT 회사 지원, 면접 진행
    - 개인 프로젝트 중단, 대학 졸업, 면접 준비, 스터디 진행 (월~토, 하루 10시간 투자)
- 2021년 3 ~ 7월
    - KT 계열 협력사에서 Admin CMS, OTT Service 개발
    - 5월 말부터 이직 준비, 개인 프로젝트, 스터디, 개인 공부 병행 (월~토, 하루 4시간)
    - Unicorn, Solution, PropTech 3개 기업의 상시 채용 지원
- 2021년 8 ~ 2023년 5월 초 퇴사 예정
    - 3개 기업 중 이스트소프트로 이직 후 온보딩 및 업무 진행
    - 12월 중 개인 프로젝트 진행 예정, 스터디, 개인 공부 병행 (월~토, 하루 3시간)
- 2023년 5월 중
    - 카카오 공동체 이직 후 온보딩 및 업무 진행

저는 뒤쳐진 시간을 만회하기 위해 자세한 학습 계획을 세우고 실천하여 유의미한 성과를 거둘 수 있었습니다.
당연히 운도 따라준 것 같고요.

저는 수학이나 영어 등 개발을 하면서 영향을 미치는 영역에 대해서도 오늘 발표를 듣는 분들에 비해 많이 부족합니다. 그렇기에 여러분들이 좋은 방향성을 가지고 집중하여 좋은 이력들을 남겨 정리하신다면 훨씬 좋은 곳에 취업하실 수 있다고 생각합니다.

 

 

개발자 공부 방법, 학습 로드맵이라는 키워드를 검색하면?

이러한 로드맵 이미지에는 개발하면서 알아야 할 모든 주제가 나열되어 있지만 어디까지 알아야 취업할 수 있는지 알기 어렵다.

 

 

 

학습할 것들을 찾는 방법

 

채용 공고를 통해 공부할 키워드를 추출하기

  • 내가 좋아하는, 취업하기 원하는 기업 5~10 곳을 선정하기 (직무는 동일하게 설정)
  • 분야 별 기업을 5~10 곳을 선정하기 (SI, SM, Fintech, E-Commerce, Messenger 등의 분야) 
  • 뽑은 기술 스택을 유사 항목 별로 그룹으로 나누고 중복된 수를 적기
  • 각 그룹 별로 제일 많이 중복되는 것들을 선정하고 연계하여 학습하기


키워드 추출 예시

  • 예시로 사용되는 공고는 카카오, 네이버 스노우, 당근 마켓입니다.

  • 수집한 공고들의 업무 내용, 지원 자격, 우대 사항을 확인하여 학습 키워드를 뽑아내면 됩니다.
  • 우대 사항을 통해 뽑은 키워드는 지원 자격으로 뽑은 키워드보다 우선순위를 미룰 수도 있습니다.



추출한 키워드

  • 추출한 이후 키워드마다 중복된 횟수를 적고 정렬해봅니다. (엑셀, 노션 등을 활용)
  • 이걸 바로 공부하면 될까?
    • 중복도가 높다고 무조건 공부하는 것은 아닙니다.
    • 각 항목을 그룹으로 나누고 그 안에서 1 ~ 2개 정도를 선택해서 장기적으로 학습하는 것이 낫습니다.

 

 

 

각 추출한 키워드 별로 입문/기본 서적을 선택하고 목차를 확인하기

  • 이렇게 키워드를 선정했다고 가정합니다.
    • 이제 각 항목 별로 많이들 추천하는 입문, 기본 서적을 선정해봅니다.
Java 이것이 자바다, 자바의 신, 자바의 정석 중 1택
Spring 스프링 입문을 위한 자바 객체 지향의 원리와 이해, 코드로 배우는 스프링..
RDBMS SQL 첫걸음, 러닝 SQL
NoSQL NoSQL 철저 입문
REST (HTTP) 학교에서 알려주지 않는 17가지 실무 개발 기술, 그림으로 배우는 HTTP..
Docker 시작하세요 도커/쿠버네티스, 15단계로 배우는 도커와 쿠버네티스..
Test Code 자바와 Junit을 활용한 실용주의 단위 테스트, 단위 테스트

 

  • 학습량이 너무 많다고 생각되면 적어도 언어, RDBMS, Network 분야의 기본 서적 1개씩은 보는 것을 추천합니다.
  • 만약 의지력이나 집중력이 부족하거나, 그렇다고 생각하여 서적 등으로 공부하기 어렵다 느껴진다면 유료 인강이나 코멘토의 부트캠프, 멘토링 플랫폼에서 멘토를 구해서 비용을 지불하고 공부하는 것을 추천합니다.

 

  • 처음 학습할 때에는 어떤 것을 공부해야 하는 것인지 분간하기가 어렵습니다. 그렇다면 서적 등을 이용해 공부할 최대한의 범위를 설정하는 것이 낫다고 생각합니다.
  • 목차를 이용하여 학습 흐름을 결정하고 공부하는 것은 의미 없이 소모되는 시간을 줄일 수 있는 방법 중 하나입니다.

 

 

 

공개된 면접 질문들을 통해 중요한 키워드를 식별하기

Google에 개발자 면접 질문으로 검색하면 다양한 Github Repo, Blog가 나옵니다.

이런 자료에는 간단한 꼬리 물기 질문까지 정리된 경우가 있어 개념 학습 시에도 참고할 수 있습니다. 기술 면접을 준비하실 땐 본인의 프로젝트에 대해 어필한 부분 (이력서에 작성한 부분), 특정 라이브러리 사용 부분마다 면접 스크립트를 짜보고, 꼬리 물기를 해보는 것을 추천합니다.



 

지식을 습득하는 방법

 

공식 문서와 블로그를 통해 개념을 습득하기

  • "왜" 사용하는지 구분할 수 있게 된다.
    • 사람들이 어떤 프레임워크, 라이브러리 등을 만났을 때 자주 질문하는 것이 있습니다.
      • 왜 A라는 것을 사용하는 건가요? B라는 것으로도 "할 수" 있는 것이잖아요?
      • 이러한 질문이 나오는 이유들?
        • 해당 프레임워크 또는 라이브러리의 도입 의도를 이해하지 못한 상태
        • 유사한 문제를 해결하는 것들 차이(도입 비용, 도입 시 장, 단점 등)를 고려하지 못하는 상태
    • 문서를 참고하게 되면?
  • 어떻게 사용하는지 알 수 있게 된다.
    • 실무에서 프레임워크, 라이브러리를 사용하는 경우 대부분의 구성 방식, 구현은 공식 문서의 것을 잘 벗어나지 않습니다. (자체 SDK, 다른 프레임워크와의 통합 등이 필요하지 않은 이상.)
    • 각 공식 문서의 Use case, Getting Started, Documentation 항목 등을 살펴보면 각 기능에 대한 설명과 함께 이러한 예시들을 볼 수 있습니다.

  • 빠르게 기술 도입을 할 수 있다.
    • 우리가 쉽게 접할 수 있는 번역된 서적이나 강의 들은 자주 사용되는 프레임워크에 대해서만 정리하거나 또는 Hello World 수준의 내용을 다루는 경우가 많습니다. (생각보다)
    • 이러한 자료들로만 학습해왔고 그것에 익숙해진 상태라면 원서, 공식 문서만 존재하는 기술을 도입할 때에는 익숙하지 않아 어려움을 겪을 수 있습니다. 그렇기에 처음 학습할 때부터 공식 문서를 활용하는 것은 좋은 선택이라고 생각합니다.
    • 출처 : Naver D2 백엔드 개발자를 꿈꾸는 학생 개발자에게

 

 

(작은 것이라도) 유사한 기술들을 비교하기

  • 한 가지 문제를 해결하기 위해서 개발되는 프레임워크나 라이브러리는 다양하고, 주로 사용하던 것이라도 상황에 따라 적용하기가 어려울 수 있습니다.
  • 개발 생산성(기간, 인력), 제공되는 API나 기능, 성능이나 확장성, 유지 보수 고려 등 신규 개발이든 운영 상태던 간에 이러한 고민은 계속될 수밖에 없습니다.
**상황 예시**

1. 유저 트래픽 증가로 인해 인증 API 쪽의 부하가 발생 
2. 기존 모놀리식 구조의 문제점으로 인해 동일한 시스템이 다량 배포되는 중
3. 트래픽이 집중되는 인증 API만 배포할 수 없는 상태이기에 많은 운영 리소스가 소모되고 있음 
4. 이 문제를 개선하기 위해 어떤 기술을 도입해야 하는가? (Cache, Message Queue...)
5. 변경 된 후에도 한계를 봉착한다면? 빈번한 데이터 수정 요청을 Rabbit MQ를 통해 배치로 전송하고 처리하고 있었으나 메세지 처리량보다 트래픽이 더욱 커진다면?
6. Consumer의 추가 배포? 대용량 처리 파이프라인을 구성할 수 있는 Kafka 도입? 기타 등등

이러한 고민을 주니어 개발자부터 한다는 것은 아니지만, 개발 팀 인력 부족, 회의 시에 의견을 제시, 프로젝트를 리드하는 책임을 지게 되었다면 필수적인 역량입니다.

이런 것을 고려하는데 익숙해지기 위해 작은 것부터 비교해 나아가는 것을 추천합니다.

- Java Date or LocalDate
- ModelMapper or MapStruct or Dozer
- ActiveMQ or RabbitMQ or Kafka
- Redis or Memcached

등 다양한 것들을 비교하면서 어느 것을 고려해야 하는지 익숙해지시길 바랍니다.

 

 

개념을 공부할 땐 큰 그림부터 보기

  • 예시 1 : Spring MVC Flow

  • 예시 2 : Database Replication

  • 큰 그림 (청사진)을 보면서 학습하면 전체적인 흐름이 어떤 것인지, 어떤 요소가 추가될 수 있는지 이해하면서 학습할 수 있습니다. (학습한 개념과 엮어진 구성 요소들에 대한 전체적인 이해도가 늘어난다고 생각합니다.)

 

 

내가 학습했던 것을 되새기기

  • 학습한 키워드를 개인 Github, Notion, Blog 등에 정리하고 요약하기
  • 요약한 내용을 읽어보고, 들어보고, 매끄럽게 바꾸기 (기술 면접 대비용)
  • 일정 주기로 전에 정리한 내용을 다시 보기




학습 의지를 잃지 않았던 방법

 

매일 학습 시간을 정하기

  • 집중력을 잃지 않고 학습을 지속할 수 있는 시간을 알아내기
    • 그날의 총시간을 말하는 것이 아니라 한번 시작했을 때 유지 시간을 말하는 것
    • 뽀모도로 테크닉과 같은 도구를 활용해 학습 시간을 설정하는 것도 방법
    • Study buddy GONGPASSU공팟수
  • 휴식 시간을 설정하기 (번아웃 방지, 학습 의지 유지를 위함)
    • 매일 1~2 시간 취미 생활, 친구들과 시간 보내기
    • 매주 하루 정도는 공부하지 않기
    • 개발 생태계에서 공부를 끝낸다 라는 전제는 존재하지 않기 때문에 지속적인 학습이라는 것에 더 중점을 두어야 합니다.

 

 

매주 학습 목표 정하기

  • 내가 학습해야 할 주제를 기준으로 주간 목표를 설정하기
  • 최소한의 목표를 선정하고 진행하면서 분량과 목표의 수를 조절하기

 

 

매번 현실을 마주하기

 

 


끝!

+ Recent posts