~21.07.18

Ian·2021년 7월 18일
0

Today I Learned

목록 보기
38/40
post-thumbnail

유명한 기업의 과제 전형 응시

계기

흔히 대학교를 서연고서성한중경외시~ 이런 식으로 묶어 부르듯, IT 쪽에서도 네카라쿠배당토 라는 식으로 묶어부르곤 한다. 그 네카라쿠배당토 중 하나의 리크루터 분께서 꾸준히 내 프로필을 지켜보다가 제안을 주셨다. 삶의 작은 이벤트가 될 거 같아서 과감하게 수락하고, 응시를 해 보았다.

후기

해당 과제 전형에서 중점적으로 보는 건 크게 두 개였다. 데이터베이스의 활용은 딱히 없었던지라 데이터베이스쪽은 딱히 다룰 일이 없었고, 그저 정말 기본에 충실한지를 보는 느낌이었다.

그 두 개는 바로 좋은 테스트코드 작성과 좋은 코드 작성이었다.

좋은 테스트 코드 작성

최근 들어 TDD 라는 개발방법론에 관심이 많아졌고, 이것저것 공부해보고 있었다. 구현해야 할 기능들이 산더미인지라 회사에서 일을 하던 도중 극히 일부분만 TDD 를 통해 개발하였으나, 관심이 가던 주제라 좋은 테스트코드란 무엇인지, 그리고 실제 데이터베이스에 영향을 주지 않도록 sqlite 을 사용하여 in memory testing 을 어떻게 할 수 있을지에 대해서는 고민을 하였다.

이번은 '테스트 코드는 작성하고 있는데, 좋은 테스트코드 작성을 하고는 있는가?' 를 돌아볼 수 있는 좋은 시간이었다. 나는 아직 좋은 테스트코드를 작성하고 있지 못 한다는 결론도 얻을 수 있었다.

왜 그렇게 느꼈냐면, 정말 기능이 정상적으로 수행되는지만을 확인하는 수준의 테스트코드를 짰기 때문이다. Edge Case 나 Happy Route Case 를 도출하고, State Tranisition Diagram 을 그려보면서 해당 과정들을 체계적으로 해 나가는 과정이 필요한데 그걸 정작 하지 못 했다. 시간의 문제라고 변명을 하고는 싶지만, 사고력과 코드 피지컬을 늘렸으면 습관적으로 빠르게 할 수 있었던 게 아닐까? 하며 반성을 하게 된다.

좋은 코드 작성

나는 '왜 좋은 코드를 짜야하나요?' 라고 하는 면접의 질문들에서, '그렇게 해야 확장성을 도모할 수 있기 때문입니다' 라고 정말 원론적인 답변만을 말하곤 했었다. 그러나 지금은 조금 더 실전적인 답변을 말할 수 있을 거 같다. 지금 내가 똑같은 질문을 받는다면 '그래야 나중에 가서 고생을 덜 하기 때문입니다' 라고 대답할 거 같다.

클린 코드에서 말을 하듯, 좋은 코드를 작성하려는 이유는 결국에 나중에 가서 대 참사가 벌어지는 걸 방지하기 위해서이다. 대부분의 프로그래머들은 새로운 기능을 구현해 낼 때 보다 기존 코드를 유지보수 하는 데 압도적으로 더 많은 시간을 들인다고 하는데, 코드가 거미줄마냥 얽혀있어서 아주 탄탄한 의존성(?) 을 자랑한다면 아주 작은 유지보수만 할 때에도 위태위태하게 넘어질 법 한 젠가에서 블럭을 빼는 것마냥 복잡한 고민을 해야된다.

좋은 코드란 무엇인가 라는 고민은, 같은 시간을 들이더라도 더 많은 일을 할 수 있기 위해서, 적게 시간을 써서 많은 일을 하기 위해서 나온, 정말 실전적인 고민이라고 생각한다. 절대로 이론적인 고민이 아니라고 생각한다.

갈 길이 멀다

당연하게도 나는 아직 갈 길이 매우 멀다.

이번 과제에서는 그래도 지금동안 공부했던 걸 최대한 활용해보려는 목적으로

  1. TDD 의 철학에 맞게 아주 간단한 테스트 코드 작성, 해당 테스트 코드를 기반으로 실제 코드 구현, 그리고 다음 기능의 테스트 코드 작성 후 실제 코드 구현을 하는 과정을 반복하며 코드를 구현
  2. 무작정 상속을 하는 것이 아니라 아니라 의존성을 주입(Dependency Injection)을 하는 식으로 Class 를 운용하고, interface 를 통해 type 과 code 를 분리하고, 그 interface 를 통해 주입할 의존성들의 대략적인 개형을 관리하는 식으로 재사용성을 높임

정도를 시도해보았다.

그러나 내가 좋은 테스트를 작성하였는지, 그리고 좋은 코드를 작성하였는지 라고 스스로에게 물어보면, 그렇다고 절대로 대답할 수 없다.

그렇기 때문에 당연하게도 떨어질 거 같다. 오히려 공부한 내용을 한 번 쏟아부어보라는 시험을 보게 해 준 것 자체에 너무 감사하는 마음이 들었다. 그래서 오늘 과제를 제출하면서 리크루터 분에게 좋은 기회를 주셔서 감사하다는 말을 말미에 보내기도 하였다.

컨퍼런스에서의 발표

계기

남해에서 한달동안 모여살았던 개발자분들 중, 한 분께서 이런 걸 주최하는 모임에 들어와보지 않겠냐고 하여 들어가게 되었다. 이름도 되게 재미있었다. 깃허브의 커밋로그가 잔디밭 같이 생겨서, 1일 1커밋을 목표로 잔디밭을 예쁘게 가꾸려는 사람들이라 정원사들이라는 이름을 붙였다고 한다. 흥미롭다는 생각에 들어가게 되었다.

발표

이제 잔디심기가 마무리되어가던 찰나, 주최자 분께서 발표를 할 사람들을 모집한다고 했다. 재미있어서 발표를 한 번 해 보겠다고 하였고, NestJS 로 개발하던 걸 이야기할까, 아니면 TDD 에 대해서 간단하게 공부한 걸 이야기할까 주최자분에게 여쭤보니 TDD 가 조금 더 관심이 간다고 하셔서 TDD 로 발표 주제를 정하게 되었다.

세 살짜리 아이도, 관심없는 사람도, 아무것도 모르는 사람도 알 수 있게

발표를 하면서 느낀 점은 내가 아직 이런 패러다임을 제대로 이해하지 못 했다는 것이었다. 왜냐면, 내가 생각하더라도 제대로 설명하지 못 했기 때문이다. 그리고 제대로 설명하지 못 했다는 건, 내가 제대로 그걸 이해하지 못 했다는 방증이기 때문이다.

예전에 광고쪽에 관심이 있었던 시절, 제일기획의 면접질문 중 되게 기억에 남는 게 있었다. '광고가 뭔지 한 번 설명해주시겠어요?', '좋은 설명 감사합니다. 그러면, 그 광고가 뭔지에 대해서 세 살 짜리 아이에게 설명해본다고 생각하고 설명해 주시겠어요?' 라는 질문이었다.

그 당시에는 '되게 이색 질문이네' 정도로만 생각했지만, 요즘들어 정말 느끼는 점은 저거만큼 무섭고 확실한 질문이 없단 점이다. 쉽게 설명하기 위해선 잘 알아야 한다는 아주 중요한 전제를 생각한다면, 저런 질문에 제대로 대답하기 위해서는 아주 잘 알아야 한다. 특히 난 이 당연한 사실을 최근들어서야 회사에 와서 좋은 분들과 만나면서, 그리고 추천받아 챙겨보는 유튜브 채널을 보면서 느끼고 있었기에 내가 제대로 이해하지 못 했단 사실을 더 뼈저리게 느낄 수 있었던게 아닐까 싶다.

사이드 프로젝트의 본격적인 고도화

하면서 배운 점들

결국엔 기본기가 중요해

HTTP 라는 Application Layer 에서만 개발을 하던 나에게 TCP 로 socket 통신을 하는 서버를 만드는 건 정말 새로운 도전이었다(전공자들에겐 당연한 일이겠지만, 여기서 또 역량 부족을 느꼈다). 다행인 점은 아주 뼛속까지 전공자가 팀에 있어서 많이 배울 수 있었다는 점이었다. TCP 가 결국 Transport Layer 이고, 잘 전달하고자 하는 목적에 맞게 연결을 하기 이전 packet 을 주고받아 서로간의 소통이 가능한지 여부를 확인하고, 소통이 마무리되는지 여부를 확인하기 위해 3/4 way handshaking 이 나왔다는 설명을 들을 때 '전산학 지식은 반드시 공부해야겠다' 라는 목표도 생기고, 또 '와 이게 책으로만 볼 땐 재미가 없었는데, 실제로 이렇게 머리 쥐어싸매며 알다 보니 재밌네' 라는 마음도 들게 되었다.

결국엔 사람이 중요해

사업을 이끌어 나가지도 못 했지만, 벌써부터 느끼는 점은 결국 모든 건 다 사람이 한다는 점이다. 훌륭한 사업모델을 가지고 있고 그걸 절차에 맞춰 실천할 수 있는 사람, 그걸 현실에서 만들어 낼 수 있는 사람 등등, 사람이 중요하다는 사실을 알게 되었다.

그래서 내가 먼저 기본기가 탄탄하고, 멋진 사람이 되어야 해

위에 적은 깨달음 두 개를 합성해서 깨우친 점이다. 내가 멋진 사람이 되면 주변에 멋진 사람들이 많아지니, 내가 먼저 멋진 사람이 되어야 한다는 당연한 교훈이지만. 굳이 적어보았다.

프로젝트 막바지의 야근

일보단 공부

솔직히 생각하면 이렇다. 일을 많이 하는 건 그냥 지식을 꺼내 구현하는 것 뿐이다. 물론, 그 일을 하는 과정에서 동료들, 혹은 나 스스로의 치열한 고민을 하면서 더 좋은 해결책을 찾는 건 성장이 될 수 있다. 그러나, 그거보다는 공부를 해서 내 지식의 저변을 넓히고, 내 지식의 깊이를 깊게 만드는 게 중요하다는 사실을 깨달을 수 있었다. 일하면서 성장을 할 수 있는 성장영역과, 공부하면서 성장을 할 수 있는 성장영역은 명백히 다르다.

이번 주엔 거의 23시 이전에 집에 간 적이 거의 없었다. 그리고 다음 날 06시가 되어서 일어나는 삶을 반복했다. 그러나 이렇게 생활하다 보니, 이전처럼 운동을 하고 집에서 공부를 하는 식으로 스스로를 돌아보고 발전시키는 과정이 없어 오히려 내가 깎여나간다는 생각이 들었다.

물론 지금은 프로젝트 막바지 이기에 달려줘야 할 때이다. 회사도 나를 믿고, 나도 회사를 믿고, 그렇기에 달릴 수 있어서 달린다. 그러나, 성장을 위해서라면 이런 분위기가 지속되면 안 될거같단 생각이 들었다.

건강

건강이 제일이라는 사실을 깨달았다. 특히, 운동을 다시 시작한 지 두달정도 되었다가 1주일정도 운동을 하지 않으니 운동을 통해 길러진 체력이 야근으로 깎여나간다는 생각이 들었다. 거북목을 잡기 위해 했던 넥브릿지와 쉬러그, 그리고 풀업 등의 운동. 전체적인 체력 향상을 위해 했던 하루 10km 싸이클 타기 등의 빈자리, 코어 운동을 위해 했던 데드리프트, 손목건강을 위해 했던 리스트 컬과 해머 컬 등의 빈자리를 정말 크게 느꼈다.

그래서 다음주부터는 하루는 17시 정시퇴근 후 유산소와 근력운동을, 하루는 20시까지 야근 후 유산소만을 하기로 마음을 먹었다. 야근을 꼭 할 필요가 없다면, 새벽에 일찍 일어나 일을 하자. 성장 호르몬이 최대로 분비되는 22시부터 02시까지의 수면시간은 꼭 확보해서 효율을 챙기자. 잠을 줄이기 이전에, 나는 과연 깨어있는 동안 최고의 효율을 끌어내고 있는가? 라는 질문을 꾸준히 던져라.


기타


카카오 T에서 진행했던 이벤트가 당첨되어 빅 죠르디 가방을 받을 수 있었다. 행복해!

profile
правда и красота, truth and beauty

0개의 댓글