Post

웹 개발 시 유의할 점

웹 개발 시 유의할 점

2024-07-23 오전

🛡️ 웹 개발 시 유의할 점 정리

0-1. 암호화 🔒

  • 인터넷망은 퍼블릭한 공간입니다. 누군가 HTTP 요청을 볼 수 있다는 전제가 필요합니다.
  • HTTPS 통신은 선택이 아닌 필수입니다.
    • 암호화 작업에는 연산에 따른 비용이 수반됩니다.
    • DB의 테이블에 개인정보는 암호화해서 컬럼에 삽입해야 합니다.
  • 암호화의 핵심은 갈취당하더라도 사용할 수 없도록 하는 데 있습니다.
  • 민감한 정보는 암호화하도록 법제화되어 있습니다.
  • 암호화 솔루션 자체도 인가받은 제품을 사용해야 합니다.

0-2. 성능 ⚡

  • 온전히 작동한다면 빠르면 빠를수록 좋습니다.
  • 사용자 HTTP 요청 응답 시간을 줄이는 것이 중요합니다.
    • 기능 요건에 맞춰 적절한 비동기 처리를 고려하세요.
    • 쓰기보다 읽기가 많은 데이터라면 캐싱을 적극 고려하세요.
      • 요청 - 응답 시간을 줄이기 위해 캐시 레이어 적용을 고려 (예: Redis 등)
    • 응답 시간을 줄이기 위해 비동기 처리를 적절히 활용하세요.

0-3. 안정성(신뢰성) 🛠️

  • 아무리 빠르더라도 제품에 하자가 있다면 사용 불가합니다.
  • 일반적으로 속도보다 우선하는 가치입니다.
    • 트랜잭션 처리를 정확하게 구현하세요.
    • 대부분 HTTP 요청의 첫 집인점으로 Nginx를 사용합니다. DoS 공격을 방어할 방법이 필요합니다.
      • 요청 비율 제한 등 최소한의 장치를 마련하세요.
    • 부하 테스트: 1이 아닌 N개의 클라이언트 요청을 고려하세요.
      • 적절한 응답 시간과 데이터 신뢰성을 확보하세요.
      • JMeter 등의 도구를 활용해 부하 테스트를 수행하세요.
  • 서버 포지션을 목표로 한다면 부하 테스트는 선택이 아닌 필수입니다.

0-4. 로깅 📝

  • 서버가 작동하면서 발생하는 주요 이슈를 기록합니다.
  • 단순 콘솔 출력보다는 주요 로거(라이브러리)를 사용하세요.
  • 서버 운영 시 발생한 이슈 추적의 시작점이 됩니다.
  • 로깅 정책 수립이 필수입니다.

1. 클라이언트 데이터 vs 서버 데이터 🎮

게임에서의 예시: 치트 프로그램을 통해 메모리 값을 변경하여 좋은 아이템을 획득하는 경우가 있습니다. 장비가 상대적으로 중요한 온라인 게임에서는 메모리 값을 서버에서 관리해야 합니다.

2. 기술 스택 선택 🏗️

좋은 웹 애플리케이션이 가져야 할 것들 주요 3가지 기준 포인트: 성능, 안정(신뢰)성, 보안

좋은 장비라고 해서 좋은 사진이 찍히는 것은 아닙니다. 기술 스택이 최신의 것이고 좋은 것이라고 해서 좋은 애플리케이션이 개발되는 것은 아닙니다.

3. HTTP에 대한 배경지식 🌐

  • Hyper Text Transfer Protocol (OSI 7 Layer의 맨 상위 응용 계층)
  • Stateless 프로토콜입니다.
  • HTTP 서버는 불특정 다수의 요청을 전제합니다.

4. 보안 🔐

  • 사용자 인증, 인가
    • URL 주소를 알더라도 사용자는 허가를 받고 진입해야 합니다.
  • 서버 중심의 로직 처리
    • 네트워크, 웹 브라우저에서 관리되는 HTTP 요청 데이터의 변조 가능성이 있습니다.
  • 사용자 요청의 유효성 검증
    • 요청 필드 값과 서버와의 대조 검증
    • 요청 값의 길이, 코드 유효성 체크 등이 오히려 성능 향상의 여지가 있습니다. (로직의 제일 마지막 단계에서 오류 시 손해가 큽니다)
    • JSP 파일 등의 업로드 제한이 필요합니다.
  • SQL Injection, XSS 방어
    • SQL 예약어들을 쿼리문에 넣어서 오작동 및 오버 서치를 유도할 수 있습니다.
    • `, ‘, “ 등을 섞어서 쿼리 결과의 누수를 유발할 수 있습니다.

예시:

  • Cross-Site Scripting 공격 게시글 본문에 HTML 문서가 포함된다면? 거기에 Script 태그가 담겨 있다면? 파싱 중에 스크립트가 작동될 것… 쿠키 등의 정보를 JSON으로 요청할 수 있습니다.

  • 프레임워크(생태계)마다 활용되는 제품들이 존재합니다.
  • 만약 없다면, 스크립트 실행이 가능한 구문들을 직접 필터링해야 합니다.

추가 자료 📚

암호화

  • SSL/TLS: 웹에서 데이터 암호화를 위한 표준 프로토콜입니다.
  • PGP: 이메일 보안을 위한 암호화 방법입니다.

성능

  • Redis: 인메모리 데이터 구조 저장소로 캐싱에 사용됩니다.
  • Nginx: 고성능 HTTP 서버이자 리버스 프록시 서버입니다.

안정성

  • JMeter: 부하 테스트 및 성능 테스트 도구입니다.
  • New Relic: 애플리케이션 성능 모니터링 도구입니다.

로깅

  • Log4j: 자바 기반 로깅 유틸리티입니다.
  • ELK Stack (Elasticsearch, Logstash, Kibana): 로그 수집, 저장, 시각화를 위한 도구입니다.

보안

  • OWASP: 웹 애플리케이션 보안을 위한 표준 가이드라인을 제공합니다.
  • Burp Suite: 웹 애플리케이션 보안 테스트 도구입니다.

이 모범 사례들을 따라 좋은 웹 애플리케이션을 개발하세요! 🚀

This post is licensed under CC BY 4.0 by the author.