자체 제품

직접 만들고 운영하는 작업

고객 의뢰가 아닌 제 제품들입니다. 보안, 업데이트, 장애까지 제가 직접 책임지기 때문에, 제가 일하는 방식을 가장 분명하게 보여 주는 공개된 증거입니다.

Clacks

라이브

레거시 계정을 위한 이메일 브리지

"메시지가 중요한 게 아닙니다. 그것을 보내는 것이 중요합니다."

— GNU Terry Pratchett

POP3 및 IMAP 이메일 계정을 Gmail에 연결하는 Symfony 기반 애플리케이션입니다. 레거시 이메일 서버를 폴링하고 메시지를 Gmail 받은편지함으로 안전하게 직접 전달합니다. 저장 없이, 지연 없이, 필터 및 규칙과 완벽하게 호환되는 원활한 전달만 제공합니다.

주요 기능

POP3 & IMAP 지원
ext-imap 의존성 없는 순수 PHP 소켓 기반 폴링
Gmail API 통합
네이티브 필터 호환성을 위해 Gmail messages.import 사용
보안 패스스루
메일 본문은 곧바로 Gmail로 전달되며 저장되지 않습니다
다중 계정 관리
여러 레거시 계정을 하나 이상의 Gmail 대상에 연결
AdminLTE 대시보드
계정 관리 및 모니터링을 위한 최신 웹 UI

기술 스택

Symfony 7 PHP 8.2+ Gmail API libsodium AdminLTE 3 Webpack Encore MariaDB

사례 연구

문제
오래된 POP3·IMAP 계정의 메일을 Gmail로 가져와, Gmail 자체의 필터와 라벨, 스팸 분류가 처음부터 Gmail로 온 메일처럼 적용되게 하는 것.
제 역할
설계, 개발, 운영을 모두 맡고 있습니다. 메일 클라이언트, Gmail 연동, 자격 증명 암호화, 스케줄링, 유료 요금제까지.
제약
필요한 Gmail 권한은 모두 Google이 ‘제한됨’으로 분류합니다. 그래서 보안 심사를 거쳐야 하고, 요청하는 권한마다 그 필요성을 설명해야 합니다. 또한 남의 메일을 다루는 서비스라면 보관하는 것을 최대한 줄여야 합니다.
결정
전달이 아닌 가져오기: 메일은 Gmail의 messages.import로 들어가므로 필터와 스팸 분류가 평소처럼 동작합니다. 권한은 좁게 한정된 다섯 가지만 요청하고, gmail.readonly는 일부러 요청하지 않습니다. 애플리케이션은 기존 Gmail 메시지를 읽는 일이 없기 때문입니다. 메일 본문은 보관하지 않음: 메일은 한 번의 처리로 받아와 가져오며, 보관하는 것은 보낸 사람, 제목, 날짜, 중복 가져오기를 막는 식별자 같은 메타데이터뿐이고 이것도 보존 일정에 따라 삭제합니다. POP3·IMAP 클라이언트는 PHP의 IMAP 확장에 의존하지 않고 기본 소켓 위에 직접 작성했습니다. 반드시 저장해야 하는 비밀 정보 — 메일함 비밀번호와 Gmail 갱신 토큰 등 — 는 키 암호화 키로 암호화합니다.
트레이드오프
가져오기에는 제한된 권한이 필요하고, 그 권한에는 Google의 심사가 따릅니다. 전달 방식이었다면 둘 다 피할 수 있었지만, 애초의 목적이던 필터와 라벨이 망가졌을 것입니다.
결과
무료 및 유료 요금제를 갖추고 POP3·IMAP 계정을 하나 이상의 Gmail 받은편지함에 연결하는, 운영 중인 서비스.
근거
제한된 권한 하나하나를 그것을 사용하는 정확한 API 호출과 함께 문서화했으며, 공식 평가에 앞서 코드를 Google의 CASA Tier 2 기준에 비추어 점검했습니다.

Markest

라이브

멀티 문서 Markdown 페이스트빈

"최고의 문서는 사람들이 실제로 읽는 문서입니다."

— Markest

여러 연결된 문서, 사이드바 내비게이션, 아름다운 독서 경험을 갖춘 페이스트를 만들기 위한 완전한 기능의 Markdown 페이스트빈입니다. 구독 플랜, 협업자, 클라이언트 측 암호화, 임베드 가능한 뷰어, RESTful API를 지원하며 10개 언어 국제화를 제공합니다.

주요 기능

멀티 문서 페이스트
내부 링크, 사이드바 내비게이션, ZIP 내보내기가 포함된 페이스트당 최대 50개의 Markdown 파일
구독 플랜
Stripe를 통한 무료 및 유료 등급, 페이스트, 스토리지, 기능에 대한 구성 가능한 제한
보안 & 개인정보
클라이언트 측 암호화, 비밀번호 보호, 읽은 후 삭제, TOTP 2FA
RESTful API
API 키, 권한, 전체 CRUD 작업을 갖춘 Bearer 토큰 인증
협업 & 공유
협업자 초대, 페이스트 임베드, 공개 디렉토리 탐색, 맞춤 테마

기술 스택

Symfony 7.4 PHP 8.3+ CommonMark 2.8 Stripe XChaCha20-Poly1305 MariaDB

사례 연구

문제
여러 문서로 된 Markdown과 HTML을 위한 pastebin. HTML을 지원한다는 것은 누가 썼는지 모르는 마크업을 사용자 계정과 같은 사이트에서 저장하고 제공한다는 뜻입니다.
제 역할
설계, 개발, 운영을 모두 맡고 있습니다. 게시, 접근 제어, 공동 작업, 유료 요금제까지.
제약
HTML 붙여넣기는 스크립트를 포함해 작성된 그대로 동작해야 하므로, 내용을 걸러 내면 기능 자체가 망가집니다. 그리고 공개, 목록 비공개, 비밀번호 보호, 서명된 링크, 공동 작업자 같은 공개 범위 규칙은 붙여넣기를 제공하는 모든 경로에서 지켜져야 합니다.
결정
정화가 아닌 격리: 저장된 HTML은 애플리케이션의 오리진에서 절대 렌더링하지 않습니다. allow-same-origin이 없는 Content-Security-Policy 샌드박스 아래 전용 경로에서만 제공하므로, 사이트의 쿠키나 세션에 접근할 수 없는 불투명한 오리진에서 실행됩니다. 그리고 붙여넣기를 제공하는 모든 곳의 접근 판단을 하나의 검사로 모아, 어떤 컨트롤러도 공개 범위 규칙의 사본을 따로 갖지 않게 했습니다.
트레이드오프
샌드박스에 격리된 HTML은 보는 사람의 페이지에도, 사이트의 저장소에도 닿을 수 없으므로, 일반 오리진을 전제로 한 임베드는 붙여넣기 안에서 동작하지 않습니다. 이 제한은 의도한 것입니다. 바로 이것이 임의의 스크립트를 사용자 계정으로부터 떼어 놓기 때문입니다.
결과
무료 및 유료 요금제, REST API, 공동 작업자, 10개 언어 인터페이스를 갖춘, 운영 중인 다중 문서 pastebin.
근거
두 규칙 모두 영구적인 아키텍처 결정으로 기록되어 있습니다. 단일 접근 검사는 경로마다 공개 범위 검사가 어긋나 있던 것을 보안 감사가 찾아낸 뒤에 도입했습니다.

Boot

라이브

ADHD 친화적 생산성 운영 체제

"골격을 테스트하고, 몸을 구축하고, 마음을 겹겹이 쌓아라."

— Boot

BOS(BIEEII Operating System) 상태 머신을 중심으로 구축된 ADHD 친화적 생산성 시스템입니다. Boot은 하루를 구조화된 단계(활성화, 실행, 유지보수, 종료)로 모델링하며, 90분 집중 블록, 에너지 인식 작업 점수, 차분한 의식을 사용하여 압도감 없이 궤도에 머물 수 있도록 합니다.

주요 기능

BOS 상태 머신
6개의 결정론적 상태가 부팅부터 딥 워크를 거쳐 야간 종료까지 하루를 안내하며, 계층화된 권한 제어를 제공합니다
90분 집중 블록
램프업, 코어 포커스, 쿨다운 단계가 포함된 구조화된 시간 컨테이너—전환 충동 기록 및 일시정지/재개 포함
스마트 예측 & RAB 점수
우선순위, 마감 긴급도, 에너지 매칭, 기분 편향, 프로젝트 관련성, 신선도에 걸친 결정론적 작업 순위
NSIL 야간 종료
의식 기반 종료 시퀀스: 출하 로그, 제약 캡처, 내일 시드, 입력 잠금으로 하루를 깔끔하게 마감합니다
샌드박스된 성찰 창
블록 사이의 시간 제한 성찰 기간으로 흐름을 깨지 않고 진행 상황 검토, 저널링, 계획을 수행합니다

기술 스택

Symfony 7 PHP 8.3+ Stripe XChaCha20-Poly1305 Google OAuth Webpack Encore MariaDB

해결해야 할 문제가 있으신가요?

제가 만들거나, 자동화하거나, 고칠 수 있을 것 같은 일이라면 알려 주세요.

프로젝트 상담하기