제목을 잘지어보려했는데 지금 제 상황에서 가장 맞는 문장인것같습니다
이번글은 성장에 초점을 맞춘 1인 개발 프로젝트 마무리(출시)기념 회고록
입니다
들어가기 앞서 저는 실무경험이 없는 취업준비를 앞두고 있는 iOS개발자라는걸 말씀드립니다:)
올해 봄, 3월이 마무리되는 시점에서 진행되고있던 프로젝트가 마무리되고 새로운 팀(회사는 아니고 동아리의 내부조직이었습니다)에 들어가고싶어서 신청서를 넣고 면접을 봤었습니다. 결과는 떨어졌고 취준까지 반년정도 남은 시점에서 하고있는 프로젝트가 없다는건 조금 많이 불안했습니다
그렇게 학교에서 집을 가고있는데 속해있는 단톡방에서 팀원모집공고 카톡이 올라온걸 보게되었습니다. 조급했던건지 아니면 소속감이 필요했던건지 모집공고를 보자마자 오픈카톡방으로 연락을 했고 이런저런 설명을 듣다가 "얼굴을 뵙고 이야기를 더 나누고 싶다"
라는 답장을 보냈습니다
그리고 다음 날, 임시로 사용하는 사무실에서 만나서 이야기를 나눴고 팀에 합류하게 되었습니다
팀에 합류하기전에 제 상태는
우매함의 봉우리를 지나 절망의 계곡으로 가고있던 상태였습니다
이전 프로젝트에서 실제로 많은 성장을 이뤘고 자신감을 얻은 상태였지만 그렇다고 스스로 잘할수있는 개발자냐라는 질문에는 당당히 그렇다고 말할수 있는 상태는 아니었거든요(아마 취준을 하시는 많은 예비 개발자분들은 이때의 제 상태일 경우가 많기 때문에 제 이야기가 조금은 도움이 되었으면 좋겠네요)
지금부터는 반년간의 경험을 통해 왜 나는 그동안 성장하지 못했으며 어떻게 6개월이라는 시간동안 성장했는지에 대한 이야기를 털어내보려합니다
팀에 합류하기위해 대면으로 미팅을 했던 날, 제가 했던 가장 첫 질문은 이러했습니다
어떤 경우에 프로젝트를 마무리할 계획이신가요?
말을 참 조리있게 못했다고 생각했는데, 요지는 프로젝트의 마무리 시점
이었습니다. 애플아카데미, SOPT, 이후의 사이드프로젝트를 진행하면서 꽤나 많은 프로덕트를 만들었지만 아카데미의 두개정도의 프로젝트를 제외하고는 운영해본 경험이 없었습니다. 사실 아카데미에서 진행했던 프로젝트는 꽤나 유의미한 결과를 만들어낼수있었지만 아카데미가 끝나면서 그대로 운영이 멈췄거든요
많은 개발자분들이 진짜는 배포한 이후다
라는 이야기를 하십니다 최근 꽤나 많은 공고에서도 앱출시경험보다는 앱운영경험을 더 앞에 내세우는 경우도 많습니다. 취준까지 반년남은시점에서 이제는 정말 오래 운영할수있는 프로덕트를 만들어보고싶었습니다. 그런 마음이 담긴 질문이아니었을까 싶네요
동아리(제 경우엔 SOPT겠죠)의 경우엔 지속가능한 프로덕트를 만드는건 정말 어려운일입니다. 정말 기수당 1~2개의 프로젝트를 제외하고는 기수가 끝나면서(기수가 끝나기전에도) 프로젝트를 마무리하는 경우가 대다수입니다. 각 팀마다 당연히 다양한 이유는 있겠지만 저는 항상 아쉬웠습니다. 제가 속해있던 팀에서는 항상 타의에 의해 프로젝트가 끝났습니다. 아무리 내가 프로젝트를 지속해나가고 싶어도 혼자만으로는 진행하기 힘드니까요
특히 직전에 진행했던 프로젝트의 경우엔 BM이라던가 앱자체의 기획이 굉장히 좋았었습니다. 하지만 끝까지 시도해보고 싶었던 제 마음과 다르게 프로젝트는 기수가 끝남과 동시에 마무리하게되었습니다. 이런부분이 너무나도 아쉽게 느껴졌던 터라 이번에 새로 시작하는 프로젝트는 출시 후 운영을 제대로 했으면 좋겠다고 생각을 했습니다. 그리고 제 마음과 같은 대표 두 분의 이야기를 들었을 때 한번 더 도전을 해보기로 했습니다
팀에 합류하기로 결정했을때 가장 걱정되면서도 가장 기대되는 부분은 1인 개발
이었습니다
저는 애플아카데미에서는 아얘 코딩이란걸 처음해본 사람이었고 그러다보니 프로젝트를 할때마다 늘 배우는 입장의 팀원이었습니다. 아카데미 후반부에진행했던 마지막프로젝트를 제외하면 객관적으로 개발자로서 1인분을 하지는 못했다고 생각합니다
하지만 단순 결과만 보면(프로젝트의 기술스택, 기능들) 제가 꽤나 멋진 결과물을 만들어낸듯한 느낌이 들었습니다. 사실 이력서에서 보면 여러 기술스택이 나열된 볼륨이 꽤나 큰 프로젝트처럼 보이니까요. 어느순간 그게 제 실력인것양 착각을 했습니다. 부끄럽지만요
아카데미에서 심지어 SOPT에서도 저는 저보다 훨씬 잘하고 경험 많은 사람들과 프로젝트를 진행했습니다. 그런데 제가 각 프로젝트에서 맡은 부분은 늘 비슷하거나 같았습니다. 늘 비슷한 기능을 가진뷰, 저번에 해봤던 기능을 프로젝트만 바뀔뿐 똑같이 구현하고있다는걸 깨달았습니다
가장 쉬운 예시로는 제가 진행했던 모든 프로젝트에는 소셜로그인이 있었고 푸시 알림이 있었지만 저는 소셜로그인을 구현할줄 모르고 푸시알림을 구현할줄 몰랐습니다. 사실상 겉만 번지르르한 해본것만 해서 실속없는 개발자라는 생각이 들었습니다(좀 더 자세히 말하면 할 줄 모른다의 개념이 아니라 아얘 해본적이 없었습니다)
근데 사실 회사를 들어가면 이미 구현되어있는것들이 많을 테니까 굳이 그걸 그렇게까지 생각하지 않아도 될까요?
틀린말이 아닐수도있습니다. 하지만 지금당장 쓸일이 없더라도 할줄아는것과 못하는건 차이가 있다고 생각했습니다. 그리고 제 스스로, 취업은 현업에 계신분들이 보기에는 100% 부족하겠지만 내 스스로 할줄아는것들이 쌓여야 시작할수있다는 다짐? 각오?가 있었던것같습니다. 그 기준이라면 저는 제 스스로의 기준에도 부합하지 못한 개발자였던거겠죠
"뭐 그런거가지고 그러냐~"라고 할수도있겠지만 이력서에 혹은 포트폴리오에 있는 프로젝트에 소셜로그인, 푸시알림이라는 단어를 쓸때마다 망설여졌기도 했습니다. 아무래도 그런 기억들이나 동아리나 사이드프로젝트 면접에서 그거 물어보지마라 물어보지마라 라고 되뇌었던 기억들이 모여서 저의 아킬레스건이 되었을수도 있겠네요. 면접에서 이전에 진행했던 프로젝트를 보여주실수있나요?
라는 질문이 오면 제가 구현한 부분은 극히 일부임에도 이런 프로덕트를 만들수있는 능력이 있는 개발자로 저라는 사람을 보는게 무섭기도 했고 부담스러웠으니까요
그 동안 좋은 프로덕트를 만들어낼수있었던건 제 힘과 노력이 아니라 제 부족함을 받쳐줬던 팀원들의 힘과 노력이었다는걸 아카데미가 끝나고 1년이 넘은 시점에 깨닫게 되었습니다. 취업이란 물론 운이 중요한 요소라고 생각을 합니다. 하지만 사실상 스스로의 힘으로 해낸 무언가가 없는 개발자는 운으로 취업을 해도 문제일수도있겠다는 생각을 하게되었습니다. 지금까지 저는 온실속의 화초처럼 개발을 했다는걸 이때 깨달았습니다
누군가의 도움없이 순전히 내 힘으로 내가 해보지 않은것들을 스스로 만들어나가지 않으면 성장할수없겠다고 생각했습니다. 1인 개발은 힘들겠지만 지금 제게 가장 필요한 환경이라는 결론에 도달했습니다
프로젝트를 진행하던 도중에 백엔트 팀원분이 아무래도 현업에 종사하시는 분이기 때문에 회사에 있으신시간에 좀더 원활한 소통을 위해 주니어 백엔드 개발자를 한분더 모시기로 결정을 했습니다
그리고 그 분이 합류하시기로 결정한날 환영회 겸 회식자리를 가지게되었습니다. 사실 처음엔 기존에 계시던분은 이제 인수인계하시고 팀을 떠나시려나 싶었습니다. 그런데 계속하신다는 이야기를 듣게되었는데 이유가 참 멋있었던 기억이납니다. 인프라구축을 너무 잘해놔서 계속 맡아서 하고싶다는 이유였는데 나도 누군가한테 그런 코드를 혹은 아키텍처를 구성해놨을까라는 생각이 들었습니다
그리고 팀에 정식합류하신분은 아니지만 대표의 지인으로 웹프론트를 외주형식으로 맡겨서 진행해주시는 분이 계셨는데 그분은 중간중간 누가 새로 웹프론트로 들어오더라도 딱봐도 이해하기 쉽게 쌈뽕하게 코드를 짜놨다라고 이야기하셨는데 그 이야기를 들으면서 쌈뽕이라는 단어에 피식하긴했지만 과연 나는 좋은 코드를 만들었는가에 대한 질문에 그렇다고 이야기를 할수가 없었습니다
물론 당장 새로운 iOS팀원을 구하진 않겠지만 언젠가 새로운 사람이 들어온다면 그사람은 기존에 코드를 만들었던 나를 어떻게 평가할까에대한 생각을 조금씩 하기 시작했습니다
내가 결정한 이 구조가 다른사람이 보기 쉬운 구조일까?
부터 시작해서 다른 사람이 이 함수 이름만 봐도 어떤 함수인지 잘 알 수 있을까?
라는 기존에는 그냥 생각만 해본 고민을 실행에 옮기기 시작했습니다.
아직 모든 함수에 적용하진 못했지만 각각의 함수에대한 description을 천천히 달아두기 시작했습니다. 이렇게 적다보니 실제로 필요없는 로직이 눈에보이기 시작했고 함수명을 조금더 고민해보기 시작했으며 변수명, 함수의 분리등도 좀더 세세하게 진행할 수 있었습니다
그리고 저는 현재 swiftUI로 MVVM아키텍처를 선택해서 개발을 진행중인데 iOS MVVM은 대부분의 프로젝트에서 빈번하게 사용하지만 정형화된 구조가 없기때문에 UIkit에서는 input과 output으로 flow를 나눈다던지 혹은 redux기반의 reactorkit을 사용해 팀내에서 정형화된 MVVM구조를 사용하게 됩니다(물론 reactorkit을사용하게되면 가지게되는 여러 장점들이 더 있지만요) 저도 다양한레퍼런스를 참고해서 그중에서 swiftUI에서 redux패턴처럼 쓸수있는 view state MVVM이라는걸 선택해서 어떤 action이 들어왔을때 state를 변화시키고 state변화에따른 UI의 update를 확실히 구분할수있는 방식을 선택했습니다
아직 부족한 부분이 많지만 내 코드를 처음보는 사람이 보기 편하게 하려면 어떻게할까?
에 대한 고민을 코드에 담아내기 위한 고민의 시간을 많이가질수있었고 그 과정에서 많은걸 배울 수 있었습니다
추가적으로 나름의 문서화를 진행하기 위해 노력했습니다. 사실 어떤 문제를 해결하는데 있어서 해결방법은 다양할 수 있습니다. 중요한건 어떤 이유로 많은 선택지중 특정 솔루션을 선택했는지라고 생각했습니다. 사실 많은 문서화 방법이 있겠지만 저는 github의 pull request를 최대한 자세하게 서술하는것을 우선 목표로 삼았습니다. 어떤 문제가 있었고
어떤 과정을 통해
어떤 근거로 문제를 해결했으며
어떤 느낌이들었는지
를 최대한 자세하게 서술하기 위해 노력했습니다
이 과정에서 기술선택에 대한 이유 혹은 아키텍처나 구조를 선택한 why?에 대한 답을 스스로 내릴 수 있었습니다. 물론 스스로 이유를 말하지 못했을때는 정말 이 방식이나 이 선택이 옳았는지 대한 고민을 다시해볼수도 있었습니다
고민들을 담은 몇 가지 pull request링크를 첨부합니다
[FEAT] Social Login구현 (#54)
[FEAT] 애플 회원탈퇴 로직 구현(#77)
[REFACTOR] 주관적인 해석을 추가한 CleanArchitecture로 리팩터링(#45)
애플 아카데미에서도 그렇고 sopt에서도 그렇고 늘 기획자분들은 현업에 계시거나 경험이 많으신 분들이었습니다. 디자이너분들도 그랬던 것 같습니다. 그런 분들과 프로젝트를 해오다보니 딱히 기획 혹은 디자이너와 갈등을 겪을일이 딱히 없었습니다.
게다가 결과물까지 좋았으니 어느 순간 나는 타 파트와 소통을 잘하는 개발자다
라는 생각을 은연중에 하고있었던 모양입니다. 그러다보니 새로운 팀에서 기획 혹은 디자이너와 갈등이 있었을때 왜 기존에는 이렇게하면 해결이 되었는데 지금은 왜 안될까?
라는 생각이 들면서 속으로 팀원들을 원망하게되는 순간들도 있었습니다
시간이 지나고 많은 이야기들을 통해 해결하나가다 보니, 지금까지 저는 그 분들의 보이지 않는 배려와 노력 덕분에 좋은 결과물을 만들어낼수있었다는걸 깨달았습니다. 제 능력이 부족한 탓에 디자인을 수정해야하거나 기획을 수정해야하는 경우가 많았는데(당시에는 정말 개발을 못했거든요) 그때마다 괜찮다며 저의 부족함을 스스로 느끼지 않게끔 많은 노력과 고민을 통해 채워주셨다는걸 어느순간 느끼게 되었습니다
나는 정말 많은 분들의 배려덕분에 이렇게 성장해왔을수있었구나
디자이너와 혹은 기획자와 소통하고 의견을 조율하는것, 혹은 백엔드파트와 AOS파트와 소통하고 의견을 조율하는데 있어서 어려운 일이다
, 쉽지 않은 일이다
라는걸 인정하는 시간을 가질 수 있었습니다. 모든 문제 해결은 인정하는데서 시작하는거니까요. 협업이라는 주제에 있어서는 제대로 스타트라인에 선 느낌입니다
본격적으로 프로덕트 개발을 시작한지 4개월이 되었고 1인개발로 프로덕트를 런칭하게 되었습니다. 물론 위에서 말한 스스로 고민하는 시간을 통해 문제를 주체적으로 해결하는 측면에서는 성장에 도움이 되었을지 모릅니다. 확실히 이번 프로젝트를 하기 전과 비교하면 task가 주어지면 설령 해보지 않았던것이라도 해낼수있지않을까라는 자신감도 조금은 생기게 되었습니다
하지만, 스스로 고민하고 내린정답이 정말로 정답인지에대한 확신은 아직 부족합니다. 방향자체를 잘못잡았다면 원하는곳에 도달하지 못할수도있으니까요. 이제서야 제대로된 피드백 혹은 같이 고민하며 만들어나갈 동료에 대한 필요성이 생겼던것같습니다. 앞으로도 계속 1인개발로 진행될지 혹은 2인개발로 함께성장하는 파트를 만들어나갈지는 더 고민을 해봐야할것같습니다
사실 저는 취업준비를 할수있는 시기임에도 어쩌면 두려움때문에 시도조차 하지 못하지 않았을까라는 생각이 듭니다. 제가 지금까지 한 노력이나 고민들이 불합격이라는 결과로 인해 스스로 부정하진 않을까라는 두려움을 느끼는걸보면 말이죠. 저는 이 팀에 있으면서 인정받는 개발자라는 느낌을 받았습니다. 실제로는 제가 가진 가치, 능력보다 높게 평가해줘서 감사했고 기대에 부응하기 위해서 시간을 투자하기도했습니다. 그 결과, 성장을 이뤘고 과정 못지 않게 좋은 결과 또한 얻을 수 있었습니다
흔히 말하는 it대기업에는 갈 수 있는 실력 조차 되지 않는다는 생각이 기본적으로 깔려있다보니 제스스로의 가능성을 제가 단정짓고 스스로 질문을 던졌습니다. 내가 과연 취업시장에서 성공할수있을까라고 말이죠. 하지만 지금 생각해보면 회피할 이유를 찾기 위한게 아니었을까라는 생각이들었습니다
제가 가장 좋아한다고 하기에는 알게된지 얼마안된 월 플라워
에 나오는 대사입니다.
스스로 준비되지 않은 개발자다
, 아직 1인분도 못해내는 개발자다
, 아직 멀었다
물론 겸손을 나타내는 표현일수는 있겠지만 취업시장은 나의 가치를 평가받는 자리라고 생각합니다. 스스로도 인정하지못하는 나의 가치를 누군가 알아봐주기를 기다리는건 어쩌면 미련한게 아닐까요
프로젝트 출시를 앞두고 출시가 되면 꼭 이번프로젝트를 하면서 느낀점들을 기반으로 회고록을 작성하고싶다는 생각을 했습니다. 느낀점이 정말 많았던 시간이었고 지금 속해있는 팀에서 프로젝트를 하면서 나는 앞으로 어떤 팀에서 일하고싶은지에 대한 가치관도 조금씩 정립해나갈 수 있었거든요
앞으로 할일이 더 많아지겠네요
그래도 잘해내리라 스스로 믿어볼까합니다:)
읽어주셔서 감사합니다
좋은글 잘 읽었습니다. 글 읽다보니 제 지인이 했던말이 생각나네요
이제 취업을 생각해도 되는 시기에 사프를 계속 찾아다니는건
현실을 외면하고 도피처를 찾아다니는 것과 다름없다고.
킹치만.. 사프 재밌는걸 어떡합니까!!!
간간히 글 잘 읽고있어요 취준도 화이팅입니다!!