티스토리 뷰
금일 온라인으로 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가 나옵니다.
- https://github.com/WooVictory/Ready-For-Tech-Interview
- https://github.com/JaeYeopHan/Interview_Question_for_Beginner
- https://github.com/ksundong/backend-interview-question
- https://github.com/jwasham/coding-interview-university/blob/main/translations/README-ko.md 등
이런 자료에는 간단한 꼬리 물기 질문까지 정리된 경우가 있어 개념 학습 시에도 참고할 수 있습니다. 기술 면접을 준비하실 땐 본인의 프로젝트에 대해 어필한 부분 (이력서에 작성한 부분), 특정 라이브러리 사용 부분마다 면접 스크립트를 짜보고, 꼬리 물기를 해보는 것을 추천합니다.
지식을 습득하는 방법
공식 문서와 블로그를 통해 개념을 습득하기
- "왜" 사용하는지 구분할 수 있게 된다.
- 사람들이 어떤 프레임워크, 라이브러리 등을 만났을 때 자주 질문하는 것이 있습니다.
- 왜 A라는 것을 사용하는 건가요? B라는 것으로도 "할 수" 있는 것이잖아요?
- 이러한 질문이 나오는 이유들?
- 해당 프레임워크 또는 라이브러리의 도입 의도를 이해하지 못한 상태
- 유사한 문제를 해결하는 것들 차이(도입 비용, 도입 시 장, 단점 등)를 고려하지 못하는 상태
- 문서를 참고하게 되면?
- https://spring.io/why-spring, https://spring.io/projects/spring-framework, https://spring.io/projects/spring-boot, https://www.jooq.org/, https://mapstruct.org/ ...
- 문서에 따라 다루는 내용의 정도는 다르지만, 어느 범위에 속하는 지만 알더라도 비교를 할 수 있는 기준이 세워질 수 있습니다.
- 사람들이 어떤 프레임워크, 라이브러리 등을 만났을 때 자주 질문하는 것이 있습니다.
- 어떻게 사용하는지 알 수 있게 된다.
- 실무에서 프레임워크, 라이브러리를 사용하는 경우 대부분의 구성 방식, 구현은 공식 문서의 것을 잘 벗어나지 않습니다. (자체 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
- 예시 3 : Web system architecture 101
- 큰 그림 (청사진)을 보면서 학습하면 전체적인 흐름이 어떤 것인지, 어떤 요소가 추가될 수 있는지 이해하면서 학습할 수 있습니다. (학습한 개념과 엮어진 구성 요소들에 대한 전체적인 이해도가 늘어난다고 생각합니다.)
내가 학습했던 것을 되새기기
- 학습한 키워드를 개인 Github, Notion, Blog 등에 정리하고 요약하기
- 요약한 내용을 읽어보고, 들어보고, 매끄럽게 바꾸기 (기술 면접 대비용)
- 일정 주기로 전에 정리한 내용을 다시 보기
학습 의지를 잃지 않았던 방법
매일 학습 시간을 정하기
- 집중력을 잃지 않고 학습을 지속할 수 있는 시간을 알아내기
- 그날의 총시간을 말하는 것이 아니라 한번 시작했을 때 유지 시간을 말하는 것
- 뽀모도로 테크닉과 같은 도구를 활용해 학습 시간을 설정하는 것도 방법
- Study buddy GONGPASSU공팟수
- 휴식 시간을 설정하기 (번아웃 방지, 학습 의지 유지를 위함)
- 매일 1~2 시간 취미 생활, 친구들과 시간 보내기
- 매주 하루 정도는 공부하지 않기
- 개발 생태계에서 공부를 끝낸다 라는 전제는 존재하지 않기 때문에 지속적인 학습이라는 것에 더 중점을 두어야 합니다.
매주 학습 목표 정하기
- 내가 학습해야 할 주제를 기준으로 주간 목표를 설정하기
- 최소한의 목표를 선정하고 진행하면서 분량과 목표의 수를 조절하기
매번 현실을 마주하기
- 오픈 채팅, 디스코드, 클럽하우스 등에 존재하는 개발자 커뮤니티에 참여하기
- 다른 사람들이 어떻게 성장하고 있는지, 얼마나 잘 알고 있는지 지켜보며 자극받기 위해 필요하다고 생각합니다.
- 주의 : 가스 라이팅을 일삼거나 라때 좋아하시는 분들이 있는 곳은 거르시길 바라며, 괜히 아는 체만 하는 곳도 시간 낭비일 뿐입니다. (그 학력에 연봉 많이 못받아요~, 꿈이 크시네요, 그걸 몰라요? 등등)
- 질문은 판단하기 위한 상황을 요약하고 정확히 전달해야 한다. (같은 컨택스트를 공유해야 상대방도 올바른 접근과 적은 리소스로 답변이 가능합니다.)
- 방에 들어가자마자 "무엇이 궁금한데 알려주세요~, ~ 아시는 분?" 이런 식으로 질문을 하는 것이 좋은 모습은 아닙니다. 사람들이 활동하는 커뮤니티이기 때문에 잘 교류해주세요.
- 현실, 트렌드를 확인할 수 있는 영상, 자료들을 찾아보며 마인드셋 갖추기
- https://docs.google.com/document/u/1/d/1_phA5XUszSmN7Ta-QHs4DxRz9_iu8YlhxpVjSGEbWcg/mobilebasic#heading=h.c7nic9ez4gip
- https://www.youtube.com/watch?v=0Il35gQMyZA&ab_channel=%ED%8F%AC%ED%94%84TV
- https://www.youtube.com/watch?v=AJ8rhNnoPSE&ab_channel=TeccboiWonie
- https://www.youtube.com/watch?v=Ln9wDM6xI70&list=PLqaSEyuwXkSoxouWmQKMHXYDozPiyjNXO&index=58&ab_channel=%EB%B0%95%EC%9E%AC%EC%84%B1
- https://okky.kr/article/425700
- https://www.youtube.com/watch?v=V9AGvwPmnZU&ab_channel=eo
- https://junilhwang.github.io/TIL/Review/2020-year/end/
- https://jbee.io/essay/growth-mistaken-2020/
- 멘토를 구해보기 (
에브리타임,커뮤니티, 유료 멘토링 플랫폼)- 취업 준비생이나 주니어 시점에서 알기 어려운 영역에 대해 도움받을 수 있고 상세한 디테일을 챙길 수 있습니다.
- 무엇이 부족한지 피드백받을 수 있고 어떻게 충족해야 하는지 고민할 수 있게됩니다.
끝!
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 게으른 개발자 컨퍼런스
- Cache Design
- Url
- Switch
- Global Cache
- JVM
- Distributed Cache
- HTTP
- rabbitmq
- URN
- 소비자 관점의 api 설계 패턴과 사례 훑어보기
- java
- lambda
- mybatis
- spring AOP
- hypermedia
- URI
- JDK Dynamic Proxy
- JPA
- RESTful
- configuration
- spring
- Local Cache
- cglib
- AMQP
- Data Locality
- RPC
- THP
- 게으른개발자컨퍼런스
- 근황
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함