본문 바로가기

전체 글

(22)
주니어 개발자 이직기 작년 말부터 올해 상반기까지는 이직으로 인해 바쁜 일상을 보냈다. 이직을 성공한 현재는 여유가 조금 생겼기 때문에 앞으로 익숙하지 않은 기술들을 사용하기 위해 학습한 내용들을 기록하며, 다시 블로그에 열심히 글을 적어볼까 한다. 그리고 그 시작을 내가 이직을 결심하고, 현재 회사에 오기까지의 이야기를 담은 이직기 겸 회고로 시작해보려 한다. 이직을 결심한 이유 내가 이직을 결심한 시점은 작년 11월쯤이였던 것 같다. 약 1년간 잘 다니던 회사를 그만두고 이직을 해야겠다고 마음을 먹었던 이유는 여러가지로 많은 이유가 있었지만 나를 포함해 많은 사람들이 사용하고 있는 서비스를 직접 개발해보고 싶다는 욕심이 가장 컸던 것 같다. 당시 다니던 회사의 서비스도 상당히 많은 사용자가 존재했지만 연령대와 타겟이 나와..
[BOJ] 백준 2231번 최근 다시 알고리즘 문제 풀이를 다시 시작했다. 알고리즘을 다시 시작한 이유에는 여러가지가 있지만 알고리즘을 풀이하는 것은 서비스를 개발하는 것과는 또 다른 재미가 있어서 최근에 즐겁게 문제를 풀고 있다. 한동안 알고리즘에 손을 놓았기 때문에 당분간은 백준의 단계별로 풀이를 하나씩 풀어보려고 하고 있는데 오늘은 Brute Force에 있는 문제 중 개인적으로 재밌기도 했고, 엉뚱한 삽질을 했던 2231번 풀이를 적어보려고 한다. 문제 설명 해당 문제는 위에서 언급했듯 Brute Force를 이용한 문제이다. (https://www.acmicpc.net/problem/2231) 문제의 조건은 다음과 같다. 분해합 N은 1 ≤ N ≤ 1,000,000으로 주어진다. N의 가장 작은 생성자를 출력한다. 생성자..
테스트 주도 개발 (TDD와 BDD) 필자는 지금까지 테스트 코드를 한번도 작성해 본 적이 없는 테린이였지만 (진행중) 최근 입사한 회사에서는 BDD를 적극적으로 적용하고 있기 때문에 신입 과제를 수행하며 테스트 코드에 대한 느낀 점과 함께 테스트 코드를 바라보는 다양한 관점에 대해 개인적인 생각을 짧게 적어보려 한다. TDD TDD는 "Test Driven Development"의 약자로서, 말 그대로 테스트 주도 개발이다. TDD란 말이 나온지는 굉장히 오래되었다. 필자도 이전부터 TDD에 대한 이야기를 자주 접했지만 많은 회사와 개발자에게 공통적으로 "TDD가 좋은거 알겠는데 생산성이 너무 떨어져" 또는 "굳이 도입할 필요성을 못 느끼겠어" 라는 말을 자주 들을 수 있었다. 특히 스타트업의 경우 제한된 리소스로 빠른 성장을 가져가야 하..
[Javascript] Async와 Promise 최근 ES8부터 적용된 Async의 MDN 문서를 읽다가 예제로 첨부되어 있는 Promise와의 비교 코드가 정말 잘 작성되어 있는 것 같다고 생각했다. 이미 많은 사람들이 읽어 본 문서겠지만 아직 Async와 Promise가 어려운 사람들 (사실 본인)도 쉽게 이해할 수 있도록 해당 문서의 코드를 조금 수정하여 Async와 Promise의 차이, 그리고 서로 동일한 동작을 위해서는 어떻게 할 수 있는지 적어보려 한다. 1. Async Async Function은 AsyncFunction 객체를 반환하는 비동기 함수이다. NodeJS와 마찬가지로 JS 역시 이벤트 루프를 통해 비동기 함수를 동작시키며, Async Function은 반드시 Promise를 반환한다. 먼저 Async를 사용해봤다면 Await..
[Javascript] const와 Object.freeze()를 이용하여 Immutable한 Object 만들기 프로그래밍을 하다보면 개발자의 실력과는 별개로 언제나 "Human Error"가 발생할 수 있다. 특히 개발자의 실수로 인해 의도치 않게 전역 공간이나 외부 스코프의 값이나 상태가 변경되는 “Human Error”는 언제든지 일어날 수 있으며, 추적이 어렵고, 프로그램에 치명적이다. 그래서 오늘은 Javascript에서 const와 Object.freeze를 사용하며 객체를 Immutable하게 만듦으로서 객체를 "Human Error'로 부터 보호하는 방법을 소개한다. const 자바스크립트는 ES6(ECMA 2015)부터 let과 const 키워드를 제공한다. 이 중 const 키워드를 사용하면 상수 변수 선언을 할 수 있다. 그리고 const는 상수로 취급되기 때문에 다음과 같이 값을 변경하려고 시..
[Node.js] await은 정말 Non-Blocking일까? 최근 개인적으로 바쁜 일도 끝나고 해서 퇴근 후 스터디를 할까 고민하던 중 Node.js 스터디를 하기로 결심했다. 마침 지인 분께서도 함께 하고 싶다는 말씀을 해주셔서 페이스북 그룹을 통해 스터디원을 모집했고, 저번 주부터 스터디를 시작했다. 그리고 스터디 첫 날을 위해 책을 읽던 중 과연 await은 Non-Blocking일까? 라는 궁금증이 들었다. Non-Blocking과 Asynchronous Node.js가 싱글 스레드 기반의 Non-Blocking/Asynchronous 라는 것은 Node.js를 사용해 본 사람이라면 누구나 들어봤을 것이다. 하지만 실제로 Node.js가 구동되는 방식을 보면 Node.js는 과연 싱글 스레드가 맞는가? 라는 의문도 든다. 실제로 스터디를 진행하면서 한 분이..
[MySQL] AWS RDS 데이터 Dump 하기 (Import/Export) 최근 운영하던 서비스에 테스트 서버를 구축하던 중 테스트 서버용 데이터베이스를 (이하 DB) 어떻게 운영할지 고민하게 되었다. 사실 테스트 서버 운영은 서비스 배포를 시작할 때 이미 고민했던 부분이였지만 당장은 배포 환경을 분기할 정도의 필요성은 없다고 판단했기 때문에 구축하지 않았었다. 현재 테스트 서버를 구축하려는 목적이 서비스의 규모가 커졌기 때문은 아니지만 최근 서비스를 운영하면서 DB 설계에 대한 고민과 배포 단계를 위한 브랜치 전략(Git flow)의 필요성을 느끼게 되었고, 운영 DB와 테스트 DB를 분리함으로써 스키마의 추가 및 변경, Push 기능 등과 같은 운영 서버에서 할 수 없는 테스트를 안정적으로 하기 위해 구축을 결정하게 되었다. 그리고 기존 운영중인 DB 데이터를 기반으로 테스..
대학생 개발자라면 누구나 하는 고민 독자(?)에게 메일 받다. 얼마 전 (사실 오늘) 필자가 작성한 회고를 읽고, 한 분이 메일을 주셨다. 메일의 내용은 필자와 비슷한 상황의 대학생 개발자인데, 스스로 늦은 나이라고 생각해서 앞으로 어떤 활동을 해야 하고, 어떤 것을 기준으로 공부하며 커리어를 쌓아야 하는지 조언을 해달라는 것이었다. 필자는 내가 ~ 상황인데 앞으로 ~ 되기 위해서는 어떻게 해야 하냐는 질문을 굉장히 부담스러워 하는 편이다. 내가 질문하는 사람에 대해 잘 모를때는 특히 더 그렇다. 그 이유는 원래 성격이 그런것도 있지만 누가 봐도 연차에 비해 뛰어난 실력과 인성을(?) 가지고 계신 지인에게 받은 영향도 있다. 필자의 비공식 멘토 분들 중 한 분이신 이 분은 본인이 쉽게 한 말이 타인에게는 굉장히 큰 영향력을 끼칠 수 있기 ..