blog.stackframe.dev

전체 글 (62)

[PHP] GET, POST로 배열 전달

PHP에서는 GET이나 POST 인자에 문자열이 아닌 배열이 들어올 수 있다. 매개변수 뒷부분에 []를 사용하면 해당 인자는 배열로 만들어지게 된다. 간단하게 아래의 예시를 보자:

Firefox Relay로 이메일 주소 숨기기

Mozilla 재단은 Firefox Relay라는 이메일 릴레이 서비스를 제공하고 있다. 이것은 랜덤하게 relay.firefox.com 도메인의 이메일 주소 생성하고 이 주소로 메일이 오면 가입한 이메일로 전달해준다. 그러므로 자신의 진짜 이메일 주소를 알리고 싶지 않으나 메일은 받고싶은 경우 이 서비스를 사용하면 된다.

Vim 기본 설정 로드하지 않기 (자동 들여쓰기 해제)

나는 들여쓰기를 탭으로 하는 취향이고 tabstop=4로 탭 크기를 스페이스바 4칸으로 보이게 설정한다. 문제는 이 상태에서 Vim 자동 들여쓰기를 켜면 탭 2개를 넣어버린다. shiftwidth=4를 설정하지 않으면 이런 현상이 발생하는데, 예전에는 이걸 모르고 그냥 자동 들여쓰기를 끄고 직접 일일이 넣었고 오히려 자동 들여쓰기가 불편한 지경에 이르렀다. 이런 이유로 내가 리눅스 설치하고 맨 먼저 하는 작업이 Vim 설정에서 자동 들여쓰기를 꺼버리는 것이 되었다.

systemd-networkd로 WireGuard 구축하기

systemd-networkd를 사용하면 WireGuard VPN을 쉽게 구축할 수 있다. 먼저 최소 요구사항으로 리눅스 5.6, systemd 237 이상의 버전이 필요하다. 리눅스 5.6부터 WireGuard가 메인라인 커널에 들어왔고 systemd 237부터 WireGuard를 systemd-networkd로 설정가능하기 때문이다. 그리고 키를 생성하기 위해 wg 명령이 필요하다. Arch Linux에서는 wireguard-tools 패키지로 제공되고 있다.

WireGuard의 Allowed IPs 설명

WireGuard에는 각 피어마다 Allowed IPs 라는 설정이 있다. Allowed IPs는 이 피어를 통해 보내고 받을 수 있는 패킷의 IP를 설정하여 필터링과 라우팅에 사용된다.

라즈베리파이 4 Idle 상태의 패시브 쿨링과 액티브 쿨링 비교

나의 모든 서비스들은 라즈베리파이에서 돌아가고 있다. 최소한의 전력과 가격으로 서버를 돌리기 위해 라즈베리파이 2B를 사용한걸 시작으로 새로운 버전이 나올 때마다 구입하고 업그레이드하다보니 이제 4B 8GB를 서버로 사용중이다.

systemd-nspawn으로 가벼운 컨테이너 만들기

옛날에는 서버 성능이 바쳐준다면 한 서버에 웹 서버, 메일 서버, 데이터베이스, 네임서버들을 싸그리 넣고 격리란 개념없이 운영하는게 평범하였고 이로인해 하나의 보안사고가 다른 서비스들까지 영향을 미치며 서버 업그레이드는 고사하고 유지하는 것조차 힘든 일이었다. 하지만 Docker가 나오면서 서비스를 컨테이너 단위로 간단하게 분리하고 기존의 문제점들을 해결하였기에 컨테이너 기술이 이제는 거의 필수가 되었다.

블로그 개발 삽질기 4 - Service Worker

사실 Service Worker에 대해선 그리 삽질하지 않았다. 예전에 다른 사이트에 Progressive Web App을 구현하려고 좀 만져보다가 수정해야 할 게 너무 많아서 포기한 적이 있었다. 그래도 작동원리와 구현방법은 계속 읽어봤고, 블로그를 직접 만들 기회가 생겼으니 처음부터 적용하고 개발을 시작했다.

블로그 개발 삽질기 3 - 템플릿 구현

파서가 어느정도 완성되어 본격적으로 프론트엔드를 만들기 시작했다. 개인적으로 프론트엔드는 아주 잼병이다. 어떤 디자인으로 만들어야 괜찮은지도 잘 모르겠고 뭘 봐도 마음에 쏙 드는 그런게 없어서 늘 비슷하고 단순한 디자인이 나와버린다. 난 역시 백엔드가 어울리는 것 같다.

블로그 개발 삽질기 2 - reStructuredText 파서 구현

설계 때 선정한 reStructuredText를 사용하기 위해서 파서가 필요했다. reStructuredText는 공식적으로 docutils라는 Python으로 작성된 프로그램을 사용하여 HTML로 변환이 가능하다. 하지만 PHP에서 Python을 실행하는건 exec()을 써야하고 영 내 마음에 들지 않는다. 거기다 기본으로 들어있는 rst2html5 명령어를 실행해보면 빈 파일을 넣어도 0.9초가 걸렸다. 웹에서 0.9초면 심각한 딜레이다. 결국 내가 직접 PHP로 파서를 구현하기로 했다.

1 2 3 4 5 6 7