C2 전의 나

C2를 시작하기 전 나의 스킬 상태

디자인

피그마로 원하는 화면을 그릴 수 있는 상태였다. 베리어블, 컴포넌트와 인스턴스 등 이론적인 부들에 있어서는 이미 알고 있었지만 나의 프로젝트에 이를 도입하는 경험은 부족했다.

개발

이전에 웹 개발에 대한 경험은 존재했으나 codecademy에서 html, css, javascript에 대한 기초 지식을 쌓은 후 ChatGPT를 이용하여 웹사이트를 만든 수준이었다. Swift에 대해서는 2021년 말에 플레이그라운드로 조건문, 반복문, 함수선언에 대해 배웠던 기억이 무의식 어딘가에 자리하고 있긴 했다. 아카데미에 오기 전 공부를 해야 한다는 생각은 들었지만 안 했고, 이곳에 와서 개발자들이 코드를 치는 모습을 직접 보면서 위기의식과 동경 사이 어딘가쯤의 감정을 느꼈던 것 같다.

프렐류드 기간동안 기초문법을 익혀보려고 ChatGPT를 사용했지만(일주일 안에 될 줄 알았다) 처참히 실패한 채로 C1에 들어왔고, 생각보다 개발에 대한 부담이 없었던지라 빨리 스킬을 쌓아야 한다는 생각이 조금 흐려진 채로 최선을 다해 첫 챌린지를 시작했다.

첫 챌린지를 시작한지 사흘차에 테드와 Learndry 개발을 함께 시작했는데, 디자인을 넘기고 이를 직접 코드로 구현하는 모습을 보며 충격을 받았다. “이게 가능하구나” 같은 류의 심정이었던 것 같다. 나보다 두 살이나 어린 사람이 이렇게 잘 하는 모습을 보며 나도 할 수 있겠다는(?) 생각을 했고, 그때부터 Codecademy에서 Swift 기초 문법부터 다시 듣기 시작했다. 굳이 영어로…그래도 많이 배운 것 같다.

서두가 길었다. C2를 시작하기 전 나의 상태는 “딱 기초 문법만 훑음” 이었다. 상수와 변수선언, 조건문과 반복문, 배열과 집합, 딕셔너리, if let과 옵셔널…꽤 많은 개념들을 익혔다고 생각한 채로 SwiftUI를 이용한 앱개발에 들어갔을 때 느꼈던 절망감이란…잊지 못할 것이다.

@State, @Environment, @Query 는 뭐고, private var은 도대체 또 뭐고….하아 나는 var let은 아는데 도대체 이것들 앞에 뭐가 이렇게 많은 건지. !$0 이건 도대체 뭐고… 내가 배운 게 Swift가 맞았을까? 하는 생각들에 시작부터 거대한 벽을 느꼈던 것 같다.

C2를 통해 이루고자 했던 나의 목표, 어떻게 했는지

디자인

사실 이번 프로젝트에서 발전시키고 싶은 역량의 80% 이상은 개발이었다. 다만 디자인 스킬에 있어서도 “제대로” 일하는 경험을 하고 싶었다. 초보 개발자와 협업한다는 마음가짐으로, 전적으로 개발자가 편안하게 작업을 할 수 있게 해준다는 마음가짐으로 작업을 했다. 하나부터 열까지 다 떠먹여주는 느낌이랄까? 그 개발자는 나니까…

디자인을 하며 최대한 덜어내는 훈련을 했다고 생각한다. 초보 개발자가 만들기 쉬워야 하기도 했고 애플의 기본 앱처럼 느껴지기를 바라기도 했다. 의도를 가지고 고민하면서 작업을 해서일까 비중을 크게 두지 않은 디자인이었지만 UX적인, 미감적인 영역에서 원하는 것 이상의 성장을 얻었다고 느낀다.

개발

개발에 대한 목표는 명확했다. “직접 앱을 만들어 배포하는 수준까지 가보기” 그래서 먼저는 두려움을 없애야겠다고 생각했다. 나는 기초문법을 한 바퀴 돌았고, 문맥을 더듬어가며 코드의 뜻을 조금씩은 알 수 있을거라 생각했다. 그리고 앱은 한 개의 파일이 아닌 여러 뷰 파일, 모델 파일들이 연결되는 형태이기에 큰 그림을 그려야 한다고 생각했다.

ChatGPT에게 명령을 내리며 개발을 시작했다. 무슨 파일을 어느 자리에 생성해야 하는지, 어떤 파일의 어떤 코드가 어디에 연결되는지 계속 물어보며 앱을 설계했다. 디자인은 구현이 어렵지 않았지만 꽤나 복잡한 앱 구조에 어려움을 겪긴 했지만 시간을 많이 투입하며 구현에 힘을 쏟았다. 그렇게 사흘만에 작동하는 앱이 만들어지게 됐다.

이 과정을 겪어보며 자신감을 얻었다. 무생물 컴퓨터인 GPT도 하는데 나는 못할까? 이 모든 개념들을 익히고 연습한다면 해낼 수 있을거라 생각했다. 그리고 큰 그림을 볼 수 있게 되었다. 앱을 만들때 어떤 세팅을 해야 하고 어떤 뷰들을 어떻게 배치해야 하는지, 데이터는 어떤 방식으로 저장할 수 있는지. 바이브코딩의 특성상 수많은 컴파일 에러가 등장했고, 왜 이런 에러가 일어나는지를 되물으며 코딩에서 일어날 수 있는 실수들에 대해 익숙해질 수 있었던 것 같다.

앱이 어느정도 완성되었을 즈음 동기들에게 이런 이야기를 들었다. “고는 다 끝났으니까 이제 뭐해요?” 하지만 나는 큰 그림에 대해 감을 잡았을 뿐, 여전히 내 스스로 앱을 만들 수 없었다. 바이브코딩으로 커서가 생각하는 동안 딴짓하는 개발자? 스스로 버그를 잡지 못하는 개발자? 그런 건 없다. 스스로 해낼 수 있도록 공부해야 한다고 생각했고, GPT의 도움을 받지 않고 스스로 앱을 개발하겠다는 마음으로 새로운 프로젝트를 생성했다.

물론 GPT를 켜지 않았던 건 아니다. 다만 코드 복붙은 일절 하지 않았다. 내가 이해했다고 생각되지 않으면 넘어가는 법이 없었다. 무조건 이해하고, 정리되었을 때 그 코드를 직접 타이핑했다.(그래서 오타로 인한 에러도 많이 겪었다.) 학습과정에 대한 정리 링크를 하단에 첨부한다.

C2 투두앱 만들기

기초 문법을 여러번 반복해서일까? 간단한 앱을 만들며 여러 개념들을 공부하는 과정이 그렇게 재미있고 즐거웠다. 예전이었으면 막막하고 어렵다고 생각했을 것 같은데, 바이브코딩을 진행해보며 느꼈던 답답함이 해소되는 기분이 정말 좋았다.

일주일정도 공부와 작업, 디버깅을 거듭하며 스스로의 힘으로 앱을 만드는 것도 성공했다. 시간을 많이 투입하면 많은 문제가 해결됨을 배웠다. 그리고 재미있으니까 머리가 훨씬 빨리 돌아갔다. 과장 조금 보태서 이런식으로만 하면 못 만들 앱이 없지 않을까? 하는 자신감도 생긴 듯 하다. (이 시기가 가장 위험하다.)


디자인 결과물 / 학습내용

디자인을 만들면서 어떤 점들을 스스로 시도했고 어떤 걸 새롭게 알게 됐는지

새로 시도한 거라면, 색상과 스타일의 프리셋을 정리하여 깔끔하게 표현하려고 했다는 것? 디자인 시스템까지는 아니더라도 확장에 큰 도움이 되는 디자인을 했다. 컴포넌트는 애플의 기본 요소를 최대한 확인했다.

이 결과물을 만들기 위해 어떤 디자인 원리나 툴을 학습했는지

디자인 원리나 툴에 대한 학습이 그렇게 깊이 이뤄지진 않았다. 다만 알고있던 디자인 이론들을 GA를 통해 복습하고, 내 앱의 UX가 이를 잘 따르고 있는가에 대해 고민해보고 수정해보는 시간을 가질 수 있었다. 퍼스널 멘토인 사야(Saya)가 UX 전문성을 가지고 있기에 다양한 피드백을 받을 수 있었다. 모달에 대한 아이디어, 요소 배치에 대한 아이디어를 얻었고, 큰 도움이 되었다.

디자인 결과물은 어떤 모습이었나

원하는 대로 90% 이상 구현되었다. 다만 여전히 사용자 경험상 카드 위치를 변경하는 일은 어렵게 느껴진다. 개발 능력의 부족에서 기인한 것이지만… 해결될 때까지 붙잡아보려고 한다!