diff --git a/content/01.Shelf/CLEAN CODE/클린코드의 기술.md b/content/01.Shelf/CLEAN CODE/클린코드의 기술.md deleted file mode 100644 index 5579a21..0000000 --- a/content/01.Shelf/CLEAN CODE/클린코드의 기술.md +++ /dev/null @@ -1,15 +0,0 @@ -1. [[단순함의 노하우(Introduction)]] - -2. [[80대20 원칙(The Pareto Principle)]] - -3. [[최소 기능 제품 (MVP)]] - -4. [[코딩 원칙 (YAGNI, KISS, DRY)]] - -5. [[유닉스 철학 (The Unix Philosophy)]] - -6. [[설계와 추상화]] - -7. [[디버깅과 테스트]] - -8. [[협업과 지속 가능한 개발]] \ No newline at end of file diff --git a/content/01.Shelf/CMMS/AWS Architecture로 전환.md b/content/01.Shelf/CMMS/AWS Architecture로 전환.md deleted file mode 100644 index 0b85e6b..0000000 --- a/content/01.Shelf/CMMS/AWS Architecture로 전환.md +++ /dev/null @@ -1,13 +0,0 @@ -[[꼭 알아둬야 할 것들]] - -[[AWS Architecture로의 전환이 필요한 이유]] (As-Is) - -[[온프레미스에서 EC2 기반으로]] - -[[컨테이너 기반의 아키텍처]] (To-Be) - -[[ECS와 EKS]] - -[[EKS Cluster]] - -[[AWS ECS 구성하기]] \ No newline at end of file diff --git a/content/01.Shelf/CMMS/CMMS 마이그레이션.md b/content/01.Shelf/CMMS/CMMS 마이그레이션.md deleted file mode 100644 index 3824f0c..0000000 --- a/content/01.Shelf/CMMS/CMMS 마이그레이션.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -id: "CMMS 마이그레이션 20260319" -created: "2026-03-19 12:58" -tags: -aliases: ---- -마이그레이션: 신규 고객의 셋업작업 진행 시 필요한 데이터를 DB로 밀어넣는 과정 - - -엑셀파일로 된 마이그레이션 필요 문서 작성 (담당자가 따로있나봄) -(원본엑셀 -> 마이그레이션 할 데이터 엑셀 ) - -/auth/fullmigration -( CMMS 엔터프라이즈형은 /auth/mig ) -마이그레이션 페이지가 따로 만들어져있음. - -여기서 엑셀파일들을 전부 다 execute migration 진행해줘야 함 -너무 많은 데이터를 한번에 시도하면 문제가 될 수 있어서 -분리해서 진행해야함. - - -파일 마이그레이션은 암호화(확장자없는) 파일을 먼저 만들고 (엑셀파일부터 작성) -...? 그다음에 뭘 또 해야한다는데 이건 이해 못함 - - -shared-service: 마이그레이션, open API (우리는 일단 신경x) 등등의 기능들을 처리해주는 서비스 - diff --git a/content/01.Shelf/EIOM/펀치리스트.md b/content/01.Shelf/EIOM/펀치리스트.md deleted file mode 100644 index 26e040e..0000000 --- a/content/01.Shelf/EIOM/펀치리스트.md +++ /dev/null @@ -1,2 +0,0 @@ -[[VPN으로 외부 DB에 접근]] - diff --git a/content/01.Shelf/KUI/Gitea & Quartz 배포 자동화 트러블슈팅.md b/content/01.Shelf/KUI/Gitea & Quartz 배포 자동화 트러블슈팅.md deleted file mode 100644 index 61e31db..0000000 --- a/content/01.Shelf/KUI/Gitea & Quartz 배포 자동화 트러블슈팅.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -id: "Gitea & Quartz 배포 자동화 트러블슈팅 20260401" -created: "2026-04-01 13:23" -tags: ---- -## 🛠️ Gitea & Quartz 배포 자동화 트러블슈팅 기록 - -### 1. 문제의 발단: Gitea 경로 변경 (`/git/` 누락) - -기존에 설정된 Gitea의 접속 주소가 `/git/` 경로를 포함하고 있었으나, 서버 재설정 과정에서 이 경로가 빠지게 되었습니다. 이로 인해 연쇄적인 문제가 발생했습니다. - -- **현상:** Gitea 웹훅(Webhook)이 서버의 수신기(`webhook` 서비스)에 신호를 보내지 못함. - -- **원인:** Gitea 내부 리포지토리 설정과 외부 호출 URL이 일치하지 않아 404 에러 또는 연결 거부 발생. - - ---- - -### 2. 주요 장애 요인 및 해결 과정 - -#### 📂 [Level 1] 서비스 실행 실패 (ConditionPathExists) - -- **에러:** `webhook.service was skipped because of an unmet condition check`. - -- **원인:** 기본 설치된 `webhook` 서비스가 `/etc/webhook.conf` 파일이 있어야만 작동하도록 설정됨. - -- **해결:** 서비스 파일(`systemd`)을 수정하여 해당 조건을 삭제하고, 우리가 직접 만든 `hooks.json`을 바라보도록 설정함. - - -#### 🔑 [Level 2] 인증 에러 (no source for value retrieval) - -- **에러:** `500 | error evaluating hook: no source for value retrieval`. - -- **원인:** `hooks.json`에는 비밀번호(Secret) 검사 로직이 있는데, Gitea 웹훅 설정에는 비밀번호가 비어 있거나 헤더 이름이 일치하지 않음. - -- **해결:** 보안을 위해 Gitea와 서버 양쪽에 동일한 비밀번호를 설정하거나, 테스트를 위해 `trigger-rule`을 삭제하여 문턱을 낮춤. - - -#### 🚀 [Level 3] 스크립트 실행 환경 문제 (npx & node) - -- **에러:** `npx: command not found` 또는 `node: No such file or directory`. - -- **원인:** `systemd` 서비스는 사용자 터미널 환경변수(`PATH`)를 읽지 못해 NVM에 설치된 Node.js를 찾지 못함. - -- **해결:** `deploy.sh` 상단에 Node.js 실행 파일이 있는 **절대 경로**를 `export PATH`로 직접 주입함. - - -#### 📉 [Level 4] 자원 부족 및 서버 경직 (kswapd0) - -- **현상:** 빌드 시작 시 서버가 급격히 느려지며 접속이 끊김. - -- **원인:** Quartz 빌드는 CPU와 메모리를 많이 사용하는데, 512MB~1GB 수준의 낮은 메모리로 인해 스왑(Swap) 현상이 심화됨. - -- **해결:** 1. **Swap 확장:** 기존 스왑 파일을 **2GB**로 대폭 확장하여 물리 메모리 부족에 대비함. - - 2. **우선순위 조정:** 빌드 명령어 앞에 **`nice -n 19`**를 붙여 다른 서비스(Nginx, Gitea)에 영향을 주지 않도록 최적화함. - - ---- - -### 3. 최종 자동화 아키텍처 (The "Tight" Setup) - -|**구성 요소**|**역할**|**최적화 포인트**| -|---|---|---| -|**Gitea**|소스 관리 및 트리거|`/git/` 경로를 제외한 클린 URL 적용| -|**Webhook**|신호 수신기 (Port 29292)|전용 서비스 등록 및 자동 시작 설정| -|**deploy.sh**|배포 스크립트|**절대 경로 사용**, **로그 파일 기록**, **우선순위 최저 설정**| -|**Swap File**|가상 메모리 (2GB)|`/etc/fstab` 등록을 통한 영구 적용| - ---- - -### 📝 교훈 - -> **경로(Path)와 환경(Environment)은 언제나 명시적이어야 한다.** > 공짜 서버일수록 수동으로 자원을 배분하고 우선순위를 관리하는 **빡빡한 최적화**가 시스템의 생명줄이 된다. \ No newline at end of file diff --git a/content/01.Shelf/KUI/WebHook.md b/content/01.Shelf/KUI/WebHook.md deleted file mode 100644 index 796809b..0000000 --- a/content/01.Shelf/KUI/WebHook.md +++ /dev/null @@ -1,38 +0,0 @@ -![[Pasted image 20260407165750.png]] - -/home/dihwang/webhook/deploy.sh -```bash -#!/bin/bash - -if [ -f /tmp/quartz.lock ]; then exit; fi - -# 1. Node와 npx가 있는 경로를 강제로 주입 (v22.22.2 기준) -export PATH=$PATH:/home/dihwang/.nvm/versions/node/v22.22.2/bin - -# 2. 작업 디렉토리로 이동 -cd /home/dihwang/white-smith-blog/content || exit - -# 3. 최신 데이터 동기화 -git pull origin master - -cd .. - -# 4. Quartz 빌드 (이제 npx가 node를 잘 찾을 겁니다) -nice -n 19 npx quartz build - -echo "Quartz Build Completed at $(date)" - -``` - -/home/dihwang/webhook/hook.json -```json -[ - { - "id": "quartz-deploy", - "execute-command": "/home/dihwang/webhook/deploy.sh", - "command-working-directory": "/home/dihwang/white-smith-blog", - "response-message": "Deploying Quartz...", - } -] - -``` \ No newline at end of file diff --git a/content/01.Shelf/KUI/gitea, qurtz 설치.md b/content/01.Shelf/KUI/gitea, qurtz 설치.md deleted file mode 100644 index 66bfa63..0000000 --- a/content/01.Shelf/KUI/gitea, qurtz 설치.md +++ /dev/null @@ -1,239 +0,0 @@ ---- -id: "gitea, qurtz 설치 20260331" -created: "2026-03-31 10:41" -tags: ---- -# 🌐 개인 서버(GCP) 기반 Gitea & HTTPS 구축 가이드 - -본 문서는 Ubuntu 25.xx 환경에서 가벼운 Git 서비스인 **Gitea**를 설치하고, **Nginx**와 **DuckDNS**를 이용해 **HTTPS** 보안 접속을 구현한 과정을 정리합니다. - -## 1. 서버 기본 환경 및 Gitea 설치 - -가장 가벼운 바이너리 실행 방식으로 Gitea를 설치하고 전용 사용자를 생성했습니다. - -- **OS:** Ubuntu 25.xx (GCP Instance) - -- **사용자 생성:** `git` 시스템 사용자 생성 (`/home/git`) - -- **DB:** SQLite3 (경량화를 위해 선택) - -- **바이너리 경로:** `/usr/local/bin/gitea` - -- **데이터 경로:** `/var/lib/gitea` - - ---- - -## 2. 도메인 및 네트워크 설정 - -외부 접속을 위해 무료 DDNS 주소를 확보하고 클라우드 방화벽을 조정했습니다. - -- **도메인:** `white-smith.duckdns.org` (GCP 외부 IP 연결 완료) - -- **포트 개방 (GCP & UFW):** - - - `22/tcp`: SSH 접속 (PuTTY, SFTP) - - - `80/tcp`: HTTP (인증서 발급 및 리다이렉트용) - - - `443/tcp`: HTTPS (실제 서비스용) - -- **보안 조치:** 불필요한 포트(20, 21, 3389 등) 차단 및 Gitea 직접 포트(3000)는 Nginx를 거치도록 외부 차단 권장. - - ---- - -## 3. HTTPS & Nginx 리버스 프록시 - -Nginx를 앞단에 세워 보안을 강화하고 도메인 기반 접속을 구현했습니다. - -### SSL 인증서 발급 - -`Certbot`을 이용해 **Let's Encrypt** 무료 SSL 인증서를 발급받았습니다. - -Bash - -``` -sudo certbot --nginx -d white-smith.duckdns.org -``` - -### Nginx 최종 설정 (`/etc/nginx/sites-available/gitea`) - -IP 접속 시 도메인으로 자동 전환되도록 설정했습니다. - -Nginx - -``` -# 1. HTTP -> HTTPS 리다이렉트 (IP 포함) -server { - listen 80; - server_name 34.19.79.94 white-smith.duckdns.org; - return 301 https://white-smith.duckdns.org$request_uri; -} - -# 2. HTTPS 서비스 블록 -server { - listen 443 ssl; - server_name white-smith.duckdns.org; - - # SSL 인증서 경로 (Certbot 관리) - ssl_certificate /etc/letsencrypt/live/white-smith.duckdns.org/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/white-smith.duckdns.org/privkey.pem; - - location / { - proxy_pass http://localhost:3000; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } -} -``` - ---- - -## 4. Gitea 내부 설정 업데이트 - -HTTPS 환경에 맞춰 `/etc/gitea/app.ini` 파일을 `vi`로 수정했습니다. - -- **ROOT_URL:** `https://white-smith.duckdns.org/` - -- **DOMAIN:** `white-smith.duckdns.org` - -- **SSH_DOMAIN:** `white-smith.duckdns.org` - - ---- - -## 5. 현재 상태 요약 - -1. **HTTPS 접속:** `https://white-smith.duckdns.org`로 안전하게 접속 가능. - -2. **IP 리다이렉트:** `34.19.79.94` 입력 시 자동으로 도메인 주소로 전환됨. - -3. **파일 전송:** 포트 22번을 통해 SFTP 방식으로 안전하게 파일 관리 중. - - - -# 🚀 Gitea & Quartz 도메인 통합 및 서버 설정 가이드 - -본 가이드는 단일 메인 도메인(`white-smith.duckdns.org`)에서 **Quartz(블로그)**와 **Gitea(Git 서비스)**를 충돌 없이 운영하기 위한 설정법을 다룹니다. - ---- - -## 1. 서비스 주소 설계 - -동일 도메인 점유 문제를 해결하기 위해 **하위 경로(Path)** 방식으로 서비스를 분리했습니다. - -- **Quartz (메인 블로그):** `https://white-smith.duckdns.org/` - -- **Gitea (코드 저장소):** `https://white-smith.duckdns.org/git/` - - ---- - -## 2. Gitea 설정 수정 (`app.ini`) - -Gitea가 `/git/` 경로를 인식하도록 내부 설정을 변경해야 합니다. - -- **파일 위치:** `/var/lib/gitea/custom/conf/app.ini` (또는 설치 경로 내 `custom/conf/app.ini`) - -- **수정 내용:** - - Ini, TOML - - ``` - [server] - ROOT_URL = https://white-smith.duckdns.org/git/ - LOCAL_ROOT_URL = http://127.0.0.1:3000/ - HTTP_ADDR = 127.0.0.1 - HTTP_PORT = 3000 - ``` - - > **Tip:** `LOCAL_ROOT_URL`을 추가해야 내부 리다이렉션 시 404 오류를 방지할 수 있습니다. - - ---- - -## 3. Nginx 역방향 프록시 설정 - -`/etc/nginx/sites-available/gitea` 파일을 수정하여 두 서비스를 통합합니다. - -Nginx - -``` -server { - listen 80; - server_name 34.19.79.94 white-smith.duckdns.org; - return 301 https://white-smith.duckdns.org$request_uri; -} - -server { - listen 443 ssl; - server_name white-smith.duckdns.org; - - ssl_certificate /etc/letsencrypt/live/white-smith.duckdns.org/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/white-smith.duckdns.org/privkey.pem; - - # [우선순위 1] Gitea 설정 - location /git/ { - proxy_pass http://127.0.0.1:3000/; # 끝에 '/' 필수 - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - # [우선순위 2] Quartz 설정 (메인) - location / { - proxy_pass http://127.0.0.1:8080; # Quartz 실행 포트 - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } -} -``` - ---- - -## 4. 권한 관리 및 접근 (etc 경로) - -시스템 설정 파일을 편리하게 수정하기 위해 권한을 조정하거나 도구를 활용합니다. - -1. **권한 변경 (추천):** - - Bash - - ``` - sudo chown -R root:$(whoami) /etc/nginx - sudo chmod -R 775 /etc/nginx - ``` - -2. **포트 확인 명령어:** - - Bash - - ``` - sudo ss -tulpn | grep node # Quartz 포트 확인 - ``` - -3. **서비스 재시작:** - - Bash - - ``` - sudo nginx -t && sudo systemctl restart nginx - sudo systemctl restart gitea - ``` - - ---- - -## 5. 핵심 주의사항 - -- **Nginx 경로 슬래시:** `proxy_pass http://127.0.0.1:3000/;` 처럼 끝에 `/`가 있어야 `/git/` 경로가 중복되지 않고 올바르게 전달됩니다. - -- **Quartz 실행:** Quartz를 `npx quartz build --serve`로 띄운 경우 해당 포트(보통 8080)가 Nginx 설정과 일치해야 합니다. - -- **보안:** `/etc` 전체 권한을 `777`로 바꾸지 마세요. 필요한 폴더만 그룹 권한을 부여하는 것이 안전합니다. \ No newline at end of file diff --git a/content/01.Shelf/KUI/kui-vault.md b/content/01.Shelf/KUI/kui-vault.md deleted file mode 100644 index 6af6651..0000000 --- a/content/01.Shelf/KUI/kui-vault.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -id: "kui-vault 20260401" -created: "2026-04-01 14:59" -tags: ---- -**Google Cloud Platform(GCP)** 를 사용해서 구축함. -### 컴퓨팅 (Compute) - -사용자가 코드를 실행할 공간을 제공합니다. - -- **Compute Engine (GCE):** 가상 머신(VM)을 직접 생성하고 관리하는 IaaS 서비스입니다. (AWS의 EC2와 유사) - -GCE를 한대 빌려서 구축하였음 -![[Pasted image 20260401150036.png]] -원래는 퍼블릭하게 공개되면 안되는 자료들을 블러처리해주는 서버를 만들려고 (kui-veil) 확보한 서버였음 - -![[Pasted image 20260401163033.png]] -## 🖥️ Server Information: **kui-veil** - -#### 1. 기본 호스트 정보 - -| **항목** | **내용** | -| ---------------------- | ---------------------------------- | -| **Static Hostname** | (unset) | -| **Transient Hostname** | **kui-veil** | -| **Machine ID** | `b723eb615fc74ff3ac0de806f770d293` | -| **Boot ID** | `2ce0c86e6d704281a6c28054cc4eba0e` | - -#### 2. 운영체제 및 커널 - -|**항목**|**내용**| -|---|---| -|**Operating System**|**Ubuntu 25.10**| -|**Kernel Version**|**Linux 6.17.0-1007-gcp**| -|**Architecture**|**x86-64** (64비트)| - -#### 3. 하드웨어 및 가상화 (GCP) -|**항목**|**내용**| -|---|---| -|**Virtualization**|**google** (Google Compute Engine)| -|**Hardware Vendor**|**Google**| -|**Chassis**|**vm** 🖴| -|**Firmware Date**|2026-02-12 (약 1.5개월 전)| -### 💡 주요 특징 메모 - -- **최신 버전 사용 중:** 현재 **Ubuntu 25.10**을 사용 중이시네요. 이는 매우 최신 배포판으로, 최신 커널 기능과 패키지들을 지원합니다. - -- **GCP 최적화:** 커널 이름에 `-gcp`가 붙어 있어, 구글 클라우드 인프라에 최적화된 환경에서 동작하고 있음을 알 수 있습니다. - -- **상태 요약:** 펌웨어 날짜가 2026년 2월인 것으로 보아, 시스템이 최근에 업데이트되었거나 생성된 아주 따끈따끈한 환경입니다! - diff --git a/content/01.Shelf/ORS/안드로이드.md b/content/01.Shelf/ORS/안드로이드.md deleted file mode 100644 index ebe7737..0000000 --- a/content/01.Shelf/ORS/안드로이드.md +++ /dev/null @@ -1 +0,0 @@ -[[안드로이드 스튜디오 무선디버깅]] \ No newline at end of file diff --git a/content/01.Shelf/WORKBENCH/리눅스-유닉스.md b/content/01.Shelf/WORKBENCH/리눅스-유닉스.md deleted file mode 100644 index 734851f..0000000 --- a/content/01.Shelf/WORKBENCH/리눅스-유닉스.md +++ /dev/null @@ -1,6 +0,0 @@ -[[리눅스(Linux)]] -[[리눅스의 파일시스템]] - -[[유닉스(Unix)]] -[[유닉스 철학 (The Unix Philosophy)]] - diff --git a/content/01.Shelf/index.md b/content/01.Shelf/index.md deleted file mode 100644 index ac438f2..0000000 --- a/content/01.Shelf/index.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -title: 1. 프로젝트 ----