기술적인 이슈에 대한 깊이 있는 내용을 다루는 글. 다음과 같은 원칙으로 쓴다.
- 직접 경험해본 기술을 주제로 삼는다.
- 핵심 주제에 대해서는 본문만으로 충분할 정도로 깊이 있게 쓴다.
- 주관적인 의견을 담되, 사실로 하여금 말하게 하라.
서버 프로세스를 관리하는 올바른 방법
웹사이트 개발을 완료하고 서비스할 프로덕션(production) 서버에 배치(deploy)할 때 고민하게 되는 문제 중 하나가 서버에서 띄워야 하는 여러 가지 프로세스들을 어떻게 띄울 것인가 하는 문제다. 프로세스가 죽으면 다시 띄우는 것도 물론 필요하다. monit 이나 supervisord , god 등은 이런 목적으로 나온 것이다(몇 가지 부가적인 목적이 더 있긴 하다). 하지만 이건 OS에 대한 이해 부족에서 나온 것이다. 프로세스 관리는 OS의 핵심적인 기반이 되는 기능이다. 본 연구에서는 왜 monit 등이 잘못된 선택인지, 올바른 방법은 무엇인지에 대해 다룰 것이다.
...패스워드 보안의 기술
패스워드를 안전하게 저장하는 것은 인터넷 서비스의 기본이지만 과거 국내 서비스에서는 잘 지켜지지 않았던 부분이다. 지금은 개발자들 사이에 패스워드 보안의 중요성에 대한 인식이 퍼져서 비교적 상황이 나아졌으나, 아직도 제대로 하지 않는 사이트가 적지 않고, 심지어 패스워드 입력 인터페이스만 봐도 문제가 있는 것으로 추정되는 경우가 많다. 하지만 이미 패스워드를 안전하게 저장하는 방법은 정답이 나와 있는 상태이므로, 본 연구에서는 정답에 대해서는 간단하게 소개하고, 왜 그런 정답이 도출되었는지에 대해 집중적으로 파고 들 것이다. 즉, 이 글은 실용적인 목적보다도 패스워드 보안 기술에 대한 개발자의 호기심을 충족시켜주는데 초점을 맞출 것이다.
정답부터 간단히 이야기하면 pbkdf2, bcrypt, scrypt 중에 하나를 써서 패스워드를 암호화하면 된다. 다행스러운 것은 수년 전 md5 파동 이후 패스워드 보안에 대한 개발자들의 관심이 높아져서 데이터베이스에 md5로 바로 패스워드를 저장하는 개발자들은 많아 사라졌고, 정답을 쓰는 곳도 많아졌다. Django 같은 프레임웍에서는 기본으로 강력한 패스워드 저장 방식을 채택 하고 있기 때문에 본의 아니게 안전하게 저장하고 있는 개발자도 많다. 실용적인 관점에서 이 글을 읽는 독자는 올바른 패스워드 저장 방식 으로 바로 점프해서 읽으면 된다.
다음의 주제들은 실제로 필자가 과거에 패스워드 보안을 다루면서 느꼈던 의문, 혹은 다른 개발자에게 질문을 받았던 것이다.
- 패스워드를 해싱해야 하는 이유
- 왜 양방향 암호화는 안되는가
- md5를 비롯한 단방향 해싱의 크랙 방법
- salt는 SHA 256 같은 강력한 해시 알고리즘을 쓰더라도 필요한가?
- 권장할 만한 패스워드 저장 방식
이 글에서는 위의 의문에 답하고자 한다.
...
연구 주제 후보
준비 중인 글감
- PostGIS와 KNN 쿼리
- 웹 보안, 어디까지 고려해야 하나
- AES 암호화의 이해
- 실제 사례로 보는 OOP의 세 가지 원칙
- 비동기 아키텍처의 기반 기술
- 채팅 종단간 암호화의 구현 방안