월별로 올렸어야 했지만,
다들 그렇듯... 매달 중순이 되어서야
저번 달 회고 언제하지
를 세 번 반복했다.
그래서 8월달에 지난 세 달 회고를 하려고 한다.
시간이 이렇게 빨리 갈 줄이야...
지금부터 더 생산적으로, 더 바쁘게 살 예정이다.
🐰 N마리 토끼 잡으려다가 아무것도 못 잡았다!
적성진단 후기
21년도에도 설명회를 들은 적이 있으나, 그 당시에는 큰 필요성을 느끼지 못했다. 그런데 이번에는 정말 간절했다. 체계적인 커리큘럼과 재정적 지원이 꼭 필요했다. 그래서 신청했고, 나름대로 적성진단 준비를 위해 교재로 구매해서 인적성 준비하는 것처럼 시간 투자도 꽤 했다고 생각했는데, 결국 1차 서류 및 코딩 테스트에서 떨어졌다.
결과적으로만 봤을 때는 시간 낭비가 되어버렸다. SSAFY 적성검사는 추리, 언어 등 사실상 일반적인 개발자 취업에는 도움이 크게 되지 않았기 때문에 그 시간에 알고리즘을 더 풀었으면 더 좋았을 것이다. 그리고 다음 11기 모집이 이전과 동일하다면 10월 말 모집인데... 솔깃하겠지만은 지원하지 않을 예정이다.
가장 간절하게 원하던 개발 관련 교육은 다 떨어졌지만 그나마 건진 게 어학 점수라니! 다소 자괴감이 들지만, 이거라도 있는 게 어딘가 싶다!
따로 인터넷 강의를 들은 건 아니고, 이틀에 한 번씩 모의고사를 풀었다. 그 날 또는 그 다음날에 오답 풀이한 게 끝이다. 사실 시험 직후에는 난이도가 그렇게 높지 않다고 생각해서 만점을 기대했지만 자만한 나머지 RC에서 자잘한 실수를 한 것 같다. 다음에 기분 전환 겸 여유가 될 때 TOEIC Speaking도 준비해볼까 생각 중이다. 그랜드 슬래머라고 재밌는 게 생겼더라고! 상장은 못 참지.
[서류 + CS 테스트 -> 면접 -> 합격]의 간단한 선발과정에다가 집과 걸어서 20분 거리의 교육장이었다. 커리큘럼 또한 나에게 한참 부족했던 DB과 인프라(도커)가 있었기에 최적의 교육이었고, 이 또한 간절했다. 그런데 면접에서 탈락했다.
떨어졌을 때 바로 스쳐간 생각은
클로저에 대해 아무 대답도 하지 못해서 떨어졌나?
였다.
그런데 내 마음 한구석에서는
이걸 모르니깐 교육 들으려고 지원했지, 다 아는 사람은 이미 취직했겠지!!🤬
를 외치고 있었다.
그래서 교육을 담당하시는 강사님께 개인적으로 여쭤보았다.
나의 어떤 부분이 부족해서 떨어졌는지 궁금했기 때문이다.
이왕 떨어진 거 정확한 부분을 알고, 그 부분을 스스로 채워나가고자 다짐했다.
이 메일을 받고 3개월이 지났고, 솔직하게 이 부분에 대한 회고를 하자면,
github 잔디는 그나마 노력한 흔적이 보이지만,
기술블로그는 3개월 전과 그대로!
그래서 이번 주부터 기술블로그 태그 정리와 꾸준히 글을 작성해서 올릴 예정이다.
왜 이렇게 늦게 블로그 관리를 시작했냐라고 묻는다면...
꾸준한 흔적을 남기는 것에 대한 중요성을 이제서야 몸소 깨달았기 때문이다.
더불어 나의 게으른 완벽주의 성향도 한 몫했다.
글이란 자고로 정성을 담아 한치의 부족함 없이 포스팅해야하는 건데, 항상 그 준비가 안됐다고 생각했기 때문이다.
이제는 시작은 미약하게, 하지만 갈수록 보충해 나가는 것으로
꾸준함에 비중을 두어 기록을 해나갈 것이다.
🤯 멘탈이 깨져도 나에게 주어진 일 덕분에 일단 자리에 앉았다.
(그만큼 바빴다는 뜻)
5월달에 풀스택 실무과정에서 떨어진 이후 불합격한 사람들 대상으로 스터디 제안이 왔었다. 어떻게 공부해야할 지 감을 못 잡기도 했고, 불규칙한 생활습관때문에 개선할 필요성을 느끼고 있었기에 정말 반가운 제안이었다. 그래서 5월 말부터 약 한 달간 JavaScript 스터디를 했다.
이전에 내가 무식하게 공부했던, 단순한 메서드나 알고리즘 위주의 공부가 아니라 JavaScript 그 자체의 동작 원리부터 공부했다. 메모리와 실행 컨텍스트부터 공부했다.
사실 이렇게까지 깊게 공부해야 해?
싶었지만,
깊게 파고, 다같이 고민해보고 이야기 해보니,
이렇게 공부하는 것만큼 내 것으로 만드는 방법이 없다는 것과
동작 원리를 알면 코드 짤 때 다른 부분을 고민할 수 있다는 것을 깨달았다.
덕분에 이전에는 적어야 겠다고 생각하지 못한 JS의 클로저를,
공부한 것을 바탕으로 자신 있게 기술블로그 한 켠을 채울 수 있었다.
모던 자바스크립트 Deep Dive 자바스크립트의 기본 개념과 동작 원리
8월인 지금은 React에 집중하고 있지만 모던 자바스크립트 읽는 것을 소홀히 하지 말아야겠다고 다시 한 번 다짐한다.
만약 매달 회고했으면 진작에 꾸준히 책 읽는 건데!(즉시 회고의 중요성)
퇴사하자마자 꼭 지원해야겠다는 것들 중 가장 마지막 보루였다. 이것조차 합격되지 않는 미래를 계획하지 않을 정도로, 꼭 합격되리라는 마음가짐으로 임했다.
[서류 -> 1차 코딩테스트 -> 2차 코딩테스트]의 과정으로 진행됐고, 1차 코딩테스트에 합격했었다.
2차 코딩테스트에서는 개인적으로 잘 봤다고 생각했다. 자세한 이유는 시험 형식에 대한 이야기가 필요한데, 정보 유출의 문제가 있기 때문에 자세한 설명은 생략한다.
그런데 그건 나만의 착각이었던 것 같다. 나만 만족한 시험...
이 때부터 멘탈이 나갔던 것 같다. 일반 회사 지원이 아니라 교육을 듣는 것에서조차 전부 떨어지니, 나는 쓸모 있는 구석이 하나도 없는 건가 싶었다.
괜히 국비 지원으로 우후죽순으로 나타나는 부트캠프를 하겠다고 뛰어들어 레드오션에 빠진 것부터 후회하고, 세상이 원망스러웠다. 다들 하는 노력도 나는 하지 안한 것일까. 과거를 생각하면서 회한에 잠기고, 미래를 생각하면 막막하기만 했다.
그나마 다행인 건 결과가 나오기 전의 내가 미리 이것저것 신청했고, 일을 벌여놓았기 때문에 슬퍼할 시간은 그리 많지 않았다.
SSAFY에서 떨어지고 통장 잔고를 확인해보니 비상사태였다.
이제와서 또 부모님께 손을 벌리기가 너무 죄송했기 때문에 내 힘이 닿는대로 할 수 있는 것을 했다.
사실 매달 취업 활동 인증을 하는 것이 성가신 일이지만 그래도 감지덕지였다. 덕분에 아직 빈털터리가 되지 않고, 잘 먹고 잘 살고 있다.
작년 이맘때쯤에는 스타트업 인턴으로 한 번 과제테스트를 본 기억이 있었는데, 그때는 Vanilla JavaScript보다는 React에 더 익숙했지만 단순한 경험을 위해 지원했었다.
이번에는 지푸라기라도 잡는 심정으로 자신도 없고 시간도 없었지만 프로그래머스에서 주어지는 Vanilla JavaScript 과제테스트를 하나씩 풀어보면서 감을 조금 잡은 상태에서 과제테스트를 보게 됐다.
절실한 게 티가 났기 때문이었을까, 과제 테스트에서 통과
했다!
이것도 마찬가지로, 이전에는 이것까지 해야해?
라는 마음때문에
Vanilla JavaScript는 큰 신경을 못 썼었는데,
이번 기회에 각잡고 공부해보니 재미도 있었고, 그 결실을 결과로 보답을 받아 더욱 기뻤다.
그래서 이후 두 회사에서 면접 제의가 들어오기도 해서 6-7월은 꾸준히 바빴다.
면접 회고는 7월에 토스!
계속 회고해보니 개발자는 중요하지 않은 부분이 없다는 것을 다시금 깨닫는다.
CS, JavaScript, JS Framework, 알고리즘, 기록
이전에는 그 중요도 및 실천도가
알고리즘 > CS > 기록 > JavaScript, JS Framework
였다면, 지금은 모두 동등하게 중요하고, 하나도 빠짐없이 꾸준히 갈고 닦아야 한다는 것을 알고 있다.
회고에 언급할까 말까 고민했었다.
왜냐하면 나만 알고 싶었던 챌린지이기 때문이다.
간단히 요약하자면 2주간 주중 매일, 하루에 한 UI 프로젝트를 완성하는 것이다. 클론코딩부터, 캐러샐, 타이머, Todo 리스트까지 다양한 UI를 경험할 수 있다. 더불어 잔디도 촘촘하게 심을 수 있었다!(왜 챌린지 제목이 파밍인지 확실히 드러나는 부분)
그 외에도 얻은 게 정말 많은 챌린지였다.
이건 좀 더 자세한 회고 및 후기로 남기고 싶으니 추후 별도의 포스트로 링크를 걸어놓겠다.
네이버 부스트캠프 코딩테스트와 위의 파밍챌린지, 그리고 면접 준비 기간과도 겹쳐 할까말까 고민했었고, 심지어 고민의 끝에 신청할 때쯤에는 이미 프론트엔드 개발자가 80명 가까이 신청하여 개발자는 잠정 마감 상태였다. 하지만 이 또한 지푸라기 잡는 심정으로 머리를 들이밀며 신청했다.
↑ 내가 제시한 아이디어와 사람들의 반응!
테오 스프린트는 짧지만 매우 밀도 높은 스프린트였기에 얻는 것과 생각할 지점들도 다른 활동에 비해 많았다.
따라서 이 또한 별도의 포스트로 기록을 남긴 뒤 하이퍼링크로 걸어놓겠다.
(아따 포스팅할 거 넘친다 넘쳐)
😩 다들 환승 이직을 왜 추천하는지 깨달았다.
미제출한 사람이 이 프로그램에 대해 왈가왈부할 자격이 있을까 고민했지만,
그래도 회고니깐, 느낀 점을 솔직하게 풀어보고자 한다.
넘블은 이전에 회사에 다닐 때부터 눈여겨보던 프로젝트 참가 서비스였다. 그런데 마법처럼 퇴사 이후에는 프론트엔드 관련한 프로젝트가 올라오지 않았고, 내가 이번에 신청한 NextJS 13 포트폴리오 만들기가 첫 프론트엔드 프로젝트였다.
그래서 별다른 레퍼런스 체크를 하지 않고 냅다 참가료를 결제하고 참가 신청을 했다.
결론부터 말하자면 돈과 시간이 아까웠다.
지금은 참가 내용을 볼 수 있는 페이지가 존재하지 않지만,
내가 받아들일 때는 NextJS와 Framer-motion의 가이드라인을 제공받을 줄 알았고,
적어도 간단한 NextJS 세팅 방법이나 인터렉티브하게 웹을 구성하는 방법을 알려줄 줄 알았다.
그런데 실제 프로젝트가 시작되고 팀 빌딩을 한 뒤에는,
전부 알아서 하세요
식이었다.
구현 요건도 NextJS 13을 써라
, 스크롤에 반응하는 애니메이션을 넣어라
고 적힌 노션 페이지 하나 뿐이었다.
적당한 레퍼런스도 없었거니와,
호스트의 역할이 뭔지 의아할 지경이었다.
팀빌딩을 하고나서 모인 사람들도 다들 당황했다.
팀빌딩도 팀 전용 채널을 한참 늦게 만들어주거나, 개인 DM을 늦게 답해주는 듯 넘블 쪽에서 적극적으로 대해주지 못해 원활한 진행이 되지 않았다.
아무튼 일정 관리도 잘 되지 않고, NextJS 13을 파느라 시간이 다 가버려 피그마로 시안을 다 짜지도 못하고, 결과물도 제출하지 못했다.
결국 얻은 건 팀원 2명 중 1명!
(1명은 첫 회의 이후 탈주했다)
그 분과는 아직까지 JavaScript 알고리즘 스터디를 병행하면서,
우선순위가 한참 밀려났지만 우리끼리라도 포트폴리오 멋지게 완성해보자고
매번 다짐하고 있다.
앞으로는 어떤 프로그램을 참가할 때,
참가료를 지불하기 전에 과연 이만큼의 돈을 낼만한 지,
확인을 한 번 더 해보자!
작년에 응시했던 챌린지 코딩 테스트의 경험이 매우 좋았다.
그래서 당장에 Toss에 들어갈 실력이라고 생각하진 않지만,
이번에도 신청하는 것을 놓치지 않았다.
이 또한 자세한 문제 방식은 유출 문제때문에 밝힐 수 없지만 깨달은 점만 몇 가지 나열하고 마무리하고자 한다.
작년 챌린지 이후 나에게 생긴 작은 습관이 생겼고,
그것의 중요성을 크게 느끼고 있다.
바로 간단한 알고리즘 문제라도 비즈니스 로직을 결합했을 때의 유지보수를 고려하자
이다.
생각난 김에 최근에 풀었던 간단한 예제를 들고 얘기를 해보겠다.
직관적으로 코드를 짜면 다음과 같다.
function solution(price) {
if (price >= 500_000) {
return parseInt(price * 0.8)
}
if (price >= 300_000) {
return parseInt(price * 0.9)
}
if (price >= 100_000) {
return parseInt(price * 0.95)
}
return price
}
그런데 나는 이게 만약 프로그램의 유틸 함수로 짜여진다면, 어떻게 구성해야 추후 할인률과 할인 조건이 달라질 경우에 최소한의 비용으로 변경할 수 있을까 고민했었다.
그래서 난 아래처럼 짰다.
function solution(price) {
let answer = price
const priceAndDiscount = [[100_000, 5], [300_000, 10], [500_000, 20]]
for (const discountInfo of priceAndDiscount){
const [range, percentage] = discountInfo
if (price < range) break
answer = parseInt(price * (100 - percentage) * 0.01)
}
return answer
}
이 경우 범위를 priceAndDiscount
라는 배열에 [범위의 최소 조건, 할인율]의 형태로 최소 조건을 오름차순으로 집어넣었다.
위의 코드라면 만약 새로운 범위, 예를 들어 20만원 이상 하면 7% 할인
이라는 조건이 추가된다고 할 때,
if (price >= 200_000) {
return parseInt(price * 0.93)
}
의 코드 블록을 사이에 집어넣어야 한다.
하지만 아래의 코드라면,
priceAndDiscount
를 다음과 같이 수정하면 된다.
const priceAndDiscount = [[100_000, 5], [200_000, 7],[300_000, 10], [500_000, 20]]
근소한 차이지만 확실히 아래의 코드가 조건을 추가하는 데에 있어서 더 적은 시간이 걸린다.
물론 이건 단적이면서 매우 쉬운 예제지만, 앞으로 이런 식으로 고민하는 것을 습관화하면 이후 로직 설계에 있어 도움이 될 것이라 스스로 그렇게 믿고 있다.
아무튼 너무 멀리갔나, 다시 돌아오자면 이번 챌린지에는 다음을 느꼈다.
- jest를 이용한 테스트 코드를 직접 짜보고 싶다.
🤩 테스트 하나 통과시키는 그 쾌감이 장난아니다.- 내려오는 데이터가 정해져 있을 때 어떻게 mocking하고,
프론트 단에서 어떻게 고정시켜서 가져가야 나중에 render 또는 validation 때 활용하기 편한지 고민할 필요가 있다.
🧐 그런데 이 부분은 정형화가 되지 않으니 다양한 케이스로 연습이 필요하다.- click event, scroll event 활성, 비활성을 좀 더 확실하게 할 수 있는 DOM과 css를 알아둬야겠다.
- HTML5 태그의 기본 property 중 활용도가 높은 것 위주로 직접 써봐야겠다.
이건 앞으로 여러 프로젝트나 기존의 프로젝트들 리팩토링할 때 충분히 적용시켜볼 수 있는 부분들이라 소중히 안고 나아가야겠다.
결론부터 말하자면 다 떨어졌다.
형태: 비대면 + 이력서 위주 질문 + 과제 테스트 질문
잘한 점:
클로저에 대한 질문을 어느 정도 잘했다.
과제 테스트에 대한 개선 질문에 대해 방향은 적절히 잘 대답했다.
오픈소스 컨트리뷰트에서 기여한 바에 대해 잘 대답했다.
못한 점:
너무 긴장했다.(자기 소개할 때부터 바들바들 떨었다)
퇴사 이유에 대해 너무 적나라하게 말했다.
클로저에 대한 질문 중 빈틈에 대해 대답하지 못했다.
JavaScript, DOM에 대한 기본 지식을 대답하지 못했다.
이번 면접을 통해 배운 점:
commit 하나할 때마다 신중히 하기
React Hook 원칙에 대해 숙지하기
퇴사 이유에 대해 조리 있게 풀어내는 것으로 준비하기
바라는 개발 문화와 그 예시에 대해 준비하기
왜 못한 게 더 많은데 1차 합격한 거지?
폭풍같은 3개월, 결과만 놓고 봤을 때는 아무것도 이룬 게 없지만
자잘하고 계속되는 실패를 통해 배운 점들도 참 많은 것 같다.
앞으로 취직을 위해 해야할 것은 실패에 익숙해지지 않고,
그 순간마다 배울 점을 하나씩이라도 더 찾아서 스스로를 성장시키는 데에 집중해보자.
낙담하기보다는 내가 더 나아질 수 있는 기회라 생각해보자.
하반기도 파이팅!
"내가 무언가를 잘합니다"라는 표현에는 다른 누군가보다 잘한다는 맥락이 숨겨져 있습니다. 숨겨진 의미는 그대로 감춰둡시다. 자신을 다른 누군가와 비교하면 그 순간부터 괴로울 뿐입니다. 비교하는 대상을 다른 사람으로 향하지 말고, 스스로 내면을 향하도록 해야 합니다. 몇 시간 전에 몰랐던 것을 깨닫거나 하루 이틀 전에 작성한 코드를 개선할 점을 찾을 수 있으면 조금씩 자신만의 속도로 성장한다는 증거입니다.
- 김정, <개발자 원칙> 04 나의 메이저 버전을 업그레이드하는 마이너 원칙들. 133쪽