김대현은 다음커뮤니케이션에서 근무하는 소프트웨어 개발자입니다. 2004년부터 Daum 카페, Daum 캘린더, 마이피플등의 웹서비스, 프론트엔드 웹애플리케이션, iOS 모바일앱 개발에 두루 참여했으며, 사내 개발자를 위한 Git저장소 서비스를 직접 구축하여 서비스하는 등, Java/C/Ruby/Node 기반의 다양한 백엔드 시스템을 개발하고 운영했습니다. 2014년 현재는 제주 다음스페이스.2에 근무하고 있습니다.

개인적으로 Ruby, Erlang, Scala등의 프로그래밍 언어에 관심이 많고, 기술적 흥미를 바탕으로 실용적인 가치를 만들어 내는 일을 추구합니다. 직업도 개발이고 취미도 개발입니다.

2년 남짓 맡아왔던 개발팀장직을 내려놓았다. 연초부터 고민했던 일인데, 출산휴가와 안식휴가 2달을 틈타 고민도 더 하고, 결정도 미뤄왔던 일이다.

주변에 보면 적지 않은 개발자가, 순수(?) 개발 일을 계속하고자 하지만, 결국 나이가 들면 안팍의 압력에 못 이기고, 매니저의 길로 들어서는 모습을 흔히 볼 수 있다. 나역시 어느정도 우리회사에서의 적정 나이(?)가 되어 팀장직을 맡게된 것이기도 했던 것같다.

개발력이 뛰어난 팀원들과 함께 일할 수 있어 즐거운 시간이었고, 나름의 성과도 잘 드러났던 것 같아서 감사한 마음이 크...

더 읽기

지금은 30여 일간의 휴가 마지막 날 밤이다. 한 달여 동안 알아보고 싶었던 주제들을 간략히나마 공부했고, 마지막 며칠 동안은 그 공부한 내용을 활용해보고자 간단한 웹서비스를 개발해 보고자 했다.

처음의 목표 중 하나는 30일 동안 매일 블로그 글을 남기는 것도 있었는데, 마지막에 잘 지키지 못해서 아쉽지만, 그래도, 한가지 개발 주제도 잡았고, AngularJS나 D3같은 앞으로도 깊이 살펴볼 주제들을 찾게 돼서 좋았다.

gvDoodle

어떤 것을 개발할까 몇가지 머릿속으로만 고민하다가, 결국 주제로 잡은 것은

웹에서...

더 읽기

오늘은 프로젝트 22일째 작성한 Async.js 코드와 Promise 코드를 비교해본다.

콜백 중첩의 늪

자바스크립트 자체만으로도 그렇지만, 특히 Node.js 환경은 비동기 I/O가 중요해서, 콜백 방식의 함수 호출이 자주 활용되며, 그 호출 간의 중첩도 잦다. 즉, 콜백에서 다시 콜백 걸고 또 콜백 거는, 계속 타고들어가는 콜백이 필요한 경우가 많다.

이 연속되는 콜백을 그냥 평범하게 코딩하면, 마치 예외처리 (try-catch-finally) 구문 없이 코딩하는 것처럼, 예외 처리에 대한 코드가 중간중간 끼어들어서 ...

더 읽기

이 글을 작성하는 지금은, 개인 프로젝트 23일째, 지난 21일째부터 정리하지 못한 밀린 숙제를 한다.

숙제가 밀린 이유

21일째에는 AngularJS 코드를 테스트하려는 노력을 기울이다가, 블로그로 정리해야 할, 밤늦은 시간에 회사 동료들을 만나러 나갔다. 합병 소식에 허전해서였을까? 같은 단지에 사는 후배이자 동료를 불러봤는데, 마침 나올 수 있다고 했고, 그렇게 한 명 두 명 즉흥적으로 불러봤는데, 결국 5명이 모여서 늦은 시간까지 시끄럽게 떠들었다.

한 명 더 왔었는데, 그가 왔을 때 이미 난 사진을 찍을 만한...

더 읽기

개인 프로젝트 20일째, 오늘은 내가 근무하는 회사가 다른 회사와 합병한다고 공시가 났다.

겉으로야 합병이지만, 사실상 내용을 열어보면 우리가 인수당하는 입장이고, 앞으로 어떻게 될지는 알 수 없다. 당장 직속상관이 바뀌어도 업무가 확 바뀌는 것이 당연한데, 심지어 최대 주주가 바뀌는 일이니, 변화가 없을 수야 없겠지. 10년간 우리 회사가 다른 회사를 인수하거나 분사하는 것을 지켜봐 왔지만, 피인수는 처음이다. 나름 다채로운 근로자 생활이 되려나 보다.

회사 분위기도 살피고, 사장님 발표도 들으러 잠시 출근했다. 출근한 ...

더 읽기

개인 프로젝트 19일째, 오늘은 비동기식 자바스크립트 로더, RequireJS에 대해 살펴봤다.

비동기 모듈 선언 (AMD)

오늘 고생된 작업의 시작은, 오전에 지금까지 진행한 프로젝트 데모 사이트에서, 크롬 브라우저의 PageSpeed를 돌려본 것이 화근이었다. 웹페이지 로딩 속도에 관련한 각종 검사를 하고 개선할 방안을 추천해주는 PageSpeed가 내게 권장하기를,

자바스크립트 파일들을 비동기식으로 로딩하시죠~!

라고 하는 게 아닌가?!

음, 비동기식 로딩이라… <body> 태그의 가장 마지막에 자바스크립트...

더 읽기

개인 프로젝트 18일째, 오늘은 자바스크립트 작업 실행기(task runner), Grunt를 프로젝트에 적용했다. 자동화 테스트를 실행하거나, 자바스크립트 파일들을 합치거나 최소화하는 일처럼 자주 반복하는 프로젝트 수반 작업을 편리하게 실행할 수 있게 해주는 도구다.

Node 환경에서는, npm만으로도 충분할 수 있는데, Grunt에 몇 가지 마음에 드는 플러그인이 있어서, 곧바로 적용해 보기로 했다.

우선 npm으로 간단히 Grunt를 설치한다.

npm install -g grunt

Gruntfile 기본

Make...

더 읽기

개인 프로젝트 17일째, 오늘은 지속적 통합 서비스인 Travis CI를 살펴보고, 개인 프로젝트에 적용해봤다.

Travis CI 소개

Travis CI는 GitHub과 연동해 지속적 통합(Continuous Integration)을 호스팅해주는 서비스다.

지속적 통합의 정확한 의미는 조금 더 넓을 수 있지만, Travis CI로 한정해서 쉽게 생각하자면, GitHub 저장소에 새로운 커밋이 push되었을 때 CI 서버가 뒤에서 자동으로 새로운 커밋을 가져와서 빌드 테스트를 수행하고, 그 결과를 리포팅 해주는 서비스다.

... 더 읽기

30일의 휴가 동안 개인적으로 진행하고 있는 프로젝트, 그 절반의 시간이 지났다. 사실 프로젝트라고 말하기는 어려울 수 있는 것이, 딱히 정해진 목표 결과물 없이, 그간 알아보고 싶었던 기술 주제를 공부해보고 있는 성격이 강해서, 정확히 말하면, “다양한 웹 개발 기술 셋 훑어보기 프로젝트"라고 해야 맞는 건지도 모르겠다.

지난주에 딸내미 100일 떡을 돌리러 회사에 잠깐 들렀고, 오늘 또 잠시 들렀다. 그러면 지금까지 보름 동안 벌써 두 번 들른 것이다. 고작 며칠 집에서 쉬었는데, 뜻밖에도, 회사에 가고 싶었다. 어젯밤 ...

더 읽기

프로젝트 15일째, 오늘은 드디어 AngularJS를 살펴봤다.

AngularJS는 구글에서 만든 웹앱 개발을 돕는 자바스크립트 프레임워크로, 복잡한 웹애플리케이션을 만들기 쉽도록 도와준다. 호평을 들어온 터라 나도 언제 한번 써봐야지 생각했었는데, 때마침 Code SchoolAngular 강의가 새로 올라와서 아주 편리하게 기초를 배워볼 수 있었다.

Shaping up with Angular.js

그전에는 AngularJS 공식사이트의 튜토리얼을 조금 따라 해보다가 말았는데, 이번에는 훨씬 쉽게 기본 개념을 익혀볼 ...

더 읽기

프로젝트 14일째, 오늘은 데모 웹사이트를 만들어 올리기 위해, (1) 노드용 템플릿 엔진인 Jade를 잠깐 써보고, (2) Heroku에 지금까지 만들고 있는 express 웹앱을 배포해봤다.

Node.js 템플릿 엔진 - Jade

루비 쪽의 Haml과 같은 템플릿 엔진이다. 간결한 문법과 들여쓰기로, HTML/XML 태그를 여닫는 번거로움 없이 간편하게 결과 페이지를 만들 수 있다. 이하는 오늘 작성한 템플릿 레이아웃의 일부다.

layout.jade의 일부

doctype html
html
  head(prefix="og...
더 읽기

어제는 그래프 그리기의 벽을 만났다. 그래프를 본격적으로 공부하자니, 목표로 한 30일 내에는 결과가 나올 것 같지 않다. 한가지 소득이 있다면, 새로 공부할 거리를 장전했다는 것. 이번 휴가가 끝나도 틈틈이 공부할 주제다.

혹시나 Coursera에 관련 수업이 있지는 않나 해서 찾아봤는데, 8월과 10월에 그래프 그리는 것과 연관이 있어 보이는 수업이 있어서 바로 등록했다.

어떤 주제에 대해 처음으로 알아볼...

더 읽기

어제 D3.js의 Force Layout을 써서, Git 커밋 그래프를 그려봤다. 아무 생각 없이, 전체 커밋을 넣어서 실행해 봤더니, 마구 엉킨 그래프가 보였다. 오늘은 이 그래프의 모양을 어떻게 조금 아름답게 꾸밀 수 있을까를 고민했다.

우선, 이제 와 고백하건대, 그래프에 대해 잘 모르겠다.

그래프? 그거 노드와 엣지가 있는 자료구조 아니던가?

이 정도가 내가 알고 있는 수준 전부이다. Git의 커밋 그래프는 일종의 DAG인데, Directed-Acyclic-Graph의 약자이며, 방향이 있는 그래프인데, 방향의 순...

더 읽기

나는 30일 동안 휴가 중이다. 휴가 동안 개인 개발 프로젝트를 진행하고 있다.

D3.js의 Layout 기능

오늘 새벽 5시쯤 일찍 잠에서 깼는데 다시 잠이 오지 않아, 침대에 누운 채로 D3.js 문서를 좀 읽었다. Force Layout 부분을 보아하니, 원래 계획하던 그래프를 그리는 데에 사용할 수 있을 것 같은 느낌이 왔다. 문서를 마저 읽고, 설레는 마음을 품고, 책상에 앉아서 코딩을 시작했고, 잠깐의 몰입 후에 기본 코드가 완성됐다. 개발이 즐거운 이유는, 몰입(flow)의 경험이 가장 크지 않나 싶다. 피드백...

더 읽기

나는 30일의 휴가 중이다. 휴가 동안 개인 개발 프로젝트를 진행하고 있고, 오늘은 그 열흘째다.

Async.js

어제 Node.js로 Git 저장소의 커밋 오브젝트를 찾아보면서, 콜백 폭포에 대한 어색함을 토로했다. 출근하면, 회사 동료들에게 관련 내용을 물어보려 했는데, 오늘 마침 회사에 잠깐 들를 일이 있었다. 딸내미 100일 떡을 돌리라는 명(?)을 받들어 회사에 가서 막 쪄온 떡을 돌리고, 오랜만에 본 팀원 분들과 얘기를 나누며 관련 문의를 했고, 곧바로 속 시원하게 들은 해결안은 Async.js를 사용해보라는 ...

더 읽기

나는 30일간의 안식휴가 중이다. 휴가 동안 개인 개발 프로젝트를 진행하고 있고, 오늘은 그 9일째다.

GitHub API

오전에, GitHub API: Getting Started를 비롯해, API 설명서를 읽었다. 프로젝트에서 사용할 기능을 깃헙이 제공하는 API를 써서 구현 가능한지 판단하는 것이 주요목표였고, 결론을 먼저 말하면, 당연히 사용할 수 있었다. 문제없이 진행할 수 있겠다.

살펴보면서 느낀 점은 “깃헙 개발자 API 설명이 참 잘 돼있다"는 것이다. 눈으로 쭉 읽기만 해도 어떻게 돌아갈지 잘 와 닿았고,...

더 읽기

나는 30일간의 안식휴가 중이다. 휴가 동안 개인 개발 프로젝트를 진행하고 있다.

어제와 오늘, D3.js API 레퍼런스Selections 부분과 Transitions 부분을 읽었다. 그제 처음으로 D3.js를 연습해보며 대충만 추측하고 넘어갔던 부분들이 조금은 더 이해가 되기 시작했다. Selections의 한쪽에, selection#data() 함수를 설명하는 부분에 데이터 바인딩과 관련해서 소개된 글, Thinking With Joins도 읽어보게 됐는데, 본문에 아래와 같은 내용이 있었다.

Here’s the deal...

더 읽기

나는 30일간의 안식휴가 중이다. 휴가 동안 개인 개발 프로젝트를 진행하고 있다.

원래는 어제 해결하려다, 다른 주제 D3.js에 마음을 빼앗겨 해결하지 못했던 문제로 돌아왔다.

graphviz의 노드에 웹 링크(href)를 걸기

찾아보니 싱겁게도, 설명서의 각종 속성을 지정하는 부분에 너무도 간단히, 그것도 아주 뻔한 href라는 속성으로 지정할 수 있다고 쓰여있었다. 지정할 수 있는 속성이 너무 많아서 일일이 살펴보기 어렵다는 점이 있다고 핑계를 대고 싶지만, 아, 너무도 뻔한 속성값이다.

어쨌든, 한번 연습 삼아서...

더 읽기

나는 30일간의 안식휴가 중이다. 휴가 동안 개인 개발 프로젝트를 진행하고 있고, 오늘은 그 엿새째로, 웹 페이지에서 그래프를 그려서 보여주는 방법을 알아보려 한다.

graphviz

예전에, 그래프를 그리는 소프트웨어로 graphviz를 간단히 써봤었다. 그래프를 dot이라는 도메인 특화 언어(DSL)로 작성하고 명령어를 실행하면, png, pdf, svg 파일로 시각화해서 보여준다.

예를 들어, 아래와 같은 sample.dot 파일을 준비하고,

sample.dot
digraph G {
  node [style=filled...
더 읽기

나는 30일간의 안식휴가 중이다. 휴가 동안 개인 개발 프로젝트를 진행하고 있고, 오늘은 그 닷새째다.

어제까지 기본적인 웹 브라우저 측과 서버 측의 테스트 환경을 구축하고 웹 패키지 매니저 bower의 기본 사용법을 살펴봤다. 개인 블로그에 일지를 적다 보니, 소스코드가 아무런 색상 없이 밋밋하게 보이는 것이 눈에 걸렸다. 당장 쓰임새가 있는 주제는 아닌데, 종종 필요로 하는 주제고, 당장 이 일지에 필요하다고 여겨서, 오늘은 소스 코드에 문법 색상을 적용해서 보이는 방법을 연습해보기로 한다.

정확한 용어는 아마도 문법 ...

더 읽기

나는 30일간의 안식휴가 중이다. 휴가 동안 개인 개발 프로젝트를 진행하고 있고, 오늘은 그 나흘째다.

어제까지는 기본적인 테스트 환경을 구축했다. 절묘하게도 어젯밤 자정, 테스트 환경 준비에 열을 올린 최근에 걸맞은 타이밍으로, “Is TDD Dead?"라는 주제로 온라인 토론회가 진행되었다. 개발자들 사이에 연예인이라고 봐도 무방할 유명인들인 마틴 파울러(Martin Fowler), 켄트 벡(Kent Beck), 데이비드 하이네마이어 한슨(David Heinemeier Hansson)이 구글 행아웃으로 모여 각자의 주장을...

더 읽기

나는 30일간의 안식휴가 중이다. 휴가 동안 개인 개발 프로젝트를 진행하고 있고, 오늘은 그 사흘째다.

첫날어제는, 클라이언트 측과 서버사이드에서의 자바스크립트 테스팅 환경을 구축했다. 하나 더 테스트를 위해 고려할만한 사항이 있다면, 이것을 유닛테스트라고 부르든 통합테스트라고 부르든, express로 제공할 HTTP 요청에 대한 테스트 환경도 준비해보고자 한다. 일일이 HTTP 요청을 별도로 보내 보는 것이 아니라, 가짜(mock) 요청을 테스팅 프레임워크 수준에서 보내보고 결과를 확인하는 일이다.

express의 모...

더 읽기

나는 30일간의 안식휴가 중이다. 휴가 동안 개인 개발 프로젝트를 진행하고 있고, 오늘은 그 둘째 날이다.

첫날은, 클라이언트 측에서의 자바스크립트 테스팅환경을 엉성하게나마 만들었다. 출발이 좋다. 좋다. 그럼 서버사이드에서의 테스팅은 어쩐다? Node.js로 돌아가는 express로 웹사이트를 구축하려 마음먹은 상태이니, Node.js용 테스팅 프레임워크를 찾아봤다.

mocha, vows, expresso, should.js, nodeunit, jasmine

대충 찾아봐도 우후죽순 쏟아진다. 루비용 테스팅 프레임워크를 ...

더 읽기

나는 30일간의 안식휴가 중이다. 오늘은 그 첫날이다.

근무하는 회사는 여러모로 개발자로 일하기에 참 좋은 환경을 갖추고 있다. 그중에서도 가장 감사한 것은 “안식 휴가 제도"다. 직원들이 근속연수와 상관없이 매년 15일의 유급 휴가를 사용할 수 있고, 추가로, 3년마다 안식휴가를 준다. 3년 근속 시 10일, 6년 근속 시 30일, 그리고 9년 근속 시 60일의 유급 휴가를 준다. 9년 차 안식휴가의 경우, 30일씩 두 번에 나누어 사용할 수 있고, 나는 9년 차 안식휴가를 30일로 나눠서 사용 중이다.

30일 동안 무엇...

더 읽기

node.js용 모듈이나 ruby gem 패키지를 살펴보다 보면, ‘해당 패키지는 SemVer를 따르고 있다'라는 표현을 종종 접하게 된다. 해당 패키지가 버전을 정하는 모종의 규칙을 따르고 있으므로, 쓰는 사람도 그 의미를 파악해서 잘 쓰라는 의미인데, 원문를 참조하라고 적힌 곳이 더러 있었다. 해당 사이트를 살펴보니, 버전을 정하고 올리는 규칙이 잘 정리돼 있었으며, 그 취지가 설득력 있게 느껴져서, 따라해서 사용하고 싶어졌다.

한편 아쉽게도, 다른 여러 나라의 언어로 번역이 되어있으면서도, 아직 한국어 번역이 링크돼...

더 읽기

블로그에 남겨야겠다고 생각한 내용이었는데, 벌써 한달이 넘게 지난 일이군요. 지난 얘기지만, 꼭 남겨두고 싶은 얘기들이 있어서 메모를 뒤적이며 기억을 되살려 남겨봅니다. 5월말 Werner Vogels박사 방한에 관련한 내용입니다.

Werner Vogels

werner vogels

아마존닷컴의 부사장이자 CTO인 Werner Vogels 박사님이 방한했습니다. All Things Distributed라는 테크니컬 블로그를 통해, 많은 개발자가 익히 알고 있는 분입니다. 모든 NoSQL 바람의 시초라고 할 수 있는 Amazon Dynamo 논문을...

더 읽기

소프트웨어 공학 수업 수료

지난 포스트에서 소개드렸던 ‘Software Engineering for SaaS’ 수업의 5주과정이 모두 끝났습니다. 총 2만여명이 하나 이상의 강의 영상을 보았고, 1만여명이 한 번 이상의 과제 제출이나 퀴즈 응시를 했다는군요. 수료 기준은 총 과제 점수의 절반 이상, 그리고 총 퀴즈 점수의 절반 이상을 받는 것이었으며, 약 3,500명 정도가 수료 대상이라고 합니다.

수료증

저랑 같이 일하는 개발자 한 분도 이 수업 내용을 극찬했었는데요, 이렇게 좋은 수업의 내용을 전세계에서 3,500명이 열...

더 읽기

클라우드환경의 소프트웨어공학 수업

Coursera라는 단체(?)를 통해 무료로 제공되는 공개 수업을 소개합니다. 공개 수업 제목은 ‘Software Engineering for Software as a Service'입니다. 총 5주 과정으로, 현재 3주차과정이 진행되고 있습니다. 루비온레일스로 Software-as-a-Service 애플리케이션을 개발하고 배포하는 애자일 개발에 대해 알려줍니다. 버클리 대학에서 실제 했던 수업내용을 녹화해서 제공하는것 같구요, 버클리 학생들은 이 수업을 위해 주당 5~10시간정도를 할애했...

더 읽기

2000년도, 첫 직장에 다니던 때에는 ‘10년 경력'이라는 표현은 나와는 상관 없는 일이었습니다. 그저 '10년 경력이면 대단한 실력의 프로그래머가 되겠구나'라고 막연히 생각했었죠. 그야말로 어느덧 시간이 흘러 경력 햇수는 쌓였는데, 꼭 그만한 실력이 함께 쌓이는 것은 아닌가 봅니다. 10년 내내 열심히 실력을 연마하지 않은거겠죠.

이 글은, 그런 10년 경력의 프로그래머가 구글 코드 잼 코리아 2012(Google Code Jam Korea 2012)에 참가한 뒤 쓰는 후기입니다.

Google Code Jam

Google...

더 읽기

GitHub을 소개한 글

엊그제 류광님의 웹 항해일지 - GitHub 특집을 읽었습니다. GitHub에 관련한 소개와 함께 유용한 관련 링크를 알려주셨습니다. 덕분에 GitHub/git에 관심있는 다른 분들의 블로그도 찾아가 볼 수 있었지요. 그 글에도 처음으로 언급돼있듯이, 석찬님이 이미 2009년 1월에 Github, 코드 개발 기반 소셜 네트웍이라는 글로 아주 상세하게 잘 설명해 주셨더군요. 두 글을 읽어보시면, 아 ‘나도 Git/GitHub을 써야겠구나'하는 생각이 들게끔 잘 소개해주신 것 같습니다.

Git: 분산 ...

더 읽기

지난달 18일, Amazon.com의 CTO인 Werner Vogels의 블로그 포스트와 함께, 또 하나의 NoSQL Database서비스가 공개되었습니다. 서비스 이름은 Amazon DynamoDB입니다. 대규모 인터넷 애플리케이션을 위해 설계한 빠르고, 확장성 좋은(scalable) NoSQL 데이타베이스 서비스라고 소개됐습니다. 또 하나라고 말했을 때 눈치채셨을지도 모르겠습니다만, Amazon.com에는 이미 SimpleDB라는 NoSQL 서비스가 있습니다. 이미 SimpleDB가 있는데 왜 DynamoDB를 새로 만들...

더 읽기

2010년 Daum 개발자 컨퍼런스 출품작

2010년 사내 개발자 컨퍼런스를 위해 개발했던 프로젝트 이야기입니다. “아이폰으로 장난감 무선조종 자동차를 제어하는 임베디드 시스템”을 개발해서 전시했었는데요, 기억을 잘 되살려, 그 관련한 이야기를 정리해보려합니다.

아래는 그 때 전시회장에서 시연을 준비중인 모습입니다.

전시회장에서

전날 밤까지도 펌웨어(firmware)를 다 개발하지 못해서 초조했었는데, 운 좋게도 당일 새벽에 잘 마무리가 되어서 전시할 수 있었습니다. 사진의 표정으로보니, 역시 꽤 즐거운 작업이었던것 같습니다.

... 더 읽기

HTTP Proxy 서버

HTTP 클라이언트의 네트워크 요청을 대신 받아서, 불특정 외부 서버에 대한 요청을 대신 처리해주는 중계 서버를 HTTP forward 프록시 서버라고 부릅니다. 다음과 같은 경우에 HTTP Proxy 서버가 유용히 쓰일 수 있습니다.

  1. 외부 네트워크 트래픽을 줄이거나 속도를 높이기 위한 캐싱(caching)용도
  2. HTTP 프로토콜 관련한 개발 작업중에 테스트 또는 디버깅 용도
  3. 공인 IP가 할당되지 않고, NAT도 안걸려있는 사설 IP환경의 서버이거나, 네트워크 보안정책에 의해 외부의 HTTP 접근이 ...
더 읽기

node.js

서버측에서 자바스크립트 언어로 네트워크 프로그램을 만들어서 운영하기 좋은 node.js라는 환경이 있습니다. 구글의 v8 자바스크립트 엔진위에 구축되었고, Ruby쪽의 EventMachine처럼 Evented I/O처리를 기본으로 합니다.

기존 멀티쓰레드 네트워크 프로그램 개발은 어려운 쓰레드 동기화 문제를 고려해야해서 복잡할 수 밖에 없지만, Event 방식으로 처리하면, 단일 쓰레드에서의 접근만을 고려하면 되므로 꽤나 간단하게 처리가 가능합니다. 대신 비동기 I/O처리를 해야해서 접근방식의 생소함이 있을 ...

더 읽기