Home 내 맘대로 팀 입사 교육과정
Post
Cancel

내 맘대로 팀 입사 교육과정

규칙

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

Spring boot 핵심 원리

스프링 부트와 AWS로 혼자 구현하는 웹 서비스