관리 메뉴

사과하는 제라스

[회고] Apple Developer Academy @ POSTECH 3기 33, 34주차 회고(feat. KWDC24) 본문

Apple Developer Academy @ POSTECH

[회고] Apple Developer Academy @ POSTECH 3기 33, 34주차 회고(feat. KWDC24)

Xerath(제라스) 2024. 11. 2. 23:06

목차

    728x90
    반응형

    서론

    안녕하세요. 개발자 제라스입니다~!👋🏻 🤖 👋🏻

     

    요즘 날씨가 엄청 추워져서 그런지 잠도 자꾸 오고,,,

    저녁 즈음이면 기운도 없고 막 그러는데

    나이가 들어서 그런건가...? (27살이...기운 빠지는 소리하네 ㅋㅋㅋㅋㅋㅋㅋ)

     

    무튼 비타민 약도 잘 챙겨먹고,

    일교차 심한 날은 더더욱 조심하고,

    아토피도 늘 관리를 잘해야겠습니다 ㅎㅎ

     

    아니 라스야 그건 그렇고 또 2주동안이나 회고를 안한거냐??

    네...ㅎㅎㅎ

     

    아니 근데 진짜아니 근데 진짜 아니 근데 진짜 아니 근데 진짜

    아니 근데 진짜 요즘 Macro 프로젝트에 Shazam 기능을 책임지고 구현해야 하는데...

    정말 정보도 없고,, 도움받을 수 있는 곳도 없다보니 상당히 시간을 많이 들여가면서 바빴었거든요 ㅠㅠㅠ

     

    우리 앱의 아주 핵심 기능이자 다른 앱들과 차별점을 줄 수 있는 부분이라 반드시 해내야 하는데

    그래도 지금 이렇게 회고를 쓰고 있단 건 해결해냈다는 거겠죠 ㅎㅎㅎ

    지금은 정말 행복합니다 ㅋㅋㅋㅋㅋㅋㅋ

     

    무튼, 이제 겨울이 다가오는데 다들 캐롤 많이 들으시나요??

    요즘 제 플리엔 캐롤 종소리가 가득 울리고 있습니다 🔔~🔔~

    다들 캐롤 플리 많이 들으시고 지금 읽고 계실 즈음엔 한창 유명해져있을 저희 앱 Sqoop 애용해주세요~!

     

    그럼 늦긴 했지만...ㅠㅠㅠ

    한번 지난 2주 동안의 회고를 시작해보겠습니다~!!

     

    누구와도 다르게 ShazamKit을 사용하는 방법

    "어떤 Youtube 영상에서 포함된 음악 정보를 Shazam을 통해 검색 후 Apple Music ID를 뽑아내기"

     

    이번 Macro 프로젝트에서 제가 책임지고 맡은 구현 기능이에요.

    이게 말은 정말 쉽지만...쉽지 않았어요 ㅠㅠㅠ

     

    지난 회고(https://xerathcoder.tistory.com/322)에서는 내장된 mp3 파일을 가지고 해냈지만,

    결국엔 직접 수작업으로 음원을 추출해서 넣는게 아니라 앱에서 알아서 해줘야하는 문제가 남아있었죠??

    이게 생각보다 시간이 많이 들었습니다 ㅠㅠ

     

    하지만 2주동안 이 덕분에 음원에 대한 공부도 많이 할 수 있었습니다 ㅎㅎ

    그리구 정말 고민을 오래해보다가

    GitHub에서 다른 해외 개발자 분들과도 메일과 이슈를 통해 소통을 시도했습니다.

    https://github.com/alexeichhorn/YouTubeKit/issues/58 

     

    QUESTION: How to get the middle of audio? · Issue #58 · alexeichhorn/YouTubeKit

    Hello, Alex. I asked about extracting part of audio to you, and I solved that problem. Thank You! But, got something wrong about getting middle part of audio. I tried components.queryItems?.append(...

    github.com

     

    일주일에 거쳐 메일을 주고 받고, Issue를 통해서 문제를 공유한 결과...!

    발생하던 문제들을 해결할 수 있었습니다 ㅎㅎㅎ

    이 문제는 추후 포스팅을 올리도록 할게요~~😄😄

     

    그래서 무엇을 구현했느냐..?!

     

    1. 일단 라이브러리를 통해 외부 Audio 파일을 만들고,

    2. 이걸 빠른 시간 내로 다운로드해서,

    3. 2분 단위로 잘라서 Shazam Signature들을 만들어서,

    4. Shazam 검색을 통해 Apple Music ID들을 가져와야 해요.

     

    근데, 문제가 거의 한 줄마다 3-4일에 걸쳐서 해결됐습니다 ㅋㅋㅋㅋㅋㅋㅋ

    일단, Audio 파일을 가져오는게 잘 안되었고...ㅠㅠ

    빠른 시간에 가져온다는 건 더 안 되었죠...ㅠㅠㅠ

    가져오더라도 Signature로 변환하는게 쉽지 않았고요...ㅠㅠㅠㅠ

     

    하지만 이걸 구현해낸 결과...!

    Shazam을 통해 입력 장치를 통한 음원 입력이 없어도 외부의 URL에서 가져온 음원 Data들로 검색이 가능해졌습니다.

     

    앞으로의 목표는 저희 앱 Sqoop의 발전과 Sqoop의 Shazaming 기능 라이브러리화입니다.

    이러기 위해선 일단 지금도 충분히 좋은 성능(약 2.5시간 영상에서의 음원 추출에 50초 소요)이지만

    메모리 사용량을 줄이고 병렬화를 해보고, 외부 라이브러리 의존을 줄이기 위해 Youtube 내 음원을 가져올 수 있는 서버를 반영해야할 것 같습니다.

    KWDC24에 다녀오다

    한가운데에 네부캠 8기 ♥️ JK 적은 사람 누구죠 ㅋㅋㅋㅋㅋㅋㅋ (예 접니다..)

     

    지난주 10/25(금)에는 세종대학교에서 열린 KWDC24에 다녀왔습니다!

    작년엔 너무나도 가고 싶었는데... 네부캠 챌린지 기간이라 쫄려서 못갔었거든요 ㅠㅠ

    그래서 더욱 기대됐던 케떱 행사였는데...!

     

    가격이 무려... 99,000원...!!!!😱😱

    이것도 원래는 135,000원인데 얼리버드라 할인 받은 거에요 ㅠㅠ

     

    내년에는 얼마를 돌파할련지...

    아무래도 요즘 컨퍼런스 규모도 작아지고 기업들의 지원이 줄다보니 이렇게 된 것 같습니다 ㅠㅠ

     

    무튼, 이 가격이 애플스러운 KWDC를 가려고

    전날 Macro 팀원인 '한톨'과 포항에서부터 전날 미리 올라왔었습니다.

     

    전야제인 마냥 전날 함께 매크로 팀 얘기도 하고,

    앞으로 어떻게 살아갈지 진솔한 인생 얘기도 나누고...

    아저씨마냥 둘이서 소주 걸치면서 두런두런 얘기를 나눴는데 너무 재밌었습니다 ㅋㅋㅋㅋㅋㅋㅋ

    제발 여러분 푸지미 곱창 100번 가세요... 이 가격에 이 퀄리티의 곱창볶음 흔치 않습니다 ㅠㅠㅠ

     

    이렇게 KWDC를 준비한(?) 후 방문한 당일.

     

    재밌는 세션들이 많았는데, 한번 제가 들은 것들을 회고해보자면...!

     

    일단, 처음엔 라이노님의 세션을 들었습니다!

    호... 워낙 이번 Swift6에서 생겨난 것들도 많고... 아직 인지하지 못한 것들도 있기에

    세션 내용이 모두 !!를 외치면서 보진 못했습니다.

    다만, 아하 이런 것도 있구나하는 마음으로 보았던 것 같아요.

     

    특히, Swift 5.5에서 추가된 Concurrency에서 더 추가된 내용들이 나왔는데(Concurrency Executor,...)

    한번 제대로 파봐야겠다는 생각이 들었습니다.

     

    두번째 세션에서는 Pavel Zak이란 분이 마술사 복장을 하신 채 등...장...! 🧙🏻🧙🏻

    근데 정말 SwiftUI Animation을 설명하시는데...우와...진짜 엄청나게 어렵더라구요 ㅋㅋㅋㅋㅋㅋㅋ

    지난 달에 SwiftUI 스터디를 하며 SwiftUI Animation WWDC 영상을 보면서 학습을 했었는데,,,

    이 분은 정말 상상 이상으로 Animation을 사용하시더라구요 ㅋㅋㅋㅋㅋ

    정말 고인물이시다라고 느끼는 순간... 마지막에 "이 모든 것은 선형대수학입니다."라고 하시는 걸 보고는

    그 위대함에 있어서 큰 벽이 느껴졌습니다 ㅠㅠㅠ

    대단하신 분... 👏🏻👏🏻👏🏻

     

    이후 점심을 먹고는 세번째 세션을 들었는데요...!

    와...매번 책 이름으로도 너무 유명하신 이재은 님께서 진행하신 세션이었습니다.

     

    저는 크게 기술을 배우는 시간보다는 앞으로 제 개발에 영향을 끼치는 세션을 좋아하는데

    이 세션에서 재은님께서 Apple Intelligence를 가지고 경쟁력을 갖출 방법으로

    'Personal Context'를 주목하라고 하신 점이 너무 좋았습니다.

     

    결국엔 'Apple Intelligence는 다른 Chat GPT, 클로드와 같은 생성형 AI들보다 메모리 측면에서 제한적이기에

    이런 성능적인 부분보다는 '온 디바이스'라는 장점을 부각시킬 개인적인 맥락에 기반을 둔 서비스를 만든다면

    Apple Intelligence라는 기술을 활용한 가장 좋은 기능을 구현하는 것이다'라는 의미였습니다.

     

    앞으로 12월 이후 즈음에 Apple Intelligence를 쓸 수 있게 된다면,

    이날 말씀해주신 Personal Context를 잘 반영한 앱을 만들어보고 싶네요 ㅎㅎㅎ

     

    그럼 지금부터라도 아이디어 창고를 또 채워둬야죠ㅋㅋㅋㅋㅋㅋㅋ

    아 뭐 만들지...😅😅

     

    다음 세션들은 사실 아주 재밌진 않았던 것 같아요.

    DataDog이 Platinum 스폰서이다보니 홍보차원에서 세션을 진행했는데...

    흠... 분명 기능은 좋지만 워낙 비싼 서비스다보니...😅😅

    그냥 홍보 Show를 봤던 시간이었습니다.

     

    그 다음으론 Jake님의 위치 기반 서비스 세션이었는데,

    또 제가 지난주에 카카오 모빌리티 과제 전형에서 워낙 많이 썼던 내용들이 나와서 궁금했는데,

    크게 새로운 것은 없었던 것 같은...ㅋㅋㅋㅋㅋㅋㅋ

     

    사실 지도와 관련해서 아주 잘 아는 것은 아니지만

    아무래도 프로젝트 구현 때 사용해본 경험이 좀 있다보니...

    익숙한 것 같습니다.

     

    작년에 MusicSpot을 개발하면서 Apple MapKit 공부를 많이 했고,

    올해는 Kakao 과제 구현 때 Kakao Map API를 사용해봤었으니...

    이제 남은 건 구글 맵인가 ㅋㅋㅋㅋㅋㅋㅋ

     

    중규님의 친절한 에러를 위한 시스템 세션에선 Decoration Pattern을 활용한 Error 구현 방식을 볼 수 있었습니다.

    특히, 에러에 아주 민감한 핀테크 앱에서 화면 별로 에러를 핸들링하는 점이 인상깊었습니다.

     

    단순히 각각의 에러를 핸들링하는게 아닌 전역적인 관점에서 핸들링을 해야 하고,

    똑같은 Event에 대한 에러도 각 화면마다의 에러 핸들링 방식이 달라야 한다는 점이 좋았습니다.

    예를 들면, 어떤 이벤트 탭 이동 버튼 자체에서의 에러와 이벤트 탭 내에서의 에러가 다른 것처럼요...!

     

    그 다음엔 제가 그토록 기대했던 Swift-Testing에 대한 세션이었습니다.

    사실 KWDC가 있기 2주 전에 저희 네부캠 스터디에서 이번 Xcode 16에서 새로 등장한 Swift-Testing을 학습했었거든요??

    WWDC도 봐두었던지라 사실 가장 기대가 되었습니다.

     

    초반엔 Swift-Testing에 대한 기본 설명을 많이 하셨지만,

    후반엔 본인만의 생각들을 많이 말씀하신게 인상깊었고,

    그 중 Swift-Testing이 완벽하진 않지만 (ex) 비동기 코드 테스트에 대해 명확한 솔루션을 제공하지는 않음,... 등등)

    이제 시작일 뿐 점차 Testing에 있어서 좋은 패러다임을 만들어 갈 것이라는 점이 좋았습니다.

     

    마지막으론 윤용운님의 ~Copyable 세션이었는데, 이날 들은 세션들 중 가장 놀라고, 가장 인상깊었던,

    저 스스로를 또 다시 포테이토를 만들어주신 ㅋㅋㅋㅋㅋㅋㅋ

    그런 세션이었습니다.

     

    Copyable이란 것을 이날 처음 알게 되었고,

    우리가 평소에도 이 개념이 적용된 객체들을 사용하고 있었다는 사실을 알게 되었던 시간이었습니다.

    특히, ~Copyable을 통해 무조건적인 복사 작업을 방지하는 방식을

    지하철 개찰구를 예시로 들면서 설명해주셨는데... 호오오오옹이!!!!

    너무 신기하고 저걸 enum 타입으로 선언하고 ~Copyable을 함으로서 Race Condition을 방지한다는 점이...!!

    너무 재밌었습니다ㅠㅠㅠㅠㅠ 갓용운님...!!

     

    조만간 저 방식의 코드를 적용해보는 순간이 오지 않을까 싶습니다.

    https://swiftology.io/articles/typestate/

     

    Typestate - the new Design Pattern in Swift 5.9 | Swiftology

    In this article I will introduce you to Typestate pattern, popularised by Rust language, now available in Swift 5.9. You will see how the combination of generic constraints and Swift's new memory ownership model allows you to write bulletproof code.

    swiftology.io

    함께 참고하신 자료라고 올려주셨는데 함께 공유해봅니다~!!

     

    이렇게 많은 세션들을 보고나서는 제가 KWDC에서 기대한 이유 중 20%는 차지한...

     

    '나만의 네컷' 개발자 분들과의 개발 토크...!!

     

    사실 제가 6월달에 Live4Cut이라는 'Live Photo를 가지고 인생네컷을 만들어주는 앱'을 개발했었거든요...!

    (최적화에서 시간이 지연되고 있긴하지만...)

     

    하지만 이 앱과 비슷한 '나만의 네컷'이라는 앱이 나와버린...!!ㅠㅠㅠ

    심지어 10월엔 동영상 형태의 인생 네컷도 제공해주더라구요!

     

    그래서 이 기능 구현과 관련해서 AVFoundation, ffmpeg 얘기를 하려고 무작정 그 분들이 계신 곳에 찾아갔습니다 ㅋㅋㅋㅋㅋㅋㅋ

    가서 이런저런 구현 방식 얘기를 하는 도중 나만의 네컷의 iOS 개발을 주도하신 '박익범'님과 얘기를 나누었습니다.

    그 분과 나눈 얘기를 공유해보자면,

     

    '사실상 동영상은 모두 사진들의 연속일 뿐이고, 그것이 동영상이든, Live Photo든 모두 사진들을 Frame으로 쪼개어진 것들을 Compose하는 작업이기에 이 과정을 최적화하는 것이 중요하고, 그 과정을 아주 컴팩트하게 해결해주는 것이 ffmpeg(픔펙이라고 하시더라구요 ㅋㅋㅋㅋㅋㅋㅋㅋ)이기에 직접 커스텀하는 것보단 훨씬 속도 개선에 도움이 된다'

     

    였습니다.

     

    이 부분을 고려해서 저도 앞으로 영상을 자르고 합치고 등의 작업을 할 때 ffmpeg를 적극 활용해봐야겠다는 생각이 들었고,

    현재 개발 중인 Sqoop 앱에서도 이런 비슷한 방식으로 yt-dlp, pytube 등을 활용하는게 외부 의존적이지만 최적화를 상당히 시켜주는 방안이 될 것 같습니다.

     

    이렇게 모든 KWDC24 행사가 끝난 후엔 Apple Developer Academy 분들과 이렇게 기념 사진도 찍었구요~

     

    끝나고는 아무래도 제 iOS 개발의 고향이죠?

    네이버 부스트 캠프 iOS 8기 분들과 케떱향우회를 가졌습니다 ㅎㅎㅎ

     

    작년에 아쉽게 못 가서 조금 아쉬움이 남았는데 올해는 이렇게 참여해서 알찬 하루를 보내고 오니

    99000원쯤은 가치가... 아니에요... 아직도 비싸다고 생각이 듭니다ㅋㅋㅋㅋㅋㅋㅋ 😂😂

    숭고한 마음으로 앞을 바라보다.

    이젠 벌써 11월이 되었고, 어느새 채용시장도 닫혀가고 조금씩 날씨도 쌀쌀해지고 있습니다.

    올 2024년 한해도 60일 정도 남았고, 언제나 그렇듯 작년과 비교해볼 시기가 멀지 않았다고 느껴집니다.

     

    언제나 언급했듯 작년 겨울은 제게 무척이나 힘든 계절이었던 것 같아요.

    두려움도 많고, 걱정이 늘 앞섰습니다.

     

    하지만 지금 생각해보면 올 한해는 작년보다 훨씬 알찬 성장들로 가득했던 것 같습니다.

    iOS 개발에 있어서 더 자신감있고, 깊이있는 학습을 이뤄냈으니까요 ㅎㅎㅎ

     

    요즘 가끔씩 하지만 당연하다는 듯이 채용 탈락 메일이 옵니다.

    예전엔 그런 결과 하나하나에 마음이 많이 아팠지만 지금은 어른이 된 걸까요? 꽤 괜찮은 듯합니다 ㅋㅋㅋ

    다만, 이런 문자들보다 더 걱정되는 건 취업을 하고자 발버둥을 치고있는 모습이 보일 때인 것 같습니다.

     

    늘 취업이란 벽은 만만하지 않지만 넘지 못하면 아프죠.

    근데 이걸 넘으려고 스스로 없는 것도 쥐어짜면서 저의 성장보다 더 신경쓰는 것.

    결국엔 취업시기는 개발적 성장을 희생하는 것과 같다는 생각이 듭니다.

     

    올해 초 4월 즈음에 제 이상향과도 같은 러너이신 '보노'와 취업과 관련해서 만담을 나눈 적이 있습니다.

    이때, '보노'께선 취업하지 않고 공부를 하는 것이 너무 재밌다는 말씀을 하셨죠.

    저는 그 당시 너무나도 완벽하게 공감을 하진 못했었는데,

    결국은 그것이 제가 생각하는 개발자로서의 삶과 함께 가는 것 같습니다.

     

    취업은 결국엔 스스로의 성장 과정에서 뒤따라오는 것이기에

    조금 더 억지로라도 취업에 눈을 돌리지 않고 내가 하고 싶어하는 개발적 성장을 보듬어주면서

    더 평온하고 숭고하게 '제라스'라는 개발자의 삶을 응원해주면

    어디선가는 꼭 제가 좋은 역할을 할 수 있는 곳에서 즐겁게 일할 수 있을 것이라고 반드시 생각이 듭니다.

     

    그렇기에 올해 얼마 남지 않은 기간동안 다부진 개발을 위한 시간들로 채워야겠습니다. 😄 😄

    다음 주의 나에게

    2주 동안 많은 일들이 있었던 것 같은데,

    개인적으론 시간이 억지로 흘렀다는 생각이 듭니다.

    (살짝 현타가 오기도 하고... 개발적 좌절도 느끼고 그랬다는...😢😢)

     

    하지만 이번 주는 천천히 하나라도 제대로 잡는 한 주가 되길 바랍니다.

    그리고 원하던 목표와 꿈을 향해 나아가야겠습니다.

     

    그럼 다음주에도 35주차 회고로 돌아오겠습니다!

    다들 행복하세요~! 👋🏻 😀 👋🏻

    728x90
    반응형