turin.blog
← 목록으로

개인 블로그에 관리자 페이지를 만들 때 조심할 점

·2분 읽기

개인 블로그를 직접 만들다 보면 관리자 페이지도 만들고 싶어집니다. 마크다운 파일을 직접 수정해서 배포하는 방식도 좋지만, 웹에서 바로 글을 쓰고 발행할 수 있으면 훨씬 편합니다.

하지만 관리자 페이지는 편한 만큼 조심해야 합니다. 공개 블로그에 /admin 같은 경로를 만들면 누구나 그 주소를 시도해볼 수 있기 때문입니다.

1. 관리자 페이지는 반드시 보호하기

가장 기본은 로그인입니다. 개인 블로그라면 복잡한 회원 시스템까지는 필요 없을 수 있지만, 최소한 비밀번호 검증은 있어야 합니다.

예를 들어 로그인 API는 이런 식으로 동작할 수 있습니다.

if (password !== process.env.ADMIN_PASSWORD) {
  return Response.json({ error: "invalid password" }, { status: 401 });
}

중요한 점은 비밀번호를 코드에 직접 쓰지 않는 것입니다. 비밀번호는 .env 같은 환경변수로 관리해야 합니다.

ADMIN_PASSWORD=아주_긴_관리자_비밀번호

2. 관리자 페이지는 검색 결과에 나오면 안 됨

관리자 페이지는 검색 엔진에 노출될 필요가 없습니다. Next.js라면 metadata에서 robots를 설정할 수 있습니다.

export const metadata = {
  robots: {
    index: false,
    follow: false,
  },
};

또는 robots.txt에서 /admin 경로를 막을 수도 있습니다.

User-agent: *
Disallow: /admin

물론 이것만으로 보안이 되는 것은 아닙니다. 검색 엔진에 안 보이게 하는 것과 실제 접근을 막는 것은 다른 문제입니다.

3. API도 따로 보호해야 함

관리자 화면만 막고 API를 열어두면 의미가 없습니다. 글 작성 API, 이미지 업로드 API, 삭제 API도 모두 인증을 확인해야 합니다.

예를 들어 /api/posts가 글을 생성한다면 요청을 처리하기 전에 세션이나 쿠키를 검사해야 합니다.

const session = await getSession();

if (!session?.isAdmin) {
  return Response.json({ error: "unauthorized" }, { status: 401 });
}

프론트엔드에서 버튼을 숨기는 것만으로는 부족합니다. 개발자 도구나 curl로 API를 직접 호출할 수 있기 때문입니다.

4. 비밀번호는 길고 예측 어렵게

개인 프로젝트라고 해서 비밀번호를 너무 단순하게 만들면 위험합니다. 특히 /admin처럼 예측 가능한 경로라면 더 그렇습니다.

좋은 비밀번호는 다음 조건을 만족하는 것이 좋습니다.

  • 충분히 길다
  • 이름이나 도메인과 관련이 없다
  • 다른 서비스에서 쓰는 비밀번호와 다르다
  • 가능하면 주기적으로 바꾼다

더 안전하게 하려면 로그인 시도 횟수 제한도 추가할 수 있습니다.

5. 로그를 확인하기

관리자 페이지를 만들었다면 이상한 요청이 들어오는지 로그를 봐야 합니다.

Nginx를 사용한다면 다음 로그를 확인할 수 있습니다.

sudo tail -f /var/log/nginx/access.log

/admin, /wp-admin, /phpmyadmin 같은 경로로 이상한 요청이 많이 들어온다면 봇이 스캔하고 있을 가능성이 높습니다.

마무리 체크리스트

개인 블로그 관리자 페이지를 만들 때는 최소한 이것들을 확인합니다.

  • 관리자 페이지 로그인 적용
  • 비밀번호를 환경변수로 관리
  • /admin noindex 설정
  • 글 작성/수정/삭제 API 인증 확인
  • 업로드 API 인증 확인
  • 로그에서 이상 요청 확인

관리자 페이지는 블로그 운영을 편하게 만들어주지만, 공개 인터넷에 노출되는 기능이라는 점을 잊으면 안 됩니다. 작은 개인 프로젝트라도 기본적인 보호 장치는 꼭 챙기는 것이 좋습니다.