2023년 개발자로서의 삶

2023년 12월 31일 작성

졸프우테코Cloud Club당근알바

올해 배운 것들을 상세히 적어보려고한다.

1. 우아한테크코스 5기 🌟

나에게 2023은 우테코의 해라도 과언이 아닐만큼 대부분의 시간을 차지했던 과정이다. 2월부터 11월까지 교육을 받았었다. 비전공자도, 초보자도 지원할 수 있는 곳이라 언어의 기초부터 교육받았다. 언어만을 공부하는 레벨 1, 웹 백엔드 프레임워크를 맛보는 레벨2, 팀프로젝트 레벨3, 응용과 깊은 지식을 찾는 레벨4. 인생에서 또 이렇게 차근차근 공부할 수 있는 날이 올까 싶다.

기술적인 것, 마음가짐, 소프트스킬 등 정말 많이 배웠지만 가장 먼저 생각나는 것들을 적어보려한다.

나만의 학습 방법을 찾다

난 사실 내가 초보자라는 생각을 안해봤었는데, 공부하는 방법에 대해서는 초보자였던 것 같다. 이 교육과정을 다 밟고 나니, 앞으로 어떤 언어라도, 어떤 기술이더라도 어떤 스텝을 밟으며 학습해야하는지에 대한 감이 생겼다. 누구에게나 적용되는 방법이 아닌, 나를 위한 방식이다.

언어

언어마다 생겨난 배경이 있고, 잘하는 게 있다. 내가 사용하는 언어를 왜 선택하게 되었는지를 설명할 수 있을 정도로 이해한다. 이 때, 난 책을 읽는 것을 선호하는데 로우레벨을 이해하기 좋기 때문이다. 책은 한 사람이 흐름을 잡고 설명하기 때문에 기초를 잡는데 가장 좋다. 그리고 스터디를 하며 서로 설명할 수 있는 수준이 되면 좋은 것같다. 나는 온보딩조와 함께 했던 모던자바인액션스터디가 참 재미있었고, 앞으로도 이 경험을 바탕으로 새로운 언어를 공부할 것 같다.

프레임워크

프레임워크를 시작할 때는 사이즈가 작은 토이프로젝트로 한 프레임워크의 전체적인 흐름을 파악하는 것이 중요한 것 같다. 보통 흐름이라고 하면, 데이터의 흐름을 이야기한다고 생각한다. 난 처음 웹개발을 동아리에서 express로 시작했는데, 이 때 큰 흐름을 생각하지 않고 코드 한줄 한줄을 따라치는데 급급했다. 실제로, express 를 이해하는 데에는 꽤 긴 시간이 걸렸다. 한 6개월정도 지나서 혼자 프로젝트를 해보고 큰 줄기를 설명할 수 있게 된 것 같다. 하하

내가 계획을 세우지 않는 편이긴 하지만 이후에는 본능적으로 방식을 바꾸게 됐다. 스프링의 경우, 아주 예전에 3시간짜리 무료강의를 듣고 시작한걸 두고두고 잘한 일이라 생각하고 Flutter도 무료강의를 잠깐 들으며 언어의 감을 잡고, 바로 앱을 만들면서 외부와 데이터를 어떻게 주고받고 보관하는지 몸으로 배웠다. 리액트의 경우는 지금 단순한 것(블로그)를 만들면서 간단한 데이터의 흐름을 파악해두었다.

내가 앞으로도 이렇게 할 수 있는 것은, 잘 가르치는 사람들이 택한 방식이라고 확신하기 때문이다. 나는 우테코가 교육을 잘 하는 기관이라고 생각한다. 처음에 깊이있게 학습하는 것을 강조했던 우테코가, 프레임워크를 처음 배우는 레벨에서는 예외적으로 토끼굴로 들어가지 말라는 조언을 자주 했었다. 말이 길어졌는데 앞으로 어떤 프레임워크/서비스를 사용하더라도 처음부터 토끼굴 파는걸 경계할 것이다.

데이터베이스

데이터베이스를 전공 수업 때 열심히 배웠었는데, 그 때의 내 관심사는 사용방법과 얕은 원리 정도를 몸에 새기는 것이었다. 반면 인덱스, 트랜잭션, 장애감내와 같은 것들을 해결할 때 어떤 고민을 해야하는지에 대해 (자세히 배우지도 않았고) 생각해보지 못했었다. 그런데 실무 관점에서 교육하는 우테코에서, 레벨4에 집중적으로 알려줬던 것이 이 세 가지였다. 작년에 시스템디자인인터뷰를 읽을 때는 애플리케이션 개발자가 CAP 이론을 왜 알아야하는지도 와닿지 않았던 내가 우테코에서는 실제 관리자가 된것처럼, 장애 발생 가능성과 마땅한 해결책을 세우는 연습을 할 수 있었다.

데이터베이스를 문제 없이 잘 사용하기 위해선 깊은 이해가 필요하고, 그를 위해선 직접 테스트하는 실험정신이 필요함을 알게됐다. 실험이라 함은 직접 쿼리를 돌려보고 비교하는 것이다. 데이터가 없으면 프로시저라도 만들어서 데이터를 많이 넣고 항상 쿼리 실행계획을 보고.. 구현 뒤에는 항상 내 애플리케이션에서 나가는 쿼리의 성능을 리뷰하며 리팩토링한다.

이 부분은 레벨4 때 알게되었고 마음먹은 것들이라 아직 훈련이 부족하다. 하지만 지난 10개월간 나는 테스트로 받는 피드백에 익숙해졌으며, 덕분에 실험정신을 많이 키웠다고 생각한다. 이를 바탕으로 데이터베이스와도 더 더 친해질 수 있을 거라 생각한다! Datagrip 같은 데이터베이스 클라이언트들을 자주 활용하고 익숙해지자.

선택보다 선택의 기준이 더 중요하다

난 사실 이 교육과정에 지원한 목적이 명료했는데, 객체지향/클린코드/테스트 훈련과 빠른 피드백이었다. 나는 거의 반 전공자라, 전공 기초라 함은 어떤 지식들이 있는지, 그리고 어떻게 공부해야하는지 어느정도 알고 있어 그 부분은 두려운 적이 한번도 없었다. 하지만 아무리 동아리와 프로젝트를 많이 경험해봐도 내가 좋은 코드를 짜는지에 대한 불확신만 커져갔다. 이 때를 생각하면, 개발세계에 어떤 패러다임들이 있는지를 아예 몰랐기 때문에 어떤 의견을 따라가야하는지, 자아가 없었다고 생각든다. 코드는 많이 짜봤지만 그 때마다 내 곁에 누가 있는지, 그리고 그 사람들이 생각을 하는지에 따라 내 신념도 흔들렸었다.

하지만 이제 나만의 기준을 세울 수 있는 줏대가 생겼다고 본다. 이건 훌륭한 크루들과 항상 토론하며 공부했기 때문에 가능했던 것 같다. 그래서 앞으로도 크루들/동아리에서 훌륭한 사람들과 함께 성장하는 것을 목표로하게 되었다.

아, 근데 줏대라고 해서 언제나 똑같은 기준을 가진 개발자가 된다는 건 아니다. 난 강경 객체지향파도, 클린코드파도 아니다.. 적어도 팀/시기 별로 더 중요한 가치가 무엇인지 파악하고 나면, 그 때부턴 기준에 따라 일관성 있게 선택할 줄 앎을 이야기 한것이다. 이런 경험이 쌓이면 내가 팀을 구성하면서도 알맞은 방향을 설정할 수 있는 사람이 될 수 있을거라 기대한다.

언제나 같은 기준을 가질 수 없기 때문에 끝없이 공부하고 고민해야할 직업이다. 이렇게 생각했을 때 설레고 두근거리는 걸 보면 난 계속 이 길을 갈 수 있을 것 같다.

그렇다. 우테코는 내가 더 확신을 가질 수 있는 시간을 선물해준 곳이다.

2. 전공 캡스톤 프로젝트 ✌🏻

절대적으로 부족한 시간

학교의 졸업 요건 중 하나인 캡스톤프로젝트를 작년 2학기에 시작한 상태였고, 이번 학기에 완성하고 발표하는 것이 목표였다. 첫 아이디어는 내가 직접 겪은 어려움을 해결하는 솔루션이었다. NLP를 기반한 이 아이디어를 디벨롭하는 데 스타트 학기 대부분을 썼다.

그런데 우린 곧 아이디어를 바꾸게 됐다. 이유는 구현의 난이도가 ML 알못인 우리가 학습해서 할 수 있는 정도가 아니었다는 것이었다. 학습과 병행하기엔 우리 팀원들 전부가 부트캠프/회사를 다니던 중이었기 때문에 시간이 절대적으로 부족했다. 이 후에 길을 잃고 아이데이션을 반복하며 그렇게 두번째 학기가 시작 될 때야 서비스 구현을 시작할 수 있었다.

백엔드 유리천장 깨기!

아이데이션을 새로 할 때마다 필요한 역할도 달라져서 역할도 새로 짰어야했는데, 그 때마다 나는 내가 새로 학습을 많이 해야하는 역할은 피했다. 내심 우테코를 하면서 책임지지 못할 도전은 삼가야한다는 생각을 했기 때문이다. 그래서 마지막 아이디어에서도 백엔드 개발자 역할을 하게 됐었다. 그런데 4월에 현직자 멘토링 중 피드백을 받으면서 생각을 바꿨었다. 우리 프로젝트에 백엔드 2명 프론트 2명 이렇게 하는 것이 부적절하다는 피드백이 있었다. 내가 여기서 백엔드를 하는 건 책임보다는 안주에 가깝다는 생각이 들었고 결국은 내가 프론트엔드 역할로 가겠다고 자원했다.

지금 돌아봤을 땐 그러길 정말 잘했다고 생각한다. 이전에 한번도 프론트엔드 프레임워크를 활용해서 프로젝트를 진행해본적이 없었는데, 이번 기회를 통해 더 협업을 잘 할 수 있는 역량을 얻었다고 생각한다.

이번 프로젝트에서 경험한 것들

  • 프론트엔드 아키텍처 (MVVM)
  • 상태 관리
  • priavte API 사용: 문서가 열악한 API를 사용하는 클라이언트의 입장이 되어보니 정말 힘들었다.
  • Swift 네이티브 코드: ios 라이브러리를 사용했기 때문에 swift도 사용할 줄 알아야했다. (iOS 개발하는 친구에게 많이 질문했던 기억이 난다. 땡큐 다나!)
  • 서버 통신 (retrofit)

이 경험들로부터의 가장 큰 수확은, 내가 UI를 구현하는 작업도 꽤나 좋아하고 재미있어한다는 사실을 알게된 것이다. 그동안, 누군가 백엔드를 선택해서 공부하는 이유를 물으면 프론트엔드 개발에 흥미를 못 느껴서 그렇다고 이야기 했는데, 템플릿엔진이나 써본 내 스스로가 그런 말할 자격이 있나 싶었었다..

근데 이번에 Flutter 로 화면을 구현하면서 적절한 상태관리를 위해 얼마나 논리적으로 생각해야하는지, raw한 데이터들로 어떻게 우아하게 문제를 풀어내야하는지 경험해보고 나니 프론트엔드도 정말 흥미로운 분야라고 생각을 바꿀 수 있었다. 그리고 경험해보지 않아서 가지고 있었던 두려움도 많이 없앨 수 있었다.

앞으로는 백엔드를 선택한 사람이라고 날 소개하지 않을 거같다. 그냥 백엔드 경험이 좀 더 많은 사람 정도로 소개하겠지. 졸프 덕분에 지금 블로그도 내가 리액트로 만들 용기를 가질 수 있게 된 거 아닐까 싶다. 누군가의 말을 빌려 표현하면 졸프는 내 유리천장을 깬 경험이 되었다. 고 우테코랑 병행하면서 힘들긴 했다. 우리 팀은 아이디어 변경도 많고 배우면서 했기 때문에 그로스 마지막 발표날 까지 밤새서 구현했던 기억이 난다. 멘땅에 헤딩하며 코딩하는 건 또 얼마만인지, 팀원들/gpt 에게 질문도 참 많이 했다. 그래서 더 재미있던 기억이다.

각자 메인잡이 있어서 시간부족으로 힘든 상황에서도 단 한번도 감정적이지않고, 프로페셔널하게 마무리해준 팀원들에게 가장 감사하다. 그리고 A+ 을 받아 아름다운 엔딩을 맞았다 😉

3. AWS Cloud Clubs 운영

나에게는 굉장히 새로운 도전이었던 ACC 운영 경험이다.

올해 초였나, AWS 본사에서 AWS User Student Group(AUSG) 멤버들에게 한국에 클라우드 클럽을 런칭하기 전 우리에게 각 학교 시범운영을 제안했었다. 하지만 나는 우테코 일정과 병행하는 것은 무리라 판단해 지원하지 않았었다. 그래서 아쉬운 마음을 뒤로하고 우테코 활동에 전념했던 것 같다. 그런데, 8월 초에 우리 학교 클라우드클럽을 운영하기로 한 친구에게 함께 운영해보지 않겠냐는 연락이 왔다.

사실 내가 굉장히 신뢰하던 친구라, 함께 진행하는 것이 설레기도 하고 바쁘지만 공동 운영은 가능할 것 같다는 생각이 들어 흔쾌히 수락했다.

하지만 동아리를 만드는 것은 정말 힘든 일이었다. 나와 친구를 이끌어줄 사람은 없었는데 우리는 개발 경험은 잘 쌓아왔어도 커뮤니티를 운영해본 경험이 없어 그야말로 멘땅에 헤딩을 하는 수준이었다. 그래도 AUSG 출신 운영진들끼리는 연합하는 회의가 매주 있어서 어느정도 도움받을 수도 있었다.

직접 사람을 뽑는 경험

앞서 말했듯, 친구와 난 둘 다 동아리 운영 경험이 없었고, 그래서 더욱이 리크루팅 경험이 없었다. 가장 문제가 되었던 부분은 일정과 그에 맞춰 빠르게 준비하는 것이었다. 왜냐하면 리크루팅을 위해서는 우리를 알릴 시간부터 확보해야했기 때문이다. 게다가 둘 다 코로나/휴학으로 학교에 아는 친구들도 많이 없었기 때문에 걱정을 많이 했었다.

그래도 친구가 학교에 복학하면서, 대담하게 대형강의 수업시간에 앞에 나가서 홍보도 하고 그 수업 교수님께서 사캠 공지에도 우리 동아리를 홍보해주셔서 덕분에 지원자를 많이 확보할 수 있었던 것 같다.

아, 쓰고자 하면 정말 많지만 리크루팅 전 과정에서 내가 가장 많이 얻은 것은 바로

  • 지원자로서 어떻게 자신을 소개할 때 매력적인지를 목격한 경험
  • 반대로 어떻게 하면 실망할 수 있는지도 알게된 경험

이다. 가장 인상적이었던 지원자는 면접에서도 성장하는 모습을 보여줬었다. 어느 순간은 내가 이런 멋진 사람을 평가할 주제가 되나 부끄러운 맘이 들기도 했다. 하지만 그도 잠시, 내가 이 자리에 오기로한 용기 덕에 나보다 대단한 사람들과 동등하게 마주앉아 서로를 어필해볼 수 있다는게 너무 재밌어서 밀도 있는 리크루팅을 진행할 수 있었다. 그리고 나도, 면접관이 면접자인 나에게 어필하는 사람이 될 수 있기를 꿈꾸며 준비할 수 있게 된 것 같다.

'함께' 자라는 일

커뮤니티를 만들면서 배웠던 것은 정말 값지다. 우선 책임감이 생기고 함께 운영하는 사람들과의 유대감이 정말 높아진다. 같이 하는 사람들은 알까? 싶지만 사실 정말 많이 의지하고 있고 사적으로는 볼일 없는 사람들인데도 아끼는 마음이 점점 더 커진다. 그리고 나도 이 사람들을 신뢰하는 만큼 잘하고 싶고, 그러기 위해 노력한다.

나는 혼자서는 계획적이지도 않고 별로 하기 싫으면 그만 두기도 서슴지 않는다. 하지만 함께 일할 때만큼은 누를 끼치고 싶지 않은 마음에 계획을 하고, 힘들 땐 돌파구를 찾기위해 엄청 몰입하게 된다. 그리고 난 그런 나로 살 때 행복하다. 난 정말로, 동아리 운영하는 내 모습이 좋았다. 왜냐하면,

난 다시 한번 내 꿈으로 프로그래밍을 택할 수 있게 되는 것이다. 누군가 그랬기 때문이다, 프로그래밍은 협력성이 강하다고 - 개인에게 있어 프로그래밍은 이용자들의 요구를 만족하기 위해 함께 문제를 해결해나가는 협력의 과정일 수 있다고.

그렇다면 해본 것들 중에 개발이 재밌어서 엔지니어를 택한 생각 없는 사람이 아니라 함께 운영하고 가꿔가고 만드는 일, 소프트웨어 엔지니어링에 대한 스스로의 확신을 얻을 수 있던 것이다.

이게 내가 클라우드 클럽을 운영하며 얻은 가장 큰 자산이다.

번외

ACC덕에 인생 처음으로 발표 준비하는 법을 정립하기도 하고 오랜만에 함께의 가치를 개발이 아닌 곳에서도 느낄 수 있었다.

발표 준비하는 법

캡틴을 하면서 직접 AWS 서비스 핸즈온 세션들을 준비했던 것들도 정말 좋은 경험이었다. 사실 아직도 많이 부족하다 느끼는게, 발표가 2주에 한번씩 있는데 발표 전날 항상 밤을 샜었다. 그 만큼 발표 실력도 부족했었고, 경험 자체가 없어서 고생을 많이 했다. 사실 우테코에서도 발표 한번을 했었는데, 계속 수정하고 바꾸고 그러느라 3일을 제대로 못 잤었다.

그동안 한번도 남들은 어떤 순서로 발표 준비하는지를 궁금해한적이 없었는데, 이렇게 비효율적인 방법으로는 어디 더 큰 곳에 가서는 발표 준비하다가 쓰러지겠구나, 게다가 이런 생각이 든 이상 난 도전도 잘 못하게 되겠구나 싶어 위기의식이 들었다. 그래서 친구에게 어떤 순서로 발표를 준비하는지 묻고, 그 방법이랑 비교하면서 개선점을 찾을 수 있었다.

난 보통 이런 흐름으로 발표를 준비하다 혼란을 겪었다.

  1. 대본 초안을 짜지 않고 PPT를 바로 켰다.
  2. 모든 페이지를 처음부터 완벽하게 만드려고 했다.
  3. 발표를 하면 메끄럽지 않아서 계속 수정했다.
  4. 계속 페이지를 기준으로 매몰돼 수정하니 전체 흐름이 망가졌다.
  5. 발표 주제가 맘에 들지 않았고, 다시 잡는다.

이러다가 발표날이 다가오면, 시간이 없기 때문에 마음에 들지 않아도 그 때의 결과물로 어떻게든 떼웠다. 이제는 다음과 같이 준비한다.

  1. 가장 편한 노트패드를 연다.

  2. 목차를 적는다. 어차피 쓰다보면 변경되기 때문에 너무 고심하지않는다.

  3. 분량을 채워간다. 이 때 동선은 자유롭다. 세 번째 주제를 이야기 하다가도 첫번째 주제에 이야기하면 좋을 게 있다면, 반드시 그곳에 돌아가 추가할 것을 메모한다.

  4. 한바퀴를 채우고 나면 다시 읽는다. 이 때 쓸 데없는 것을 과감히 밑으로 제외시킨다. (아예 지우는 것이 아니다)

  5. 메모해놓은 추가 내용을 자연스럽게 녹여낸다.

  6. PPT는 최대한 빠르게 찍어낸다.

  7. 발표자 연습을 한다. 이 때 중요한 것은 자연스럽게 말이 나오지 않는 부분들을 체크하는 것이다.

  8. 자연스럽지 않은 부분들에 연결어나 키워드를 추가한다.

정말 중요한 발표는 7~8을 많이 반복하고 다른 사람들에게 피드백 받는다. 아직도 많이 부족하지만 어느정도 나에게 맞는 방향을 찾은 것 같아 만족스럽다.

Solutions Architect - Associate 자격증 취득

ACC 캡틴을 신청하기 위해서는 지원서를 작성해야했는데, 몇 문항에서 나의 역량을 굉장히 직설적으로 물어보고 있었다.

  • Please tell us why you are interested in co-organizing an AWS Cloud Club in your region, school, or peer group.
  • Please tell us your relevant education that can helps you co-lead a cloud-focused student community.
  • Please tell us your relevant technical skills, languages, or certifications that can help you lead as a voice for tech-curious students.
  • Please tell us about relevant community-building experience that makes you qualified to become a Captain.
  • Please tell us what activities you would do in your first three months as a Captain.

도저히 기존 지식과 경험만 가지고는 어필이 안될 것 같아서 AUSG에서 SAA 스터디에 냅다 신청해서, 9월부터 준비했던 것 같다. 이 때는 우테코 레벨4와 교내 핸즈온 발표 준비와 병행하고, 독감에 걸려서 고생도 했지만 운좋게도 한번에 합격했다.

사실, 흔한 자격증이라서 스펙 자체에 큰 도움이 되는 건 아니지만 개인적으로 힘든 시기에, 하면 된다! 라는 자신감을 채워준 경험이었다.

4. 당근 알바팀 체험형 인턴

우테코를 11월 중순에 마무리하고, 남은 휴학 기간동안 체험형 인턴을 하게 됐다. 현재 나는 당근 알바팀에서 개발자로서 일하고 있다. 인턴이지만 주어진 권한과 책임에는 한계가 없다. 초반에 멘토가 해주신 말씀 중 하나를 항상 생각한다.

어떠한 제품에 가장 큰 주인의식을 갖는 건 제품이 해결하고자 하는 문제를 가장 많이 고민하는 사람입니다. 가영님도 그 사람이 될 수 있습니다. 앞으로 누구보다도 이 제품에 대해 잘 아는 사람이 될 수 있다는 자신감을 가지고 임해주세요.

나는 잘 하고 있을까, 인턴은 피드백을 50% 근무 완료 후 받는다. 12월 초에 입사했으니 얼마 남지 않았구나.

나에 대한 피드백과 별개로 생각했던 것보다 훨씬, 더 많은 것들을 배우고 있어 행복하다. 거의 매일매일 일지를 쓰고 있다. 이제는 회사에 관련한 내용이라 공개적인 곳에 내용을 공유하기는 어렵지만 앞으로 간간이 시간을 내서 나만의 언어로 설명해보는 시간을 더 가져보려한다.

간단히 지금 재미있게 배운 엔지니어링 개념들을 말해보자면

  • Functional Programming: 데이터 의존성을 줄일 수 있는 개발 패러다임
  • Node.js 동작: 개발자가 동기/비동기를 컨트롤 할 수 있는 것의 가치, 테크닉
  • Event Driven 아키텍처
  • State machine: 복잡한 비즈니스, 수많은 상태 간의 관계를 정의하는 기술
  • 분산환경에서의 여러 테크닉: 지금까지는 이벤트, 사가패턴, 맵리듀스 등을 배웠다

그리고 앞으로 프로로 살아감에 있어 중요한 여러가지를 알려주셨다.

  • Task estimation
  • Time management

인턴이 끝나고 나면 조금 더 자세히 내가 마주했던 문제와 개선과정을 정리해보고싶다.

마무리

솔직히 1년동안 남들은 하지 않을 선택을 많이 했다고 생각한다. 이제는 주변 친구들이 대부분 졸업을 하거나, 본격적으로 취준을 하고 있다. 작년의 나였다면 아마도 많이 흔들렸을 것 같다. 개발자로서의 재능? 내 흥미에 대한 불확신이 날 괴롭혔을 것이다. 하지만 난 이제 내가 좋아하는 것도 찾았고(문제해결&협업) 분야에 대한 한계도 깼다! 이제는 그렇게 많이 흔들리지 않을 자신있고, 난 원래 뭐든 열심히 하면 재미를 느끼는 사람이라 취준에 대한 두려움도 많이 줄어들었다.

그리고 어제는 오랜만에 만난 친구에게 취준의 막막한을 털어놓았는데, 원래 하던대로 눈 앞에 있는거 열심히 하라는 훈수를 들었기 때문이다. 난 아직 35학점이나 남았기 때문에, 1년 내에 무사히 졸업하기 위해 학업에 집중해야할 것 같다🤣

대신에 상시로 준비해야하는 알고리즘 & 블로그를 신경쓰려고 한다. 그리고 위에도 언급했지만, 주변에 뛰어난 많은 분들에게 질문하는 용기도 가져보고 한번 얻은 인연을 잘 신경써보도록 하자.

올 한 해, 나에게 가르침을 주었던 수많은 사람들에게 감사합니다.