Introduction
Plant engineer에서 SW engineer로 전향하기로 결정한 후, 노력한 2022년부터 2023년까지 해온 것들에 대한 것을 각각 회고해본다.
시간 순서대로 노력한 것과 노력한 것에 대한 회고를 작성해나간다.
회고에 대한 마인드적인 부분만을 보고 싶으시다면 도전에 대한 최종 회고 부분만을 보시면 된다.
2022년
첫 번째: 개발자로서 무엇을 준비해야하는가?
커리어 강의
개발자로서 커리어를 진행하기 위해 무엇을 준비해야하는지 알고 싶었다. 그래서 인프런 플랫폼에서 ‘한정수’님이 만들어주신 패키지 강좌를 처음부터 들으면서 정말 많은 것을 알려줬다. 그래서 개발자로 커리어를 바꾸는데 있어서 무엇이 중요한지 알 수 있다. 이 분의 커리어 강의를 추천한다!
- 개발자로서 어떤 마인드로 공부를 해야하는지
- 어떤 회사에 가는 걸 권장하는지
- 포트폴리오로서 어떤 게 중요한지
- 기술 블로그를 반드시 만들어야 하는 이유
위 강의에서 기술 블로그를 만들어야 한다는 내용을 들은 후, 위 강의 수강과 함께 기술 블로그를 만들기 시작했다. Github 으로 만들기 시작하여 현재 이 기술 블로그를 만들게 되었다. 이 때 기술 블로그를 만든 건 정말 좋은 판단이었다. 이후에 내 기술 블로그를 다른 분들한테 보여줄 때마다 잘 정리되어 만들었다는 평을 들을 수 있었으니 말이다.
파이썬 강의
그리고, 위 강의를 학습하면서 친구 개발자의 권유로 첫 프로그래밍 언어로 ‘파이썬’을 선택하여 학습하기 시작했다.
처음에는 시중에 풀린 파이썬 기본 문법 책을 통해 학습을 학습했다. 재밌어서 이제 더 깊은 문법을 학습하기 원해서 인프런에서 level별로 구성된 파이썬 강의를 선택하여 듣기 시작했다. 이 때 좋은 강사님을 만나서 작성할 때 어떤 자세로 코드를 작성해야하는지, 어떤 점을 신경써야 하는지 등을 알려주셔서 도움이 많이 되었다. 이 분의 파이썬 강의는 추천한다!
html, css 학습
노마드 코더를 통해서 html, css로 카카오톡 클론 코딩을 진행했다. 챌린지 형식으로도 같이 진행하여 과제가 오기 때문에 이 과제를 해결하면서 개념을 손 쉽게 익힐 수 있었다.
확실히 처음 익힐 때는 과제 형식으로 계속 접근하는게 효과적이다.
회고
해당 강의를 커리어 전향하기 초반에 들은 건 매우 잘했다고 판단된다.
내 자신 너무 잘했어! 👍
지금 생각해보면 막 개발 해보겠다고 한 애가 한 번도 다뤄본 적 없는 git도 다뤄보고, 영어 문서도 찾아서 읽어보고, 구글링해보면서 문제를 해결해서 혼자서 기술 블로그도 만들려고 시도해본 내 자신..신기하다. 여러 블로깅 수단들이 있는데 진입 장벽은 높지만 자유도가 높은 걸 선택해서 시도했다니 대견하다!!
이렇게 도전할 수 있던 건 영어를 읽는 것에 큰 부담이 없고, 검색해서 찾아보는 게 많이 익숙해서 그런 것 같다. 학교 다닐 때도 여러 키워드로 검색하여 찾아봤고, 편입 영어를 공부했고, 영어 원서로도 전공을 공부해서 그나마 영어에 대해 부담이 없었던 것 같다.
토익 시험을 봐도 LC는 잘 못봐도 RC 점수가 높았던 것을 보면 ‘편입 영어’를 공부했던 게 정말 인생을 살면서 큰 밑바탕이 되었다고 판단된다.
[자료구조와 알고리즘을 일찍 시작하기]
파이썬을 공부할 때 기본 문법을 익혔으면 바로 자료구조와 알고리즘을 함께 익혔으면 좋지 않았을까 싶다. 이 CS 과목은 일찍 시작할수록 좋다고 판단된다.
[다른 언어를 살펴보는 것 없이 바로 파이썬을 주 개발 언어로 택한 것]
- 파이썬 기본 문법을 했으면 java나 javascript도 기본 문법까지만 다뤄보면 어땠을까 싶다.
- 너무 파이썬만을 생각하고 흘러온 것 같다. 나중에 부트캠프에서 js 기본 문법 정도를 익혀서 fetch를 사용하여 화면 렌더링하는 것까지 하지만, 요즘은 Typescript를 사용해서 백엔드 개발을 하는 비중이 많고 서비스 규모가 커져도 Typescript와 Nest.js로 잘 대응하는 경우를 많이 봤다. 그리고 js를 익히면 프론트와 백엔드 모두 혼자서 가능하니 초반에 익히면 정말 좋다고 판단된다.
- 비전공자한테는 정적 언어가 개념을 익히기에는 더 좋지 않을까?
그래서 java 와 spring을 익히는 것도 좋다고 판단된다. java, spring을 먼저 익히면 좋다고 판단되는 이유 중 또 다른 하나는 한국의 많은 소스들이 이를 기반으로 작성되어 있어서 많은 sw 개념들을 익힐 수 있다고 판단된다.
하나의 언어를 익히면 또 다른 언어를 익히는 건 쉽다고 많이들 말씀하시는데 동의하지만, 이를 깊은 레벨까지 익히는 건 그래도 쉽지는 않은 것 같다. 그래서 파이썬으로 바로 주 개발 언어로 택한게 개인적으로 아쉽다.
- 파이썬 문법을 더 깊이 파고드는 것보다 바로 미니 웹 개발 프로젝트를 시도해보는 것
일주일 기간이어도 간단한 웹 개발 프로젝트를 해보는 게 앞으로의 sw 분야 공부 방식을 익히는데 더 좋다고 판단된다.
이 기간에 나는 아직까지도 시험 공부처럼 이론을 먼저 다 익힌 후, 실습을 해야한다고 생각했다. 하지만 부트캠프 시기를 통해서 이론과 실습을 빠르게 스위칭하면서 하는 게 더 빠르다는 걸 알았다.
두 번째: 기본을 위해 CS 과목들 공부하자.
그 다음으로 컴퓨터 공학 전공 과목들을 공부해보기로 결정했다. 이 생각을 한 이유는 컴공은 아니지만 기계공학 전공생으로서 ‘기본 전공의 중요성’은 정말 정말 중요하다고 판단하기 때문!
기본 전공이 부족하면 그 위에 점차 심화 전공들이 쌓일 때 흡수하는 능력이 정말 달라진다.
그래서 ‘급할수록 돌아가자’ 라는 마인드로 기본 전공 내용을 수강하기 시작했다.
이 CS 지식들을 바탕으로 프로젝트가 진행되기 때문에 먼저 학습했다.
‘운영체제’ -> ‘네트워크: http’ -> 데이터베이스 및 SQL 순서로 학습했다.
- 운영체제는 KOCW 대학강의에서 이화여대 교수님 강의를 들었다. 이게 상당히 긴 시간이 걸렸다.
- 네트워크는 인프런의 김영한 강사님의 http 강의를 들었다.
- db 및 sql은 인프런의 얄코 강사님의 MySQL 강의를 들었다.
회고
먼저 CS를 학습한 후, 이후 여러 프로젝트를 진행했지만 지식을 아는 것과 적용하는 것은 정말 다른 문제임을 깨닫는다. 이 부분에서는 어떤 지식이 적용되는지 알기가 어렵다. 이래서 멘토링이 필요하다.
아는 것과 적용하는 것은 다른 종류의 문제다.
각 과목을 학습하는 방법에 있어서 회고는 다음과 같다.
[os 학습]
대학강의를 들을려는 마음가짐은 좋았지만, 지금 생각해보면 과한 시도이지 않나 싶다. 왜냐하면 이 대학 강의를 다 듣는데 생각보다 2 ~ 3개월 정도의 많은 시간이 걸렸다. 학교에서 전공 과목을 들을 때에도 이 정도 시간이 걸렸지만, 혼자서 했기 때문에 학습 속도와 집중력이 쳐지는 부분이 많았던 것 같다. 그래서 필수적인 os 지식 내용이 있다면 이를 바탕으로 공부해나가는게 더 효율적이지 않을까 싶다.
[네트워크 학습]
이를 듣고 나서 네트워크 HTTP 강의를 들었는데, 지금 이 강의를 보면 네트워크의 전체 흐름을 이야기하기보다는 HTTP 에 집중해서 설명하는 강좌여서 바로 이 강의를 듣는 것은 좋은 선택이 아니고, 먼저 전체 네트워크 흐름을 쉽게 이해할 수 있는 책을 사서 시도하는 게 좋다고 판단된다. ‘성공과 실패를 결정하는 1%의 네트워크 원리’ 책을 학습했지만, 너무 자세해서 소화하기가 어려웠다. 아니면 이를 쉽게 설명해주는 유튜브 채널을 찾아서 이와 병행했으면 더 좋았을 것 같은데, 책만 계속 팠다.
[sql]
생각해보니 db를 책으로 학습하지는 않았고, 단지 sql만 학습했다는 걸 알았다. 그런데 애플리케이션을 만들 때, 데이터베이스 부분이 많이 중요하다고 하는데 이 부분을 간과한 게 아닌가 싶다. 그래서 원티드에서 MySQL를 기반으로 여러 개념을 학습했지만, 이를 프로젝트에 녹여내는 게 부족하다고 판단된다.
[자료구조와 알고리즘]
이 때도 자료구조와 알고리즘을 익히는 게 시간을 많이 쏟지 않았다.
항상 무엇이든 효율적으로 할 수 있도록 전략을 짜자.
세 번째: 간단한 프로젝트 시도해보기
먼저 fastapi를 사용해서 간단한 크롤링 프로젝트를 만들어봤다. 이는 이력서에 올리지는 않았지만, 교보문고 사이트에서 책 이미지, 제목, 소개 내용을 가져와 저장한 후 프론트 화면에 표 형식으로 렌더링하는 것을 만들었다.
이 프로젝트는 강의를 통해서 만들었는데, 해당 강의에서 파이썬의 GIL로 인한 멀티쓰레드 문제점을 다루었기 때문에, 동기, 비동기, 멀티쓰레딩, 멀티 프로세싱, GIL 에 대해 학습할 수 있는 계기가 되었다.
그 다음으로 django를 사용해서 sns를 만드는 인프런 강좌를 수강하기 시작했지만, 처음부터 이론이 많아서 사용 경험이 없는 나로서는 지루하고 소화하기가 어려웠다.
회고
[python framework를 사용한 클론 코딩 시도]
한 번도 프레임워크를 가지고 프로젝트를 해본 경험이 없어서, 클론 코딩으로 프로젝트를 진행했다. 프레임 워크의 전체 흐름 개념 없이 마냥 강의를 따라 친 것 같고, 인프런의 django 강의를 보고 진행했지만 프레임워크를 처음 사용하는 것이기 때문에 처음에 보고 하기에는 너무 이론이 많아서 이 강의보다는 노마드 코드의 django 강의를 보고 진행하는게 더 좋은 방법이지 않았을까 싶다.
지금을 기준으로 이 때를 생각하면 정말 아무 생각없이 프로젝트를 진행한 것 같다. 나름 메모를 하면서 왜 이걸 이렇게 했는지 이해하면서 들었지만, 그래도 혼자서 스스로 생각해내는 것에 비하면 부족하다.
아마 몇 년뒤에 2023년 프로젝트를 한 나를 보면 똑같은 생각이 들지 않을까 라는 생각도 든다 😹
하지만 지금에 와서야 인프런에서 이진석님의 django 강의를 보면 잘 만드셨다는 생각이 들 정도로 정리를 잘해주셨다. 이후 과제 전형을 할 때마다 이 자료로 정리하고 복습을 했는데, 많은 도움이 되었다.
이런 생각이 드는 걸 보면 내가 성장하긴 했나보다. 소화하기 어려운 내용을 이제 쉽게 이해할 수 있으니 말이다.
개발은 한 번에 이룰려고 하기보다는 단계별로 진행될 수 밖에 없는 것 같다. 단계별 경험이 쌓이고 나서야 한 번에 가능하다고 판단된다.
[독학으로 지친 마음]
이 시기 때 혼자서 계속 공부하는 것에 대해서 지쳤다. 이게 부트캠프를 참여하게 된 계기가 되었다.
그런데 생각해보면 굳이 부트캠프를 참여하지 않아도 스터디 그룹을 찾아서 참여하면 됐을텐데 아쉬움이 있다.
매번 판단을 내릴 때 정말 이것 밖에 해결책이 없는지 생각해보는 습관이 중요한 것 같다.
네 번째: 부트캠프 참여
혼자 공부하는 게 지쳐서 부트캠프를 참여해보기로 했다. 하지만 이 당시에 python, django를 주 기술 스택으로 하는 웹 개발 국비 부트캠프는 없었다. 그래서 사비로 운영하는 부트캠프에 참여했다. 대략 4개월 정도 운영되는 부트캠프였다.
이 부트캠프로 기술 스택의 관점에서 docker, aws 배포, django drf 내용을 얻을 수 있었고, 소수 인원 부트캠프였지만 그 중에서 몇 명의 개발자 동료를 얻게 되어 좋았다.
- django, drf
- docker, aws 배포
- 네트워크
- 독학으로 js
- 자료구조와 알고리즘
프로젝트 관점에서는 협업 프로젝트를 진행하면서 프론트부터 백엔드 그리고 배포까지의 경험을 얻을 수 있어서 좋았다. 여기서 내가 새로운 언어를 배우는데 거부감이 없고 좋아한다는 것과 여러 가지를 응용해서 잘 만드는 걸 알게 되었다. 제대로 한 첫 프로젝트치고 1인분의 역할을 비교적 잘 했다고 판단했다.
주변 동료들과 멘토한테도 그리 평가를 받아서 기분이 좋았다. 하지만 아쉬움이 많은 첫 팀 프로젝트다. 프로젝트 전체 퀄리티를 보면 좋지 않다.
마지막으로 이 때 처음으로 ‘맥북’을 얻게 되어 맥북의 매력을 알게 되었다. 맥북은 정말 사랑이다 👍. 윈도우로 개발하다가 맥북을 사용하게 되니 여러 라이브러리나 프로그램을 설치하는 것이 매우 간단해지고, UI/UX 도 더 세련되고 눈에 잘 들어온다. 개발할려면 맥북이 최고다.
회고
첫 부트캠프이고, 여러 부트캠프들을 알아보고 여러 판단하에 지원했기 때문에 기대가 컸다. 하지만 결과적으로 이야기하자면 부트캠프에사 배운 걸로 취업하는 건 옛날처럼 채용 황금기 시기가 아니라면 불가능하다고 생각한다.
이 부트캠프에 참여했던 인원들 중 취업한 인원은 이미 경력이 있는 사람이었다. 1기였기 때문에 커리큘럼의 부족함이 많았다. 기업 과제로 한다고 설명이 적혀있었지만, 전혀 그런 건 없었고 이걸로 취업 자체에 도움이 되지는 않았다.
수료하고 나서 프로젝트 수준이 좋지 않기 때문도 있다고 판단된다. 그리고, 취업 연계로 동일한 기술스택의 연계는 들어오지 않았다.
- 2번에서 3번 정도 전혀 다른 기술 스택을 권하고 끝났다. 요즘 부트캠프들과 비교하면 취업 연계까지 해주는 곳이 있기 때문에 여기는 그런 관점에서 무책임하다고 볼 수 있고 수료 후 케어하는 건 없다.
또한, 수료 후 프로젝트 퀄리티가 전체적으로 경험 없는 분들이 많아서 그걸로 취업하기는 어렵다고 판단된다.
여기 부트 캠프에서는 미리 다른 부트캠프를 수료하신 분들이 계셔서 알고리즘의 경우 수준 차이가 많이 나서 어려웠다.
이 부트캠프로 취업을 생각한다면 추천하지 않고, 기본기를 다지는 시간을 갖는다면 추천한다.
- 그래서 django 과제전형을 진행할 때 해당 부트캠프에서 배운 게 도움이 되었다. 하지만 취업에서는 그것보다 더 높은 수준을 원하기 때문에 django로 개인 프로젝트를 시도해서 기술 수준을 높이는 걸 추천한다.
자신이 취업을 생각하는 부트캠프를 원한다면 다른 것에 투자하는 게 낫다. 부트캠프는 그 시기에 유행하는 기술 스택에 참여하는게 빠른 취업과 연결된다고 판단된다.
2023년
첫 번째: 새로운 프로젝트 - SNS
부트캠프에서 같이 했던 프로젝트를 팀원들과 함께 리팩토링하며 기능을 확장해갈려고 했지만, 여러 문제로 프로젝트를 진행하기 어렵게 되어 개인 프로젝트를 이번 기회에 해보고 싶은 생각이 들었다.
나만의 SNS 를 만들고 싶었기 때문에, 기본적인 SNS 기능을 만들고 이를 특정 소재로 결합하는 기획으로 진행했다.
이 때 멘토링을 해주기로 한 개발자 친구의 권유로 FastAPI로 프레임워크를 진행했다. 이 친구의 PR 리뷰를 바탕으로 프로젝트가 진행되었다. 실제로 개발을 진행하는 건 나 혼자서 해야했기 때문에 책임감이 컸다. 그래서 요약하자면 다음과 생각들로 프로젝트를 진행했다.
- 코드 신뢰성을 높이기 위한 수단으로 ‘테스트 코드’ 작성을 시도했고, 지금은 매번 항상 테스트 코드를 작성하고 있다.
- 아무런 생각 없이 api를 설계하기보다는 유지보수와 직관성을 위해 ‘RESTful api’ 방식을 적용했다.
- 코드의 유지보수성을 위해서 과도한 결합성과 부족한 응집성 문제를 해결하기 위해서, 마지막으로 소통 비용을 줄이기 위해 DDD를 적용했다.
- 회원 가입 시 적은 정보로 회원 가입을 진행하기 위해 ‘이메일 인증’을 도입했다.
- 조회 속도를 높이기 위해 redis를 사용해서 캐싱을 적용했다.
- 유저 경험성을 높이기 위해 non-blocking 을 적용하려고 FastAPI의 background task를 적용했다.
- 알림 기능을 추가하기 위해서 polling, long polling, sse, websocket 중 네트워크 비용 문제와 실시간성을 해결하기 위해서 sse로 알림 기능을 구현했다.
- 불필요한 sql 문이 발행되는 것을 방지하기 위해 쿼리 개선을 했다.
이외에 코드 가독성에 신경을 많이 썼고, 주석과 타입 힌트에도 신경을 많이 썼다. 코드 퀄리티를 높이기 위해 계속해서 리팩토링을 진행했다. 리팩토링을 진행하면서 느낀 거는 리팩토링을 하면서 코드 관점이 넓어지고, 여러 코드를 볼 때마다 이런 방식으로 작성하는 게 더 좋지 않을까 라는 나만의 가치관이 생기는 것 같다.
이게 무슨 느낌이냐면 내가 작성한 글을 계속해서 수정하여 더 가독성 있고, 더 구조가 좋은 글을 만드는 과정과 동일하다. 내가 작성한 글을 수정해서 더 좋게 만드는 과정은 행복하다. 나라는 캐릭터가 레벨업 되는 기분이다!!
이 프로젝트는 단지 취업을 위한 프로젝트라기보다는 내 평생 계속 가지고 가고 싶은 프로젝트다. 그래서 더 애착이 있고, 실제로 많은 사람들이 사용해줬으면 하는 바람이 있다.
그리고 SNS 라는 특성상 E-commerce보다 기능의 확장성이 좋다고 판단되어 더 즐거운 것 같다. 하지만, E-commerce가 금액을 다루는 만큼 안정성과 데이터 정합성에 더 신경을 써야하니 이 부분에서도 배울게 많다고 생각든다.
회고
[프로젝트가 길어진 문제점]
해당 프로젝트 기간이 상당히 길다. 그 이유는 첫 번째로 무엇보다 프로젝트 규모가 혼자서 하기에는 컸다.
계속해서 가져갈 사이드 프로젝트라고 너무 규모가 컸다.
프로젝트 규모가 너무 크지도 않고, 정말 실생활의 문제를 해결하면서, 독창적인? 프로젝트 찾기가 어려운 것 같다.
이외의 이유로는 다음과 같다.
- 협업하는 사람들의 개인 일정으로 인해 프로젝트 개발 속도가 많이 늦춰져 개발 기간이 계속 길어졌다.
- 코테 공부로 다른 언어인 c++에 빠져 프로젝트 개발이 한 달 반 정도 늦춰졌다.
바쁜 시간에 코드 멘토링을 해주는 건 정말 값지다. 정말 고맙지만, 취업의 관점에서 보자면 취준 기간이 길어지기 때문에 많이 힘들어졌다.
또한, 엄연히 배포 및 운영 경험을 하기 위해서는 프론트가 작업이 되어야 하는데 프론트 작업을 해준다는 친구의 말을 믿고 계속 기다렸지만, 너무 오래 기다렸다. 진행도가 너무 느리다.
이럴 거면 혼자서 프론트를 하는 게 훨씬 더 낫겠다는 생각을 많이 한다.
[CS를 기반으로 한 프로젝트 고민들]
보다 프로젝트를 cs 기반으로 고민들을 많이 하고 싶은데, 생각만큼 많이 하지 못 했다.
- 쿼리를 짤 때 시간 복잡도
- background task를 적용하면서 non-blocking 개념
- sse로 동기 비동기 개념
- 이에 따라 쓰레드, 프로세스
- http 프로토콜 기반 통신 방식을 생각하면서 동기, 비동기, blocking, non-blocking 을 분류
- db의 transaction
- 그리고 FastAPI에서 동기를 사용하기 때문에 event loop를 사용하는 게 아닌 별도의 30개 쓰레드를 사용하므로 프로레스 수를 늘릴 생각
더 많은 것을 고려하고 싶은데 그러지 못 했다. 어느 부분에서 어는 것을 고려해야하는지 더 알고 싶지만 아쉽다.
이를 멘토링을 통해서 채워나가고 싶었지만 멘토인 친구는 db와 네트워크 지식이 부족한 편이라고 한다. 이 부분보다는 디자인 패턴과 코드 가독성 부분, 시간 복잡도 부분에 신경을 많이 쓰는 타입이라고 판단된다. 그래서 코드적인 측면에서는 많이 배웠지만, CS와 연결된 측면에서는 많이 부족하다.
OS와 연결된 측면에서는 생각을 했지만, 나머지와는 연계성이 부족한 것 같다.
그래서 이 cs를 바탕으로 보다 고민하기 위해서는 배포 및 운영하면서 부딪히면서 얻어내야하지 않을까 싶다.
두 번째: 기업 과제 전형 탈락 및 합격
프로젝트를 진행하면서 많이는 아니지만 몇 몇 회사에 지원을 했고, 과제 전형을 진행했었다. 주로 django로 과제전형을 진행했다. 별도로 django로 프로젝트를 하지 않았지만, 그래도 계속하다보니 기존에 경험한 게 있어서 처음에는 떨어졌지만 결국에는 과제전형을 통과했었다. 꾸준히 하면 정말 뭐라도 된다는 걸 느낀 경험이었다.
그리고 과제전형을 할 때에도 그냥 하는 게 아닌 메모를 하면서 진행하고, 끝나고 나서 반드시 다시 한 번 막힌 부분을 해결하니 점차 레벨업이 되었다.
과제전형을 응시했던 날짜는 다음과 같다.
- 2023년 2월 탈락 -> 2023년 8월 탈락 -> 2023년 11월 합격
처음에는 거의 하나도 구현하지 못 했지만, 8월에는 django만으로 다 구현했고, 11월에는 drf를 사용해서 api 구축을 완료했다. 기업마다 요구사항이 다른 것도 있었지만 큰 발전이라 생각한다.
회고
django로 프로젝트를 진행했더라면 보다 바르게 잘 구현하지 않았을까 싶다. 11월 과제 전형은 통과했었지만 django 관련 orm 지식이 부족하고, 실제 배포 경험이 없어서 인터뷰에서 탈락했다.
orm을 공부할 때, 실제 sql 문 각각에 해당하는 orm을 매핑해서 공부해두는 게 orm을 익히기 빠른 방법인 것 같다.
세 번째: 이력서 돌리기
프로젝트가 1차적으로 마무리 된 후, 이력서를 돌렸다. 76군데를 돌렸고, 7군데 정도 서류를 통과했다. 하지만 갑자기 서류 통과를 취소한 회사들도 존재했다. 결국 면접은 2군데에서만 진행했다.
모두 다 좋은 경험을 얻게 되었다. 내가 부족한 부분들이 뭔지 알게 되었다. 해당 회사의 채용 공고의 맡은 업무들에 대해 study를 좀더 했어야 했다. 하지만 이 업무 부분은 내가 프로젝트에서 해보지 않았던 부분이라 몇 번 깊은 레벨의 질문을 해도 어려웠을거라 판단했다.
그래서 면접을 보면서 느낀 건 내가 준비한 것과 해당 회사의 핏이 정말 잘 맞는 겻은 어렵다는 걸 느꼈다. 아무리 준비를 잘한다고 해도 이 부분은 ‘운’의 영역이지 않을까 싶다. 마치 소개팅처럼 말이다.
다른 신입 지원자들과 달리 내가 이력서를 돌리고 나서 한 ‘특별한 행동’은 이메일로 피드백 을 요청했다.
안줘도 어쩔 수 없다는 마음으로 요청했다.
큰 기대는 안했는데 지원자 회사 수에 비하면 적지만 피드백을 주신 분들이 계셨다.
피드백 주신 분들의 이메일은 아직도 다 보관하고 있다.
피드백을 주신 회사들에 다시 한 번 감사의 말씀을 전한다.
부족한 부분을 언급해주시는 것과 함께 공통적으로 많이 들은 말은 이 말이다.
개발자로서 재능이 있으니 포기하지 말고 계속 정진하라.
나에게 정말 큰 위로가 되었고, 포기하고 싶은 상황에서 계속해서 이 말을 되새긴다.
회고
피드백을 받으면서 나에게 먼저 부족한 것들이 공통적으로 발견되었다.
신입이라서 그런지 대부분 들어온 답변은 ‘경력 없음’ 이 제일 컸다.
두 번째는 주 프레임워크 기술이 다르다. 우리는 ‘django’를 원하지만 ‘FastAPI’를 주로 쓰시는 것 같아 어렵다.
라는 게 주 답변이다. 이 말은 내가 django 프로젝트를 가지고 있지만 이 프로젝트로만 봤을 때는 큰 실력을 기대가 안된다고 판단이 되는 것 같다.
내 실력을 제대로 보여줄 django 개인 프로젝트가 필요하다는 생각이 들었다.
도전에 대한 최종 회고
꾸준함은 강력한 힘을 가진다.
냉정하게 신입은 취업을 위해서 기술 트렌드를 따라가야만하는 것 같다.
취업 준비기간이 길어질수록 정신적으로 너무 힘들어진다. 그래도 지금까지 계속 유지하고 버틸 수 있던 거는 ‘좋은 방향으로의 꾸준함’ 인 것 같다. 나에게 좋은 거라면 꾸준히 한다. 기본적으로 개발은 꾸준히 하는 거고 이것만으로는 부족하다. ‘운동’도 꾸준히 해야한다. 아침마다 이불 정리도 꾸준히 하고, 사먹는 것보단 내가 뭔가를 요리해서 먹는 것도 꾸준히 한다. 계속해서 내 자존감을 지키고 유지할 수 있는 것들을 꾸준히 하는 것 같다.
좋은 방향으로 꾸준히 하는 종류들이 늘어날수록 삶의 질이 높아지고 장기적으로 극복할 수 있는 힘이 생기고, 삶의 안전망 수준이 올라간다.
커리어적인 관점에서도 그렇고, 사람과의 관계에서도 그렇고, 성품의 성장에서도 그렇다.
반대로 나쁜 것을 꾸준히하면 그만큼 삶은 피폐해지고, 삶의 에너지도 떨어져 삶의 안전망 수준이 떨어진다. 사람과의 관계는 끊어지고, 우울해지고, 부정적으로 변한다. 예를 들어 뭐가 있을까? 여러 가지가 있지만 ‘시간을 잘 못 쓰는 것’ 이라고 할 수 있다. 같이가 아닌 혼자 도전하는 것일수록 개인의 ‘자제력’이 매우 중요하다. 성공하시는 분들의 공통점으로 이 자제력이 크다는 건 매우 공감간다. 살아남기 위해서는 자기 스스로 자제해야만 한다. 책임질게 늘어날수록 말이다.
도전에는 막막함과 비판이 따라온다.
아무리 다른 분야에서 개발자로 커리어를 바꾸는 사람이 많다고 해도, 흔하게 찾을 수 있는 도전이라고 해도 IT 외 분야에서는 한국에서는 아니다. 그만큼 이 도전을 탐탁치 않게 생각하시는 분들도 계신다.
뭔가를 도전한다는 건 이런 것 같다. 남들이 흔히 가지 않는 길을 가는 건 정말 쉽지 않다. 막막함과 주변으로부터의 비판이 끊기지 않는다. 하지만 내가 가는 방향이 틀린 길이 아니라면 맞는 길이라면 묵묵히 가야한다.
그래서 결과로 반드시 보여줘야한다는 마음이 크다. 결과로 보여주면 아무말도 하지 않는다. 하지만 이 결과가 쉽게 나오지가 않으니 너무 어려운 것 같다.
이를 극복하기 위해서는 내가 근본적으로 해야하는 건 ‘자신감’을 갖는 것이다.
내 스스로가 할 수 있다고 믿자.
효율적인 학습 방법: 4가지
옛날에는 모르는 부분이 있으면 그 부분에 대해서 모든 걸 다 알려고 했다. 나름의 완벽주의자 성향이 있어서 더 그랬다.
하지만 개발 공부를 하면서 다음과 같이 원칙을 바꿨다.
- 문제가 해결될 만큼만 학습한다. (빠른 스위칭)
- 그 다음에 또 다른 문제가 부딪히면 추가적으로 학습한다. 왜냐하면 다 학습하고 넘어가도 문제와 바로 연결되는 부분이 아니면 잊혀지기 쉽다.
- 문제를 해결할 때 옆에 메모 애플리케이션을 두고, 과정 하나 하나를 다 메모해가며 진행한다.
- 나중에 이 개념에 대해 블로깅을 한다.
필요한 만큼 학습하되, 학습한 것은 확실히 기억하도록 노력하자.
실패를 받아들이기
엄연히 내 목표를 기준으로 할 때 난 실패했다. 목표한 바를 기간 내에 성취하지 못했다. 이는 아래 2가지 사실로 나에게 큰 불안감을 줬다.
- 내 인생이 실패했구나
- 이 실패를 난 받아들이기가 싫다. 부인할래.
하지만, 문득 옛날에 들은 성공하신 분들의 이야기를 들은 내용이 기억이 낫다.
수 천번의 실패 끝에 단 한 번의 성공으로 이룰 수 있었다.
- 재수해서 실패한 것?
- 원하는 만큼의 성적을 얻지 못한 것?
- 대기업에 취업하지 못한 것? 내가 원하는 회사를 취업하지 못한 것?
위 3가지는 인생에서 인생 모든 게 무너질만큼 치명적인 실패는 아니라고 본다.
오히려 학교 졸업 후에 겪었던 아래 경험이 치명적인 실패다.
‘코로나로 인해 내가 3년 동안 집중적으로 준비한 모든 게 날라가고, 발휘할 수 있는 기회조차 없는 것’
하지만 이미 이 실패를 한 번 극복했지 않았는가?
2년 동안의 노력 끝에 취업 시장에 도전할 결과 ‘실패’ 를 얻게 되었고, 2년이라는 기간이 길어지는데는 외부적인 요인들도 많았지만, 이는 이 도전에 대한 실패인 거지 ‘내 인생’ 에 대한 실패는 아니다.
그래서 입 밖으로 다음과 같이 말했다.
“난 실패했네”
“…”
“후우 다시 일어서면 되잖아. 다시 하자. 그래 다시하자.”
“다시 도전하자.”
그러면 2024년은 어떻게 보낼 건데?
확실하게 결과를 내자. 그래도 성급해하지 말자
FastAPI는 해외에서는 모르겠지만, 한국에서는 아직도 많이 사용되고 있지 않다. Python을 주 개발로 하는 곳에서는 한국에서는 django가 아직까지 많다.
하지만 django는 프로젝트 구조가 자유롭지 않아서 한계가 있지만 스타트업의 입장에서는 ‘생산성’이 압도적으로 중요해서 django를 많이 선호하는 편이다.
아니면 java, spring으로 잡고 바꾸는 방법도 있을 것 같다.
그러면 다음과 같이 정리할 수 있다.
- 만들어둔 SNS 프로젝트를 배포 및 운영까지 하기
- 위 프로젝트 진행 시 겪은 문제과 개념들 블로깅 하기
- 금전적인 문제를 해결하기 위해 위 프로젝트에 광고 붙여보기
그리고 나서 4번을 실행해보자.
- 프로젝트 아이디어 선정하기
- 단 중간 규모보다 작은 프로젝트여야 하고,
- 실제로 내가 필요하고 사용하기 위해 만든 프로젝트여야 하고,
- 또는 내가 외주를 받아 제작하는 프로젝트여야 하고,
- 프론트까지 확실하게 만들어야하는 프로젝트여야 한다.
4번까지 정해지고 나서 기술 스택을 고민해보자.
– 회고 끝 –