라이브 코딩 테스트를 위한 조언

주니어 서버 엔지니어 포지션을 오픈한 이후에 요즘 일주일에 최소 3번의 기술면접을 들어가고 있는데 예전에 비해서 다양한 분들이 면접을 보셔서 세상이 변했다는것을 많이 느끼고 있다. 1차 면접에서 30분 정도 라이브코딩 테스트를 진행하고 있는데 몇몇 안타까운 경우들이 많아서 몇가지 팁을 적는다. 1) 사용하는 프로그래밍 언어 자체에 익숙하기 너무 당연한 부분이다. 아무리 신입/주니어라고 해도 코딩테스트가 있다고 하면 기본적인 본인이 제일 잘 사용하는 프로그래밍 언어에 대해서 잘 다뤄야 한다. 여기서 잘 다룬다는게 syntax sugar를 잘 쓰거나 그 언어를 깊게 이해한다는 게 아니고(그런걸 기대하는건 아니다.) 최소한의 기본적인 반복문과 분기문, 함수 작성과 호출 정도는 잘 사용해야한다는 것이다. 어떤 분들은 반복문의 문법 조차도 완성하지 못하는 경우도 있고, 완성하더라도 실제 실행하지 못하는 분들도 있는데, 코드를 짜고 실행을 시킨다. 는 것은 기본중에 기본이기 때문에 당연히 익숙해야한다. 간혹 우리회사에서 쓰는 언어에 맞춰서 코딩테스트를 보시는 분들이 있는데, 본인이 진짜 평소에 잘 쓰던 언어로 테스트를 봐도 라이브 코딩 테스트라는 압박감에서 제 실력으로 제한시간내 풀기란 쉽지 않다. 본인이 제일 잘 하는 언어를 이용해서 시험을 보길 추천한다. 2) 매일쓰는 코드 편집기 사용 할 것!! 이것도 1번과 비슷한 맥락인데 특정 편집기를 강제하지 않는 상황에서 본인이 매일 사용하는 코드 편집기(IDE)를 사용하는 것을 추천한다. 생각보다 도구는 중요하다. 어떤 분들은 거의 본인의 노트북이 맞나 싶을정도로 처음에 헤매는 분들이 있는데, 대부분 결과가 좋지 않았다. 예를 들어 Intellij를 사용하시는 분이 갑자기 본인 개인 노트북으로 eclipse로 테스트를 진행하는 경우도 있었고, 익숙하지 않은 vim으로 보는 분들도

2020 회고

2020년 이글을 쓰는 시점은 12월 30일이라 올해가 가기 전에 회고를 해보려고 한다. 올한해 아쉬웠던 점은 나 뿐만 아니라 모든 사람들이 그렇겠지만 코로나로 인해서 우리의 생활들이 그리고 계획했던 것들을 많이 이루진 못했다. 특히 올해는 PyconUS2020을 가기 위해서 행사 티켓 뿐만 아니라 비행기, 호텔 그리고 휴가 계획까지 모두 거기에 맞춰있었는데 못 가게 되었고, 이 컨퍼런스 뿐만 아니라 국내에서 진행하는 컨퍼런스들도 모두 유투브로 시청해서 현장감은 아쉬웠다. 그래도 올해 꽤 알차게 보냈던 것 같고 역시 인생은 의도치 않았던, 상상하지 못했던 일이 벌어지면서 재밌는 것 같은데 올해 기억남는 것을 몇가지 뽑아보자면 이렇다. 부캐, 캠핑, 포도나무 코로나 사태로 인해서 주말에 사람이 많은 곳에 가기 보다는 부모님이 일하시는 목장에가서 포도나무를 심거나 캠핑을 하거나 강아지랑 놀거나 하는 시간들을 주로 금, 토, 일을 보냈던 것 같다. 처음에는 자연을 보는것 자체가 힐링이 되었고, 개인적으로 2-3월 많이 심적으로 지쳐있는 상태라서 약간의 도피처가 되었던 것 같다. 그리고 아이들도 마음껏 뛰어놀 수 있고, 다양한 놀이를 할 수 있게 되어서 좋았다. 처음에는 토, 일만 갔는데 나중에는 금요일에 빨리 퇴근해서 바로 금요일 밤에 가서 좀 더 길게 보냈던 것 같다. 프로젝트와 성장 본의아니게 타임어택이 걸린 프로젝트를 리드하게 되었고, 사실 이 회사에서는 리드하는 포지션은 아니였는데(이전 회사에서 리드하는 포지션에서 약간 질려서..😨) 리드를 하고 새로운 사람들과 새로운 팀을 꾸려 나가면서 열심히 했던것 같다. 다행히 성과도 좋았고. 그 안에서 개인적으로 많이 성장하고, 성찰하고, 깨달음을 얻게 되었던 것 같다.

포도는 어떻게 되었을까?🍇

이전 글들에서 포도나무를 심고 주말마다 가꾼 부캐의 썰을 풀었는데, 그 이후 포도는 어떻게 되었는지에 대해서 애기하려고 한다. 우선 잡초를 뽑는 것 이상으로 생각보다 할 일이 많다는 것을 깨닫게 되었다. 사실 그냥 심어보자는 무계획적인 부분이 많았고 전문적으로 포도재배에 대해서 공부한 것도 아니여서 부족한 부분이 많았고 그런 부분들은 그때 그때 몸으로 때웠다. 예를 들면, 무럭무럭 자라나는 포도의 가지들, 그리고 거기서 나오는 줄기와 잎에 대해서 어떻게 해야할지를 몰랐다. 진짜 무럭무럭 자랐고 잘 자라고 있구나로 여겼는데 나중에 큰 부채로 다가왔다. 그리고 포도송이가 맺히기 시작했을 때 이게 포도인지 꽃인지 분간을 못했다. 나는 분명 포도라고 생각했고, 다른 사람은 꽃이라고 주장했다. 결과적으로 당연히 포도였고, 그 시간에 봉지를 씌우거나 포도알들을 골라내는 작업들을 하지 못했다. 그래서 중간에 포도알들이 겹치면서 터져나가는 경우가 많았다. 그래도 약 40~50 송이 포도에 대해서 봉지씌우는 작업을 했고, 20~30 송이 정도 수확을 하게 되었던 것 같다. 아쉽게도 태풍 하이선이 오는 날이라서 내려가지 못하고 아이들과 함께 포도를 따는 체험을 하지는 못했고 부모님이 대신 따주셨다. 막상 결과물을 받아 봤을 때, 첫 해의 수확이지만 너무 만족스러웠다. 포도를 직접 돈을 주고 사먹지 않아도 된

우리에겐 그라운드 룰이 필요하다.

부캐의 일상은 계속 진행 중인데, 보통 금요일 밤 늦게 9시 넘어서 내려가서 토요일 오전 6시 정도부터 일을 시작하고 11시~4시 정도는 여름으로 접어들어서 시에스타를 즐기고 있다. 여름으로 넘어오면서 잡초들이 진짜 무섭게 자라는 것을 느끼고 있는데, 일주일마다 잡초가 다시 무성하게 자라는 것을 보고 왜 이게 잡초라고 불리는지를 새삼느끼고 있다. 처음 포도나무를 심었을 때, 부모님이 포도나무 바닥에 검은색 비닐을 깔아서 눌러주면 잡초가 번창하는 것을 방지할 수 있다고 알려주셨다. 사실 뭐 잡초 뽑는 게 어렵겠나? 운동삼아 하지 라고 생각하며 매주 잡초를 뽑았는데 이젠 한계에 부딪혔고(2시간씩 뽑으면 죽을 것 같다. 🤯), 2주전에 검은색 비밀을 깔아서 더 이상 잡초는 올라오지 않는다. 부캐의 일상과 함께 본캐는 프로젝트를 진행하면서 많은 것들을 느끼고 있다. 프로젝트의 완성이 결국 포도나무를 키우고 포도 열매를 맛보는 것이라면, 잡초는 뭘까? 내 생각에 잡초는 목표에 상관없는 의견이나 코드, 프로세스 등이다. 다양성도 중요하고 소수의견도 중요하지만 프로젝트를 진행함에 있어서, 그리고 일정이 매우 중요한 프로젝트에 있어서 그러한 것들은 의사소통 비용을 증가 시키고 협업과 생산성을 저해 시킨다. 프로젝트를 진행하면서 더 이상 잡초가 올라오지 않게 하는 바닥에 까는 검은색 비밀의 역할이 그라운드 룰(GroundRule)이다. 같이 일하는 개발자, 협업하는 개발자, 팀 내

부캐의 일상

코로나로 인해서 재택근무를 하고 있던 2월 말 3월부터 가장 힘들었던 것은 집에서 일을 하는 것이 아니라, 어린이집, 유치원을 가지 못하는 아이들과 놀아주는 일이었다. 주 7일 동안 놀아주다 보면 사실상 할 수 있는 놀이는 바닥이 난다. 이것저것 찾아봐서 놀아주다가, 어느새 스위치 게임 마리오 파티를 같이하기도 하고 그러다가 결국 각자 유투브를 보다 잠들곤 했다. 그래도 아이들은 뛰어놀지 못하면 답답해하면서 짜증을 내고 그런 화는 나와 아내가 감당해야 할 몫이었다. 그래서 3월 정도부터는 부모님이 계신 시골에 매주 내려갔다. 금요일 퇴근해서 집에오면 9시인데 바로 출발해서 1시간 정도 달리면 도착해서 자고 나면 토요일/일요일은 시골에서 아이들이 시간을 보내곤 했다. 아이들도 좋아했고, 나 역시 연날리기도 하고, 바베큐를 해 먹기도 하고, 별을 보기도 하는 등의 재밌는 시간을 보냈다. 그렇게 3주 정도의 시간이 흘렀는데, 그마저도 일상이 되어 버렸다. 포도나무를 심다. 🍇 어렸을 때 할아버지가 키우던 포도나무가 많이 생각나서 포도나무를 키워보고 싶었다. 작년부터 몇 번 그렇게 말을 할 때마다 포도는 사 먹는거다 라고 부모님 및 아내가 말렸다. 올해도 또 애기를 하니 포기하셨는지 한번 심어보라고 부모님이 묘목시장에 가서 포도나무를 사오셨다.(사실 나는 어디서 사는지도 몰랐다.) 어떻게 심는지도 모른 채 그냥 시키는대로 땅을 파고 비료를 섞고 포도나무를 6그루 심었다. 그리고 그날 파스를 4군데를 붙이고 잤다. 다음날 포도나무를 심고 나니 물을 주게 되었다. 내가 물을 주는 모습을 보고 아이들도 물을 주기 시작했다. 일단 포도나무를 심었으니 기다리면 되겠지

drone.io - server 설치하기

최근에 drone.io 를 사용할 일이 있었는데, 생각보다 자료가 없어서 이번에는 server 구성에 대해서 다루고 다음 글에서는 agent 에 대해서 다룰 예정이다. 개요 사이트 : https://drone.io/ jenkins, travis-ci, github actions 처럼 CI 및 CD 까지 할 수 있는 툴 특징 yaml 문법으로 정의 할 수 있다,.(젠킨스에 비해서 편하다) 다양한 plugins 를 기반으로 하고 있다. golang 로 되어 있다. 구성 server : drone.io 사이트에 대한 서버 역할 agent : 개별 repository 에서 실행하는 pipeline 을 수행하는 역할, runner 라고 표현한다. Docker Runner, Exec Runner, SSH Runner server 설치하기 다양한 VCS 를 제공하지만 여기서는 github 와 연결하는 것을 기반으로 설명한다. https://docs.drone.io/installation/providers/github 1) github OAuth app 만들기 github > Settings > Developer Set

원격근무를 시작하다. 🏡

회사에서 원격근무(리모트) 를 하게 되었다. 전체가 다 하는 것은 아니고 일부 선발대 같은 느낌으로 뽑히게(?) 되어서 1~2월 하고 있다. 사실 나는 집-직장의 거리가 꽤 먼 편으로 약 2시간 정도 걸리고 있다. 여러 발표에서도 말했지만 원래 30분 거리의 회사를 다니다가 이직을 하게 되었고, 회사가 여의도로 오면서 멀어지게 되었다. 처음 1년 동안 여러가지 루트와 교통 수단을 통해서 출퇴근 거리/시간을 단축해 보려고 했다. 자차를 가지고 다니기도 했는데 야근을 할게 아니라면 결국 양재 (라고 쓰고 지옥이라고 읽는다.) 에서 너무 막혀서 포기했다. 그리고 자차와 대중교통의 시간차가 30분 정도라서 주차비 1일 만원을 잡으면 그리 좋은 선택은 아니라는 것을 알게 되었다. 집에서의 나의 일반적인 하루의 시작은 이렇다. 꽤 많은 시간을 거리에서 보내고 있다. 출근 : 새벽 6시 기상, 7시 40분

객체지향 사실과 오해를 읽고.

객체지향이라는 말은 어떻게 보면 올드스쿨이다. 함수형 프로그래밍과 대척점에 있어 보이기도 하고, 객체지향 == 자바라고 느껴지기도 하니 말이다. 어떻게 보면 이 책은 그런 생각들이 오해였고, 사실에 대해서 설명해 주는 책이라는 생각이 들었다. 내가 처음 객체지향이라는 단어를 배웠을 때는 C++ 을 배우면서 절차지향(이 말도 들어본지 꽤 됐다.) 의 대척점에 있는 존재였다. 마치 C vs.C++, 절차지향 vs. 객체지향 같은 느낌. 그래도 힙(hip)한 느낌이었다. 클래스와 캡슐화, 다형성 그리고 예제는 항상 Person 과 Employee 였다. 그 이후로 객체지향이라는 단어는 다음 단계인 디자인패턴(design pattern) 과 effective 시리즈로 나를 이끌었던 것 같다. 그리고 이 책을 보면서 객체지향에 대해서 다시 생각하게 되었고, 내가 그 동안 클래스를 만들고 책임을 클래스에 할당하고 설계를 하는 등의 일련의 방식들이 조금씩 문제가

dnsperf 로 dns서버 성능 측정하기

요즘 DNS 에 대해서 관심을 많이 가지게 되었는데 😂 domain name system 은 도메인 이름을 ip 로 바꿔주거나 그 반대의 역할을 하는 것으로 알고 있다. 일반적으로 AWS Route53, google dns(8.8.8.8, 8.8.4.4) 이 이런 역할을 하는 것으로 보면 된다. https://www.dnsperf.com/#!dns-resolvers 에 가면 속도/안정성 같은 부분의 통계를 볼 수 있다. 물론,직접 구축을 할 수도 있는데 dnsmasq 나 core dns 같은 것을 통해서 만들 수 있다. 그런데 이것도 어떻게 보면 서버라서 성능에 대해서 측정을 할 필요가 있다. 결국 어플리케이션 서버를 만들고 하나의 서버에서 다른 서버 혹은 DB서버를 호출할 때 일반적으로 ip 보다는 도메인을 쓰기 때문에 DNS 서버를 거쳐갈 수 밖에 없다. 당연히 트래픽이 늘면서 DNS 서버에 대한 호출이 늘 수 밖에 없고(캐시를 타겠지만) 그러다 보면 DNS 서버고 부하를 받는다. dnsperf 는 DNS 서버에 대한 성능을 측정할 수 있는 도구로 C 로 개발이 되어 있다. 다운로드 링크 : https://www.dns-oarc.net/tools/dnsperf 설치 centos > wget https://www.dns-oarc.net/files/dnsperf/dnsperf-2.3.2.tar.gz > tar xfvz dnsperf-2.3.2.tar.gz > cd dnsperf-2.3.2 > ./configure &g