내 맘대로 팀 입사 교육과정 공통편을 먼저 보고, Spring 으로 이어지는 부분만 따로 적었다.
규칙
- 실습 Repo : https://github.com/OsoriAndOmori/developer-guide-spring
- 실습생은 자기 새로운 repo 를 파고 시작
- Java 건 kotlin 이건 알아서
- 팀원들에게 주기적으로 배운 내용 공유 & 피드백 받기
- 하면서 가이드 외 학습 추가 (security, webflux, kotlin 등등)
- Spring Framework
- Servlet
- apache-tomcat 다운 받기
jakarta.servlet-apidependency 하나만 추가후, tomcat 에 띄워서 hello 응답받아보기
- spring-framework-mvc, war 로 빌드 후 띄워보기
- embeded-tomcat dependency 추가후, 직접 수동으로 Spring Container 만들어서 Embeded tomcat + dispatcher Servlet 붙여보기
- Servlet
- Spring-Boot
- boot 로 전환해보기
- spring 에서 autoconfigure 을 어떻게 해주는지 파악해보기 (사용법 말고, 어떻게 auto configuration 들을 코드상에서 찾아서 넣는지)
- importSelector
- 유용한 기능 autoconfigure 해주는 starter 하나 직접 만들기
- gitlab repo 에 jar 업로드하고, repo 로 추가하여 다른 프로젝트에서 다운 받아보기
- Spring 학습 이후 다시 생각해보기
- spring bean 에 관한 기본적인 내용들
- 싱글톤
- Spring container : 구글링 해서 할 수 있는 곳 까지 직접 구현해보자 : 샘플
- 객체지향과 Spring
- 스프링은 왜 만들어졌을까
- 객체지향 : 역할 책임 협력
- 역할 책임 협력을 하게되면 의존성을 서로 가지게 된다.
- 인터페이스는 귀찮기만하고 뭐하는걸까 대체
- SOLID
- 의존성 주입(DI)과 의존성 역전(DI)에 관한 심도있는…
- 객체지향의 대표적인 안티패턴
- 순환참조
- 레이어드 아키텍쳐와 스프링
- 양방향 레이어드 아키텍쳐
- 스마트UI 아키텍쳐
- 스프링의 특징
- DI
- IoC
- AOP
- PSA
강의 노트
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
- 지난시간 요약 - SOLID - 의존성 주입, 의존성 역전 - InterfaceTestConfigTest.java - 한 줄 요약 하자면 : 인터페이스를 잘 써서 의존성을 '약화' 시키고, 클래스를 많이 쪼개는 버릇을 들이자 - UserSerive 이딴거 금지. 오늘 만들고왔으면 가서 네이밍 변경하던가, 더 쪼갤것 - 샘플 코드를 먼저 좀 보자 - TeamTest.java - ApplicationWebMvcApplication.java - 순환 참조 좀 있으면 안되냐? -> 안됨 - 예상하지못하는 에러 발생 - 시스템 복잡도를 높임 - 무조건 재설계하자 - 레이어드 아키텍쳐 - controller, service, repository - 구분해놨는데, 다른프레임워크도 보통 이래.. nextjs 보고오자 - 완전 내 의견으로 c,s,r 의 레이어구분 : 완전 비판적으로 받아들이세요. - c 최대 3줄 - application service 비즈니스로직인데, 남은 비즈니스로직을 실행만 딱딱 시켜주는애 , domain service - r 은 persistent layer - 내가 생각하는 webflux 기준 레이어드 아키텍쳐 - smart ui 디자인패턴이 되지말자 - 트랜잭션 스크립트 - 요약 - 레이어드 아키텍쳐를 기억하자 - 설계후 개발하는걸 습관해보자 interface 적극 활용 너무 활용했을때 복잡도 높이면 어떡해? 코드 퀄리티 망하는것도 경험해봐야해. - 스프링 core 자체 부트캠프는 여기까지, 이후 공부 추천하는 방법 : 인프런에서 마구마구 사며 반복 학습, 빠르게 스킵하고 알짜만 계속 주워먹는다.
- spring bean 에 관한 기본적인 내용들
- Spring Batch
- 그냥 배치돌리는 API 를 jenkins 로 호출해버리면 안됨?
- chunk oriented 개념
- 그럼 언제 써야할까
- 간단한 스프링 배치 구조와 사용법
- 고급) 싱글쓰레드 배치, 멀티쓰레드 배치
- synchronized
- 초 대용량 배치는 어떻게 하면 좋을까. 유저 데이터 억건 이런거
- 화면 렌더링 : SSR CSR SEO 풀스택 개발자가 되기위한 첫걸음?
- 서블릿 프로그래밍 떄부터 이전 화면 렌더링 전략들
- 대세 thymleaf 와 react
- SSR, CSR 의 장점과 단점
- 개발자의 부족한 디자인 감성으로 화면 만들때 도와주는 도구들
- 공통편에 얹히는 Spring 항목
- DB
- propagation 실습
- Spring AOP 와 트랜잭션
- spring 없을때 트랜잭션 코드 살펴보기
- ProxyTransactionManagementConfiguration, TransactionInterceptor, TransactionManager
- 커넥션 풀 : HikariCP maximumPoolSize x 인스턴스 수 <= DB max connections
- 캐시와 타임아웃
- 스프링 로컬캐시 caffeine, ehcache
- 로깅
- spring application 로그 설정
- 모니터링
- micrometer 로 prometheus 연동
- 일부러 dbcp 소진하고 모니터링 해보기
- jvm heap 메모리 전부 소비하고 모니터링 해보기
- jvm heap dump 분석
- 테스트
- fixture-monkey 적극 이용하자
- 코딩 스킬
매일 15분 정도 spring 코드 뒤져보기
강의노트
1 2 3
- propagation - REQUIRED - 트랜잭션이 필요해, 생성 + 만나면 기존거에 참여 - REQUIRED_NEW - 새 트랜잭션이기 때문에, 커넥션 고갈야기 할 수도잇음
- DB
더 알아보면 유용할 주제
- Webflux
- Kotlin