18년 치 블로그 정리기 (2) — 17년 전의 저는, 알면서 그렇게 했습니다

in #kr5 days ago

안녕하세요, 가야태자 @talkit 입니다.

지난 편에서 18년 치 블로그를 정리하기 시작했다고 적었습니다. 그러면서 하나를 예고했는데요.

실제로 2009년 글 하나에서 지금 기준으로 위험한 설정을 발견해서 추기를 달았습니다. 이 이야기는 다음에 하겠습니다.

오늘 그 이야기입니다.


문제의 글

2009년 5월에 쓴 「WEB Server와 DB 서버 분리해서 운영하기」입니다. 웹서버와 DB서버를 두 대로 나눠서 운영하는 방법을 정리한 글이고요.

읽어 보니 판단은 지금 봐도 맞습니다.

  • 웹과 DB를 물리적으로 나눈 것
  • 각 서버에 무엇을 두고 무엇을 뺄지 정한 것
  • 마지막에 DB 서버의 Apache를 내리라고 마무리한 것

부하를 나누고, 장애 범위를 좁히고, 각각을 따로 늘릴 수 있게 하는 것. 17년이 지나도 웹과 DB를 나누는 이유는 그대로입니다.

세부 판단도 나쁘지 않았습니다. phpMyAdmin 설정에서 auth_type을 기본값인 config 대신 http로 바꿨더군요. 설정 파일에 계정과 비밀번호를 적어두지 않고 접속할 때마다 MySQL 인증을 받게 한 것입니다. 그때 스물몇 살이 그걸 챙겼네요.

그런데 한 줄에서 멈췄습니다

계정을 만드는 대목에 이렇게 적혀 있었습니다.

그리고, 보통은 아래의 모든 값을 N으로 하고 db를 설정하는 것이 좋다
하지만, 나는 원격 root 성격의 아이디를 만들겠다.
그래서 아래의 값들을 모두 Y를 선택하기를 원한다.

읽고 한참 앉아 있었습니다.

모르고 한 게 아니었습니다. 최소 권한이 맞다는 걸 알고 있었고, 심지어 글에 그렇게 써 놓고, 바로 다음 문장에서 전권을 주는 계정을 만들었습니다.

이게 제일 뜨끔한 부분이었어요. 보안 사고 이야기를 들으면 보통 "몰라서 그랬겠지" 하는데, 17년 전 제 기록이 그렇지 않다고 말하고 있습니다.

알고 있었고, 그 순간에 편한 쪽을 골랐습니다. 원격에서 뭐든 다 되는 계정 하나가 있으면 그 뒤로 막히는 게 없으니까요.

변명은 아니지만, 그때는 그랬습니다

2009년은 보안이 지금만큼 무게를 갖지 못하던 때였습니다.

보안 담당자가 따로 없는 프로젝트가 흔했고, 점검이라는 절차도 없었고, "일단 돌아가게 하고 나중에 조이자"가 통했습니다. 최소 권한 원칙은 책에 있는 말이었지 지켜야 하는 선이 아니었어요.

그래서 저 문장이 그때는 이상해 보이지 않았을 겁니다. 글에 대놓고 "보통은 N으로 하는 게 좋다"고 써 놓고 Y를 고르는 게, 그 시절에는 그냥 실무였습니다.

문제는 여기서 한 걸음 더 가는 겁니다.

기준이 시대에 따라 움직인다면, 지금 제가 당연하게 여기는 것도 17년 뒤에는 같은 취급을 받을 겁니다. 지금 "이 정도면 충분하다"고 넘어가는 것들 중에 무엇이 그럴지, 저는 모릅니다. 2009년의 저도 몰랐고요.

그 외에 바뀐 것들

읽으면서 지금 기준으로 걸리는 것들을 더 찾았습니다.

① 계정을 mysql DB의 user 테이블에 직접 INSERT

phpMyAdmin으로 테이블을 열어 행을 추가하는 방식이었습니다. 지금은 CREATE USERGRANT 를 씁니다. 직접 조작은 권장되지 않고, 버전에 따라 동작도 달라집니다.

② 계정 만든 뒤 MySQL 재시동

본문에 "MySQL 재시동 링크를 클릭해라"라고 되어 있습니다. FLUSH PRIVILEGES 한 줄이면 됩니다. 운영 중인 DB를 계정 하나 만들자고 내렸다 올릴 일이 아니죠.

③ phpMyAdmin을 웹 루트에

그것도 두 대 모두에 깔았습니다. 웹서버에서도 DB를 보려고요. 관리 도구를 공개 경로에 두는 건 지금은 하지 않습니다. 접근 IP를 제한하거나, 터널을 통해서만 붙게 합니다.

지우지 않고 추기를 달았습니다

처음엔 지울까 했습니다. 부끄럽기도 하고, 검색해서 들어온 사람이 그대로 따라 하면 사고가 나니까요.

그런데 지우면 두 가지가 같이 사라집니다. 웹과 DB를 나눈다는 판단, 그리고 17년 전에 제가 무엇을 알고 무엇을 놓쳤는지의 기록.

그래서 본문은 그대로 두고 맨 아래에 붙였습니다.

[2026년 추기] 판단은 유효하지만 방법은 바뀌었습니다

이 글은 2009년에 쓴 글입니다. 웹서버와 DB서버를 분리한다는 판단 자체는
지금도 유효합니다. 다만 아래 방법들은 그때 기준이고, 지금 그대로 따라 하시면 안 됩니다.

(계정 생성 · 권한 · 반영 · phpMyAdmin 위치 · DB 서버의 Apache — 다섯 가지 정리)

17년 사이에 바뀐 건 방법이지 방향이 아닙니다.

👉 [MySQL] WEB Server와 DB 서버 분리해서 운영하기

남은 생각

옛 글을 훑다 보면 틀린 걸 찾는 게 목적이 아니라는 걸 알게 됩니다.

지금의 저는 저런 계정을 안 만듭니다. 그런데 그건 제가 더 똑똑해져서가 아니라, 그 사이에 사고를 몇 번 보고 겪었고, 그동안 업계의 기준이 올라갔기 때문입니다. 2009년의 저에게 "최소 권한 원칙"을 말해줬으면 "알아요"라고 답했을 겁니다. 실제로 알고 있었으니까요.

아는 것과 그 순간에 그렇게 하는 것은 다릅니다. 그리고 그 간격을 메우는 건 지식이 아니라 기준과 절차였습니다. 지금은 점검이 있고, 담당자가 있고, 안 지키면 통과가 안 됩니다. 17년 전에는 그게 없었고요.

그래서 요즘은 후배들에게 "이건 이렇게 하는 겁니다" 대신 "이렇게 안 하면 나중에 이런 일이 생깁니다"로 말하려고 합니다. 저부터가 원칙을 몰라서 어긴 게 아니었으니까요.

그리고 제가 지금 놓치고 있는 게 무엇인지는 17년 뒤에나 알게 될 것이라는 것도요.

다음 편에는

  • 201번부터 400번까지 훑었습니다. 죽은 링크가 한 편도 없어서 좀 놀랐습니다
  • 유입 데이터 — 제 블로그에 사람들이 뭘 찾아서 들어오는지, 예상과 아주 달랐습니다

읽어 주셔서 감사합니다.

Sort:  

아는 것을 실천하는 것도 큰 힘이죠~!

[booming-kr-auto]
보팅 완료했습니다 🙌

  • 여러분이 작성한 댓글: @talkit/918nzn
  • 여러분이 보팅한 수치: 50.00% / rshares=157,134,657,929
  • @support-kr이 여러분의 댓글에 드리는 보팅: 총 446,897.17SP 중 13.34%
    IMG_9947.jpeg
  • 여러분의 임대와 보팅이 kr 커뮤니티를 활성화 하는데 큰 힘이 됩니다

지금은 저렇게 안하지만, ^^ 그 당시에 잘 못햇다는 반성입니다. ㅎㅎㅎ
요즘은 저렇게 안합니다.

한수 배우고 갑니다.

[booming-kr-auto]
보팅 완료했습니다 🙌

  • 여러분이 작성한 댓글: @talkit/918nzn
  • 여러분이 보팅한 수치: 30.00% / rshares=123,907,487,416
  • @support-kr이 여러분의 댓글에 드리는 보팅: 총 446,897.17SP 중 11.04%
    IMG_9947.jpeg
  • 여러분의 임대와 보팅이 kr 커뮤니티를 활성화 하는데 큰 힘이 됩니다

감사합니다.
저도 분석 하면서 AI에게 한수 배웠습니다.

Upvoted! Thank you for supporting witness @jswit.