15강예상 3분입문
[요약] Part 3. 서비스 런칭 전 반드시 알아야 할 방패 (보안과 운영)
Part 3. 서비스 런칭 전 반드시 알아야 할 방패 (보안과 운영)의 핵심 내용을 정리하고 복습하는 요약 회차입니다.
- 학습 목표: 서비스 런칭 전 필수적인 보안 지식과 운영 노하우 장착
- AI의 취약점 보완: 기능 구현에 치중된 AI 코드를 예외 상황과 악의적 공격으로부터 방어
가장 완벽한 공격 방어는 '불신'입니다
- 보안 제1원칙: "클라이언트의 모든 데이터를 절대 믿지 마라"
- 낙관주의 타파: 입력값을 그대로 믿는 AI의 코드 패턴에 꼼꼼한 검증망 추가 필수
- 방어 기법 복습: 발생 가능한 공격에 따른 핵심 대응책 상기
보안 취약점과 방어책
악성 스크립트를 게시판에 업로드 (XSS)
→사용자 입력값 HTML 이스케이프 및 검증
데이터베이스 구조를 조작하는 쿼리 입력 (SQL Injection)
→ORM 사용 및 Prepared Statement 적용
권한 없는 사용자의 타인 정보 삭제 시도
→요청자의 토큰 검증 및 자원 소유권 확인
초당 수만 번의 비정상적인 로그인 시도
→API Rate Limiting(요청 제한) 적용
비밀번호와 악성 파일 방어하기
- 비밀번호 보호: DB 해킹 대비 강력한 단방향 해싱(bcrypt 등) 필수 적용
- 업로드 검증: 이미지 위장 스크립트 실행 방지를 위해 확장자 및 실제 MIME 타입 이중 검사
눈을 감고도 서버를 관리하는 법
- 서버의 단서: 런칭 후 발생하는 에러와 문제 상황을 파악하는 유일한 수단은 로그(Log)
- 구조화 로그 (Structured Log): 분석 도구에서 빠르게 파악 가능한 JSON 형태의 로그 작성 습관화
구조화 로그의 위력
- 검색 효율성: 수십만 줄 로그 중 `user_id` 등 특정 조건 에러를 순식간에 검색 가능
// 일반 텍스트 로그 (나쁜 예)
log.Printf("User %s login failed due to bad password", userID)
// 구조화 로그 (좋은 예)
logger.Error("User login failed",
slog.String("user_id", userID),
slog.String("event", "login_attempt"),
slog.String("reason", "invalid_password"),
slog.String("ip_address", clientIP),
)- 테스트 코드: 작성한 방어 로직 검증을 위해 AI에게 엣지 케이스 테스트 코드 작성 지시 및 점검
코스를 마치며
- 역할의 진화: 단순 코드 복사자가 아닌 진정한 백엔드 시스템 설계자로 거듭남
- 핵심 역량 요약:
- AI 코드 흐름을 통제하는 문법 지식
- 복잡성을 낮추는 실용적 아키텍처 설계
- 서비스 생존을 보장하는 보안과 운영 체계
- 다음 단계: 배운 원칙들을 실제 개인 프로젝트에 적극적으로 적용해 볼 것
개념 퀴즈
퀴즈 답을 맞춰야 학습 완료가 됩니다.사용자의 입력값을 그대로 믿지 않고 보안을 유지하기 위한 조치로 올바르지 않은 것은 무엇인가요?
3줄 요약
- 1사용자가 전송하는 모든 데이터는 언제나 악의적일 수 있다는 전제 하에 철저히 검증하세요.
- 2SQL Injection, XSS, 무차별 대입 공격 등 흔한 공격 벡터를 방어하는 것은 서비스의 기본 책임입니다.
- 3구조화 로그를 도입하여 에러 발생 시 신속하게 원인을 추적하고, 테스트 코드로 안전성을 증명하세요.