분류 전체보기 18

sudo 없이 SMB 공유폴더 마운트하기, cifs-utils를 못 깔 때

NAS 공유폴더를 리눅스에 붙이려고 검색하면 대부분 이렇게 나옵니다.sudo apt install cifs-utilssudo mount -t cifs //서버/공유 /mnt/nas -o ...그런데 sudo를 쓸 수 없는 상황이 있습니다. 비밀번호를 모르거나, 권한을 안 받았거나,저처럼 비대화형 셸이라 암호를 입력할 수가 없을 때입니다.sudo: 암호를 읽으려면 터미널이 필요합니다여기서 막혀서 한참 헤맸는데, 데스크탑 환경이면 sudo 없이도 됩니다.애초에 SSH로 파일을 보내려다 막혀서 SMB로 돌아선 상황이었습니다.NAS에 일반 계정을 하나 만들어 ssh 로 붙으려니 비밀번호가 맞는데도 거부당했습니다.알고 보니 그 NAS는 관리자 그룹 계정만 SSH 로그인을 허용하는 설정이었습니다.권한을 나눠 쓰려고..

카테고리 없음 2026.10.31

API 키를 코드에서 분리하는 법 - 로컬 릴레이 패턴

외부 API를 여러 곳에서 호출하다 보면 키가 여기저기 흩어집니다.스크립트에 하나, 환경변수에 하나, 테스트 코드에 또 하나.키를 한 곳에만 두고 나머지는 키 없이 호출하게 만드는 방법을 씁니다.결론부터 [스크립트들] [로컬 릴레이] [외부 API] 키 없음 ──────► 키를 주입해서 중계 ──────► 인증 필요 localhost X-API-Key릴레이만 키를 안다. 호출하는 쪽은 키를 모른다키를 바꿀 때 한 곳만 고치면 된다스크립트에 키가 없으니 실수로 커밋할 일이 없다왜 이렇게 하나키를 여러 곳에 두면 이런 일이 생깁니다.문제설명누락새 스크립트를 짤 때마다 키 설정을 다시 해야 한다유출환경변수 설..

카테고리 없음 2026.10.30

문서 없는 API 다루기 - 엔드포인트를 더듬어 찾는 법

사내 API나 직접 만든 서비스는 문서가 없는 경우가 흔합니다.목록은 되는데 개별 조회가 안 될 때, 경로를 추측해가며 찾아야 합니다.오늘 그 작업을 했고, 중간에 엉뚱한 결론을 내릴 뻔했습니다. 그 과정을 적습니다.결론부터단계하는 일1응답 형태로 "누가 404를 줬는지" 구분한다2REST 관례대로 경로를 순서대로 찍어본다3쿼리 파라미터로 필드가 늘어나는지 본다4페이지네이션 메타를 먼저 확인한다 ← 안 하면 오판한다5그래도 없으면 없는 것이다. 추측을 멈춘다1. 404를 누가 줬는지 구분한다프록시나 게이트웨이를 거치는 구조라면, 404가 두 군데서 나올 수 있습니다.// 프록시가 준 것 — 경로가 중계 대상이 아님{"error":"not_found","hint":"this relay only forwar..

카테고리 없음 2026.10.29

워드프레스 백업 - 뭘 빼먹으면 복원이 안 되는가

워드프레스 백업을 DB만 받아두는 경우가 많습니다. 글이 DB에 있으니 맞는 말인데, 그것만으로는 복원이 안 됩니다.백업 스크립트를 짜면서 빠뜨리면 복원이 막히는 것이 뭔지 정리했습니다.결론부터 — 세 덩어리가 필요합니다#대상없으면1DB 덤프글·설정·사용자가 전부 사라진다2업로드 파일 (wp-content/uploads/)글은 살아나는데 이미지가 전부 깨진다3설정 파일 (.env, wp-config.php)DB 비밀번호를 몰라 접속 자체가 안 된다3번을 빠뜨리기 쉽습니다. 저도 처음 스크립트에 안 넣었습니다.3번이 왜 치명적인가DB를 복원하면 그 안의 사용자 계정과 비밀번호도 예전 값 그대로 돌아옵니다.그런데 .env 를 잃으면 그 비밀번호를 모릅니다. 워드프레스가 DB에 접속하지 못합니다.root 비밀..

카테고리 없음 2026.10.28

웹 서버에 .git 디렉토리가 노출되면 벌어지는 일

소스를 git으로 관리하면서 저장소를 웹 루트에 그대로 두면, 아무나 /.git/ 주소로 접근할 수 있습니다.저도 설정을 바꾸다가 이 상태를 만들었고, 확인해보니 그대로 열려 있었습니다.curl -s -o /dev/null -w '%{http_code}\n' https://example.com/.git/config# 200 ← 열려 있다결론부터 — 뭐가 털리나.git 디렉토리에는 소스 전체와 모든 이력이 들어 있습니다. 노출되면 이것들이 나갑니다.파일내용.git/config저장소 주소, remote URL에 토큰이 박혀 있으면 그대로.git/HEAD, refs/브랜치 구조.git/objects/소스 코드 전부. 삭제한 파일까지.git/logs/HEAD커밋 이력, 작업자 이름·이메일가장 위험한 건 o..

카테고리 없음 2026.10.27

워드프레스 소스를 git으로 관리하기 - 코어까지 통째로

워드프레스를 Docker 공식 이미지로 쓰면 소스가 컨테이너 안에 숨어 있습니다. 파일을 직접 보거나 고칠 수 없고, 업데이트도 이미지가 알아서 합니다.편하지만 통제권이 없습니다. 그래서 공식 소스를 직접 받아 git으로 관리하기로 했습니다.결론부터github.com/WordPress/WordPress (공식 미러, upstream) │ git clone --branch ▼ 내 저장소 (origin) ──► 서버워드프레스는 GPL 오픈소스이고 공식 git 미러가 있습니다. 거기서 받아 쓰면업데이트도 git으로 할 수 있습니다.이미지에 맡기기git으로 관리코어 업데이트자동git 으로 직접파일 변조 탐지불가git status 로 즉시코어 수정불가가능관리 부담적음보안 패..

카테고리 없음 2026.10.26

워드프레스를 플러그인 없이 쓰기 - SEO 플러그인이 정말 필요한가

워드프레스를 새로 세우면서 플러그인을 하나도 깔지 않기로 했습니다."그래도 SEO 플러그인은 있어야지" 싶었는데, 하나씩 따져보니 필요 없었습니다.결론부터보통 플러그인을 쓰는 기능실제로는사이트맵 생성워드프레스 기본 제공 (/wp-sitemap.xml)메타 description · OG 태그테마 코드 30줄정규 주소(canonical)워드프레스 기본. 직접 넣으면 중복캐시트래픽 적으면 불필요댓글 스팸 방지댓글을 끄면 불필요백업서버에서 스크립트로플러그인 0개로 돌아갑니다.왜 줄이려 했나플러그인은 남이 쓴 코드가 내 사이트에서 관리자 권한으로 도는 것입니다.취약점이 생기면 그대로 공격 경로가 됩니다개발자가 손을 놓으면 보안 패치가 멈춥니다사이트가 느려지는 흔한 원인이기도 합니다워드프레스 침해는 코어보다 플러그..

카테고리 없음 2026.10.25

Docker Compose로 워드프레스 올리기 - 실제로 막혔던 지점들

워드프레스를 직접 호스팅하려고 Docker Compose로 올렸습니다. 공식 이미지가 있어서 금방 끝날 줄 알았는데, 막힌 곳이 네 군데였습니다.전부 "설치 가이드"에는 안 나오고 실제로 해봐야 만나는 것들이었습니다.결론부터 — 구성과 함정Caddy (리버스 프록시, 자동 HTTPS) └─ WordPress (php-apache) └─ MariaDB └─ Redis (선택)막힌 지점원인첫 기동에서 DB 연결 실패depends_on 이 컨테이너 시작만 보고 넘어감무한 리다이렉트프록시 뒤에서 HTTPS를 인식 못 함설정 바꿔도 반영 안 됨바인드 마운트는 compose up -d 가 변경을 감지 못함퍼머링크 전부 404.htaccess 가 없음1. depends_on 만으로는 부족합니다..

카테고리 없음 2026.10.24

웹 응답에서 원하는 것만 뽑아내기 - grep, sed, tr 조합

curl로 받은 HTML은 수만 글자입니다. 여기서 제목 하나, 개수 하나를 꺼내려면파이프로 몇 개를 엮으면 됩니다. 별도 도구를 설치할 필요가 없습니다.결론부터 — 이 네 개 조합이면 웬만한 건 됩니다grep -o '패턴' # 매치된 부분만 출력 (줄 전체가 아니라)grep -c '패턴' # 개수만 세기sed 's/]*>//g' # HTML 태그 제거tr -s ' \n' ' ' # 중복 공백·줄바꿈 압축grep -o — 이게 핵심입니다보통 grep은 매치된 줄 전체를 보여줍니다. HTML은 한 줄이 수천 글자라 쓸모가 없습니다.-o를 붙이면 매치된 부분만 나옵니다.# 제목 뽑기curl -s https://example.com/ | grep -o '[^'# 사이트..

카테고리 없음 2026.10.23

HTTP 상태 코드 실무 정리 - 실제로 마주치는 것만

상태 코드는 수십 개지만 실무에서 실제로 보는 건 열 개 남짓입니다.전체를 외우는 것보다 "이게 나오면 어디를 봐야 하는지" 를 아는 게 낫습니다.결론부터 — 첫 자리로 책임 소재가 갈립니다앞자리뜻누구 문제인가2xx성공—3xx다른 곳으로 이동설정 문제일 수 있음4xx요청이 잘못됨보내는 쪽 (주소·권한·인증)5xx서버가 처리 못 함서버 쪽4xx가 나오면 내 요청을, 5xx가 나오면 서버를 봅니다. 이 구분만 해도 절반은 잡힙니다.자주 보는 것들2xx — 성공코드의미비고200정상204성공했지만 줄 내용 없음API에서 삭제 처리 등206일부만 전송동영상 구간 재생, 이어받기3xx — 이동코드의미주의301영구 이동브라우저가 강하게 캐시한다302임시 이동검색엔진은 옛 주소를 유지한다304안 바뀜캐시 쓰라는 뜻. ..

카테고리 없음 2026.10.22