이번엔 계절학기 종강이다...!
# 2024. 07. 12.
올해 나의 여름방학 컨텐츠 중 하나였던 애플 파운데이션 프로그램, 계절학기 과목 이름으로는 '특강: iOS 앱 개발 프로세스 기초'의 3주간의 여정이 오늘 끝났다. 지금까지 내가 들었던 그 어느 수업과도 결이 다른 진행 방식과 환경에 놀랐던 과목으로 기억에 남을 것 같다. 3주간 이 수업에서 어떤 일들을 했는지, 나름대로 평가를 해보자면 어떤지 한번 회고해보고자 한다.
이 수업은 C5에서 진행되었다. 애플 아카데미의 대부분의 일들은 여기에서 한다는 것을 언뜻 알고는 있었지만, 학부생으로서 별로 갈 일이 없는 건물이기에 어떻게 생겨먹은 장소인지는 잘 모르고 있었는데, 이번에 잠시나마 애플 디벨로퍼 아카데미의 일원이 되어 그 안으로 들어가볼 수 있었다. 시설들의 첫 인상은 '깔끔하다' 였다. 공간의 인테리어마저 애플만의 '깔끔한 철학'이 담겨있는 느낌이었다. 첫 날에 멘토님이 설명하시기를 애플 아카데미의 성격상 앞에 서서 강의할 수 있도록 되어있는 공간은 우리가 첫 날 처음으로 들어선 공간인 오디토리움 하나밖에 없다고 하셨다. 실제로도 나머지 공간들은 서로 마주보고 있는 등 수평적으로 구성되어 있었는데, 이러한 부분에서 애플의 앱 개발 철학이 담긴 것이 아닐까.
더불어 감명받은건 공간에서 나오는 수평적인 구조 뿐만 아니라 애플 아카데미의 문화 자체가 수평적으로 이루어져 있다는 것이었다. 애플 아카데미의 구성원들은 모두 닉네임을 사용하도록 되어있고, 이 닉네임의 뒤에는 절대 존칭을 붙여서는 안 된다. 이 수업 시작하기 전 내가 지은 닉네임은 '스티브' 였는데, 다른 사람이 나를 '스티브 님!' 처럼 부르면 안 된다는 이야기다. 반드시 '스티브, 이것 좀 피드백 해 주세요'와 같이 말하는 게 이곳의 문화였다.
사실 개발자 사이에서 닉네임 문화가 성행하고 있다는 건 들어보긴 했는데, 실제로 이런 문화를 마주하니 처음엔 어색했다. 큰 효과가 있을까 의구심이 들었는데, 의외로 구성원들에게 다가가는 데에 오히려 도움이 됨을 느꼈다. 평소에 학교에서는 '선배님', '조교님' 등 존칭을 붙여 부르는게 익숙해서 저절로 깍듯하게 대하는게 평소 나의 태도였는데, 존칭을 떼고 수평적으로 부르니 뭔가 마음속의 장벽이 사라진 느낌이었다. 괜히 미국 문화를 어설프게 가져다 쓰는 것 아닌가 하는 생각을 제대로 뒤집어 준 순간이었다. 하긴, 이익을 추구하는 회사에서 괜히 저런 문화를 앞장서서 가져다 쓰겠는가. 수평적인 소통이 가장 중요한 개발자들 사이에선 어쩌면 꼭 필요한 문화인지도 모르겠다.
아카데미의 일원이 되면 맥북과 아이폰을 빌려준다. 파운데이션 프로그램 말고 9개월의 정식 과정 러너들은 요것들 외에도 다양한 애플 기기들을 빌려볼 수 있다고 하더라. 어쨌든 맥북과 아이폰 모두 처음 써보는 입장이라 굉장히 설렜다. 더군다나 앞으로 개발자 커리어를 이어나가면서 한 번 이상은 맥북을 사지 싶은데, 미리 이렇게 써보고 macOS 시스템을 익혀볼 수 있어서 좋았다. 지급된 맥북은 생각보다 스펙이 좋았는데, 검색해보니 3백만원을 호가하는 기기더라. M3 Pro에 18GB RAM이 꽂힌 모델이었다. 아이폰은 iPhone 15를 받았다. Pro 모델이 아니어서 주사율이 60Hz다 보니, 원래 120Hz의 삼성 폰을 쓰던 나에게는 역체감이 좀 되었다. 굳이 폰을 세팅해서 쓰기에는 장점도 크게 없고 귀찮아서 요 녀석은 거의 쓰지 않은 것 같다.
수업 시간에는 'Miro'라는 앱을 이용해서 아이디에이션 작업을 진행했다. 아이디어 생산용 협업 툴로 나온 앱인 것 같았는데, 수업 진행을 대부분 맡았던 멘토 아이작이 앞에서 PPT로 막 설명을 해주시고, 그거에 따라서 Miro에 아이디어를 포스트잇으로 막 붙이는 방식으로 진행되었다.
배운 지 얼마나 됐다고 벌써 기억이 잘 안 나지만, 대충 회상해보건데 이 프로그램의 기본 틀은 'Challenge Based Learning' 이라고 했다. 줄여서 CBL. 그냥 무지성으로 언어를 배우고, 아 이거 만들어봐야지 하고 코딩에 돌입하는 것이 아니라, 나에게 질문을 던지면서 챌린지 문장을 만들고, 그 과정을 통해 내가 무엇을 배워야 하는지를 스스로 알게 하는 학습 방법이었다. 이 과정을 통해 나온 핵심 키워드를 통해서 여러 아이디어를 발산하고, 다시 핵심에 맞게 수렴하는 과정을 거쳐 내가 어떤 앱을 만들어야 하는지를 보다 명확하게 정립할 수 있었다. Engage, Investigate 과정 등등 떠오르는 말들은 좀 있지만 구체적으로 기억이 나질 않아 아쉽다. 내 Miro 보드를 미리 캡처해둘 걸 그랬다.
특히 세션 중에 가장 기억에 남았던 단어는 '맥가이버 칼'이었다. 아이작이 세션 중에 이런 방향으로 가서는 안된다며 언급한 단어인데, 예를 들어 칼을 만들고 싶은 사람이 '칼에 이 기능도 있으면 좋겠는데? 저 기능도 탐나는데?' 하면서 이것저것 기능들을 넣다 보면 결국 '맥가이버 칼'이 되버리고 만다고 말씀하셨다. 맥가이버 칼은 그 자체로만 보면 여러 기능이 있어 좋아보이지만, 결국 '칼'이라는 핵심 기능에 비추어 보면 결코 '잘 드는 칼'은 될 수 없다는 것이다. 나의 개발 경험을 돌이켜보면, 고등학생 때 공론장을 만들 때에도 이것도 있으면 좋겠고, 저것도 있으면 좋겠고 해서 일을 막 중구난방으로 벌려놓은 기억이 있다. 무언가를 만들어보려고 하면, 뭐든지 개발해보려는 의욕이 앞서 맥가이버 칼을 만들 가능성이 다분하다는 지적은 나에게 좋은 깨달음이 되었다.
내가 만든 앱은 'K리그 직관 기록 앱'이었다. 예나 지금이나 축구에 미쳐 사는 건 매한가지라, 아이작이 '기록'이라는 앱 주제를 던져주었을 때에도 '축구 직관 기록'이라는 생각이 가장 먼저 튀어나왔다. 안 그래도 축구 보러 다니는 K리그 팬들을 보면 블로그나 브이로그로 직관 기록들을 남기는 경우가 많이 보이는데, 그럼에도 직관 기록 앱이 마땅히 나온 것이 없었다. 내가 진짜 완전체 앱을 만들 것은 아니지만, 그래도 직관 기록 앱이 있었으면 하는 바램을 담아 'Fake app' 단계로나마 개발해보았다.
맥북에 Xcode를 깔고 SwiftUI의 기초만 예니에게서 배운 뒤 개발에 들어갔는데, 역시 처음이 그렇듯 이틀 정도는 우왕좌왕했다. SwiftUI 튜토리얼들을 찾다가 내 마음에 드는 디자인을 찾아서 그 코드를 분석하고, 몇 개 따라 적어보면서 조금씩 익혀나갔다. 생각보다 시간이 빨리 가 당황스러웠지만 조금씩 하다 보니까 결과물들이 점점 생기는 게 보여서 꽤 재밌게 코딩했던 것 같다. 특히 만족스러웠던 건 SwiftUI가 기본적으로 애플의 감성을 디자인 요소마다 그대로 녹여내고 있어서 어떻게 코딩하더라도 굉장히 예쁜 레이아웃을 볼 수 있었다. 시각적인 즐거움을 중요시하는 나에게는 이런 애플 감성의 만족감이 좋은 동력이 되었다.
공부하면서 아쉬웠던 건 시간이 좀 더 있었더라면 SwiftUI에서 출발하기보다 Swift의 기본을 먼저 다지고 왔다면 좀 더 다이나믹한 앱을 만들 수 있지 않았을까 하는 생각이 들었다. 더불어 나는 시간 이슈로 UI 부분만 대강 구현하고 실제로 글을 쓸 수 있게 한다던가 하는, 기능적인 측면에서는 구현을 하지 못했는데, 관련 컴포넌트를 찾아볼 기회가 있었더라면 어땠을까 하는 아쉬움이 남는다. 사실 핵심이 글 쓰는 건데 글을 쓰지 못하는 Fake app이 되어버렸다. 힝...
개발하면서 기억에 남았던 것은 View의 개념이었다. 디자인 요소들을 View 단위로 묶을 수 있었는데, 이를테면 위 화면들에서 나오는 사각형의 테두리 요소 - 보통 '카드'라고 불리는 디자인 요소를 하나의 View로서 만들 수 있다. 저 카드 안에 나타낼 텍스트나 사진들을 ZStack을 통해 사각형 위에 올리고 HStack, VStack을 적절히 조합해서 원하는 위치에 들어가게끔 설정을 해 놓으면 그 틀대로 요소들을 찍어낼 수 있었다. 중간 사진에서 보이는 순위표도 그런 식으로 만든 것이다. CardView라는 파일을 만든 다음, MyTeamDetailView라는 파일에서 ForEach문을 사용해 반복하여 불러오도록 구현하였다.
또 저기에서 자랑하고 싶은 것은 'See more...' 버튼 부분이다. 순위가 12위까지 표시되면 너무 지저분해 보여 5개 팀 정도만 표시되도록 하고자 했는데, 더보기 버튼이 하나 있으면 토글하여 볼 수 있으니 편리해 보여서 넣게 되었다. 사실 별 거 아닌 기능처럼 보이는데, 막상 Swift 변수 개념 공부도 해보고 레퍼런스도 찾아보며 만들어 보니 실제로 동작했을 때에 엄청 뿌듯했던 기억이 있다.
개발 시간이 끝난 이후에는 만들어낸 프로토타입을 발표하는 시간이었다. 아무래도 좋아하는 걸 앱으로 만들었다 보니까 확실히 발표 때 할 말들이 많았다. (절~대로 발표 전날 홍명보가 뒤통수를 치고 광주전까지 져서 할 말이 많았던 건 아니다.) 주어진 시간이 20분이었는데 발표 전에는 어떻게 이 시간을 다 채우나 고민했었는데 정작 발표 때에는 말미에 시간이 부족해 너무 후루룩 넘어갔다. TMI를 너무 많이 말했나보다. 다른 분들의 발표도 쭉 들으니 전체적으로 기능적인 면을 잘 구현해놓으신 분들이 많았다. 드럼 연습 기록을 테마로 삼으신 분도 계셨고, 지도 위에 기록되는 여행 앱을 만드신 분도 계셨다. 특히 다꾸 앱을 만드신 분이 기억에 남는데, 실제로 그림을 그리고 사진을 오려붙여서 사진으로 생성할 수 있도록 구현을 하셨더라. 물론 패키지를 쓰셨겠지만 생각보다 Fake App 단계에서 많은 기능들을 보여줄 수 있구나 하는 걸 느끼면서, 다시금 내 앱에 글쓰기 기능이 없다는 점이 두고두고 아쉬웠다.
생각보다 많은 걸 배워간 수업이었다고 느끼면서도, 3주라는 시간이 이 수업에서 제시하는 것들을 모두 흡수하기에는 조금 부족한 시간이었다고 느꼈다. 수업 장소와 수업 방식, 과제까지 모두 보통의 수업과는 결을 달리하니 기존의 앱 개발 방식에 대한 고정관념에서 조금 벗어날 수 있었던 특색있는 경험이었다. 특히 맥북을 사용해본 경험이 머리에 계속 맴돌기도 하고, 더불어 같은 학교 구성원이지만 이질적인 곳처럼 느껴졌던 애플 아카데미라는 곳에 몇 발짝 더 가까워진 소중한 경험이었다고 평가하고 싶다.
나는 요즘 포카전 준비위원회 일을 하고 있다. 1지망으로 썼던 디자인팀에 합격하여 일하고 있는데, 만만치가 않다. 팀원들과 다양한 작업을 해보면서 정말 다이나믹한 상황과 매일 마주하고 있고, 아마 이것들을 잘 헤쳐나간다면 내 능력치가 한층 더 오를 수 있겠다고 생각하고 있다.
다음 글은 축구에 관한 이야기로 돌아오겠다고 다짐하면서 마친다.