2024년 9월 9일, 판교의 스타트업캠퍼스에서 인프런 주관으로 Josh Long을 초청하여 밋업 행사가 열렸다.
매번 인프런 퇴근길 밋업 행사에 신청을 넣었지만 계속 떨어지고 있던 찰나, 가장 규모가 큰 퇴근길 밋업에 추첨되었다.
[지금 무료] [인프런 X VMware Tanzu] Spring Boot 밋업 with Josh Long | 인프런 - 인프런
인프런 | , 자바 챔피언, 스프링 개발자 애드버킷Josh Long과 함께하는 특별한 Spring Boot 밋업! 인프런 퇴근길 밋업 with Josh Long 안녕하세요, 인프런입니다.9월 9일, 인프런은 VMware Tanzu와 협업하여 특
www.inflearn.com
Josh Long은 Spring Developer Advocate로서, Spring 프레임워크와 관련된 기술 및 커뮤니티 활동을 주도하며, VMware Tanzu에서 활동하고 있는 자바 챔피언이다.
다양한 컨퍼런스에서 강연하고, 기술 블로그와 책을 통해 Spring 생태계의 최신 동향과 모범 사례를 공유하고 있다.
또, 개인 홈페이지와 유튜브 채널을 운영하고 있다고 한다. 유명한 사람들을 초청해서 화상 커피챗 등을 하는 영상들이 있는데 꽤나 유익한 영상이 많은 것 같다.
https://www.youtube.com/@coffeesoftware
Coffee + Software
Hi there 👋! This is Coffee + Software. We've got a lot of things I want to explore and very little time in which to do it. So, grab a cup of coffee and join us and we'll explore together.
www.youtube.com
근무지로부터 걸어서 5분거리에 있는 곳이라 퇴근하자마자 바로 가서 미리 대기하고 있었는데, 인프런 직원분들이 스티커를 나누어주고 계셨다.
6시 30분까지 스타트업캠퍼스 로비에서 대기하다가, 입장하고 7시가 되어서 행사가 시작되었다.
다른 밋업들과 달리, 이번 Josh Long 초청 밋업은 무려 200명이나 참가한 꽤 큰 행사였어서 그런지 사람이 꽉꽉 찼다.
먼저, 전체적인 발표 내용들을 정리하자면 아래와 같다.
- 개 입양 서비스와 대출시스템을 예시로 든 스프링 부트 구축
- Spring Modulith 핵심 기능과 편의성 (Event Sourcing & MSA & Redis & Kafka)
- Spring AI 핵심 기능과 사용법 및 향후 지원 방향 (Prompting, VectorDB)
- Virtual Thread에 관한 이야기. (Jdk 21+)
- 질의응답
개 입양 서비스와 대출 시스템을 예시로 든 스프링 부트 구축
밋업이 시작하자마자, 아이스브레이킹으로 유튜브 홍보나 개발 관련 재밌는 이야기로 시간을 보내다가, 본격적으로 강의가 시작되었는데 처음 보여준 것이 바로 start.spring.io였다.
spring boot starter로 순식간에 개 입양 서비스와 대출서비스를 예시로 들어 프로젝트를 만들어 나가는데, 기존에 내가 만들던 layered Architecture와 비슷해서 이해가 더욱 잘 된것 같다.
이 섹션에서 조쉬롱이 강조하는것은 자바의 버전이 변화됨에 따라, 자바가 더욱더 Data Oriented Programming하게 되었다는 것이다.
첫 번째로 Record 타입을 조쉬롱은 아주 좋아한다고 한다. No Lombok!! 했던것이 매우 강렬하게 기억에 남았다.. ㅋㅋㅋㅋ
두 번째로는 Sealed types이다. 이 부분은 나도 제대로 사용해본 적이 없어서 그렇구나.. 하고 넘겼던것 같다.
세 번째로는 Pattern Matching이고 마지막으로는 Smart Switching이었다.
패턴매칭과 smart switching(개선된 switch문)은 나도 아주 유용하게 사용중인 기능이다.
특히 패턴매칭에서 switch문을 자주 사용하게 되는데, (if와 if-else로 패턴매칭하는거 너무 가독성 떨어진다 생각했음)
이 부분에서 개선된 switch문을 사용하면 코드를 아주 깔끔하게 작성할 수 있다.
패턴매칭 뿐만아니라, 열거형을 사용한 개선된 switch문같은 경우에는 default를 생략할 수도 있으니 더욱 깔끔하게 작성할 수 있다.
이렇게 패턴매칭 시 instanceof 분기처리를 개선된 switch로 작성할 경우 더욱더 Type-Safe해지고, 코드가 간결해지며 속도가 빠르다는 장점이 있다.
Spring Modulith 핵심 기능과 편의성
다음으로 아주 자연스럽게(?) Spring Modulith에 관한 섹션이 시작되었는데 전체적인 내용을 담기보다는
Event-Driven에 대한 설명과 MSA에서 Kafka와 redis를 사용하여 어떻게 이벤트 소싱을 사용해야 하는지에 대한 설명, 간단한 예시, 그리고 매우 간단한 문서화에 대해 설명해 주었다.
먼저 개 입양 서비스가 구축된 상태에서 현재 모듈에다 publisher와 listener를 자체적으로 구현해서 이벤트를 전송하는 시스템을 구현했다. 이 부분을 코딩하는데는 단 30초도 걸리지 않았는데 알고보니 Spring Modulith의 어노테이션을 활용한 것이었다.
예시를 들어 Redis와 Elastic Search같은 경우에도 Spring Modulith의 이벤트 소싱 기능을 활용하면 더욱 편리하고 좋은 퍼포먼스를 낼 수 있을것이라고 한다.
또, 이벤트가 개시되면 이벤트들을 관리하고 감사할 수 있는 테이블이고, 이에 대한 Document도 자동으로 생성이 된다.
이처럼 다른 시스템에도 재빠르게 이벤트를 전송할수 있다는 점, 시스템의 변경사항을 재빠르게 감사할 수 있다는 점을 토대로 이벤트 소싱의 강력함을 어필하는 주제로 세션이 계속됐다.
Spring AI 핵심 기능과 사용법 및 향후 지원 방향
다음으로는 Spring AI를 활용해서 개 입양 시스템의 AI 강아지 추천 API를 개발하는 것을 라이브코딩 해서 보여주었는데,
Spring AI의 프롬프팅 기능을 활용하는 방법(.defaultSystem())과 프롬프트 스터핑에 대해서 집중적으로 강의를 들었다.
Spring AI로 프롬프팅하는것이야 코틀린으로 카톡 AI챗봇을 만들때 기능을 사용해 본 기억이 나서 크게 감흥이 오지는 않았는데, 프롬프트 스터핑이 정말 신기했다.
프롬프트 스터핑 기능을 쓰기 전에, Vector DB에 대한 설명이 있었다.
Vector DB의 코사인 유사성 기능은 두 벡터 사이의 코사인 각도를 계산하여 유사성을 측정하는 방법이다. 값의 범위는 -1에서 1 사이이며 1에 가까울 수록 두 벡터가 유사함을 의미하는데, 아래와 같은 수식을 활용해서..... 음 가장 정답에 유사한 대답을 해준다고 생각하면 된다..
그리고 이러한 유사성을 이용해서, VectorDB의 테이블에 존재하는 데이터를 AI가 직접 고를 수 있게 할 수 있고, 해당 데이터를 Entity로 가져올 수도 있다. 이게 나는 정말 신기했다.
그리고 향후 지원 방향에 대해서는 Function Call을 집중적으로 지원할 것이라고 했다.
Virtual Thread에 관한 이야기
JDK 21은 여러 JEP을 통해 다양한 새로운 기능을 도입했으며, 그중 일부는 JVM에 긍정적인 영향을 많이 미쳤다고 한다. 특히 패턴 매칭 for switch와 Record패턴의 정식 도입으로 코드의 가독성과 유지보수가 크게 개선되었는데, 이러한 기능 외에도 JDK21에서 가장 주목할 만한 변화 중 하나는 바로 Virtual Thread라고 한다.
Virtual Thread의 성능
단지, 스프링 부트의 application.properties에서 Virtual Thread 기능을 true로 바꾸기만 했을 뿐인데, 성능이 두배가 되었다.
이는 트래픽을 두배가량 더 감당이 된다는 뜻이라고 한다.
그리고, jdk21로 마이그레이션하면 성능효과가 이렇게 뛰어난데 안쓸 이유가 없지 않느냐? 라는 말을 덧붙이기도 했다.. ㅋㅋ
(우리 회사에서도 21버전 쓰고 싶다..)
질의응답
마지막 질의응답으로 기억나는 것만 적어보았다.
Q. 실제로 Virtual Thread를 프로덕션에 적용한 사례가 있을까요? 그리고 적용할 때의 주의점이 있나요?
A. 넷플릭스에서 전체적으로 사용 중이고, 적용할 때의 주의점은 Syncronized된 블록이 있다면 Virtual Thread는 작동하지 않고 기존대로의 Thread처럼 작동할 것입니다. 그 외에는 딱히 문제점이나 주의점이 없습니다. 버추얼쓰레드 쓰세요.
Q. Virtual Thread가 항상 성능이 우수한가요?
A. CPU에 바인딩된 작업을 수행하게 될 때, 오버헤드 발생 가능성이 있습니다. 예를 들면 암호화 작업이 있겠죠. 하지만 우리는 이러한 암호화 작업을 매번 하지는 않잖아요? DB에 쓰거나 읽는 작업 즉, I/O작업을 주로 수행하는데 이러한 경우에 사용하면 성능은 '항상' 좋을것입니다.
Q. Webflux(Reactive) 와 Virtual Thread는 상호 보완적인가요? 아니면 택1인가요?
A. 먼저 Spring Reactive 에서의 장점은 크게 3가지입니다. 첫번째로 구성이 편리하는 점이고, 두번째는 에러 처리가 신속하고 편리하다(에러조차도 Data Streaming이기 때문), 세번째로는 확장성입니다. 하지만 VT는 첫번째, 두번째 이점을 가져갈 수가 없습니다. Reactive로 구현하지 않은 사람들에게 좋은 것이 Virtual Thread입니다. 그러니까 프로젝트가 Reactive 즉, webflux가 아니라면 21로 올리고 Virtual Thread를 켜세요!!
Q. 오픈소스 참여 말고 자바 생태계에 기여할 수 있는 방법이 있을까요?
A. 오픈소스 기여 밖에 생각이 나지 않습니다. 토론과 프레젠테이션이 매우 중요할 것 같습니다. 기회가 온다면 자바 챔피언들과 토론하는 것이 있을 것 같습니다. + 오늘 아침에 로드 존슨과 인터뷰했으니 유튜브 놀러와라. 풀영상 있다.
Q. Spring AI의 강점이 뭔가요?
A. 지금 스프링은 외부와의 통합에 매우 좋은 위치에 있습니다. 자바는 파이썬보다 컴파일이 빠르고, 품질이 좋은 코드를 생산 가능합니다. 이러한 환경에서의 LLM과의 통합, Function Call, 프롬프팅, Vector DB를 활용하면 시간 절약과 더불어 좋은 성능을 이끌어낼 수 있을 것이라 판단됩니다. 현재는 function call에 대한 부분에 집중하고 있으니 관심을 계속 가져줬으면 좋겠다.
Q. 지금 회사에서는 JDK 6,7 이런걸 쓰고있는데, 점차적으로 버전을 올려서 마이그레이션하는게 좋을까요? 아니면 바로 21버전을 사용하는게 좋을까요?
A. 시기가 오래 지난 고전적인 API들을 사용하는 것도 좋은 경험이라 생각합니다. 저는 그러한 상황들이 매우 부럽습니다. 질문으로 돌아가서 버전을 올려 마이그레이션하게 된다면 2주 후에 출시되는 JDK23을 추천합니다. 버전은 오를수록 좋으니까요. 무료이기도 하고.
후기...
인프런이 주관하고 VMWare Tanzu와 협업하여 진행된 이번 행사는 규모도 상당했고 무엇보다 Josh Long이라는 스프링 개발 생태계의 거물급 인물이 직접 와서 강연을 한다는 점에서 기대가 매우 컸다. 이전에도 인프런 퇴근길 밋업에 계속 신청을 했지만 빈번이 떨어졌기에, 이번에 가장 큰 밋업에 당첨되어 매우 설레는 마음으로 참여했다.(밋업 말고도 인프콘과 SLASH24도 계속 떨어졌다..)
행사장에 도착하자마자 느껴진 건, 200명이나 모인 대규모 밋업의 활기였다. 분위기도 좋았고, 로비에서 인프런 직원들이 스티커를 나눠주며 사람들을 맞이하는 모습도 인상적이었다.
Josh Long의 강연은 기대 이상이었다. 스프링 프레임워크의 전도사 답게 복잡한 주제도 쉽게 풀어주며, 중간중간 유머도 섞어 분위기를 유쾌하게 만들었다. 직접 만나 그의 이야기를 듣고, 개발자로서의 노하우와 철학을 공유받는 시간은 정말 값진 경험이었다.
처음으로 참석한 개발자 밋업에서, 그것도 Josh Long같은 자바 챔피언을 직접 만나고 그의 깊은 지식을 배울 수 있어서 정말 영광이었다.
이번 밋업은 규모도 크고, 내용도 실무적으로 매우 유익했다. JDK21의 새로운 기능, Virtual Thread, Spring Modulith, 그리고 Spring AI까지 다루는 폭넓은 주제 덕분에 많은 인사이트를 얻은 것 같다.
그리고, 이번 밋업에서 또 하나 인상 깊었던 것은 Flitto라는 실시간 번역 어플이었다. 강연이 영어로 진행되었는데, Flitto덕분에 강연 내용이 실시간으로 자막으로 나타나서 이해하는 데에 큰 도움이 되었다.(Guard clause가 God class로 번역된 건 비밀) 번역 속도도 빠르고, 정확도도 높아서 기술적인 내용을 실시간으로 바로바로 확인할 수 있다는 점이 굉장히 신기했다. 덕분에 강연을 원활하게 따라갈 수 있었던 것 같고, 강연 내용에만 집중할 수 있었던 것 같다. (사람들이 다들 영어를 잘하는것 같다는 느낌이 들었다.. Josh Long이 유머를 치고 사람들이 웃을때 나는 자막보고 3초 딜레이 후 웃었다.. )
질의응답 시간에는, Spring AI의 추후 지원되는 기능중에 파인튜닝 기능이 있는지에 대해 질문을 하고 싶었지만 행사 관계자 분들께서 행사 마감 시간이라고 마무리를 지어서 질문할 타이밍을 놓쳤다.. ㅠㅠ
비록 질문을 못한 것과.. 향로 인프런 CTO님이 참석하지 않았다는 점에서 아쉬움이 있었지만 전반적으로 매우 만족스러운 경험이었다. 앞으로도 이러한 밋업에 자주 참여하고, 배운 것들을 적극적으로 실무에 적용해보고 싶다.(회사에서 허락만 해준다면...)
'DEV > 행사 || 후기' 카테고리의 다른 글
항해 99 개발자 잔디 기부 캠페인 (0) | 2024.12.18 |
---|---|
인프런 퇴근길 밋업 #7 오픈소스 밋업 참가 후기 (1) | 2024.09.20 |