JAVA/JAVA | Spring 학습기록

[240406] GDSC Konkuk KPrintf 행사 참여 후기

kth990303 2024. 4. 6. 16:27
반응형

아는 지인 중 샤인(https://github.com/zbqmgldjfh)이랑 수지누나(https://github.com/sujileelea)가 발표한다고 해서 참여한 행사.

타임테이블

 

GDSC Konkuk 리더이신 현우님(https://github.com/l2hyunwoo) 이 준비하신 걸로 알고 있다. (맞나?)

 

샤인이 발표하는 헥사고날 아키텍처는 우리 팀의 일부 프로젝트에서 사용하기도 하고, 샤인이 발표하기도 해서 들어보려고 하고,

Vision Pro로 접해보는 공간 컴퓨팅도 수지누나가 발표하고, 아예 새로운 분야여서 들어보기로 했다.

그리고 CS와 함께하는 BE 이야기 세션은 흥미로워보여서 중간에 2시부터라도 들어보려 했다.

 

일정 상 12시부터 3시까지만 참여하긴 했지만 이에 대해 후기를 적어보려 한다.


헥사고날 아키텍처 넌 뭔데?

샤인이 쿠링에 헥사고날 아키텍처를 적용하면서 배운 점, 느낀 점을 발표한 것으로 알고 있다.

쿠링은 건국대 학과 공지사항을 안내해주는 앱인데, 누적다운로드가 벌써 5000+ 라고 한다. (세상에, 성공했구나!)

 

초반에는, 좋은 아키텍처는 왜 필요한지에 대한 내용이 주를 이루었다.

행위에 집중하는 코드는 처음엔 기능이 완벽할 수 있지만, 수정이 불가능하여 개선가능성 및 지속성이 적을 수 있다고 한 점이 와닿았다.

요구사항이 계속해서 추가되므로 변경에 유연하고 수정이 편한 코드가 확실히 일할 맛도 나긴 한다.

 

후반에는 헥사고날 아키텍처에 대해 설명해주었다.

먼저 적용한 이유는, 레이어드 아키텍처에서 DB 중심 의존 설계가 된다는 점 때문에 헥사고날을 적용했다고 한다.

이후에 DIP(Dependency Injection Principle)를 이용하여 repository 인터페이스 추상화를 이용하여 순환참조를 막고, Entity 를 Domain Entity와 Infra Entity (예를 들어 JPA를 사용한다면 JPA의 Entity)로 분리하여 인프라 레이어와 비즈니스 레이어를 완전히 분리하는 등. 헥사고날 아키텍처를 이용하여 클린한 아키텍처를 만드는 방법을 주로 설명해주었다.

 

port, adapter 구조를 이용하여 레이어 간의 의존성 분리를 확실히 할 수 있다는 얘기도 진행됐다.

 

발표에선 얘기가 나오지 않았지만, 이렇게 추상화를 이용하여 DIP 원칙 및 레이어 간 의존성 분리가 확실할 경우 테스트코드 작성에도 편해지는 듯하다. 테스트만의 오버라이딩 mock 객체 생성이라든지, 테스트 클래스 내에서의 의존 클래스라든지 등등.

 

참고로 port, adapter 구조에 대해 더 자세히 작성된 글이 있어서 첨부한다.

https://engineering.linecorp.com/ko/blog/port-and-adapter-architecture

 

지속 가능한 소프트웨어 설계 패턴: 포트와 어댑터 아키텍처 적용하기

들어가며 헥사고날 아키텍처(Hexagonal Architecture)로 더 잘 알려져 있는 포트와 어댑터 아키텍처(Ports and Adapters Architecture)는 인터페이스나 기반 요소(infrastructure)의 변경에 영향을 받지 않는 핵심 ..

engineering.linecorp.com

 

예전에는 헥사고날 아키텍처 발표를 들을 때는 지식을 얻어가는 느낌이 100% 였다면,

요즘은 어느 정도 배경지식이 쌓여서 그런지 내가 알고있는 지식과, 발표자분이 공유해주는 지식을 바탕으로 비교해보면서 어떤 점이 다른지? 어떻게 적용돼있는지 확인해보는 재미가 있는 듯하다.

 

우리 팀 내에서 사용되는 헥사고날 아키텍처 코드와 발표자분이 말씀해주시는 코드는 이런 점이 다르구나,

우리 팀에서는 왜 이렇게 했을까? 발표자분은 왜 이렇게 생각했을까? 아, 우리 팀 코드가 이래서 이렇게 됐구나! 싶은 부분들이 몇몇 보였다.

(보안 상 이유로 이러한 부분이 다르다는 내용을 블로그에 못 쓰는 게 아쉬울 정도)

 

생각보다 더욱 재밌게 발표를 들었다.


Vision Pro 로 접해보는 공간 컴퓨팅

수지누나가 발표한 세션.

iOS, swiftUI 쪽 세션으로 알고 있어서 전혀 못알아들을 수도 있겠다 생각하고 들었다.

하지만 수지누나가 발표대상을 생각보다 넓게 잡아준 덕분일까? iOS, swiftUI 얘기보단 Vision Pro 및 공간컴퓨팅 입문 관련 얘기가 많아 대부분은 알아들을 수 있었다

 

Vision Pro 는 MR (VR: 가상현실 + AR: 증강현실) 을 가능하게 해주는 제품으로, 애플에서 최근에 소개가 되었다고 한다.

실제로 visionOS 에서 손 동작을 섬세하게 인식할 수 있도록 아래처럼 손가락 부위를 세세하게 나누어서 프로그래밍되어 있다고 한다.

출처: https://varrall.substack.com/p/hand-tracking-in-visionos

 

이러한 제스쳐와, Reality Kit의 3D Space 공간 활용을 이용해서 활용되는 여러 예시들을 확인해보았다.

 

  • 별자리 교육 → 손 터치 및 제스쳐를 이용하여 별자리 방향의 행성을 줌인, 우주 공간에 있다는 느낌
  • 장기(의료분야) -> 세세한 손 제스쳐를 활용하여 희소성이 있는 장기에 대한 외과적인 수술 가능
  • 자동차 소개 → 실제 크기와 동일한 모형 체험, 운전 시 공기 흐름을 가상으로 확인하고 간접적으로 느껴볼 수 있음

 

공간 컴퓨팅, 진짜 괜찮아보이는데? 싶긴 했다.

아직 (사실상) 상용화 전이라 지켜봐야 알겠지만!

 

Q&A 로 Unity와의 차이에 대한 질문이 나왔었다.

아직까진 유니티가 3D 및 공간활용 면에서는 더 다양하게 만들 수 있지 않을까? 하는 질문이었다. 이에 대한 답변은, Vision Pro는 SwiftUI 및 iOS, apple 생태계 앱과의 호환성, 인터렉션을 고려하면 Vision Pro도 충분히 좋은 제품이라는 것이었다 (라고 나는 알아들었다.)

 

사실 나도 Unity가 생각이 나지 않은 건 아니었는데, 그렇다고 Vision Pro가 크게 걱정되진 않았다.

Unity는 C#계열로 게임 쪽 느낌이라고 생각했고, Vision Pro는 Apple 생태계 쪽이라 좀 많이 다른 분야로 방향이 정해지지 않을까 싶었는데,,, 이쪽 분야가 어떻게 될진 앞으로 두고봐야겠다고 생각했다.

 

 

그동안은 개발 컨퍼런스 가면 백엔드 세션만 주구장창 들어왔었는데,

이렇게 새로운 분야의 세션을 듣는 것도 꽤나 흥미로웠다. 시야도 넓어지고, 흥미 면에서도 괜찮았어서 앞으로 새로운 분야의 세션 듣는 방향도 충분히 염두에 두고 고민해볼듯! 하다.


CS와 함께 하는 BE 이야기

1시부터 2시 50분까지 진행됐으나, 비전프로 세션을 듣고 참여하여서 2시부터 해당 세션에 참여했다.

내가 들을 때에는 Scale Out vs Scale In 얘기가 나오고 있었다.

 

내가 생각한 두 방법의 차이점은, Scale Out은 병목 및 SPOF를 줄인다는 점이고 Scale In은 CPU 사용량이 전체적으로 좀 높을 때 고려해볼만한 방법이라고 생각했다. 

발표에서는 추가로 Scale Out의 네트워크 비용 이슈도 얘기해주었다.

 

그리고 발표에서 개인적으로 재밌게 들었던 case study) 이미지 처리 서버 설계 쪽 얘기도 재밌었다.

고용량 이미지 및 썸네일 처리 작업의 API 호출 빈도, 실시간성을 고려하여 서버를 별도로 분리 -> 실시간성이 꼭 요구되지 않고 non-blocking 한 성격을 지녀도 되므로 HTTP API가 아닌 MQ로 보내기 (kafka, RabbitMQ 등) 관련 얘기가 나왔다.

 

(여담으로, main server -> image server 쪽으로 요청을 겁나게 보내면 서버 다운될 가능성 쪽을 얘기할 때... 한컴타자연습 산성비 게임 얘기가 나왔는데, 제목으로 `이걸 안다면 당신은...` 라고 적혀있었다. 나는 이 게임을 실제로 플레이도 엄청 많이 했었는데... 20대 초반분들은 산성비 게임을 모르나?? 요즘 세월이 무섭다~~ 싶어서 웃음이 나왔다 ㅋㅋ)

 

발표자 분이 얘기해주기 전에, 먼저 따로 생각을 해보았는데,

같은 서버였다면 @EventListener를 이용하여 이벤트를 쏘지 않았을까 싶은데, 서버 분리는 사실상 불가피해보이고... 그렇다면 나는 Amazon SNS, SQS를 썼을 거 같다고 생각했다.

이렇게 내 생각과 발표자분의 생각을 비교해보는 재미가 쏠쏠했다. 

이번 케이스같은 경우는 거의 비슷하게 생각했지만, 이렇게 비교해보면서 발표자분의 지식을 배워가는 재미가 쏠쏠하다. 발표자분과 다르게 생각했을 때는, 이러한 이유로 인해 내 방법은 안되겠구나! 또는 이러한 이유로 트레이드오프가 되는구나! 하는 재미가 있다.

같게 생각했을 때도 나쁘진 않은게, 아주 얕디 얕은 경험이지만 나도 경험이 쌓이긴 했구나! 생각이 들어서 뿌듯하다

 

그 외에도 DB clustered index, innodb, temporary table 관련 DB 얘기도 나왔고, JIT Compiler과 JVM Warm Up 얘기도 나왔다.

발표 때 MyISAM 엔진 얘기가 나왔는데 너무 오랜만이었다. 우리 팀에서는 MySQL 디비에선 innoDB 엔진을 사용해가지고... MyISAM은 우아한테크코스 시절 (1~2년전..?) 때 마지막으로 봤어서 괜히 옛친구를 만난 느낌이었다. (하지만 싫다. MyISAM 저리가라~~)

그리고 temporary table은... 얼마 전에 사내에서 using filesort + using temporary 로 좀 느려진 이슈가 있었어서 반가웠다.

 

JVM Warm Up은 if kakao 2022 의 https://www.youtube.com/watch?v=CQi3SS2YspY  세션이 너무 유명해서리.

이게 바로 생각났다.

이참에 다시 봐야지.


여담으로 망나니개발자(https://mangkyu.tistory.com/) 님이 우리 학교 출신이었다는 걸 오늘 처음 알게됐다.

생각해보니 망나니개발자님이랑 샤인이랑 아는 사이이고, 망나니개발자님이랑 내 친구랑 같은 회사에서 일하고... 진짜 개발판이 좁다 싶었다.

 

또, 이번 행사로 누누(이현우님)의 실물을 첨으로 뵙게 됐다.

GDSC 또는 지인의 지인 등으로 건너건너 알게 된 사이인데, 이번에 실물로 뵙게 돼서 반가웠다.

 

그리고 발표자분들이 내 지인들이라서 신기하기도 하고.

진짜 개발판 좁다 ㅋㅋ

반응형