어떤 방향으로 공부해야할지 모르는 백엔드 취준생들을 위해 도움을 주고자 백엔드 로드맵을 작성하게 되었습니다. 제가 개발자로 커리어를 쌓고 공부하면서 얻은 경험과 생각을 바탕으로 로드맵을 작성했기 때문에 성향에 따라 안맞거나 이게 정답이 아닐 수 있기 때문에 해당 로드맵을 선택해서 공부하는 것은 본인 선택에 따라야합니다.
일단 여러개의 Step을 통해 나열할 건데 Step은 순서를 의미하고 최대한 순서에 따라 하는것을 권장합니다. 하지만 내가 해당 내용에 대해 알고있거나 하면 건너뛰어도 됩니다.
프로그래밍 언어에 대해 잘 알지못하거나 아예 못하는 분들을 위한 단계입니다. 해당 단계에서는 프로그래밍을 어떻게 할 수 있는지 이해하는게 가장 중요하기 때문에 기본적인 문법들에 대해 이해하고 타이핑이 익숙해질 수 있도록 책이나 강의만 보기보단 직접 코드를 작성하는 것에 익숙해진 다음 해당 단계를 넘어가시는것을 추천합니다.
- Python(권장)
- 프로그래밍이 처음이시라면 개인적으로 비교적 쉬운 Python으로 시작하는 것을 권장합니다.
- Java(권장)
- Python을 하고 공부해보면 더 좋습니다.
- Kotlin(힙함)
- 내가 좀 더 힙해지고 싶다면 공부하는 것을 추천합니다.
이전 단계를 잘 완수 하셨다면 이제 나도 어느정도 코딩을 할 수 있다 할 수 있는데요 이제는 코딩을 좀 더 잘하기 위한 방법들을 학습해야합니다.
해당 단계에서 추천하는건 자료구조, 알고리즘인데 먼저 자료구조에 대해 학습하고 알고리즘을 공부하는 것이 좋습니다. 여기서는 다양한 자료구조에 대해 학습하고 직접 구현해보면서 어떻게 자료구조를 만들 수 있는지 이해하고 기본적인 알고리즘을 풀어보면서 구현능력을 높이기 위한 단계입니다.
- 기본적인 자료구조
- List
- Array
- HashTable
- LinkedList
- Queue, Stack
- Tree
- Heap
- 알고리즘 기초
파이썬 자료구조(Array, LinkedList, Stack, Queue, HashTable, Tree, Heap)
- 막히는 곳 까지 최대한 풀어보기
- 막히는 곳 까지 최대한 풀어보기
이제는 어느정도 기초를 쌓았기 때문에 알고리즘을 더 집중적으로 풀어보면서 문제해결능력을 키우고 내가 작성한 코드의 성능을 높이기 위해 시간복잡도와 공간복잡도 그리고 다양한 알고리즘에 대해 학습합니다.
알고리즘에 대해 익숙해지기 위해 한 알고리즘을 공부하고 해당 알고리즘과 관련된 문제를 여러번 풀어서 하는 것을 권장합니다. 처음에는 익숙하지 않아 많이 어렵고 힘들겁니다. 하지만 익숙하지 않기 때문에 어려운 것이고 꾸준히하면 금방 극복할 수 있을거에요.
최대한 직접 생각해서 내가 알고있는 알고리즘으로 풀 수 있는지 고민해보고 아무리해도 모르겠다고 하면 답이 적힌 코드를 보기보단 답에 대한 아이디어만 이해하고 가져와서 직접 구현해보는 것을 추천합니다.
- (시간/공간)복잡도
- 알고리즘
이제 자료구조랑 알고리즘을 하면서 문제해결능력이나 구현능력에 대해 많이 키웠을거라고 생각합니다. 이제는 코드를 남들이 잘 읽을 수 있고 유지보수를 위한 코드로 발전시키기 위해 객체지향에 대해 이해하고 코드에 적용할 수 있도록 학습하고 테스트코드를 작성하면서 남들이 잘 이해할 수 있는 코드 또는 유지보수에 용이한 코드를 작성할 수 있게 합니다.
개인적으로 직접 코드를 설계하면서 많이 해보면서 다른 사람은 어떻게 작성 했는지도 확인합니다.
- 객체지향
- 코드 설계 및 구현
- 테스트 코드 작성
- 객체지향의 사실과 오해(선택)
- 오브젝트(권장)
- 스프링 입문을 위한 자바 객체 지향의 원리와 이해(권장)
- 자바와 JUnit을 활용한 실용주의 단위 테스트(선택)
- git 형상관리(권장)
- 우테코 프리코스(먼저 일단 혼자 작성해보고 Pull Request에 올라온 다른사람 코드도 한번 봐보기) - 권장
Step 4를 진행하면서 어느정도 객체지향에 대한 이해가 생기셨을것이라 생각이 듭니다. 이제 코딩적인 부분은 손을 잠시 놓고 앞으로 중요하게될 CS에 초점을 맞추려고합니다. 가장 중요한건 네트워크와 OS인데 컴퓨터 구조같은 경우는 초반에 너무 깊게하지 않고 윤곽만 잡으면 좋습니다. 제가 추천하는 순서는 컴구 개요 → OS → Network 이순서입니다.
- 컴퓨터 구조에 대한 개요
- OS 기본적인 지식
- Network OSI 7계층에 대한 개요
- TCP/IP
- HTTP
- 기초 리눅스
- 혼공 컴구 운체
- 컴퓨터 밑바닥의 비밀
- OSTEP(운영체제)
- KOCW 운영체제 강의
- 쉬운 코드 운영체제
- 널널한 개발자 네트워크 강의
- 널널한 개발자 네트워크 응용 강의
- KOCW 네트워크 강의
- TCP/IP
- Hussein 네트워크 강의
- 쉬운코드 네트워크 강의
- 성공과 실패를 결정하는 1%의 네트워크 원리
- 컴퓨터 네트워킹 하향식 접근
- HTTP 완벽 가이드
- 리눅스 입문자를 위한 명령어 사전
- 디버깅을 통해 배우는 리눅스 커널의 구조와 원리
Step 5를 잘 마무리 하셨다면 CS에 대해서도 어느정도는 알 수 있다고 할 수 있습니다. 이를 바탕으로 이제는 Spring Framework에 익숙해지기 위한 학습을 하도록 하겠습니다.
- Spring Framework
- DB 기술 없이 간단한 게시판 만들어보기 (tymeleaf + html + bootstrap 이용해서)
- 회원가입 (비밀번호 단방향 암호화 적용해보기)
- 아이디 비밀번호 방식
- 로그인 (Spring Security 사용 x)
- 세션 방식으로 구현
- 게시글 작성
- 게시글 검색
- 게시글 목록 조회
- 게시글 상세 조회
- 회원가입 (비밀번호 단방향 암호화 적용해보기)
Step 6를 진행하면서 Spring Framework에 많이 익숙해졌을텐데 메모리에만 데이터를 저장하게 되면 서버가 다운되면 모든 데이터를 잃게됩니다. 그래서 데이터를 디스크에 저장하기 위한 기술로 데이터베이스가 존재하는데 데이터베이스에 대해 공부하고 데이터를 효율적으로 디스크에 저장하고 읽을 수 있도록 학습합니다.
기존에 메모리로 만들었던 게시판을 DB 기술을 이용한 방식으로 마이그레이션합니다. 추상화를 잘 하셨다면 크게 어려움 없이 저장소를 바꿀 수 있을거에요.
- RDBMS
- ERD 설계
- JPA Hibernate(선택)
- QueryDSL(추천)
- FLYWAY (선택)
- 메모리로 만들었던 게시판 마이그레이션
- Spring Data JDBC를 이용해서 개발 (권장) - 본인이 원하는 것으로 선택
- JPA를 쓰고싶다면 Spring Data JPA 활용
- MyBatis를 쓴다면 MyBatis 활용
- DB는 MySQL을 사용해서 개발합니다.
- 게시글 목록 조회 페이지네이션 추가
- Cusorbased pagination vs Offset pagination
- 게시글 검색 기능 성능 향상을 위한 리팩토링
- MySQL 전문검색 Index 활용해보도록
- 좋아요 조회수 기능 추가
- 댓글 기능 추가
- 대댓글 기능 추가(추천)
- ERD 설계
- Spring Data JDBC를 이용해서 개발 (권장) - 본인이 원하는 것으로 선택
- 쉬운코드 데이터베이스
- 러닝 SQL
- 생활코딩 관계형 데이터 모델링 강의
- ERD CLOUD
- REAL MYSQL
- 데이터베이스 유튜브 강의
- Hussein 데이터베이스 강의
- FLYWAY (선택)
- 스키마 형상 관리
- JPA (선택)
- 책
- Spring Data JPA(JPA에 대해 제대로 이해하고 진행 일단 Spring Data JPA를 쓰지않고 하는 방식으로 먼저 진행)
- Spring Data JDBC 공식문서
- Spring Data JDBC 관련 글
Step 7 에서 프로젝트를 이제 완성 했으니 배포를 해야하는데 배포하는 과정도 애플리케이션 개발자가 알아야하는 영역이라고 생각합니다. 개인적으로는 많이 사용하는 Github Action과 AWS 기반으로 해서 배포를 하는 방식에 대해 공부합니다.
- CI/CD
- 쉘 스크립트
- GIthub Action
- Load Balancer
- AWS
- S3
- EC2
- RDS
- VPC
- IAM
- ALB
- ECS(선택)
- Container 학습
아마 Step을 잘 따라왔다면 이제 어떤것을 더 해야할지 본인들이 잘 아는 상태가 되었을텐데 추가적으로 제 개인적으로 하면 좋을 것 같은 것을 추천하려고 합니다.
- Go, Kotlin 프로그래밍언어
- 분산시스템
- NoSQL
- MongoDB
- Redis
- Apache Cassandra
- scylladb
- 시스템 설계
- 소프트웨어 아키텍처
- 소프트웨어 개발 방법론
- DDD
- Agile
- 디자인패턴
- JVM
- 통신 프로토콜
- GRPC
- GraphQL
- WebSocket
- WebRTC
- 인프라
- 클라우드
- Container
- 로그 중앙화
- Container orchestration
- 데이터 중심 어플리케이션 설계
- Design pattern
- Nosql - 마틴 파울러
- 클린아키텍처 - 로버트 마틴
- 만들면서 배우는 클린아키첵처 책
- MongoDB 완벽가이드
- 소프트웨어 아키텍처 및 대규모 시스템 설계 강의
- 소프트웨어 아키텍처 및 시스템 설계 실제 사례 연구 강의
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2
- 44bits
- 제로 트러스트 네트워크 책
- IBM Technology 유튜브
- MIT Distribute System 유튜브
- ByteByteGo 유튜브
- Tucker Programming 유튜브 ← GO 언어
- 최범균 유튜브
- Spanning Tree 유튜브
- Networking Class 유튜브
- Hussein Nasser 유튜브