포스팅

  • How to Bake Pi 리뷰

    요약 How to Bake Pi: an Edible Exploration of the Mathematics of Mathematics (파이를 굽는 방법: 수학의 수학에 대한 식용 안내서)는 제빵을 포함한 일상 생활 속의 예시를 사용해서 수학의 목적과 기초적인 개념을 이해하기 쉽게 설명해주는 책입니다. 추상수학에 대해서 배워본 적이 없지만 일반인도 이해할 수 있는 언어로 쓰인 범주론(category theory) 입문서를...

  • Understanding Computation 리뷰

    요약 소프트웨어 개발자 중에서 컴퓨터 과학을 정식으로 배우지 않았지만 관심이 있어서 배워보고 싶은 분들께 이 책을 추천합니다. 이 책은 컴퓨터 과학의 개념 중에서 프로그래밍 언어의 문법(syntax)과 의미(semantics), 그리고 프로그램을 실행할 수 있는 기본적인 추상 기계(abstract machine)를 다룹니다. 글이 간결하면서도 쉽고 재밌게 읽을 수 있도록 쓰여 있는데, 직장에서 업무시간에 직접 작성할...

  • 도커를 활용한 샌드박스

    개요 사용자가 엘릭서 코드를 입력하면 실행한 뒤 그 결과값을 반환하는 엘릭서 어플리케이션을 만들고 있는데, 이런 앱에서는 보안이 정말 중요합니다. 인터넷 어딘가에 존재하는 해커가 작성한 악질적인 코드를 실행하게될 수도 있으니까요. 이런 것을 만들어보는 것은 처음이라서 좋은 해법이 있나 찾아봤습니다. 안타깝게도 항상 그러하듯이 완벽한 해법은 없었습니다. 득실을 저울질해본 결과 보안 설정을 해놓은...

  • 엘릭서에서 캐스트 테스트 요청 시 레이스 컨디션 방지하기

    이 글은 독자가 GenServer.cast/2와 GenServer.call/2 함수가 어떻게 동작하는지 알고 있다는 것을 전제로 작성되었습니다. TL;DR GenServer.cast/2 함수를 호출하고 나서 GenServer.call/2 함수를 호출하세요. 그러면 cast/2와 call/2 양 함수를 호출한 프로세스는 call/2 함수에 대한 응답을 받을 때까지 기다린 뒤에야 call/2 호출 뒤에 이어지는 코드를 실행합니다. 또한 cast/2 함수의 메시지를 받은 프로세스도 해당 메시지를...

  • 하스켈 나라 탐험기 (2)

    요즘은 다른 언어에서도 원래 하스켈에서만 볼 수 있던 기능을 종종 발견할 수 있습니다. 하지만 타 언어는 하스켈과는 다른 목표를 염두에 두고 설계된 만큼 그런 언어에 도입된 하스켈의 기능은 원래 언어와 뭔가 따로 노는 느낌을 줍니다. 반면 하스켈은 함수형 프로그래밍 요소를 최우선적으로 고려합니다. 저는 하스켈을 특별하게 만들어주는 것은 그 기능보다는 함수형...

  • 하스켈 나라 탐험기 (1)

    뭔가 무서운 하스켈 나라 하스켈은 뭔가 이름부터 이상해서 배우기 겁이 나는 언어입니다. 워낙 배우기 어렵고 특이하기로 유명하기도 하니까요. 그래도 하스켈을 배우면 프로그래밍에 대해 더욱 폭넓게 이해할 수 있다고 다들 그래서 하스켈 나라를 방문할 기회는 항상 눈독들이고 있었습니다. 계획 수립! 알아보니 크게 두 가지 이유 때문에 하스켈을 배우기 힘들다고 하는 것...

  • 엘릭서에서 모듈 이름을 포함한 함수의 전체 이름 찾기

    가끔 임포트한 함수의 전체 이름을 알고 싶을 때가 있습니다. 즉, 그 함수가 원래 정의되어 있던 모듈 이름을 알고 싶을 때 말입니다. 그 함수 이름을 &를 사용해서 캡쳐해서 IO.inspect/1에 넘겨주면 전체 이름을 알 수가 있습니다. 다른 방법은 __ENV__.functions/0를 실행했을 때 나오는 정보를 살펴보는 것입니다. 해당 함수는 컴파일 타임 환경에 로드된 모듈과...

  • 엘릭서 언어 디자인 목표

    이 글은 조제 발림이 엘릭서 언어 공식 블로그에 올린 Elixir Design Goals라는 글의 전문을 번역한 글입니다. 엘릭서 언어 디자인 목표 August 08, 2013 · by José Valim . in Internals 작년 한 해 동안 엘릭서를 소개하기 위해 여러 컨퍼런스에서 발표를 했습니다. 보통은 얼랭 VM을 소개하는 것부터 시작해서 엘릭서의 목표에 대해서...

  • Plug 에러 메시지를 표시하는 방법

    Plug는 엘릭서 언어로 작성된 뛰어난 웹 미들웨어입니다. 이 글은 Plug를 사용하기 시작한 지 얼마 되지 않은 사람들을 대상으로 작성했습니다. TL;DR Plug에서 발생하는 에러 메시지를 확인하고 싶지만 Logger에 나타나지 않을 경우, Plug.Debugger를 사용하면 실패한 요청을 출력하도록 할 수 있습니다. Plug.Debugger 관련 문서를 확인해 보세요. 404 Error Message Not Found HTTP POST...

  • 엘릭서에서 얼랭보다 사용성이 개선된 9가지 측면

    이 글은 Sergii Boiko가 railsware에 올린 Important overhaul Elixir did to Erlang to become appealing web-development tool 라는 글의 전문을 번역한 글입니다. 엘릭서가 얼랭 VM에서 돌아간다면 그냥 엘릭서 대신 얼랭을 써서 웹 어플리케이션을 만들면 되지 않나요? 라는 질문을 종종 듣곤 합니다. 짧게 답하자면 순수한 얼랭만으로는 피닉스/엑토 같은 것을 만드는 것은...

  • 엘릭서의 패턴 매칭이 정말 사용하기 좋은 이유는?

    패턴 매칭은 엘릭서에서 사용하기 가장 즐거운 기능 중 하나입니다. 하지만 도대체 왜 사용하기 즐거운지 설명하려고 하면 참 어렵습니다. 이는 단순히 패턴 매칭의 기능 때문만이 아니라 엘릭서의 특성과의 조화 때문에 발생하는 경험이기 때문입니다. 이 글에서는 엘릭서에서 패턴 매칭을 사용한 예시를 몇 가지 제시하고, 패턴 매칭이 왜 뛰어난 기능인지 설명하려 합니다. 대상...

  • 내가 좋아하는 루비 로그 팟캐스트 에피소드 - 커리어 및 조직 관리편

    이전 글에서는 한 명의 개발자로써 성장하는 방법을 이야기한 화를 소개했습니다. 마지막 글에서는 커리어 관리와 조직 관리에 관련된 회를 소개합니다. 커리어 관리 044 RR Choosing the Right Career Path with Marty Haught There are many kinds of software companies. Big vs small, product vs consultancy, interesting vs boring, stable vs unstable,...

  • 내가 좋아하는 루비 로그 팟캐스트 에피소드 - 개인 역량 발전편

    이전 글에서는 북 클럽 시리즈를 소개했는데, 이번 글에서는 한 명의 개발자로서 성장할 수 있도록 해주는 다양한 방법과 관점을 논의하는 에피소드를 소개합니다. 더 나은 개발자가 되는 법 009 RR What Makes Beautiful Code 아름다운 코드란 무엇인가에 대한 토론입니다. 당연히 매우 주관적이지만 흥미로운 관점을 서로 제시합니다. 013 RR Technical Debt 기술적 부채가...

  • 내가 좋아하는 루비 로그 팟캐스트 에피소드 - 북 클럽 시리즈

    프로그래밍를 공부하면서 매우 유용한 팟캐스트가 하나 있었는데, 루비 로그(Ruby Rogues)라는 팟캐스트입니다. 책이나 블로그 글을 보면 기술적인 구체적인 내용은 배울 수 있지만 프로그래밍이라는 분야 자체를 보는 관점이나 실제 업무적인 부분에 대한 내용은 알 수 없어서 답답했는데, 루비 로그는 그 부분을 채워주는 단비같은 팟캐스트였습니다. 루비 로그 팟캐스트를 진행하는 찰스 맥스 우드, 패널들,...

  • 플러그와 카우보이만 사용해서 미니멀한 엘릭서 웹 앱을 만들고 허로쿠에 배포하기

    이 글에서는 얼랭/OTP로 만들어진 HTTP서버인 카우보이(Cowboy), 그리고 엘릭서로 만들어진 조합형 웹 미들웨어인 플러그(Plug)만 사용해서 미니멀한 엘릭서 웹 앱을 만들고 이를 허로쿠에 배포하는 방법을 소개합니다. 이 글을 읽는 이는 미니멀한 웹 앱에 대해서 찾아볼 정도의 사람이니 엘릭서와 웹 개발에 대한 기본적인 지식을 갖추고 있다고 가정하겠습니다. 글 작성 시점에서 엘릭서 1.4.1 버전을...

  • David Heinemeier Hansson Q&A 세션 (2017년 1월 25일, 쿼라 주관)

    2017년 1월 25일에 쿼라가 주관하여 진행한 David Heinemeier Hansson 과의 Q&A 세션을 정리해서 번역한 글입니다 (원본). 모든 질문은 쿼라 사용자가 작성하였고, 답변은 모두 DHH가 작성했습니다. 2017년에 레일즈라는 프레임워크를 배울 이유는 무엇이 있을까? 2004년에 배울 가치가 있었던 것과 동일한 이유다. 바뀌는 것이 많을수록 그대로인 것도 많다. 자바스크립트 진영은 많이 발전했지만 그와...

  • 내가 아직 주니어 개발자라 생각하는 이유

    프로그래밍은 배우기 쉽지 않습니다. 생초보에게 프로그래밍을 가르쳐보려고 해보면 알 수 있는데, 프로그래밍의 기초를 배우는 것에도 엄청난 양의 기반 지식과 훈련이 필요합니다. 알고리즘 분석, 특정 하드웨어에 대한 최적화, 분산 병렬 프로그래밍 등의 고급 기술을 배우기 위해서는 더더욱 많은 시간과 노력이 필요합니다. 그런 관점에서 볼 때 프로그래머 사이에서 그런 기술적 능력이 높이...

  • 엘릭서로 퀵소트 구현하기

    엘릭서에는 언어 차원에서 정렬용으로 제공하는 Enum.sort/1와 Enum.sort/2 함수가 있습니다. 리스트 타입의 경우 머지 소트 알고리즘을 사용하는 얼랭 :lists.sort/1와 :lists.sort/2를 호출하고, Enumerable 프로토콜을 구현하는 다른 엘릭서 타입의 경우 엘릭서 자체적으로 머지 소트 알고리즘을 구현합니다. 소스 코드 링크 엘릭서 리스트는 싱글 링크드 리스트 방식으로 구현되어 있기 때문에 정렬 용으로는 머지 소트가 가장...

  • 루비에서 꼬리 호출 최적화 사용하기

    독자가 재귀라는 개념과 루비를 안다는 것을 가정합니다. 꼬리 호출 최적화란? 꼬리 호출 최적화(TCO: tail call optimization)는 꼬리 재귀(tail-recursive) 프로시져를 최적화하는 방법입니다. 재귀적인 프로시져의 콜 스택 사이즈를 하나로 줄여주어서 재귀를 사용할 때 스택 오버플로가 발생하는 것을 막아 줍니다. TCO는 어떻게 동작하는가? TCO가 최적화하는 대상이 콜 스택의 크기이니 콜 스택에 대해서 이야기...

  • 루비 메서드 디스패치 시스템 이해하기 (Part 2)

    이 글에서는 루비에서 메서드를 호출했을 때, 루비가 어떤 식으로 이를 처리하는지를 살펴보도록 하겠습니다. 루비 언어를 어느 정도 사용할 줄 안다고 가정합니다. 두 개의 글로 나누어서 구성했는데 첫 번째 글에서는 일반적인 루비 프로그램에서 알아야 될 내용을 다루는데, 구체적으로는 조상 목록, 클래스 상속, 모듈 include 및 prepend 등입니다. 두 번째 글에서는 더...

  • 루비 메서드 디스패치 시스템 이해하기 (Part 1)

    이 글에서는 루비에서 메서드를 호출했을 때, 루비가 어떤 식으로 이를 처리하는지를 살펴보도록 하겠습니다. 루비 언어를 어느 정도 사용할 줄 안다고 가정합니다. 두 개의 글로 나누어서 구성했는데 첫 번째 글에서는 일반적인 루비 프로그램에서 알아야 될 내용을 다루는데, 구체적으로는 조상 목록, 클래스 상속, 모듈 include 및 prepend 등입니다. 두 번째 글에서는 더...

  • 초심자가 타입 시스템에 대해 오해하는 몇 가지

    블로그에 어떤 글을 써야할지에 대해 좋은 조언을 들은 적이 있습니다. 내가 1년 전에 읽을 수 있었으면 좋았을 글을 쓰라는 것이었죠. 이 글은 그런 글입니다. 초심자가 타입 시스템을 잘못 이해하는 경우가 많은데 그 중 몇 가지를 설명하고자 합니다. 타입은 왜 필요한가? 프로그래밍 언어를 처음 접할 때, 보통 최초로 마주치는 것은 그...

  • 엘릭서를 사용해서 프로그래밍을 배운다면? (2부)

    이 글은 2016년 11월 16일 서울 엘릭서 밋업에서 한 발표의 내용을 정리한 것입니다. 초심자에게 가르칠 언어를 선택할 때 바로 엘릭서를 떠올리실 분은 없을 것입니다. 파이썬, 루비, 자바스크립트, C/C++, 자바 등이 더 일반적이죠. 하지만 저는 엘릭서 특유의 장점 덕분에 엘릭서도 첫 언어로 진지하게 고려해볼 만하다고 생각합니다. 엘릭서는 초보 개발자에게 코드를 작은...

  • 엘릭서를 사용해서 프로그래밍을 배운다면? (1부)

    이 글은 2016년 11월 16일 서울 엘릭서 밋업에서 한 발표의 내용을 정리한 것입니다. 초심자에게 가르칠 언어를 선택할 때 바로 엘릭서를 떠올리실 분은 없을 것입니다. 파이썬, 루비, 자바스크립트, C/C++, 자바 등이 더 일반적이죠. 하지만 저는 엘릭서 특유의 장점 덕분에 엘릭서도 첫 언어로 진지하게 고려해볼 만하다고 생각합니다. 프로그래밍을 배우는 것은 정말 어렵다...

  • 엘릭서에서 비트스트링 XOR 하기

    한줄 요약 얼랭 스탠다드 라이브러리의 crypto 모듈에 있는 :crypto.exor/2 함수를 사용하면 됩니다. 삽질의 기록 코세라에서 제공하는 Cryptography 수업에 있는 간단한 퀴즈를 풀려고 하다가 모든 것이 시작되었습니다. 평문(pt)과 One-Time Pad로 암호화된 암호문(ct)이 주어졌으니 간단하게 ct와 pt를 XOR하기만 하면 One-Time Pad 키를 알아낼 수 있습니다. 그런데 엘릭서로는 아직 비트 연산자 작업을 안...

  • 확장하기 쉬운 코드가 아니라 삭제하기 쉬운 코드를 작성하자

    역주 이 글은 programming is terrible이라는 블로그에 tef가 작성한 Write code that is easy to delete, not easy to extend.라는 글의 전문을 저자의 허락을 받고 번역한 글입니다. 대상 독자로는 아직 프로그래밍을 배우고 있는 학생과 2년차 이하의 초급 개발자를 생각했습니다. 공감하는 부분이 많아서 번역했지만, 짧은 글이 아님에도 불구하고 글 길이에 비하면...

  • Ruby Rogues에게 보내는 감사문

    드디어 Ruby Rogues 팟캐스트의 모든 에피소드를 완주했습니다. 에피소드마다 1시간 정도 분량인데 현재 시점에서 총 283개의 에피소드가 있습니다. 올해 초에 구독을 시작했으니 매일 한 시간은 Ruby Rogues를 듣고 있었던 셈이네요. 이젠 호스트인 Chuck Maxwood나 자주 등장한 패널들의 목소리나 웃음소리가 머리 속에서 자동으로 재생이 되는 수준입니다. 무엇보다도 이 팟캐스트를 만들고, 벌써 5년도...

  • 프로그래밍 언어와 프레임워크의 교육적 가치

    초보 루비 온 레일즈 개발자가 개발을 하다 보면 쓸데없이 크고 엉망진창인 모델을 만들기 마련입니다. 흔히 하는 실수죠. 저도 마찬가지였습니다. 경험 있는 개발자가 곁에 있어서 그런 실수를 하는 것을 막아줬으면 다행이었겠지만 안타깝게도 제 주변엔 없었습니다. 결국 스스로 그 상황을 해결할 방법을 찾아야 했죠. 해결책을 찾는 과정에서 수많은 블로그 글을 읽으면서 이...

  • JSON Web Token (JWT)란 무엇인가?

    진행 중인 프로젝트에 로그인 시스템이 필요해서 Elixir에 있는 라이브러리를 살펴봤더니 ueberauth, guardian, openmaize 등 괜찮아 보이는 라이브러리가 금방 나왔습니다. 어떻게 동작하는지 살펴보기 시작했는데, 각 라이브러리에 대해 논의하는 포럼 글에서 JWT에 관한 이야기가 나오더군요. JWT는 또 뭐냐… 알지 못하는 약어가 새로 튀어나왔습니다. 진짜 이 분야는 군대만큼이나 약어에 환장한 것 같습니다. 어쨌든...

  • Programming Phoenix에서 버전 때문에 달라진 예제 코드 모음

    지금 Programming Phoenix 출판본에 있는 예제 코드를 따라해보면 일부 코드에서 문제가 발생합니다. 에러가 나기도 하고, 테스트를 통과하지 않을 때도 있고, 함수 지원 중단 경고가 뜨기도 합니다. 책에서 문제가 발생하는 예제 코드를 모아서 해결책을 정리해 보았습니다. 예제 코드에서 문제가 발생하는 이유는 설치된 Phoenix 버전과 책에서 사용된 버전이 다르기 때문입니다. 지금 판본의...

  • Emmet을 사용해서 erb, eex 에 <%= %> 태그 입력하기

    전 Emmet을 정말 좋아합니다. HTML은 쓸 때마다 태그 닫는 것이 너무나도 짜증났는데 Emmet 덕분에 요즘은 HTML도 꽤나 즐겁게 쓰고 있습니다. HTML 문서를 작성할 일이 종종 있는데 혹시 아직 Emmet을 안 써보셨다면 꼭 써보세요. 장담하건데 신세계를 볼 수 있을 겁니다. 일반적으로 사용하는 에디터 대부분에서 플러그인 형식으로 지원하니 여기서 확인해보세요. Emmet의 장점이라면...

  • 경영자는 기술 스택을 어떻게 다뤄야 하는가?

    최근에 창업을 준비하는 사람들을 몇 명 만나서 이야기할 기회가 있었습니다. 각자 진출할 사업 분야나 가지고 있는 아이디어는 달랐지만 한 가지 공통적인 고민거리를 가지고 있었습니다. 바로 사업의 기술적인 부분에 있어서 이해도 부족하고 어떤 결정을 내려야 할지도 모르고 있다는 것이었습니다. 그리고 기술에 대해서 조금 위험한 오해를 하는 경우도 있었습니다. 이 글은 제가...

  • Bare Git Repository 사용해서 설정파일 관리하기

    서브라임 텍스트를 사용하다 빔으로 완전 전환한 이후, 설정용 닷파일을 관리할 필요가 생겼습니다. 만들고 이해하는데 시간도 많이 걸려서 혹시나 모를 사태에 대비해 저장도 하고 싶어졌고, 다른 시스템을 사용해도 언제든 받아서 사용할 수 있도록 해두고 싶었습니다. 처음엔 vagrant를 사용할까 했지만 겨우 파일 몇 개 관리하는데 사용하기엔 오버인 것 같고, 깃 버전 관리용...

  • 더 나은 코드를 위한 샌디 메츠의 조언

    최근 샌디 메츠의 “루비로 배우는 객체지향 디자인” 소위 POODR로 불리는 책을 끝냈습니다. 예전부터 이 책을 추천하는 글을 많이 보았는데, 실제로 읽어보니 내용도 충실하고 책의 구성도 뛰어난 수작입니다. OOP를 처음 배우거나 복습하려는 분들께 추천드립니다. 그리고 Ruby Rogues 팟캐스트에서 패널들이 책의 작가와 이 책에 대하여 이야기하는 에피소드가 있어서 들어보았는데, 이 팟캐스트도 같이...

  • 프로그래밍 용어, 무리해서 번역하지 말고 사용합시다.

    작년에 회계학을 공부할 필요가 있어서 세 달 정도 공부한 적이 있었습니다. 주변에서 다들 회계학은 내용이 너무 지루하다고 이야기를 해서 조금 걱정했는데 소소하게 재미있는 부분이 꽤 있어서 괜찮았습니다. 다만 중간중간에 이해하기 어려운 용어가 있어서 위키피디아나 회계학 용어 사전 등을 종종 참조했는데 당황스러운 일이 있었습니다. 한국어로 번역된 용어가 영어 용어보다 오히려 이해하기...

  • 자신이 컴퓨터 공학을 공부하는 이유가 무엇인지 알고 있나요?

    컴퓨터 공학을 전공하고 있거나, 컴퓨터 공학 전공을 고려하고 있나요? 전공 과정에서 무엇을 배우고 싶나요? “유용한 소프트웨어를 만들고 싶어요”라는 생각을 하고 있다면 이 글을 읽어보시기 바랍니다. 저처럼 학부 컴퓨터 공학에 대해 오해해서 전공 과정에서 스트레스를 받지 않기를 바라며 쓴 글입니다. 10살에 곰을 잡은… 아니 10살에 첫 프로그램을 작성한 그런 인재는 아니었지만...

RSS 피드