JAVA/JAVA | Spring 학습기록

[240831] 유스콘 2024 컨퍼런스 후기-이제는 발표자 신분으로! (다중 서버에서 똑똑하게 캐싱하기)

kth990303 2024. 9. 2. 21:29
반응형

나는 꾸준히 유스콘에 참여했었다.

 

유스콘 2021 에 지인의 안내로 처음 참여해보고 유익하다는 생각이 들어서

유스콘 2022, 2023 에도 청중(?) 신분으로 신청했었다.

그리고 매번 후기를 작성했었다.

내 블로그에서 '유스콘' 으로 검색한 결과

 

유스콘 2023 에서, 유스콘의 주최자인 제이슨이 이렇게 말한 적이 있었다.

'케이, 발표자 한 번 하셔야죠~'

(여담으로 케이는 내 우테코 시절 닉네임이다.)

 

사실 진심인지 아니면 가벼운 인사치레인지 모르겠지만ㅋㅋ (진심이라 말해줘요 제이슨~)

그 말을 듣고, 나도 한번 내가 얻은 실무경험 중 신기하고 재밌었던 내용을 공유해보고 싶단 생각이 들었다.

그리고 2024년 7월 경으로 기억하는데, 그 쯤에 발표자 신청 폼을 제출하여 다행히 발표자로 선정이 되었다!

 

발표자 선정 메일

 

 

그렇게 나는 유스콘 2024에서 `다중 서버에서 똑똑하게 캐싱하기` 주제에 대해 발표 준비를 진행하게 되었다.

내 발표세션에 대한 소개

 

유스콘 2024에 대해서는 아래를 참고하자.

https://frost-witch-afb.notion.site/YOUTHCON-24-49177aa1b828435f98046912c6debc78

 

YOUTHCON'24 | Notion

유스콘은 👨‍🎓 젊은 개발자와 👨‍🏫 선배 개발자가 함께 가치 있는 기술에 관한 정보와 경험을 공유하는 콘퍼런스입니다. 여기서 발표하는 사람들을 잘 기억해 주세요. 가까운 미래에는 D

frost-witch-afb.notion.site

 

 

참고로, 이 세션을 봐야 하는 이유는 스태프분이 작성해주셨다고 한다.

스탶분께서 모든 발표리허설을 들으신 다음, 해당 세션 소개글에 `봐야 하는 이유`를 일일이 작성해주셨다고... (감사합니다 꾸벅)

 

이번엔 발표자로 임하는 것이기 때문에 조금 다르게 후기를 작성해보려 한다. 

유스콘 2024에 대한 후기보다는, 발표자 신분으로 내가 느끼고 배운점 위주로 작성해보려 한다.


발표 준비하면서 느낀점

사실 처음에 내가 생각했던 주제는 `다중 서버 환경에서 폴링과 Shedlock을 통해 똑똑하게 캐싱하기`였다.

그리고 처음에는 20분동안 발표하려고 했다.

그런데 생각해보니, 발표 소개에 shedlock, 폴링의 내용을 녹이고 일단 주제는 간략하게 하는 것이 괜찮다는 생각이 들어서 `다중 서버 환경에서 똑똑하게 캐싱하기`로 변경했다.

 

1차 리허설 이후, 제이슨이 hands-on 발표도 고려해보는 게 어떠냐고 제안해주셨는데 괜찮다는 생각이 들었다.

(hands-on 발표란, 실습이 포함된 50분 발표이다.)

폴링과 shedlock을 적용하는 실습으로 개념 소개하는 것도 되게 괜찮아보여서 제안을 바로 수락했고, hands-on 발표로 준비하게 되었다.

hands-on 발표를 하려고 커밋한 이력

 

2차 리허설 이후, 해당 세션 발표의 내용 양이 좀 많아 50분 발표를 해보는건 어떻겠냐고 제이슨이 제안해주셨다.

hands-on 환경설정 구축도 좀 고민이긴 했다. redis를 모두 깔아오라고 할 수도 없고, 그렇다고 docker-compose로 하자니 docker가 안깔려있는 분도 있을 것 같고. 서로 다른 application을 띄워서 다중 서버(를 흉내내도록 포트 여러개 띄우는 거긴 하지만..) 환경을 구축하는 실습 시간도 좀 걸릴 것 같고.

 

그렇게 내 발표는 `다중 서버 환경에서 똑똑하게 캐싱하기` 라는 주제로 50분 발표로 확정이 됐다!

 

50분 발표로 바뀌면서, 그냥 main 브랜치에 모든 코드를 `feat: 스케줄러 및 폴링 코드 작성` 커밋에 다 때려박았다 ㅋㅋ

 

준비하면서 느낀 점은,,, 아래 세 가지다.

  • 발표 자료 만드는게 꽤나 에너지가 많이 소요된다는 점
  • 리허설 기간동안 다른 발표자분들과 친해질 기회가 많다는 점
  • 스탶분들의 엄청난 노력 끝에 유스콘 발표가 진행된다는 점

 

첫번째로는, 생각보다 발표자료의 디자인 및 자간, 글꼴 등 고려해야될 게 많다는 점이다.

띄어쓰기, 이전/다음 슬라이드 간의 그림 간격 및 자간, 글꼴, 템플릿 등. 수정에 수정을 거듭해야 되는 것이 은근히 힘들었다.

내가 디자인을 보는 눈이 워낙 없다보니 "이 정도는 크게 거슬리지 않는데?" 라고 생각한 부분들도 다른 분들이 보기엔 "으악, 너무 거슬려~~" 하는 부분들이 꽤 있었던 모양. 사실 막상 고치다보면 재미를 붙일만도 한데, 이상하게 나는 이 디자인 수정이 힘들었다.

이 과정을 내 멘토님이신 형준님(유스방 FL님)이 정말정말 많이 도와주셨다. (여담으로 형준님은 컨퍼런스에서 엄청 자주 마주쳐서 알게됐는데, 이렇게 같이 일하게 돼서 넘 반갑고 즐거웠다. 친한 친구와 같이 일하는 느낌. 형준님이 ppt 템플릿을 거의 엄청 손봐주셔서 큰 짐덩어리를 하나 넘겨드리게 된 거 같긴 하지만...ㅋㅋㅋ ㅠㅠ) 형준님 감사합니다!!

 

둘째로는, 리허설을 준비하고 다른 발표자분들의 리허설을 들으면서 서로 친해질 기회가 많다는 점이다. "발표 너무 잘들었어요!", "오늘도 리허설하러 나오셨네요?", "이 부분에 이런 멘트를 추가하면 더 좋을 거 같아요" 와 같은 가벼운 피드백을 포함한 대화가 오가다보니 자연스럽게 서로 친해지게 된다. 그러다가 "오늘 저녁 뭐먹죠?" 하는 가벼운 대화를 하면서 긴장도 풀고. 발표준비를 하면서 기술적 지식 뿐 아니라, 네트워킹도 같이 얻어가는 느낌이었다.

 

셋째로는, 스태프분들이 장소대여, 축사 연사자 모집, 리허설 일정 테트리스, 비용, 발표템플릿 만들기, 카메라 등 장비 준비, 발표세션 테트리스, 청중들에게 이메일 전송, 와이파이 네트워크 등 엄청나게 많은 것들을 고려하고 준비한다는 점에 놀랐다. 따로 비용을 받고 스태프로 임하시는 것도 아니기 때문에 더욱 대단하다는 생각이 들었다. 우테코 동기인 베루스, 오찌도 스태프인데 정말 대단하다는 생각이 들었다. (참고로 스태프는 이미 유스콘에 발표한 경험이 있는 사람들만 지원할 수 있다. 그래서 나도 스태프를 할 수 있는 자격이 주어지긴 했다.) 음,,, 내가 내년에 스태프를 할지는 미정이다. 


발표하면서 느낀 점

나는 발표시간대가 꽤나 뒤쪽에 속하는 편이다.

 

사실 유스콘 참여경험이 많아서, 긴장이 발표 30분전까지도 거의 안됐다.

그러다가 오후 4시쯤, 쉬는시간에 긴장감이 스멀스멀 올라오기 시작했다.

발표를 잘 할수 있을까? 너무 일찍 끝나버리면 어떡하지? (참고로 리허설 때 30분만에 발표가 끝나버렸다. 20분발표 -> 50분발표로 변경돼서 그런가;;) 질문이 무서운게 올라오면 어떡하지? 등등.

 

나랑 같은 시간대의 다른 트랙에서 발표하시는, kotlin으로 몽고db DSL 발표자 분이랑 같이 '으아앙 너무 떨려!' 를 엄청 외치면서 발표하러 들어갔다ㅋㅋㅋ

 

발표

 

결과적으로는 발표를 잘 마칠 수 있었다!

발표시간이 37분으로 좀 짧긴 했는데, 질의응답을 12분동안이나 하면서 50분의 시간을 채울 수 있었다.

 

발표 및 Q&A를 하면서 느낀 점은, 사람들마다 이해하는 내용 및 받아들이는 부분이 다 다르다는 점!

 

내 발표자료 중 일부

 

해당 슬라이드는, 여러 서버들이 존재하며 각 서버에서 데이터를 다르게 반환한다는 점이다.

이 발표가 Shedlock 에 관한 발표다보니, 글로벌캐시 DB 환경에서 락을 걸지 않으면 데이터 변경 시 다르게 반환할 수 있다는 점을 설명한 것이다. 

 

그런데 생각해보면 위 발표자료는 혼동의 여지가 있다.

 

  • 글로벌 캐시라는 점이 명시가 되어있지 않다.
    • 글로벌 캐시라면? 9시 3초 이후가 된다고 해서 데이터가 각각의 서버마다 다르다는 점이 이해가 되지 않을 것이고,
    • 글로벌 캐시가 아니라면? 각 서버들끼리 동기화를 어떻게 하는것인지, shedlock을 건다고 해도 해결되는게 전혀 아니다라는 의문이 들 것이다.

 

위 발표자료에 `글로벌 캐시`에 shedlock을 적용 + `각각의 서버마다 로컬캐시가 존재한다는 점`을 명시한다면 듣는 분들이 조금이라도 덜 헷갈릴텐데 좀 아쉬웠다. 이거와 관련된 Q&A가 꽤 많았다. 

 

발표라는 것은, 내 머릿속에 있는 내용을 끄집어내서 말하는 것이다.

즉, 청중들과 나 사이의 배경지식이 다른 상태에서 말하는 것이다. 

"불필요한 동시적인 폴링을 막기 위한 shedlock 발표니까, 당연히 global cache 환경이라고 생각하겠지?" 라고 생각했지만,

청중들은 "로컬 캐시에 shedlock이 적용되는건가? 그럼 동기화는 어케한거지? 이게 해결이 되나?", "shedlock이 DB단에 거는건가? 커널 단에 거는건가? JVM Thread 단에 거는건가? 와 같은 고민을 할 수 있다는 점.

사실, '내 발표자료는 디자인 외에는 수정할 필요가 없어!' 라고 생각했었는데, 오만함이었다. 이번 발표를 통해, 발표자료를 더욱 꼼꼼하게 만들어야겠다는 생각이 들었다. 

 

 

그 외에도 다양한 질문들이 왔다. (그도 그럴것이, Q&A 시간만 12분이었다!)

개인적으로 인상깊었던 질문은, 온라인으로 질문받은 'Shedlock을 적용한다 해도, 운 나쁘게 특정 서버에서만 계속 폴링이 발생하는 경우가 발생할 수 있는데 이를 어떻게 해결할 것인가?' 질문이다. 

 

`폴링이 동시에 불필요적으로 많이 발생하는 것을 해결하기 위함!` 관점으로 보면 해당 현상은 전혀 문제되지 않는다.

하지만, `다른 서버가 놀아버리는데? 특정 서버만 일하고 있는데?`의 관점으로 보면 매우 적절하고 좋은 질문이라 생각이 든다.

만약 후자의 관점에서 해결책을 바라본다면 shedlock 외에 다른 해결책도 필요할 것으로 보인다. (지금 생각나는 건 이런 케이스라면 스케줄링을 젠킨스 배치 등 다르게 해야되지 않을까? 싶다.)

shedlock을 적용한 이유가 폴링이 동시에 불필요적으로 많이 발생하는 것을 해결하기 위함! 이라는 점을 조금 더 각인시켰어야 됐겠다 싶었다. 발표자료를 디테일하게, 그리고 전달하려는 바를 더욱더 상세하게 풀어서 설명해야겠다는 생각도 동시에 들었다.

 

 

그리고 Q&A 시간 이후에 질문을 해주신 분들도 꽤 많았다.

질문을 받다보니, 나도 다시 되돌아보면서 공부가 되는 느낌도 들었고 네트워킹 하는 느낌도 뿜뿜 들어서 재밌었다.

역으로 내가 배우는 느낌도 들었다.

질문을 해주신다는 것 자체가, 내 발표에 관심이 있어서라는 것이므로 질문이 많은게 넘 좋았다.

한편으론, 발표자료를 명확히 만들지 않아서 이해를 잘 못시켜드린건가 싶어 죄송스럽기도 했다.

이 두 개의 감정이 섞이니까 기분이 참.. 묘했다. 죄송스러우면서 감사한 느낌...ㅋㅋㅋ ㅜㅜㅜ

 

신기한 질문은 `shedlock이 시간단위로 받도록 구현된 이유가 뭘까?`라는 점이었는데... 사실 그 이유는 나도 모르겠다.

나는 폴링 스케줄러에 락을 걸려고 한 거였어서 그 기능을 이용한 것이고, 그런 의문은 한번도 품어보지 않았어서 매우 신기했다.

이 방향으로 질문을 생각할 수 있다는 거 자체가 한편으로 부럽기도 하고, 시야가 정말 넓은 분이라는 생각이 들었다.

(나중에 알았는데, 이분께서 유스콘 후기글을 정말 길게 작성해주셨다. 넘넘 감사합니다. https://velog.io/@seluo65/2024-YOUTHCON-%EC%B0%B8%EA%B0%80-%ED%9B%84%EA%B8%B0)


다른 발표들을 들으면서

사실 내 발표시간대가 상당히 뒤쪽이었어서, 앞타임에는 다른 분들의 발표를 들었다.

리허설까지 포함하면 거의 모든 분의 발표를 다 들은 셈이다.

그래서 모두 적기는 정말 힘들 거 같고.

 

느낀 점은, '다들 진짜 대단하고 재밌다'는 점. 거의 모든분들과 얘기를 다해봤다.

기술 관련된 얘기도 정말 재밌게 할 수 있었고, 발표를 들으면서 이 분은 이렇게 살아왔구나~ 를 알 수 있어서 좋았다.

어떤 분은 IDE에 표시되는 공식문서 위주로 JAVA를 깊게 공부하기도 하고, 어떤 분은 게임 클라이언트를 다 뜯어보기도 하고, 어떤 분은 롤 다이아를 찍어보기도 하고 (이것만 좀 성격이 다른거같긴 하지만ㅋㅋㅋㅋㅋ 그래도 대박이라 생각이 들었다.), 어떤 분은 고등학생이신데 엄청 바쁘게 살면서 발표까지 완벽하게 해내고! 다들 멋지다는 생각이 들었다. 나만 놀 궁리만 하나? 싶기도 했다ㅋㅋㅋ

 


마치며

마치고 나니 속이 후련했다~ 

내 발표시간대가 상당히 뒤쪽이었어서, 이미 발표를 마치고 자유의몸(?)이 되신 분들이 정말 많았었다.

부럽다 부럽다... 생각이 들었는데, 나도 발표를 마치는 17시 20분 쯤이 되니 행복했다!  (이제 클라이밍 하러 가야지! 라는 생각에 행복한 것도 있다ㅋㅋ)

발표 끝나고, 발표들으러 와준 지인과 함께 클라이밍 하러 갔다.

 

그래서! 하러 갔다!

 

발표 끝나고, 발표자분들과 스탶분들끼리 뒷풀이를 가는 일정이 있었다.

나는 발표를 들으러와준 지인이랑 시간 보내고 싶어서, 더클양재로 클라이밍 하러갔다. (사실 내가 클밍하고 싶은 것도 없잖아 있다ㅋㅋ)

이로 인해 뒷풀이를 참여 못하는게 아쉬웠는데, 다행히 다음에 발표자/스탶분들과 회고하는 시간이 있다고 한다. 그 때 참여해야겠다.

 

내년에도 발표자 신분으로 참여해보고 싶지만!

유스콘은 한번 발표를 하면 더 이상 유스콘에서 발표할 수가 없다.

유스콘은 발표를 처음해보는 분들이 발표의 부담을 덜기 위해 존재하는 것이기 때문!

언젠간,, 내가 멘토가 되려나? 싶은 생각도 든다. 

 

멘토로 엄청 열심히 임해주신 형준님, 그리고 좋은 기회를 마련해준 제이슨에게 다시한번 감사를 전하며!

글을 마치려 한다.

 

(왜케 감성적으로 끝나는거같지... 뭔가 오글거리는구만 허허 ㅡ,ㅡa)

반응형