OpenVPN 세팅하기

OpenVPN 네트워크를 구축한 경험을 정리했다. 

OpenVPN은 VPN(Virtual Private Network) 솔루션 중에서 가장 많이 사용되고 있다. OpenVPN은 상업용 제품도 팔고, 클라우드 서비스도 제공하지만, 오픈소스인 Community Edition도 제공한다. 

이 글은 OpenVPN Community Edition의 설치와 운용에 대한 내용이다. 

Ubuntu 16.04(Xenial)에 Python 3.9 설치하고 mod_wsgi 빌드하기

나는 몇년 전에 개발된 Django 기반의 웹 프로젝트를 인수받아 운영하고 있다. 

프로젝트의 규모가 꽤 크고 공공기관 고객도 꽤 있어서 여간 신경쓰이는 게 아니다. 그런데 어느날 다음과 같이 Python을 업그레이드하라는 경고 메시지가 나오기 시작했다. 

Cryptography 모듈이 다음 버전부터 Python 3.5를 지원하지 않는다는 통보이다. 공공기관들은 나름대로 보안 규칙이 있어서, 보안 결함이 발견된 모듈에 대해서 업그레이드를 해주어야 한다. 그래서 Python 버전을 올리고 Cryptography 모듈도 버전을 올리면 되는데, 그것이  그리 간단한 문제가 아니다. 

Django Form의 Validation

Django의 폼 검증(Form Validation)은 데이터가 클린(Clean)될 때 이루어진다. 이 과정을 커스터마이징하는 것은 검증의 여러 단계에서 가능하다. 이 과정에서 ValidationError 예외를 일으키는 식으로 검증의 실패를 표현한다. 

기본적은 검증은 validator를 통해 이루어진다. validator는 인자 하나를 받아 검증한 다음, 실패하면 예외를 발생한다. 이 validator는 각 필드에 대해 to_python()과 validate()를 실행한 다음, 호출된다. 

경우에 따른 Git 명령어 (Git Cheatsheet)


Git은 코딩하는 사람들에겐 매우 요긴한 도구이지만, 난해한 개념 때문에 문제가 생겼을 때 대처하기 어려워하는 경우가 많다. 나 역시 마찬가지여서, 문제가 생겼을 때 해결했던 방법을 이 글에 기록하고자 한다.

먼저 Git을 쓰는 사람이라면 다음 개념은 명확히 알고 있어야 한다. Git을 쓸 때 우리가 다루는 공간은 크게 작업트리(Working Tree), 스테이징 영역(Staging Area), 로컬 저장소(Local Repository), 원격 저장소(Remote Repository) 4가지로 나눌 수 있다. 이 개념부터 명확히 이해해야 한다.


Gradle 초보를 위해 핵심만 추렸다

나는 무려 10년이 된 Java 프로젝트를 여러개 관리하고 있는데, Netbeans와 Ant 기반의 개발/빌드 환경을 사용한다.

Netbeans는 Sun이 Oracle로 넘어간 뒤에 Apache 재단으로 넘어가면서 개발 동력이 많이 떨어져 있다. 열심히 노력하기는 하지만, 경쟁 툴들이 워낙 많다보니... Ant 또한 마이크로 컨트롤에 치중한 느낌이어서, 의존성 관리를 자동화하는 Maven류에 밀린지 한참이다.

언제 한번 개발환경을 갈아쳐야지 벼르고 있다가, 큰 프로젝트가 끝나고 잠깐 1주일 느슨한 틈에 Gradle로 마이그레이션 작업을 했다. 그 와중에 경험한 것들을 추려서 정리하고자 한다.

레노보 Yoga 720 15인치 노트북, 전원 버튼 함몰 수리

2018년 1월, 미국 출장 중에 쓰고 있던 HP 노트북이 고장나는 바람에 Best Buy에서 Lenovo Yoga 720 15인치 노트북을 구매했다. 정확한 모델명은 Yoga 720-15IKB.

기존 HP 노트북에 비해 베젤이 얇아서, 같은 15인치 화면이라도 크기가 작은 점이 무척 좋았다. 그리고 알루미늄 본체라는 점도...

하지만 이 노트북을 부주의하게 다루다가 고장이 나고 말았는데...

인기글