JAVA/JAVA | Spring 학습기록

[230422] Spring Camp 2023 갔다온 후기

kth990303 2023. 4. 22. 22:04
반응형

KSUG에서 주최한 스프링캠프 2023 컨퍼런스에 다녀왔다~

https://springcamp.ksug.org/2023/

 

Spring Camp 2023

'스프링 캠프'는 애플리케이션 서버 개발자들과 함께 가치있는 기술에 관한 지식과 정보를 '공유'하고 참가한 사람들이 서로 '인연'을 만들고 시끌벅적하게 즐길 수 있는 '개발자들을 위한 축제'

springcamp.ksug.org

다행히 중간고사가 4월 20일까지였어서, 맘편히 다녀올 수 있겠다 싶어 바로 티켓팅에 참여했다.

그리고 다행히 빠르게 결제까지 마친 덕분에! 티켓팅에 성공했다.

Spring Camp는 유료 세미나이다. 가격은 33,000원.

 

결제까지 완료한 시점 기준으로, 오픈 42초만에 티켓이 마감됐다고 한다. 실제로 같이 가기로 한 지인은 결제한 이후에 딱 커트라인에 걸렸는지 환불처리돼서 티켓팅 실패 ㅠㅠ

 

4월 20일까지 열심히 중간고사를 치르고 이틀 후인 22일 토요일, 스프링캠프 2023에 가기 위해 을지로입구역으로 갔다.

스프링캠프 2023 스티커, 팔찌, 안내 배너

오프라인 컨퍼런스는 유스콘 이후로 처음이었기 때문에, 기대 반 설렘 반 마음으로 입장했다.

입장하고 나면 팔찌를 채워주고 스티커를 준다. 난 스티커는 크게 관심없어서 신경 안썼는데, 생각보다 많은 분들이 스티커에 만족해하는 것 같았다ㅋㅋ

 

개발자가 정말 스티커에 진심이라는 걸 느낀게...

네이버 쇼핑에 개발자를 치면 가장 상위에 뜨는 것이 키보드도, 모니터도 아닌 스티커(!!)라고 한다.

그만큼 스티커에 관심있는 개발자분들이 많다는 건데 정말 신기했다 ㅎㅎ

 

컨퍼런스 내부

왼쪽 사진은 컨퍼런스 내부 세미나실, 오른쪽 사진은 홍보 및 채용부스이다.

현대, 인프런 등 다양한 회사에서 홍보 부스를 운영하는 모습을 확인할 수 있었다. 인프런 측에서 설문조사를 하면 추첨을 통해 다양한 상품을 주던데, 나는 (이때만 해도) 별로 관심이 없어서 안했다. 

 

그런데 알고보니 추천 경품이 생각보다 어마어마했다.

키보드, 강의 할인 쿠폰 등등. 이럴 줄 알았으면 응모 자체는 해볼 걸 그랬나보다 ㅎㅎ

 

컨퍼런스 주제

주제 자체가 어려운듯 어렵지 않은 듯하다.

그렇기 때문에 나는 대학생들도 많이 올 것이라 예상했는데, 실제로는 대학생은 거의 존재하지 않았다.

(컨퍼런스 도중에 대학생분 손 들어보라고 하셨는데, 아무도 없길래 뻘쭘해서 손을 안들었다. 한두분 정도만 들었던 것 같은데 사실 저도 대학생입니다... 아마 나처럼 뻘쭘해서 손 안든 대학생분들도 많았을 듯?ㅋㅋㅋ)

 

경력 1~5년차 분들이 굉장히 많으셨다.

실제로 대부분의 발표자분들께서 올해 스프링캠프 참여자분들의 나이대가 생각보다 훨씬 젊어서 놀랐다고 한다.

 

그 외에 경력 10~15년차 정도이신 분들도 좀 보이는 편이었다.


세미나 내용 후기

유료 컨퍼런스이기 때문에 내용에 대해서는 자세히 남기진 않으려 한다.

(라고 적었는데 다시 보니까 은근 자세히 남겨버린 듯하다. 문제되면 수정할듯)

나중에 유튜브로 올라온다고 하니, 자세한 내용은 해당 영상들을 참고하자.

 

 

우선, 처음에는 발표자분들께서 시니어 대상으로 진행할 예정이라고 하셔서 생각보다 어렵지 않을까 걱정했다.

하지만 다행히 주니어(사실 상 주니어도 아니다. 완전 응애)개발자인 나도 꽤나 재밌게 들을 수 있었다!

 

스프링부트 3.0.0, 스프링 6 버전에 달라진 것은 Java 17, Jakarta 9 버전 이상이 필수라는 거 외에는 잘 몰랐었다. 하지만 세션을 듣고 생각보다 많은 부분들이 변했구나 생각이 들었다. GraalVM 기반을 공식 지원하여 노후화된 JIT 컴파일러가 아닌 AOT 컴파일러를 이용하는 방식을 공식 지원한다고 한다. 이렇게 되면 실제로 실행 시간이 압도적으로 빨라진다고 한다. (빌드 시간은 느려짐) 사실상 조금 규모있는 프로젝트도 0.3~4초 이내로 빠르게 실행된다고. 아직은 도입한 회사들이 많지 않지만 슬슬 생겨날 수도 있지 않을까 싶다.

 

프랑스의 Summer Time이라는 것 때문에 글로벌 서비스 운영 시 로그가 이상하게 남는 현상도 들을 수 있었고, 대규모 트래픽 환경에서 레거시를 새로운 시스템으로 어떻게 갈아끼울지 얘기도 들을 수 있었다. 두 세션 모두 약간의 난이도는 있는 편이었다. 하지만 `이러한 상황도 있구나`, `이 때는 이렇게 할 수도 있구나`에 대해 신기해하며 느낄 수 있었던 순간이었어서 되게 재밌게 들었다. 레거시 DB와 새 DB 중에서 READ, WRITE를 언제 어떻게 처리할지에 대한 고민을 깊게는 안해봤는데 이번 세션을 통해 고민해보는 시간도 가져봤다. 제일 신기했던건 마이그레이션 시에도 pub/sub을 이용하여 최대한 상호의존성을 빼버린다는 점. 신규 애플리케이션에서 결국 일부는 레거시에 의존을 걸어야될 수도 있겠다 생각했는데... pub/sub을 활용하여 MQ를 이용한 리팩터링 과정이 신선하게 다가왔다. 사실상 규모가 작은 사이드프젝 마이그레이션&리팩터링 정도만 해왔던 나에게는 신기방기한 세션이었다. 여담으로 발표 PPT에 쓰인 짤들이 되게 재밌어서 인상깊었던 발표였다.

 

오히려 대규모 트래픽 2편 세션이 난이도가 약간 낮았다. 그 이유는 1편은 시니어님께서 아키텍처 관련 세션 발표 내용이었고, 2편은 1편에서 발표하신 분의 주니어(그래도 6년차 괴물분이시다) 팀원분께서 겪은 트러블 슈팅 후기에 대한 내용이었기 때문이다. 책임, 역할 할당(모델링)의 어려움, 의존 방향의 어려움으로 인해 고통받으신 썰들을 쭉 푸는 세션이었다. 헥사고날 아키텍처, DDD, 이벤트를 이용한 의존성 분리 과정에 대해서도 얘기하셨다. 나는 아직 @TransactionalEventListener이 꼭 필요한 상황 외에는 이벤트 및 MQ에 대한 절실한 필요성을 느낀 적이 없었는데 확실히 요구사항이 휙휙 바뀌는 경우에는 절실하게 느껴질 것 같다. 내가 몸담고 있는 사이드프젝에도 타 서비스 (또는 타 repository) 의존성을 빼고 이벤트 전파 쪽으로 코드를 리팩터링해봐야겠다.

 

또, 테스트 코드에 관한 세션도 재밌었다. 첫째로, @MockBean을 평소에 애용했었는데 Application Context reload되는 성능 저하 이슈 때문에 @MockBean 대신 Mockito.mock()을 이용하여 reload를 줄이자는 부분에 공감이 됐다. 나는 mock을 최소화하는 것을 좋아하여 꼭 필요한 상황이 아니면 mocking을 하지 않는다. 즉, @MockBean으로 빈으로 주입해야 되는 경우들만 현재 프로젝트에서 사용중이기 때문에 Mockito.mock()으로 교체가 사실상 불가능한 로직들만 테스트코드에 존재한다. (@MockBean을 조금 애용하는 편이어서 조금 찔려서 이렇게 쓰는 걸수도?ㅋㅋㅋ) 둘째로, 테스트 코드는 리팩터링 시그널을 보내주고 객체의 책임을 분리해야 하는 피드백을 보내준다는 부분이었다. 이 부분은 진짜 공감이 많이 됐던 것이, 내가 생각하는 테스트 코드의 필요성 역시 검증 부분도 크지만 이 부분이 진짜 크다고 생각했기 때문이다. 책임 분리랑 설계가 잘 돼있으면 테스트 코드 짜기가 쉬워진다. jojoldu님의 관련 글도 존재한다.

https://jojoldu.tistory.com/697

 

1. 좋은 함수 만들기 - 부작용과 거리두기

요즘의 개발에서 프레임워크나 라이브러리 사용이 없는 개발은 생각하기 어렵다. 특히 DDD 등의 개념까지 기본지식처럼 취급되어 점점 추상화된 개발에 익숙해지고 있다. 복잡한 애플리케이션

jojoldu.tistory.com

 

캐시 동기화 부분 세션을 개인적으로 정말 흥미롭게 들었다. 서버가 1대일 때 캐시를 도입하고 동시성을 해결하는 방법, 여기서 나아가 서버가 N대일 때 동시성을 해결하는 방법을 다루었다. 그리고 더 나아가 Spring Cloud Config와 Spring Cloud Bus를 이용하여 최신 config 파일만 보고 배포 없이 동기화가 가능하다는 점, K8S 환경에서 network I/O 비용 없이 Key Map만 따로 관리하여 별도의 번거로운 작업 없이 동기화를 시키는 부분 등. 이 세션은 뒤로 갈수록 난이도가 급증하는 것이 느껴졌지만, 요즘 관심분야가 이쪽이기 때문에 굉장히 재밌게 들었다. 그리고 nGrinder와 Locust를 비교하여 성능 테스트 부분도 언급하셨다. 최근 APM, 시스템 지표 모니터링 쪽에 관심이 있었기 때문에 이 부분 역시 흥미로웠다. 또 내가 겪은 사이드프젝 규모들이 다 소규모여서 K8S 환경은 다뤄본 적이 없었는데, K8S 환경이 도입될 경우 다른 시야 및 관점으로 접근한다는 부분도 인상깊었다. 덕분에 내 시야도 한 층 넓어질 수 있었다.

 

마지막으로 클라우드 역사와 이에 대한 스프링의 자세 세션이다. 사실 난 개발판에 뛰어든지 얼마 되지 않은 응애개발자이기 때문에, Spring Boot 1.x 버전은 정말.. 옛날 얘기 듣는 거 같았다. 도커가 2013년에 나왔다고 했을 때, 10년 전에는 진짜 개발 판이 지금이랑 아예 달랐겠구나 싶었다. 그러다가 클라우드의 serverless, 오케스트레이션 등에 대한 스프링의 reactive한 발전에 대한 얘기, 컨테이너 환경에서 G1 GC에 대한 적합성, GraalVM과 클라우드 환경에 대한 얘기를 들으면서 느낀 점이 있다. 확실히 CS, 정말 중요한 것 같다.

 

최근 JVM, GC 관련해서 이런 글을 쓴 적이 있다.

https://kth990303.tistory.com/418

 

[Java] PermGen 영역 대신 Metaspace가 도입된 Java 8 이후의 JVM 구조 및 JVM 튜닝 맛보기

jdk 1.7 이하, 즉 Java 8 이전 버전에서의 JVM 메모리 구조(Runtime Data Area)와 Java 8 이후의 JVM 구조는 아래와 같은 차이가 존재한다. Eden 영역과 Survivor, Old 영역의 존재는 변함이 없다. 하지만 Java 8 이후

kth990303.tistory.com

이 때 공부했던 내용이 마지막 두 개의 세션을 듣는 데에 많은 도움이 됐다. 그리고 덕분에 더 재밌게 느껴졌던 것 같다. 

모니터링, 성능 개선에 CS는 빠질 수 없는 부분인 듯하다.


쓰다보니까 세미나 내용에 대해 꽤나 자세히 남겨버린 것 같다.

그만큼 세션 내용이 꽤나 재미있었다.

주니어 개발자여서 스프링캠프에 참석할지 고민되는 분들은, 부담없이 가보고 즐겨도 좋을 듯하다 ㅎㅎ

 

다음 스프링캠프때는 좀 더 많이 공감하고 즐길 수 있도록, 열심히 실력을 키워야겠다.

반응형