단순 코더가 아닌 CS와 전체 구조의 이해를 기반으로 한 백엔드 개발자가 되려면 공부해야 할 것이 많다. 특히나 비전공자 입장에서는 무엇을 어떻게 공부해야 할지 막막하다. 이를 위해 참고할 2가지를 소개하려고 한다.
생활코딩에서 들은 인상깊은 이야기가 있다.
컴퓨터를 만든 인물 중 '폰 노이만'이라는 수학 천재가 있는데, 누군가가 "어떻게 수학을 잘 하세요?"라고 물었다고 한다. 폰 노이만은 이렇게 답했다고 한다. "수학은 이해하는 게 아니라 익숙해지는 거라네."
개발 공부의 최종 목표는 이해가 아닌 익숙해지는 것!
익숙해지기 위한 수많은 방법들 중 하나가 이해인 것이다.
1. 서울대학교 컴퓨터공학과 커리큘럼
(출처 : https://cse.snu.ac.kr/undergraduate/course-dependency-graph)
2. roadmap.sh 오픈소스
(출처 : https://roadmap.sh/backend)
오픈소스의 개발문화처럼 그 로드맵 또한 오픈소스로 정리하고 배포하는 대표적인 프로젝트 'roadmap.sh'가 있다. 웹 개발자가 되기 위해 선택하고 거쳐야 할 기술과 그 순서를 마인드맵 형식으로 보기 편하게 안내하고 있다.
깃허브에서 6번째로 가장 많은 별을 받고 방문하고 있는 프로젝트라고 하니 전세계의 많은 개발자들이 참고하는 로드맵이라고 할 수 있겠다. 각 분야/기술별 개발자 로드맵 또한 제공하고 있어 세부적으로 확인해보면 좋겠다.
*제공 로드맵 : Frontend, Backend, DevOps, React, Angular, JavaScript, Android, Node.js, Python, Go, Java, Design System, DBA, Blockchain, QA, Software Architect, Software Design and Architecture 등
[백엔드 개발자 로드맵]
*표시설명 : ★ 학습권장, ☆ 권장대체, ◎ 추후학습
인터넷 ▶ 프론트엔드 ▶ 운영체제 ▶ 언어 ▶ VCS/호스팅 ▶ 데이터베이스 ▶ API ▶ 캐싱 ▶ 웹 보안 ▶ 테스팅 ▶ CI/CD ▶ 설계와 개발 원칙 ▶ 아키텍쳐 패턴 ▶ 검색 엔진 ▶ 메시지 브로커 ▶ 컨테이너화 vs 가상화 ▶ GraphQL ▶ Graph Databases ▶ 웹 소켓 ▶ 웹 서버 ▶ 확장성을 고려한 빌딩
1. ★ 인터넷 - 개념과 작동원리 <6가지>
- Internet / HTTP / Browser / DNS / DomainName / Hosting
2. ★ 프론트엔드 - 기본지식 <3가지>
- HTML / CSS / JavaScript
3. ★ 운영체제 – 일반지식 <10가지>
- [개념] OS 작동방식 / 쓰레드와 동시성
- [명령어] Terminal 사용법 / 기초 명령어
*grep, awk, sed, lsof, curl, wget, tail, head, less, find, ssh, kill
- [기능] 프로세스 / 메모리 / I/O 관리
- [추가] POSIX* / IPC / 네트워크
*stdin, stdout, stderr, pipes
4. 언어 - 언어마다의 특이점 / 런타임 핵심 세항(동시성, 메모리모델 등) <8개언어 중 선택>
- Java / C# / PHP / JavaScript / Python / Ruby / Rust / Go
5. VCS/호스팅 - 사용법 <★ 2가지 + ☆ 2가지>
- [VCS(Version Control Systems)] Git
- [저장소 호스팅 서비스(Repo hosting services)] GitHub(★) / GitLab(☆) / Bitbucket(☆)
6. 데이터베이스 - SQL / NoSQL / 세항 <대분류 3가지 / 중분류 5, 7, 7가지>
1) 관계형 데이터베이스(SQL)
- ★ PostgreSQL
- ☆ MySQL / MariaDB / MS SQL / Oracle
2) 비관계형 데이터베이스 (NoSQL)
- Document (MongoDB / CouchDB)
- Column DBs (Cassandra)
- Time Series (InfluxDB / TimescaleDB)
- Realtime (Firebase / RethinkDB)
3) 세항
- ★ ORMs / ACID / 트랜잭션 / N+1 문제 / 정규화 / 인덱스
- ◎ 리플리케이션 / 샤딩 전략 / CAP 이론
7. API < 7가지, 추후학습 8가지>
- ★ REST / JSON / gRPC / 인증(Authentication)
- ☆ SOAP / HATEOAS / Open API 스펙과 Swagger
+ [인증(★)] Cookie 기반 / OpenID / SAML
+ [인증(◎)] OAuth / 기본 인증 / Token 인증 / JWT / SAML
8. 캐싱 <대분류 3가지, 중분류 ★ 1가지, ☆ 1가지>
- CDN / 서버 사이드 / 클라이언트 사이드
*서버 사이드 : Redis(★) / Memcached(☆)
9. 웹 보안 <10가지>
- [해싱 알고리즘] MD5(사용 안하는 이유) / SHA(Secure Hash Algorithm) Family / scrypt / bcrypt
- [기타 보안] HTTPS / 콘텐츠 보안정책 / CORS / SSL/TLS / OWASP 보안정책
10. 테스팅 <3가지>
- 통합 / 유닛 / 기능 테스트
11. ★ CI/CD
12. 설계와 개발 원칙 <★ 4가지 + ◎ 3가지>
- ★ SOLID / KISS / YAGNI / DRY
- ◎ GOF 디자인패턴 / DDD / TDD
13. 아키텍쳐 패턴 <★ 4가지 + ◎ 1가지>
- ★ 모놀리식 애플리케이션 / 마이크로서비스 / SOA / 서버리스
- ◎ CQRS와 이벤트 소싱
14. 검색 엔진 <★ 1가지 + ◎ 1가지>
- ★ Elasticsearch
- ◎ Solr
15. ◎ 메시지 브로커 <◎★ 1가지 + ☆ 1가지>
- ◎★ RabbitMQ
☆ Kafka
16. 컨테이너화 vs 가상화 <★ 1가지 + ◎ 1가지>
★ Docker
◎ LXC
17. ◎ GraphQL <◎★ 1가지 + ☆ 1가지>
- ◎★ Apollo
- ☆ Relay Modern
18. ◎ Graph Databases <1가지>
- ◎ Neo4j
19. 웹 소켓
20. 웹 서버 <◎★ 1가지 + ☆ 3가지>
- ◎★ Nginx
- ☆ Apache / Caddy / MS IIS
21. ★ 확장성을 고려한 빌딩 (제품의 지속가능성 목적) <★ 4가지 + 1가지>
1) ★ [마이그레이션 전략] 단계적 기능 축소 / Throttling / Backpressure / Circuit Breaker
2) ★ Migration 전략
3) ★ 수직적 확장 vs 수평적 확장
4) ★ 관찰 가능성을 고려한 확장
5) [차이점 이해하기] Instrumentation vs Monitoring vs Telemetry
'프로그래머가 되는 길' 카테고리의 다른 글
[블로그 운영계획] (작성 방식 변경) 초안 게시 후 주말 수정/복습 (0) | 2022.11.16 |
---|