티스토리 뷰

컨퍼런스 및 세미나

스프링캠프 2023 후기

주디 𝙹𝚞𝚍𝚢 2023. 4. 24. 01:06

 매번 파이콘을 다니면서 내가 업무에서 사용하는 자바, 스프링 컨퍼런스는 없나 하고 기다렸는데, 마침 한국스프링사용자모임에서 스프링캠프 2023을 연다고 해서 다녀왔다. 오픈한지 43초만인가에 티켓이 동났다고 해서 엄청 인기있는 컨퍼런스구나 싶었다.


 이하의 내용에는 세션 관련 내용이 포함되어 있지만 모든 내용을 담고 있지 않고, 정확하지 않은 내용을 포함하고 있을 수 있습니다.
추후 유튜브로 영상이 올라온다고 하니 자세한 내용은 해당 영상을 참고해주세요.


 

 11시부터 12시까지가 접수였는데, 11시 40분쯤 도착했는데 다들 인프런, 현대 부스 등에 가있어서 그런지 자리가 꽤 남아 있었고, 나름 좋은 자리에 앉게 되었다. 파이콘은 동시에 여러 세션이 진행되서 듣고 싶은 세션이 겹치면 그 중 하나를 택일해야 하고 세션마다 열리는 장소를 찾아가야 하는데, 스프링캠프는 세션이 순서대로 진행되고 한 장소에서 계속 들을 수 있어서 좋았다.
 인프런 부스에서는 강의 30% 할인 쿠폰도 주고, 현대부스에서는 굿즈가 들어있는 종이가방도 주고(안 받아서 뭐가 있는지 모름...), 마이크로소프트에서도 뭔가 주는 것 같았는데 난 아침부터 테니스치고 가서 지쳐서 부스는 가지 않았다.

 세션은 위와 같이 진행됐는데, 모든 세션이 다 재밌었고 흥미로웠다.


어느 #월급쟁이개발자 의 스프링 부트 따라잡기 Ver.3
 현재 컬리에 계시는 개발자분께서 어떻게 스프링부트 업데이트를 조사하고 현업에 적용하는지에 대해 이야기해주신 세션이었다. 초반에 개발자의 인생은 B(uild)와 D(eploy) 사이의 C(ode)라고 말씀하셨는데, 그 부분이 좀 와닿았다.
 스프링부트 업데이트를 조사하는 것에 대해서는 아래와 같은 링크를 참고하라고 알려주셨다.
https://spring.io/blog/category/releases/

 

Spring | Home

Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform.

spring.io

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes

 

Spring Boot 3.0 Release Notes

Spring Boot. Contribute to spring-projects/spring-boot development by creating an account on GitHub.

github.com

https://www.facebook.com/groups/springkorea 

 

한국 스프링 사용자 모임 | Facebook

KSUG(한국 스프링 사용자 모임)의 페이스북 지부입니다. KSUG는 스프링을 사용하거나 관심 있는 사람들이 모여 뉴스와 정보를 공유하고 문제를 같이 해결하는 곳이며 스터디, 세미나, 컨퍼런스 참

www.facebook.com

https://twitter.com/springboot 

 

Spring Boot (@springboot) / 트위터

https://t.co/BwJ42wMbQK

twitter.com

https://twitter.com/ReleaseHub 

 

Release Hub (@releasehub) / 트위터

A new way for small businesses to get the word out

twitter.com

 그리고 스프링부트3를 살펴보는 부분이 있었는데, 스프링부트 3.0이 자바 17을 요구하는만큼 자바 업데이트에 대한 이야기도 해주셨다. Records 말고는 전부 모르고 있었던 내용이라 확실히 자바 업데이트에 대한 공부도 필요하구나 생각이 들었다.

 위 이미지에는 내용이 들어가 있지 않은데, instanceof에 대한 Pattern matching이 흥미로웠다. 자바 16의 내용인데 아래와 같이 instanceof가 true라면 캐스팅을 따로 해줄 필요가 없이 instanceof 문에 변수명을 붙여서 그 변수명으로 사용할 수 있다는 내용이었다.

// before
~~~ (Test t) {
	if (t instanceof Test) {
    	Test aTest = (Test) t;
        return aTest.getMember();
    }
    ...
}
// after
~~~ (Test t) {
	if (t instanceof Test aTest) {
    	return aTest.getMember();
    }
}

 그리고 Jakarta EE 네임스페이스가 javax에서 jakarta로 바뀐 건 알고 있었는데 이게 어떤 의미인지는 몰랐다. 그런데 이런 부분에 대해  설명을 해주셔서 좋았다.

 스프링 6.0에 대한 설명도 해주셨는데, AOT, GraalVM, Native Image는 처음 들어봐서 이에 대해서는 더 알아봐야겠다고 생각이 들었다.
 첫 세션부터 너무 너무 유익했고, 어떤 공부를 해야하는가가 좀 잡혔다. 경력이 좀 있으신 분은 저런 고민을 하고 저렇게 정보를 얻으시는구나 생각했다.
 발표 장표 링크


글로벌 서비스를 위한 Timezone/DST
 이 세션은 한화솔루션 개발자분께서 발표하셨는데, 글로벌 서비스와 Timezone 관련 내용이었다. 제목만 딱 봤을 때도 썸머타임 관련 얘기가 아닐까 했다. 썸머타임 관련해서는 이 영상을 참고하면 좋을 것 같다. 이 분은 글로벌한 개발을 하고 계시는데 썸머타임이 실시되면 8시를 9시로, 2시를 3시로 늦춰서 표기하기 때문에 특정 시의 데이터가 사라져있었다고 한다. 그래서 이를 어떻게 해결했는지 설명해주셨다.

 위와 비슷한 이미지를 보여주셨는데 장표가 공개되지 않았고 사진도 찍지 않은 탓에 위 이미지로 대체한다. 이미지 출처는 https://perfectacle.github.io/2018/09/26/java8-date-time/. ZoneOffSet은 UTC와의 시간차, (위 이미지에는 없지만) ZoneId는 시간대를 나타내고, OffsetDateTime은 LocalDateTime에 ZoneOffSet을 포함하여 시각과 UTC와의 시간차까지 표시할 수 있다. ZonedDateTime은 LocalDateTime에 ZoneId가 추가된 것이다. ZonedDateTime과 OffsetDateTime의 가장 큰 차이는 DST가 적용된 정보냐이다.

// LocalDate
LocalDate.of(int year, int month, int dayOfMonth);

// LocalTime
LocalTime.of(int hour, int minute, int second, int nanoOfSecond);

// LocalDateTime
LocalDateTime.of(LocalDate date, LocalTime time);

// OffsetDateTime
OffsetDateTime.of(LocalDateTime dateTime, ZoneOffset offset);

// ZonedDateTime
ZonedDateTime.of(LocalDateTime localDateTime, ZoneId zone);

 그래서 Timezone과 DST을 어떻게 적용했는지 설명해주셨다.
 글로벌 서비스를 하니 나라별로 다른 시간대를 고려해야하는 경우가 생기는걸 보면서 예전에 라인 기술블로그에서 본 글(글자수를 세는 7가지 방법)이 생각났다. 글자수를 카운트해야하는데, 태국어, 아랍 문자, 인도 문자 등과 같은 조합형 문자의 글자수가 제대로 카운트되지 않는 문제였다. 글로벌 서비스를 하며 다양한 문제를 겪는 걸 보고 나도 글로벌 서비스하는 곳으로 가서 좀 더 다양한 문제를 겪어보고 싶어졌다.


대규모 엔터프라이즈 시스템 개선 경험기 - 1부 - 달리는 기차의 바퀴 갈아 끼우기.
 다음 세션은 네이버 쇼핑 개발자분들이 얘기하셨다. 기존 시스템은 전통적인 DB 중심의 구조였고, 새로운 패러다임이 필요했다고 하셨다. MSA는 발표자분의 개인견해로 좋아하시지 않기 때문에 논외로 쳤다.
 관련해서 중복 코드에 대한 오해를 말씀해주셨는데, 정확하게 내 견해와 같았다. 중복 코드를 지양하는 건 좋지만, 메서드는 하난데, 그 메서드를 사용하는 API가 여러 개일 때, 메서드를 수정해버리면 그 메서드를 사용하는 여러 개의 API를 전부 테스트해야 하는 문제가 생기는 것이다. 그런 경우 중복 코드가 기술부채가 아닐수도 있다고 말씀하셨다. 얼마 전에 내가 대리님에게 드렸던 말씀과 너무 똑같아서 놀랐다. 결국 그 코드의 영향도를 고려하면서 짜야하는 것이다. 그러면서 아래와 같은 문구를 말씀해주셨다.

중복 코드를 추상화하여 끄집어 내는 것은 DRY를 사용하는 좋은 출발점이지만 그것이 전부는 아닙니다. 여러분이 중복 코드를 피하려고 하는 것은 사실 각 기능과 요구사항을 한번만 구현하려고 노력하는 것입니다.

 발표 내용 중 와닿았던 부분은 무화과나무에 대한 부분이었다. 무화과나무는 숙주나무의 줄기에서 양분 등을 뺏어서 싹을 틔우고, 뿌리와 줄기를 아래로 뻗어 숙주나무를 감싼 채로 자라고 그렇게 숙주나무를 목졸라 죽이며 자란다. 점점 숙주나무는 말라가고 무화과나무는 점점 풍성해지는 것이다. 이 패턴을 "교살자 무화과나무 패턴(Strangler Fig Pattern)"이라고 한다고 한다. 더 자세한 설명은 이곳을 참고. 이를 시스템 개선에 적용하여 기존 애플리케이션은 그대로 두고 신규 서비스를 점점 적용하며 신규 서비스가 오롯이 작동할 때 기존 서비스를 걷어낸다고 한다. 마틴 파울러가 2004년에 얘기했다고 한다.


대규모 엔터프라이즈 시스템 개선 경험기 - 2부 - 새 술 담을 새 부대 마련하기.
위와 이어지는 세션이었는데, 1부가 사수분이셨고, 2부는 그 부사수분이 발표하셨다. 6년차인가 그렇다고 하셨는데 본인이 주니어일 때 어떤 공부를 했는지, 그 공부한 내용을 어떻게 적용했는지 말씀해주셨다.
 그리고 Port-Adapter, Domain Driven, Event Driven 세 가지 개념을 아까 1부를 발표하신 사수분께서 알려주셨다고 한다. Port-Adapter는 처음 들어봐서 뭔지 의아했는데 헥사고날 아키텍처였다.(자세한 설명은 이곳을 참고)
 설명 중에 인상깊은 부분이 있었는데, 빈약한 도메인과 풍부한 도메인이었다.
 중간에 schema.org에 대해 알려주셨는데 다음 프로젝트 때 사용해보면 좋겠다고 생각했다.


실무에서 적용하는 테스트 코드 작성 방법과 노하우
 이 세션은 카카오페이에 계신 개발자분이 발표하셨는데, 발표자분께는 너무 죄송하지만 정말 너무 피곤한 나머지 중간에 졸아버렸다. Mock Test에 대해 설명해주신 것만 기억난다.


구현부터 테스트까지 - 대용량 트래픽 처리 시스템
 이 세션은 네이버에 계신 개발자분께서 발표하셨다. 주내용은 수평 확장을 할 때 캐시 동기화 문제를 어떻게 해결해서 대용량 트래픽을 쉽게 처리했는지였다. 주요 키워드로는 캐시, 동시성, 스프링 클라우드 Config Bus, K8S, pinpoint, locust가 있었다.
 캐시 히트율이 70% 이하면 캐시를 안 쓰는 게 좋다고 하셨다. 캐시의 위치별로 명칭이 다르다고 한다. 캐시 중 Global Cache에 해당하는 것이 Redis, Memcached이다. 클라이언트에 가까울수록 성능이 좋다고 한다.
 난 synchronized, volatile, Atomic을 알고 있지만 잘 이해를 못 하고 있던 부분이 volatile이었다. CPU 캐시에서 읽는 게 아니라 Main Memory에서 읽는다는 것이 어떤 의미인지 잘 와닿지 않았는데, 이해를 잘 할 수 있게 설명해주셨다. 궁금했지만 명쾌하게 해결되지 않았던 부분인데, 저렇게 잘 설명해주시니 이것만으로 본 컨퍼런스에 오길 잘했다고 생각이 들었다.
 그리고 ConcurrentHashMap의 Bucket에 대해서도 말씀하셨는데, 이 뒷부분은 제대로 이해를 못했기 때문에 공부를 해봐야겠다.
 서버 하나에서의 문제는 ConcurrentHashMap을 사용해서 해결한다쳐도, 서버 간 동기화는 어떻게 해결하는지 이어서 설명해주셨다.
 그리고 퍼포먼스 테스트 툴에 대해서 이야기해주셨는데, locust라는 새로운 툴을 알게 됐다. 상당히 쉽게 편하게 무제한 트래픽을 일으킬 수 있다고 하셔서 우선 조사해보고 다음에 한 번 써보고 싶어졌다. 성능테스트의 필요성을 얘기하시면서 마지막으로 지옥에서 온 CTO라는 분이 하신 말을 덧붙여주셨는데 아래와 같다.

누구나 그럴싸한 아키텍처를 갖고 있습니다. 높은 트래픽에 쳐맞기 전까지는.

Journey to Modern Spring(클라우드 시대를 맞이하는 스프링의 자세)
 드디어 마지막 세션. 이 세션을 들을 쯤에는 거의 쓰러질 거 같았다. 이번 세션은 컬리에 다니시는 개발자분이 발표해주셨고, 주제는 클라우드 시대가 되면서 그에 발맞춰 스프링이 어떻게 발전해왔는가하는 것이다. Native Executables, AOT, GraalVM, Observability, AWS Lambda, 스프링 컨텍스트 인덱서 등 모르는 개념이 많이 나와서 좀 이해하기 어려웠다. 그래도 크게 흐름을 잡기에는 좋았다.
 그리고 보통 그레이들이 빌드해주는 jar로 이미지로 만들어서 컨테이너화하는 방법보다 더 빠른 방법이 있다는걸 알려주셨다. https://docs.spring.io/spring-boot/docs/current/reference/html/container-images.html#container-images.efficient-images
발표 장표 링크


 중간에 커피 브레이크 시간에는 오렌지주스, 커피 등과 간단한 간식이 있었다.


스프링캠프가 끝난 후
 마지막 세션까지 다 듣고 원래는 집에 가서 바로 듣고 필기한 내용을 정리해서 포스팅을 하려고 했지만 너무 집중한 탓인지 피곤해서 금방 잠들어버렸다. 그래도 주말이 지나가기 전에 정리를 마쳐서 다행이다. 중간에 졸기도 하고 제대로 이해 못한 부분도 있고, 많은 내용을 빠르게 필기하다보니 놓친 부분도 많다.

 위 짤처럼 쏟아지는 지식을 미처 막지 못하는 두꺼비가 된 느낌...
 그래도 참가한 소감에 대해 남기자면 난 완전 만족스러웠다. 발표자분들이 다들 유머러스하셔서 좋았다. 아는 부분도 많이 나왔지만 모르는 부분도 많아서 공부를 더 많이 해야겠구나 싶었다. 그리고 네이버, 카카오페이, 컬리 등 큰 회사에 다니시는 분들의 시야를 알게 된 것 같아 앞으로 공부하는 데에도 많은 도움이 될 것 같다.
 그리고 한 가지 더 느낀 점이 있다면 본인의 경험을 잘 정리하는 능력이 중요하다는 것이다. 평소에도 내가 진행한 업무에 대해서나 공부한 내용에 대해서 정리하는 습관을 들이고는 있지만 '잘' 정리하는지에 대해서는 의문이다. 앞으로는 내 경험을 잘 정리하는 것도 신경써야겠다.

300x250

'컨퍼런스 및 세미나' 카테고리의 다른 글

우아콘 2023 후기  (1) 2023.11.20
파이콘 2023 뒤늦은 후기  (0) 2023.10.01
인프콘 2023 후기  (0) 2023.08.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함