규칙
- 실습 Repo : https://github.com/OsoriAndOmori/developer-guide-spring
- 실습생은 자기 새로운 repo 를 파고 시작
- Java 건 kotlin 이건 알아서
- 팀원들에게 주기적으로 배운 내용 공유 & 피드백 받기
- 하면서 가이드 외 학습 추가 (security, webflux, kotlin 등등)
- 네트워크
- HTTP
- HTTPS
- HTTP 1.1
- 주요 Header 들
- 고급) HTTP 2.0, HTTP 3.0
- TCP/IP
- 고급) UDP 란?
- HTTP
- Spring Framework
- Servlet
- apache-tomcat 다운 받기
jakarta.servlet-api
dependency 하나만 추가후, tomcat 에 띄워서 hello 응답받아보기
- spring-framework-mvc, war 로 빌드 후 띄워보기
- embeded-tomcat dependency 추가후, 직접 수동으로 Spring Container 만들어서 Embeded tomcat + dispatcher Servlet 붙여보기
- spring bean 에 관한 기본적인 내용들
- 싱글톤
- Spring container : 구글링 해서 할 수 있는 곳 까지 직접 구현해보자 : 샘플
- Servlet
- Spring-Boot
- boot 로 전환해보기
- spring 에서 autoconfigure 을 어떻게 해주는지 파악해보기 (사용법 말고, 어떻게 auto configuration 들을 코드상에서 찾아서 넣는지)
- importSelector
- 유용한 기능 autoconfigure 해주는 starter 하나 직접 만들기
- gitlab repo 에 jar 업로드하고, repo 로 추가하여 다른 프로젝트에서 다운 받아보기
- Docker
- 원하는거 daemon 위에 띄워주는거라고 생각하고 mysql 띄우고, database IDE 를 이용해서 접근
- 자기 repo 내 docker-compose.yml 로 띄워보기
- 어플리케이션 만든거 docker image 로 만들어서 개인 docker hub push 해보자.
- DB
- 데이터 설계 : 한 테이블에 다 때려넣기 vs 교과서대로 테이블 분리
- 장단점 생각해보기 (정규화와 역정규화)
- isolation 개념, propagation 개념
- Spring AOP 와 트랜잭션
- spring 없을때 트랜잭션 코드 살펴보기
- 테이블, 컬렉션 index 는 어떻게 설정해야 할까
- 데이터 설계 : 한 테이블에 다 때려넣기 vs 교과서대로 테이블 분리
- 캐시와 타임아웃
- 글로벌 캐시와 로컬 캐시
- 스프링 로컬캐시 caffeine, ehcache
- 글로벌 캐시 redis, nginx, varnish 등
- 각 네트워크 단계마다 다양한 타임아웃 설정들
- db
- api
- webserver
- 클라이언트에서 서버까지 뒤로 갈 수록 타임아웃은 어떻게 해야할까
- 글로벌 캐시와 로컬 캐시
- Web / Proxy
- 프록시, 리버스 프록시 개념.
- 웹서버 (nginx 등) vs 웹어플리케이션 서버
- 웹 어플리케이션과 웹서버 같이 썼을 때 해주면 좋은 것들, 로컬에서 한번 붙여보세요
- 우리팀은 보통 어떻게 쓰는가
- Code Deploy
- 여러대에 배포를 하려면 어떤 전략이 있을까
- rolling, blue/green, canary
- LoadBalancer, Health check
- 실제 VM/PM 과 k8s 배포 전략은 어떻게?
- 여러대에 배포를 하려면 어떤 전략이 있을까
- Spring Batch
- chunk oriented 개념
- 간단한 스프링 배치 구조와 사용법
- 고급) 싱글쓰레드 배치, 멀티쓰레드 배치, 코드 까보기
- 로깅
- spring application 로그 설정
- docker compose 를 활용해 elasticsearch 에 로그 넣기
- Elastic Stack 써서 넣기
- slack 알람까지 연동
- 모니터링
- 실습 repo 이용하여 grafana, micrometer, prometheus 연동하고 각각 뭔지 파악하기
- dashboard import 해보기
- 일부러 dbcp 소진하고 모니터링 해보기
- jvm heap 메모리 전부 소비하고 모니터링 해보기
- 우리서비스에서 어떻게 적용되어있는지 확인
- 실습 repo 이용하여 grafana, micrometer, prometheus 연동하고 각각 뭔지 파악하기
- 테스트
- TDD 란?
- TDD 까지 해야하는가?
- Mocking
- 자기 repo에 테스트 Coverage 기능 추가해보기
- TDD 란?
- 성능 테스트
- 많이 쓰이는 성능테스트 툴
- 나온 데이터 분석은 어떻게 할까
- 코딩 스킬 & 습관
- 팀 내 마음에 안드는 코드 같은게 있으면 리팩토링 해보자
- 리팩토링할 메서드 전에 테스트코드 감싸기
- 코드를 아름답게 짜는 방법은?
- (필수) 읽기 좋은 코드가 좋은 코드다
- (선택) 리팩토링
- 고급) 함수형 프로그래밍이란? 저도 아직 잘 모르겠음.
- 디자인 패턴 : https://refactoring.guru/ko
- 팩토리
- 프록시
- 커맨드
- 팀 내 마음에 안드는 코드 같은게 있으면 리팩토링 해보자
- 코딩 스타일과 팀 생활
- 동료와 개발 의견이 다를땐 어떻게 해야하나.. 저도 아직 잘 모르겠음.
- 코딩 스타일의 차이가 있을 때
- 설계 차이가 있을 때
- 모르는건 동료 개발자에게 바로 물어봐야할까?
- 계몽 vs 전염 뭐가 더 좋은지 의미 생각해보기
- 성장한다는건 뭘 하는걸까
- 새로운것을 배움? 과거의 잔재를 버림?
- 개발자의 역할은 뭘까
- 요구되는 비즈니스 구현이 먼저냐 vs 기술부채 해결하여 안정적이고 우아한 시스템 구현이 먼저냐
- 동료와 개발 의견이 다를땐 어떻게 해야하나.. 저도 아직 잘 모르겠음.