스프링캠프 2019 참석 후기
실전에 써먹는 스프링부트
- 개발자의 삶은.. B(Build), C(Code), D(Deploy)
- Build: Springboot Gradle Plugin, 의존성관리(BOM)
- Code: 스프링(애노테이션) 프로그래밍 모델, @Profile, AutoConfiguration, Application.yml
- Deploy: 전통적 배포방식, 자기완비적 실행가능한 배포방식
- spring-boot-admin
Monitoring With Actuator
- 모니터링을 하는이유? 장애예방, 성능개성 등.. 을 하려면 지표가 필요하다.
- 모니터링을 어떻게 할것인가? Spring Boot Actuator
- 애플리케이션 제어도구 제공 : endpoint
- Metric Endpoint > http.server.requests : RED(Rate, Errors, Duration) Method 부합 정보제공
- Micrometer : metric collector 추상화된 인터페이스
자바에서 null을 안전하게 사용하는 방법
- null의 탄생은 실수이고, 현재 구글플레이 통계상 자바진형에서 많은 결함은 NPE관련이다.
- API(매개변수, 반환값)에 null을 최대한 쓰지말자.
- 사전조건과 사후조건을 확인하라: design by contract(계약에 의한 설계: OCP)
- (상태와 같이) null의 범위를 지역(클래스, 메서드)에 제한하라.
- 초기화를 명확히 하라.
- JSR 305, JSR 308
- Checker Framework
무엇을 어떻게 테스트 할 것인가?
- 테스트로 얻을 수 있는것? 안정감과 자신감
- 대상은? 현재와 미래의 나, 현재와 미래의 동료
- 구현 테스트가 아니라 설계 테스트를 해야한다.
- 테스트하기 쉬운 코드로 개발하기
- Non-Testable(제어할 수 없는 영역)을 BoundaryLayer까지 빼내어 테스트한다.
- @SpringBootTest: SpringContext는 꼭 필요할때만 사용하자. 피드백이 느린단점이 있다.
- Test Double을 남용하지 말자. 무분별하게 사용하면 구현테스트가 될 수 있기 때문에..
레거시 프로젝트 개선 이야기
- 레거시코드? 테스트코드로 커버되지 않으며 유지보수가 되지 않는 코드.
- 레거시코드? 오랜시간 자신의 역할을 실행한 안정적인코드, 조직의 축적된 기술이 녹이 있는 코드.
- 핵심은.. 코드를 개선하고 내 것으로 만들어야 한다.
- 비난은 그만하고 로직파악을, 로직파악은 TC를 보면 좋은데 없을경우 만들어야한다.
- 운영중이기 때문에 당장 해결해야할 우선순위를 정한다.
- Common Lib에서 실제로 쓰는것만 빼서 추가하고, 왠만하면 스프링에서 제공하는걸로 교체.
- 배포는 카나리 릴리즈
- 전에는 잘됐는데 지금은 안되요.. 라는 말도 들을 수 있다.
- CPU 사용량이 많은곳 메모리 절약 등도 고려
- 비용이 드는 외부 API 교체
Review
- 오전 세션(1,2)을 듣고 많은 분들이 Actuator가 Production Level에서 성능문제를 일으키지 않을지에 대해 궁금했던거 같은데, 이에 대해 만족할만한 답변을 들은 것 같진 않다. 그래도 일단 써봐야겠다는 생각은 들었다.
- 세션 3은 null 사용에 대해 한번 더 생각하게 된 것 같다. null문제에 대해 당장은 해결이 되지 않을 것 같으니, 잘 이해하고 사용해야 할 것 같다.
- 세션 4에서는 테스트코드를 왜 짜는지, 어떻게 짜야할지에 대해서도 한번 더 생각해보게 되었다. 개인적으로 스프링 컨텍스트 로딩과 Test Double을 너무 남용하고 있었지 않았나 싶다.
- 세션 5는 많은 깨우침과 반성의 시간이었다. 레거시코드에 대한 마음가짐이 바뀌어야하고, 레거시코드를 내 코드로 만들어야하는 노력이 필요할 것 같다.
- 세션 6,7은 코틀린 관련 세션을 들었는데, 아직까진 practical한 단계는 아닌것 같다는 생각이 들었다.