설정 두 줄 옮겼더니 사이트가 통째로 죽었다

보안을 좀 챙기고 싶었다. 내 앱들이 인터넷에 그대로 노출돼 있는 게 불안해서, "집 안(내부)에서만 듣게" 설정을 바꾸기로 했다. 딱 두 줄. 사소하다고 생각했다. 그런데 바꾸자마자 사이트 전체가 500 에러를 뱉기 시작했다. 이건 '사소한 변경 같은 건 없다'를 몸으로 배운 이야기다.

1. 내가 하려던 것 (좋은 의도였다)

앱이 외부에서 아무나 접근 가능한 상태였다. 나는 AI한테 "이거 인터넷에 직접 노출하지 말고, 서버 안에서만 접근되게 바꿔줘"라고 했다. 보안상 맞는 방향이다. 변경은 정말 작았다 — 듣는 주소를 '아무나'에서 '나 자신(localhost)'으로 좁히는 것.

2. 그리고 사이트가 죽었다

바꾸자마자 페이지들이 500 에러를 냈다. 나는 당황했다. "설정 하나 좁혔을 뿐인데 왜 사이트가 죽어?" 솔직히 처음엔 "서버가 잠깐 그런 거겠지, 좀 있으면 괜찮아지겠지" 하고 넘기고 싶었다. 이게 첫 번째 함정이었다.

3. 진짜 원인 — 나는 몰랐던 연쇄반응

AI랑 같이 파보니, 내가 상상도 못 한 연쇄가 있었다. 주소를 'localhost'로 좁혔더니, 사이트 내부에서 '지금 이 요청이 어느 주소로 온 거지?'를 판단하는 부분이 전부 localhost로 착각했다. 그 착각 때문에 사이트가 자기 자신에게 엉뚱한 주소로 요청을 보내다 실패했다. 한 줄의 좁히기가, 나는 존재도 몰랐던 다른 부품의 판단을 망가뜨린 것이다.

고친 방법도 배웠다. 주소를 좁히되, 원래 요청이 어디서 왔는지 정보는 그대로 보존하도록 했다. 그러자 사이트가 다시 살아났다. 나는 이 부품이 뭔지 깊이는 몰라도, '무엇이 무엇에 의존하는지'를 이번에 처음 실감했다.

4. 더 아팠던 교훈 — '일시적일 거야'는 대개 거짓말

나는 처음에 이 500을 '일시적 오류'로 믿고 싶었다. 하지만 그건 100% 재현되는 문제였다. 새로고침하면 매번 똑같이 죽었다. 만약 내가 "좀 있으면 낫겠지" 하고 방치했다면, 사이트는 계속 죽어 있었을 것이다.

비개발자로서 배운 것: 재현되는 버그를 '운 나쁜 일시적 현상'으로 착각하지 마라. 같은 조작에 같은 결과가 나오면, 그건 우연이 아니라 원인이 있는 것이다. '기다리면 낫겠지'는 대개 시간만 버리는 자기위안이다.

5. 비개발자가 얻은 교훈

  • '사소한 변경' 같은 건 없다. 두 줄짜리 변경이 사이트 전체를 죽일 수 있다. 작아 보여도 바꾼 뒤엔 꼭 확인한다.
  • 재현되면 원인이 있는 거다. '일시적'이라는 단어로 도망치지 마라.
  • 좋은 의도가 안전을 보장하진 않는다. 보안을 챙기려던 변경이 사이트를 죽였다. 방향이 맞아도 실행은 확인해야 한다.

6. FAQ

  • Q: 비개발자가 이런 걸 어떻게 고쳐요?
    A: 저도 원인은 몰랐어요. 대신 에러 화면을 그대로 AI한테 보여주고 "이거 왜 이래?"를 반복했습니다. 중요한 건 포기하고 롤백만 하지 않고, 왜 그런지 한 번은 같이 파본 것.
  • Q: 그냥 원래대로 되돌리면 되지 않나요?
    A: 그럼 보안 개선을 포기하는 거죠. 되돌리는 건 쉽지만, 왜 깨졌는지 모르면 다음에 또 같은 데서 넘어집니다.
  • Q: 제일 큰 교훈은요?
    A: "이건 일시적이겠지"라는 생각이 들 때가 제일 위험하다는 것. 재현되는 순간 그건 이미 버그입니다.

7. 마치며

두 줄을 옮겼을 뿐인데 사이트가 죽었고, 나는 '일시적일 거야'로 도망치고 싶었다. 하지만 재현되는 문제는 기다린다고 낫지 않는다. 코드를 몰라도, '작다고 방심하지 않기'와 '재현되면 파고들기'는 배울 수 있었다. 바이브코딩은 만드는 기술보다 이런 태도를 요구한다.