Spring Camp 2019 후기
2017년을 시작으로 2018년, 2019년, ... 세번째로 참석하게 되는 Spring Camp 후기 이다.
첫 Spring Camp를 참석했을 때가 생각나는데, KSUG 10주년 기념을 이틀간 행사를 진행되었던 것으로 기억한다. 그 때가 내 인생에 있어 첫 개발 행사이고 그 만큼 기억에 많이 남는 행사였다.
일꾼단으로 참석하다.
올해는 다른 때와는 다르게 일꾼단으로써 Spring Camp를 참석하게 되었다. 작년 쿠팡에서 할 때도 지원했었으나, 떨어지고 (일꾼단 지원도 빡시네..) 올해도 지원하여 결국에는 일꾼단에 선정되었다. 그렇게 올해의 Spring Camp가 어떻게 만들어지고 모습을 갖춰지는지 지켜볼 수 있었다.
다만 아쉬운 점이 있다면, 업무로 인해서 회의나 리뷰에 거의 참여하지 못했다...
세션 시작
의자 나르고 배치하고... 기념품 나눠드리고...
다행인지(?) 운이 좋은 탓인지(?) 세션장 보조 역할을 맡게되어 Track 2
대부분의 세션을 들을 수 있었다. 물론 일반 참석자로 오신 개발자분들처럼 열심히 들을 순 없었지만, 한편으로는 작년보다 표 구매가 더 어려웠던 것 같은데 일꾼단이 아니였으면 과연 참석할 수 있었을까? 라는 생각이 들면서 들을 수 있는 상황에 감사했다. (주변 개발자분들은 티켓팅에 전부 실패하심...)
김태완님의 "GraalVM과 스프링, 이상과 현실"을 시작으로 세션이 시작되었다.
김태완님의 "GraalVM과 스프링, 이상과 현실"
GraalVM이라는 또 다른 형태의 JVM이 소개되었고 굉장히 새로웠다. 물론 아직 정식 릴리즈가 아니지만 곧 릴리즈 예정이라고 한다. 장점은 하나하나 자세히 설명할 순 없지만 간단히 나열하자면 High Performance, Polyglot, Native Code, AOT Compiler, Java로 만들어진 JVM 등... 아쉬운 점이 있다면 Reflection 미지원이다 보니 아직은 스프링에서 사용할 수 없다. 하지만 스프링쪽에서 관심을 가졌는지 5.1부터 GraalVM을 지원하기 위한 feature가 진행 중인 것으로 알고 있다. 그리고 실제로 Twitter에서는 JVM을 바꾼 것만으로도 20%이상의 성능 개선이 되었다는 내용도 있다고 한다.
부종민님의 "spring websocket"
Spring 4.x로 넘어오면서 지원하기 시작한 WebSocket에 대한 내용이다. 보통 WebSocket은 node진영에서 socket.io가 주로 언급되는데, Spring Camp에서 이 주제를 듣게되니 반갑기도 했다. 커넥션 횟수를 줄여 네트워크 비용을 줄일 수 있는 장점이 있는데 이 세션을 듣기 전까지 커넥션을 계속 유지하므로 비용이 클 수도 있지 않을까?라는 궁금증에 대한 해답도 얻을 수 있었다.
박성철님의 "자바에서 null을 안전히 다루는 방법"
역시 영향력 있으신 분이다. 다른 세션보다 짧은 세션 시간임에도 많은 분들이 참석해주셨고 개인적으로 내용도 너무 좋았다. 특히, 언급하셨던 checker framework는 시간내서라도 찾아봐야겠다. 슬라이드도 다시 봐야지...
[일꾼단 슬랙 상황]
1 Track에 계신분이 43명이시면 나머지분들은 어디로...?
권용근님의 "무엇을 테스트할 것인가? 어떻게 테스트할 것인가?"
가장 인상 깊었던 말 이 있다. "테스트할 수 없는 것으로 인해 테스트할 수 있는 것을 오염시키지말자" (맞나..?)
내용도 정말 좋았다. Test Double, 상호종속적이지 않은 테스트, Embedded System 사용, ... 하지만 나는 테스트를 잘 작성하지 않는다. 세션 내내 반성의 시간 그 자체인 듯하다. 반성하고 또 반성..
오늘부터 Test! 라면서 또 안하겠지..? 마치 오늘부터 다이어트! 라는 느낌이랄까...
이경일님의 "당신도 할 수 있는 레거시 프로젝트 개선 이야기"
Track 2
중에서 가장 재밌던(?) 세션이 아니였나 싶다. 그 만큼 공감되고 현실적인 내용이 포인트였다.
Spring 3.x에서 Spring Boot로, 성능 튜닝, 코드 개선 등 흥미진진한 얘기가 많았다. 당장 대다수의 개발자들이 레거시에 마주하며 몸부림치는 상황이기 때문에 더더욱 그랬을지도 모른다는 생각이 든다. 그 중 가장 으뜸은 replaceAll 6000개...
정윤진님, 김필중님의 "멀티리전 가용성을 위한 글로벌 캐싱 - Hidden micro services"
회사에서 캐싱용도로 redis, ehcache를 사용하고 있어서 EVCache는 무슨 장점이 있을까?라는 궁금증으로 세션을 듣게 되었다. EVCache는 Netflix에서 만든 분산 인메모리 데이터 저장소이다. 기억에 남는건 효율 극대화를 위해 hot data는 RAM(Memcached)에 cold data는 SSD(Mnemonic)에 유지시킨다고 한다.
김민규님의 "Local Cache와 Invalidation Message Propagation 전략을 활용하여 API 성능 튜닝하기"
종종 KSUG 페이스북에 작성하신 글을 공유해주시는 개발자분인데 최근에 작성하신 내용 관련해서 발표하신다. 앞서 말했듯 회사에서 사용하는 Redis, Ehcache와 무슨 차이가 있는지도 궁금했다. Hazelcast는 IMDG(In Memory Data Grid)이다. 이분이 Hazelcast를 선택한 결정적인 이유(?)는 Invalidation Message Propagation 기능 제공이라고 볼 수 있을 것 같다.
사내에서 Local Cache로 Ehcache, Distributed Cache로 Redis를 사용하는데 이에 대한 복잡성을 HazelCast로 해결할 수 있지 않을까란 생각이 들기도 한다.
Cluster 구성 시, 클라우드를 이용한다면 각각의 클라우드 기능을 활용한 플러그인도 제공한다.
마무리..
나에게 있어 들을 것도 배울 것도 참 많은 Spring Camp는 역시나 옳다. 일꾼단이라는 색다른 경험도 했다. 물론 참여가 저조하여 함께한 분들과 많은 대화를 하지 못해 아쉽고 미안한 점이 더 많지만, 내가 좋아하는 행사에 조금이나마 보탬이 되었다는 생각에 뿌듯하기도 하다.
배움의 끝은 어디인가... GraalVM, WebSocket, Testing, EVCache, Hazelcast, Kotlin, ...