강의 전반적으로 모르는 용어, 기술들을 많이 접하게 되었다. 후기를 쓰고 싶었는데 그 날의 강의만 듣고 확실히 이해하지 못한 것들이 많아 후기를 블로그에 남기기가 곤란하다. 그래서 인상깊은 몇 가지만 기록으로 남겨본다.
프랑스(유럽 서머타임 적용 국가)는 3월 마지막주 일요일 오전 2시에 UTC 타임오프셋을 +1 시간 해서 3시가 된다. 그래서 시간대 별 데이터를 모니터링하고 있다면 2~3시 사이 데이터가 존재하지 않게 된다. 그리고 10월 마지막주 일요일 오전 3시에는 UTC 타임오프셋을 -1 시간 해서 2시가 된다. 따라서 그 날은 데이터 상으로 오전 2시가 두번 존재하게 된다. 역시 시간대 별 데이터를 모니터링하고 있다면 그 날은 25개의 시간 영역을 가지게 된다.
※ java.time 패키지(LocalDateTime 등)의 모든 클래스는 Immutable 객체임으로 Thread-safe하다.
일명 Strangler 패턴이라는 컨셉을 가지고 레거시 시스템을 개선한 과정을 설명해 주셨다. 한글로 교살자 패턴. 사전을 찾아보니 목 졸라 죽인다는 뜻을 가지고 있다. 자연계에도 교살자 패턴을 실행하는 Fig 나무라는 것이 있는데 그래서 신규 시스템 이름을 Fig 애플리케이션이라고 한다고 했다. 간단히 말해 레거시에 침투해서 레거시와 함께 살면서 서서히 레거시를 대체해 나간다는 컨셉이었다.
이 교살자 패턴의 목적이 멋졌다. 사용자의 요구사항을 만족하면서 개발자의 높은 품질의 코드 유지라는 요구사항을 동시에 만족하는 것이라고 했다. 그리고 리스크를 줄이기 위해 이런 방법을 사용한다고도 덧붙였다.레거시를 목졸라 죽이는(?) 방법은 다 이해하지 못해서 동영상이 올라오면 다시 보고 싶다. 큰 흐름은 읽기를 먼저 함께 수행하고 쓰기는 가장 나중에 대체한다는 컨셉이었다. 그리고 레거시가 몰래 Fig API를 계속 호출해 준다. 동영상을 다시 보고 싶다.
그리고 인터페이스와 이벤트를 구분해서 설명해 주신 부분도 좋았다. 이것도 동영상을 다시 보고 싶다. 기억에 남는 한 구절은 이벤트 발행자는 이벤트 구독자가 무엇을 하는지 전혀 관심을 가지지도 않고 알지도 못한다는 사실. 그냥 구독자들에게 던진다.
마지막으로 설계를 변경해 나가는 과정이 어떻게 보면 흔히 좋은 설계라고 하는 기본적인 디자인 지침들을 따르는 과정 같았는데 국내 최대 IT 기업에서도 처음부터 좋은 코드를 만드는 건 아니구나란 생각이 들었다. 그래도 보통 기업들과 다른 점은 결국 개선하는구나 란 생각도 함께 들었다.
※ 몇 가지 인상 적인 구절들
테스트 할 수 없는 영역이 전체 기능으로 전이되는 것을 막기 위해서 모킹을 활용할 수 있다는 모킹의 한 가지 목적을 분명히 설명해 주셔서 좋았다. 그리고 강의 끝에 Q&A 시간에 누군가 리팩토링 내성에 대한 좋은 질문을 해주셨다. 개발하면서 관심가지고 계속 수련해 나갈 필요가 있는 테스트의 좋은 특성 중 하나(리팩토링 내성)인 것 같다.
설명을 너무 조근조근 듣기 좋게 잘해 주셔서 발표하는 모습 자체가 인상적이었다. 캐시의 종류에 대해 설명해주셨고 클라이언트에 가까울 수록 성능이 높아진다고 했다. 내가 잘아는 캐시는 CPU L1, L2, L3 캐시인데 같은 개념인 것 같다.
그리고 인 메모리에 로컬 캐시를 관리하는 내용에 대해 중점적으로 설명해 주셨는데 일차적으로 동기화를 위한 Synchronized, Volatile, CAS(Compare And Swap) 전략에 대해 개관해 주셔서 좋았다.
그리고 인 메모리 캐시의 경우 스케일아웃 할 때 서버 투 서버 간 동기화 이슈가 발생하는데 어떻게 하신다는지 다 이해를 못했다. 동영상 올라오면 다시 보고 싶은 부분.
마지막으로 성능 테스트 하는 과정을 설명해 주셨는데 locust라는 좋은 도구를 소개 받게 되어 좋았다. 대용량 트래픽을 다룰 때는 모니터링 도구(APM)의 중요성에 대해서도 강조해 주셨다. 성능 테스트 도구와 모니터링 도구를 꼭 사용해 봐야 겠다.
첫 번째 강의에서와 같이 많은 내용이 쏟아져 키워드만 막 적어왔다. 기억에 남는 부분은 Cloud Native 한 앱을 위해서 기존의 무거운 자바를 더 빠르게 더 경량화시킬 필요가 있음을 설명해 주셨다. 왜냐하면 CPU도 메모리도 쓴만큼 돈을 내니까. 그리고 그에 적합한 AOT 컴파일러. JIT(Just in Time) 컴파일러와는 다른 AOT(Ahead of Time) 컴파일러의 개념을 처음 알게 되었다. 한 마디로 컴파일 할 때 네이티브 코드로 변환하는 것이다. 이름 처럼 런타임이 가져가던 많은 실행 시간을 컴파일 타임으로 옮긴다는 개념이다. 이름을 너무 잘 지었네.
스프링 컨퍼런스에 의외의 후원사가 등장했다. 현대자동차였고 스프링 백엔드 개발자를 채용하고 있다고 했다. 채용 상담을 받고 선물을 받았는데 완전 내가 좋아하는 것들. 작은 포니 자동차 모델과 내가 좋아하는 모나미 볼펜을 받아왔다. 감사.