본문으로 건너뛰기

0%

junik@homeserver:~/whoami$

ONLINE

0%
cd ~

(infrastructure engineer) — lee junik

이준익 — Infrastructure Engineer

lee junik

2024 → 2026서버 · 클라우드 — 인프라 엔지니어

이 페이지는 터미널로 돌아다닐 수 있습니다.

ls · cd story · Tab 자동완성 · 키보드 `

$ cat ~/philosophy.md [1/2]

01 · tech

기술의 가치는 사람이 할 수 있는 일을 넓히는 데 있다고 믿습니다.

생산성은 더 많은 일을 처리하는 것이 아니라, 시도하고 실현할 수 있는 일의 범위를 넓히는 것이라고 생각합니다. 안정적인 운영과 효율적인 구성, 자동화, 측정과 기록을 중요하게 생각하는 엔지니어입니다.

$ journalctl -u junik --since 2024-07 · 카드를 누르면 자세히

story

  1. $ cat ~/story/2024-07-ssafy.md

    2024.07[ INFO ]

    SSAFY 12기 입과

    2024.07 ~ 2025.06 · 삼성 청년 SW·AI 아카데미 12기 Python 트랙 · 교육생 · 팀 프로젝트 3회 모두 발표 담당

    ## summary

    개발을 처음 배운 곳입니다. 프론트엔드에서 시작해 모바일, 백엔드, CI/CD 구축까지 경험했습니다. 처음부터 인프라에 뜻이 있었던 것은 아닙니다.

    6주 단위 팀 프로젝트를 세 번 했고 세 번 모두 발표를 맡았습니다. 발표자는 자기가 만들지 않은 부분까지 설명해야 해서, 발표를 맡을 때마다 모르는 영역을 하나씩 더 공부하게 됐습니다. 그게 백엔드와 인프라를 처음 들여다본 계기입니다.

    ## what i learned

    교육 내용
    알고리즘, 웹(Django · Vue · React), 모바일(Android · Kotlin), 데이터베이스
    CI/CD
    세 프로젝트 모두 Jenkins 파이프라인으로 배포. PADING에서 컨테이너 · Kubernetes 환경을 처음 접함
    협업
    Git PR 리뷰 · Jira 스프린트, 세 번 모두 발표 담당
  2. $ cat ~/story/2025-01-pading.md

    2025.01[ OK ]★ SSAFY 12기 공통 프로젝트 · 2등

    PADING

    2025.01 ~ 2025.02 · 6주 · 6명 · 프론트엔드 개발 · 발표

    ## summary

    브라우저에서 짝을 이뤄 코딩하는 웹 IDE입니다. 저는 프론트엔드를 담당해 실시간 상태(WebSocket) 화면과 권한 관리 화면, 웹 터미널(Xterm.js) 화면을 만들었습니다. 팀의 인프라는 Jenkins와 Kubernetes였고, 사용자의 개발 환경이 컨테이너로 떠서 서브도메인으로 배포되는 구조였습니다.

    발표를 맡으면서 제가 만들지 않은 백엔드와 인프라까지 설명해야 했고, 그 과정에서 컨테이너와 쿠버네티스 환경을 처음 접했습니다. 이때 생긴 이해가 이후 인프라로 관심이 옮겨 가는 출발점이 됐습니다. 웹 터미널에서 Xterm.js에 명령 입력 메서드가 없어 실행 버튼이 동작하지 않자 클립보드 복사 후 paste 이벤트를 트리거해 우회했습니다.

    ## what i did

    프론트엔드
    실시간 상태 관리(WebSocket) 화면 · 권한 관리 · 역할별 네비게이션
    웹 터미널 화면
    Xterm.js 연동, 실행 결과 표시, 입력 제약 우회(paste 이벤트)
    발표 · 학습
    팀 전체 구조(백엔드 · Jenkins · Kubernetes) 설명을 위해 컨테이너 · K8s 환경을 처음 공부

    ## stack

    • React
    • TypeScript
    • Xterm.js
    • WebSocket
    • 팀 인프라: Jenkins · Kubernetes
  3. $ cat ~/story/2025-03-whistlehub.md

    2025.03[ OK ]★ SSAFY 12기 특화 프로젝트 · 1등

    WhistleHub

    2025.03 ~ 2025.04 · 6주 · 6명 · Mobile Developer

    ## summary

    간단한 조작으로 음악을 만들고 편집하는 모바일 앱입니다. 인증·세션 관리, 프로필·플레이리스트, API 모듈화(인터페이스·DTO·서비스 계층 분리, 인터셉터 토큰 자동 주입)를 맡았습니다.

    ExoPlayer 인스턴스가 삭제되지 않아 생긴 백그라운드 재생·메모리 누수는 Application 클래스에서 싱글톤으로 전역 관리해 해결했습니다. 발표를 맡아 백엔드의 데이터 구조까지 설명하면서 그래프 DB 등 데이터베이스에 대한 이해도가 생겼고, 기획부터 배포까지 서비스가 만들어지는 전체 과정이 눈에 들어오기 시작했습니다.

    ## what i did

    인증 · 세션
    로그인 · 토큰 갱신 · 세션 유지, 인터셉터로 토큰 자동 주입
    API 모듈화
    인터페이스 · DTO · 서비스 계층 분리로 화면과 통신 코드를 떼어 냄
    트러블슈팅
    ExoPlayer 메모리 누수 → Application 싱글톤 전역 관리
    발표
    데이터 구조 · 그래프 DB 포함 서비스 전체를 설명

    ## stack

    • Android
    • Kotlin
    • REST API
    • JNI
    • CMAKE
    • OBOE
    • Jenkins
  4. $ cat ~/story/2025-04-amoverse.md

    2025.04[ OK ]★ SSAFY 12기 자율 프로젝트 · 2등

    Amoverse (À moi)

    2025.04 ~ 2025.05 · 6주 · 6명 · 모바일 3명 중 아키텍처 설계 · 디자인 패턴 · 핵심 기능 주도 (공식 직함 없음)

    ## summary

    아티스트의 작품을 모바일에서 전시하고 감상하는 앱입니다. 공식 팀장은 따로 있었고 그 외에는 평등한 팀이었지만, 모바일 개발자 셋 중에서 전체 아키텍처(MVVM, GraphQL + REST, 인증·세션)와 디자인 패턴을 정하고 핵심 기능을 맡는 역할을 했습니다. 그만큼 백엔드·인프라 담당자와 자주 이야기해야 했고, 내 파트 밖의 사정을 알아야 내 일이 끝난다는 것을 배운 프로젝트입니다.

    AI 생성 포스터의 한글 왜곡 문제는 텍스트 없는 이미지를 생성한 뒤 객체·그리드 복잡도를 회피하는 알고리즘으로 온디바이스에서 텍스트를 배치해 해결했습니다.

    ## what i did

    아키텍처
    MVVM 계층, GraphQL + REST 병행, 인증 · 세션, 라이브러리 선정 등 프로젝트 기본 환경 설계
    On-device AI
    포스터 생성 → 객체 · 그리드 복잡도 회피 알고리즘으로 텍스트 배치
    협업
    백엔드 · 인프라 담당과 인터페이스 합의, 서명 캔버스 등 핵심 화면

    ## stack

    • Android
    • Kotlin
    • MVVM
    • GraphQL
    • REST API
    • On-device AI
    • Jenkins
  5. $ cat ~/story/2025-06-coach.md

    2025.06[ OK ]

    SSAFY 13 · 14기 실습코치

    2025.06 ~ 2026.06 · 두 기수 연속 · 실습코치 — 교육생 개발 · 인프라 기술지원

    ## summary

    수료 후 두 기수를 연속으로 지원했습니다. 교육생 팀 프로젝트의 개발환경·CI/CD·배포 문제를 함께 풀고, 컨테이너·CI/CD·웹 서버 같은 주제로 데일리 콘텐츠를 만들었습니다. 프로젝트에서 배운 것을 가장 많이 꺼내 쓴 시기입니다.

    교육용 Kubernetes(EKS) 가이드는 읽는 것이 아니라 처음부터 끝까지 직접 따라 하며 검수했습니다. 오탈자 교정에서 멈추지 않고 '클러스터 수준 앱이 필요한 팀은 서버 신청 단계에 미리 포함시키면 문의가 준다', '매 커밋 빌드에 캐싱을 넣으면 대기가 준다' 같은 운영 관점 개선안을 냈고 제안자로 등재됐습니다.

    ## what i did

    K8s 가이드 검수
    EKS · GitLab CI · Argo CD · Helm · Ingress · 인증서 배포 가이드 전 과정 검증, 개선안 9건 (운영 제안 2건 포함)
    프로젝트 기술지원
    13 · 14기 팀의 개발환경 · CI/CD · 배포 문제 지원, 유저 테스트 리포트, 버그 · 개선 등록
    기술 세션 발표
    전국 교육생 대상 2회 — 「모바일 개발 프로세스」(2025.09), 「Samsung Health Data SDK」(2026.04)
    생산성 도구
    Mattermost 예약 메시지 플러그인에 GUI · 파일 첨부 추가 (Go · TypeScript), 매뉴얼 v1/v2

    ## stack

    • Kubernetes (EKS)
    • GitLab CI
    • Argo CD
    • Helm
    • Docker
    • Nginx
    • Jenkins
    • Go
    • TypeScript
  6. $ cat ~/story/2025-10-homeserver.md

    2025.10[ RUN ]

    홈서버 가동

    2025.10 ~ 운영 중 · 설계 · 구축 · 운영 전담

    27
    컨테이너 (실행 중)
    20+
    도메인
    0
    인바운드 포트
    3
    장애 기록

    ## summary

    집에 있는 Ubuntu 서버 한 대 위에 직접 만든 서비스와 오픈소스를 Docker로 올리고, Cloudflare Tunnel로 외부에 공개하는 개인 인프라입니다. 서버가 아웃바운드로 엣지에 붙으므로 공유기에 여는 포트가 0개이고 공인 IP가 DNS에 드러나지 않습니다.

    Nginx Proxy Manager가 호스트별 라우팅을, AdGuard Home이 집 전체 DNS 리졸버(DoH 업스트림·광고 차단)를, MinIO가 S3 호환 오브젝트 스토리지를 맡습니다. Uptime Kuma로 서비스·DNS를 감시하고, Jenkins·Watchtower로 빌드와 갱신을 돌립니다. 이 사이트도 같은 서버에서 GitHub Actions → GHCR → Watchtower 흐름으로 배포됩니다.

    운영하면서 겪은 장애는 증상·원인·조치·재발 방지로 기록합니다. Docker 자동 갱신이 iptables FORWARD 규칙을 지워 전 도메인이 내려간 장애는 2분 주기 자가 복구 타이머로 재발 0건, 고아 docker-proxy의 80번 포트 점유로 전 도메인 502가 난 장애는 포트 점유 확인 절차로, 데스크톱 환경 설치 후 netplan 렌더러가 바뀌어 재부팅 시 네트워크가 죽은 장애는 렌더러 고정으로 막았습니다.

    $ docker ps --format table · 27 running · as of 2026-10-14

    직접 만든 것

    입구 · 운영

    • Up cloudflaredCloudflare Tunnel — 인바운드 포트 0 (systemd)internal
    • Up nginx-proxy-manager호스트 19개 라우팅internal
    • Up watchtower이미지 자동 갱신 (라벨 기반, 05:00 고정)internal
    • Up uptime-kuma서비스 · DNS 감시internal
    • Up beszel호스트 · 컨테이너 자원 모니터internal
    • Up portainer컨테이너 관리 UIinternal

    네트워크 · 스토리지

    • Up adguardhome집 전체 DNS 리졸버 · DoH 업스트림 · 광고 차단internal
    • Up minioS3 호환 오브젝트 스토리지 — 볼트 단일 진실 소스internal
    • Up filebrowser강의 원본 · 파일 보관 (NAS 대용)files.wnsdlr.com ↗

    도구

    • Up jenkinsCI — 개인 서비스 빌드internal
    • Up n8n워크플로 자동화internal
    • Up hoppscotch (+ db)API 테스트internal
    • Up termix웹 SSH 콘솔internal

    ## what i did

    외부 공개 구조
    Cloudflare Tunnel(http2 고정, IPv4 엣지) → NPM → 컨테이너. 포트포워딩 0, 엣지 TLS 종단, 호스트 밖 평문 0
    내부 DNS
    AdGuard Home을 LAN 리졸버로 — DoH 업스트림 2개 + ISP 자사 리졸버 bootstrap, 회선 실측으로 업스트림 순서 결정
    장애 대응 · 자가 복구
    iptables 규칙 소실을 2분 주기 systemd 타이머가 멱등하게 복구, 고아 프로세스 포트 점유·netplan 렌더러 함정 절차화
    스토리지 · 동기화
    MinIO 버킷을 단일 소스로 Obsidian 볼트를 rclone bisync + flock 타이머로 양방향 동기화
    운영 문서
    포트 할당 규칙, 서비스별 README, 장애 런북(전 도메인 502 · 1033 · DNS 단절)을 저장소에 유지

    ## stack

    • Ubuntu 24.04
    • Docker Compose
    • Cloudflare Tunnel
    • Nginx Proxy Manager
    • AdGuard Home
    • MinIO
    • Uptime Kuma
    • Jenkins
    • systemd timer
    • ufw / iptables
  7. $ cat ~/story/2026-07-rapa.md

    2026.07[ INFO ]

    RAPA 클라우드 보안 과정 입과

    2026.07 ~ 2026.12 · 한국전파진흥협회 클라우드 보안 전문가 양성과정 · 교육생 · 매 구간 Final LAB 직접 구성

    ## summary

    2026년 7월에 시작한 1,000시간 과정입니다. 네트워크(Cisco 스위칭·라우팅)에서 보안(ACL · ASA · VPN · FTD), Windows Server와 Linux Server, AWS, 그리고 10월부터 vSphere 가상화까지 인프라 전 계층을 실장비로 다룹니다. 개발에 쏟은 시간을 주 무기로 쓰지 못하게 된다는 것을 알면서 고른 길입니다. 로우레벨을 이해하면 세상의 시스템이 어떻게 돌아가는지 이해하는 데 도움이 된다고 생각했습니다.

    매일 수업이 끝나면 강의 자료와 필기를 개념 위키로 정리하고 확인 문항 20개를 만들어 풉니다. 이 과정 중에 정보처리기사와 CCNA를 취득했습니다.

    ## curriculum

    네트워크
    Cisco 스위칭(VLAN · STP · EtherChannel · FHRP) · 라우팅(OSPF · BGP · 재분배)
    보안
    ACL, ASA 방화벽 · NAT, IPsec · DMVPN · SSL VPN, FTD · IPS 정책
    Windows Server
    AD 포리스트 · 자식 도메인, DNS · DHCP Relay · NTP, RAID-5 · SMB · NFS · iSCSI, IIS · FTP · 메일
    Linux Server
    계정 · 권한, DHCP · BIND · chrony, nginx · SSH, 디스크 · 마운트, Samba · NFS
    가상화 · Cloud
    vSphere ESXi · vCenter (진행 중) · AWS EC2 · VPC · IAM · 부하분산 · 스토리지
  8. $ cat ~/story/2026-08-vault.md

    2026.08[ RUN ]

    AI 지식관리 워크스테이션 구축

    2026.08 ~ 운영 중 · 설계 · 구축 · 운영 전담

    50+
    강의노트
    165
    개념 위키
    1,000+
    확인 문항
    0
    동기화 실패

    ## summary

    기록을 더 효율적으로 하기 위해 만든 시스템입니다. 기록하고 정리하고 흩어진 정보를 엮는 일은 AI에게 맡기고, 저는 그날 배운 것과 겪은 문제와 떠오른 생각을 계속 넣습니다.

    하루 8시간 과정의 강의 자료·필기·실습 캡처가 매일 개념 단위로 정리되고, 모든 문장에 출처가 남고, 그날 배운 것으로 확인 문항 20개가 만들어집니다. MinIO 버킷을 단일 진실 소스로 두고 Obsidian(사람)과 Claude Code(AI)가 같은 볼트를 rclone bisync로 양방향 동기화하며 편집합니다. Git은 되돌리기가 아니라 텍스트 이력 백업만 맡습니다.

    동기화는 flock으로 동시 실행을 막고 systemd 타이머가 1시간마다 돌립니다. 규칙 문서 한 장이 AI의 동작 전체를 통제합니다. 폴더별 쓰기 권한, 이미지 명명 규칙, 출처 표기 형식을 명시하자 결과가 재현됐고, 확인 문항은 직접 만든 사이트(rapa.wnsdlr.com)에서 풀고 오답을 위키 개념과 연결합니다.

    ## what i did

    단일 진실 소스
    MinIO = 현재 상태의 진실(바이너리 포함, 버저닝 7일), Git = 텍스트 이력. 역할을 갈라 충돌을 없앰
    동기화 운영
    vault-sync 스크립트 — flock 배타 제어, 1시간 타이머, 충돌 정책, 필터, 실패 시 resync 안내 로그
    원본 → 정리본 파이프라인
    docx·pptx·hwp에서 텍스트·이미지를 추출하고 본문 위치를 복원해 정리본에 같은 자리로 임베드
    규칙 문서
    AI 행동 규칙 1장 — 폴더 권한 · 명명 규칙 · 출처 형식. 운영 표준·인수인계 문서와 같은 성격
    상시 검증
    깨진 임베드·위키링크·충돌 사본을 스크립트로 점검 (현재 0건)

    ## stack

    • Obsidian
    • MinIO
    • rclone bisync
    • systemd timer
    • flock
    • Git
    • Claude Code
    • Python
  9. $ cat ~/story/2026-09-eip.md

    2026.09[ OK ]

    정보처리기사

    2026.09 취득 · 한국산업인력공단

    ## summary

    국가기술자격 정보처리기사입니다. 실기가 어려워서 문제를 풀고 채점하고 오답을 모으는 사이트(eip.wnsdlr.com)를 처음 만들어 봤습니다. 문제는 AI로 생성한 뒤 직접 검토했습니다.

    틀린 문제를 유형별로 기록해 보는 방식은 CCNA 준비와 지금의 학습 시스템에 그대로 이어졌습니다.

  10. $ cat ~/story/2026-10-ccna.md

    2026.10[ OK ]

    CCNA · 문제은행

    2026.09.22 ~ 10.03 운영 · CCNA 200-301 2026.10.02 취득 · 기획 · 개발 · 배포 · 운영 전담

    22명
    실사용자
    61,328
    문제 풀이
    0.02%
    5xx (21만 요청)
    60+
    무중단 배포

    ## summary

    CCNA 200-301 문항 616개를 풀고·채점하고·오답을 모으는 웹 서비스입니다. 혼자 쓰려고 만들었는데 동기들이 쓰기 시작해 프로필별로 기록이 분리되는 다중 사용자 서비스가 됐고, 12일 동안 하루 최대 13,889회 풀이를 홈서버 한 대(N100 4코어)에서 CPU 1~2%로 처리했습니다.

    배포는 새 컨테이너를 먼저 띄워 healthz를 확인한 뒤 Docker DNS 별칭을 옮기는 blue/green 방식입니다. NPM 프록시가 resolver valid=1s로 매 요청마다 별칭을 다시 해석하므로 사용자는 교체를 느끼지 못합니다. 옛 컨테이너는 별칭에서 뺀 뒤 진행 중 요청을 마저 처리하고 내려갑니다.

    "사이트가 느려졌다"는 신고에는 서버를 키우기 전에 앱(2~11ms) → 컨테이너(CPU 1~2%) → 호스트(load 0.3) → 네트워크(터널 왕복 250ms) 순으로 측정해, 원인이 서버가 아니라 하루 25회 배포마다 캐시가 날아가는 습관임을 찾았습니다. 정적 파일 1년 캐시와 배포 묶기로 해결했고, 브라우저 의존적인 HTML5 Drag&Drop은 Pointer Events로 재구현한 뒤 헤드리스 크롬 시나리오 9개로 배포마다 검증했습니다.

    ## what i did

    무중단 배포
    blue/green 스크립트 — 새 컨테이너 healthz 통과 → 네트워크 별칭 이전 → 옛 컨테이너 drain 후 종료. 60회 이상 사용자 체감 0
    성능 진단
    층별 측정으로 '느리다'의 원인을 배포 습관으로 특정, 캐시 정책(immutable 1년 · 데이터 5분 · 버전 API no-store) 설계
    운영 품질
    덤프 정답 이의제기 전수 검증 → 22문항 정정, 패치노트 17회, 새 버전 알림 띠
    검증 자동화
    배포 전 테스트 컨테이너에서 CDP 마우스 시나리오 9개 자동 실행 → 운영 배포 → 운영 URL 재검증
    데이터 파이프라인
    Obsidian 볼트의 문제은행 마크다운 → 빌드 스크립트 → 읽기 전용 JSON, mtime 감지로 재시작 없이 반영

    ## stack

    • Python Flask
    • gunicorn
    • SQLite WAL
    • Vanilla JS SPA
    • Docker
    • Nginx Proxy Manager
    • Cloudflare Tunnel
    • headless Chrome CDP
  11. $ cat ~/story/2026-10-vcp.md

    2026.10[ OK ]

    VMware VCP 합격

    2026.10.22 합격 · VMware vSphere Foundation 9.0 Administrator (2V0-16.25) · 인증서 발급 대기 · RAPA 클라우드 보안 전문가 양성과정 가상화 구간 (2026.10.13 ~)

    ## summary

    RAPA 과정의 서버 가상화 구간이 10월 13일에 시작됐고, 열흘 뒤인 10월 22일에 시험을 봐서 합격했습니다. 중첩 ESXi 8.0 3대와 7.0 1대를 직접 설치하고, VCSA 설치와 VAMI 관리, vSS·vDS와 VLAN, NFS·iSCSI 데이터스토어, KVM까지 수업으로 다룬 범위를 그대로 시험 범위와 겹쳐 놓고 준비했습니다.

    팀 프로젝트에서 vSphere 위 VM 8대로 로드밸런서 이중화를 구성해 본 경험이 있어서, 시험 공부가 개념 암기보다 이미 만져 본 것을 정리하는 쪽에 가까웠습니다. 인증서는 VMware 쪽 발급을 기다리고 있습니다.

    ## covered

    호스트
    ESXi 설치 · DCUI · Host Client · VMFS6 · esxcli
    vCenter
    VCSA 설치 · 라이선스 · VAMI(Time · Firewall · Syslog · Backup) · 권한
    네트워크 · 스토리지
    vSS · vDS · VLAN · 보안 정책 · Teaming · NFS · iSCSI
  12. $ cat ~/story/2026-11-saa.md

    2026.11[ RUN ]

    AWS SAA 준비

    2026.11 목표 · AWS Certified Solutions Architect – Associate · 준비 중

    ## summary

    퍼블릭 클라우드로 범위를 넓히는 다음 칸입니다. 홈서버에서 운영 중인 학습 플랫폼에 AWS SAA 과목을 추가해 두고, 과정의 AWS 구간(EC2 · VPC · IAM · 부하분산 · 스토리지)과 겹쳐서 준비합니다.

    당장의 방향은 인프라·서버·시스템 엔지니어입니다. 서버에서 클라우드로, 장기적으로는 사람들이 더 쉽게 만들고 돌릴 수 있는 바탕을 짜는 영역까지 넓히려 합니다. 아직 기본기를 쌓는 중이고, 그 순서를 건너뛰지 않는 것도 선택의 일부입니다.

    ## on the way

    클라우드
    AWS EC2 · VPC · IAM · 부하분산 · 스토리지 — SAA 준비
    컨테이너
    홈서버에 k3s를 올려 PADING을 직접 재배포하는 것이 다음 과제
    리눅스
    Ubuntu로 서버 서비스 재구성 중 · RHCSA 준비

$ ls -lt ~/certifications

certifications

  1. 2026.11AWS Certified Solutions Architect – Associate[ RUN ]
  2. 2026.10CCNA 200-301[ OK ]
  3. 2026.10VMware VCP (vSphere Foundation 9.0 Administrator)[ OK ]
  4. 2026.09정보처리기사[ OK ]

$ ls /usr/local/stack

stack

drwxr-xr-x server-cloud/

  • Linux
  • Windows Server
  • Docker
  • Kubernetes
  • AWS
  • Cloudflare

drwxr-xr-x operations/

  • Nginx
  • Jenkins
  • Prometheus
  • Grafana

drwxr-xr-x languages/

  • Python
  • JavaScript
  • Java

drwxr-xr-x tools/

  • Git
  • Jira
  • Notion
  • Slack
  • Mattermost
  • Figma

$ echo "..." >> /var/log/guestbook.log

guestbook

한 줄 응원이나 의견을 남겨 주세요. 검토 후 노출됩니다.

0/100

대기 중

$ tail -n 10 /var/log/guestbook.log

로딩 중…