호스팅(Hosting)
- 서버 컴퓨터의 전체 또는 일정 공간을 이용할 수 있도록 임대해 주는 서비스
IP 기반 호스팅(IP-based Hosting)
- 각 도메인이 고유의 IP 주소를 가지는 방식
- 동일한 서버에 여러 IP 주소를 할당하고, 각 IP 주소에 특정 도메인을 연결하여 웹 사이트를 제공
이름 기반 호스팅(Name-based Hosting)
- 하나의 IP 주소를 여러 도메인에서 공유하는 방식
- 웹 브라우저가 서버에 연결될 때, 도메인 이름(Host 헤더)을 전달하고, 서버는 이 도메인 이름을 기반으로 어떤 웹사이트를 제공할지 결정
IP 기반 호스팅과 이름 기반 호스팅 비교
구분 | IP 주소 기반 호스팅 | 이름 기반 호스팅 |
IP 주소 | 각 도메인마다 고유 IP 주소 필요 | 하나의 IP로 여러 도메인 사용 가능 |
SSL 인증서 | 개별 도메인마다 SSL 적용 용이 | SNI 기술 필요 (대부분 지원) |
자원 소모 | 많은 IP 필요 | IP 자원을 절약 가능 |
설정 복잡성 | 도메인마다 설정 필요 | 상대적으로 간단함 |
호환성 | 모든 브라우저에서 문제 없음 | 구형 브라우저에서 SSL 문제 발생 가능 |
- 현대의 웹 호스팅 환경에서는 이름 기반 호스팅이 더 일반적
- IP 자원을 절약할 수 있고, SSL 인증서도 SNI를 통해 쉽게 처리 가능
SNI(Server Name Indication)은 컴퓨터 네트워크 프로토콜인 TLS의 확장으로, 핸드셰이킹 과정 초기에 클라이언트가 어느 호스트명에 접속하려는지 서버에 알리는 역할을 한다.
SSL/TLS
- SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는 네트워크 통신을 보호하는 암호화 프로토콜
- 인터넷에서 데이터를 전송할 때 개인 정보 보호와 데이터의 무결성을 보장하기 위해 설계
- SSL은 원래의 보안 프로토콜이며, 이후 TLS가 이를 대체하여 현재 더 안전하고 업데이트된 표준으로 사용
SSL/TLS 특징
- 암호화: 클라이언트와 서버 간의 데이터가 전송 중에 제3자에 의해 읽히지 않도록 데이터를 암호화
- 인증: 서버 또는 클라이언트의 신원을 확인하여 신뢰할 수 있는 대상과 통신하고 있음을 보장
- 데이터 무결성: 데이터가 전송 중에 변경되거나 위조되지 않았음을 보장
HTTPS
- HTTPS(HyperText Transfer Protocol Secure)는 HTTP(웹 통신을 위한 프로토콜) 위에 SSL/TLS를 추가한 버전
- 브라우저와 웹 서버 간의 모든 통신이 암호화되어 제3자가 중간에서 데이터를 가로채거나 조작할 수 없도록 보호
- HTTPS는 HTTP 프로토콜을 통해 웹사이트와 데이터를 주고받을 때 SSL/TLS를 사용하여 보안을 강화한 통신 방식
- 요약하자면, SSL/TLS는 HTTPS의 핵심 보안 기술이며, HTTPS는 이를 통해 웹 통신의 기밀성과 무결성을 보장
pg_hba.conf
- pg_hba.conf 파일은 PostgreSQL의 클라이언트 인증 방식을 설정하는 파일
- 서버에 접속할 수 있는 호스트, 사용자, 데이터베이스, 그리고 인증 방법을 정의
- "HBA"는 "Host-Based Authentication"의 약자로, 클라이언트가 어떻게 인증될지에 대한 정책을 설정하는 파일
# TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
postgresql.conf
- PostgreSQL 서버의 동작을 제어하는 다양한 설정을 포함
- 성능, 네트워크, 로깅, 메모리 관리 등과 관련된 항목들을 조정이 가능
네트워크 설정
- listen_addresses: PostgreSQL 서버가 수신할 IP 주소를 설정
- 기본적으로 localhost만 설정되어 있으며, 외부에서 접근 가능하게 하려면 *로 설정
listen_addresses = '*'
port = 5432
shared_buffers = 128MB
- work_mem: 쿼리 실행 중 정렬이나 해시 작업에 사용할 메모리 양을 설정
work_mem = 4MB
로그 관리
- log_destination: 로그 출력 방법을 설정
- 기본적으로 stderr를 사용하지만, csvlog 등 다양한 형식으로 로그를 출력
log_destination = 'stderr'
- logging_collector: 로그 수집기를 활성화하여 로그를 파일로 저장할지 여부를 결정
logging_collector = on
- log_directory: 로그 파일이 저장될 디렉터리를 지정
log_directory = 'log'
성능 최적화
- effective_cache_size: PostgreSQL이 사용할 수 있는 커널 파일 시스템 캐시 크기를 설정
- 시스템 메모리의 약 50~75%로 설정
effective_cache_size = 4GB
- maintenance_work_mem: VACUUM과 같은 유지보수 작업에 사용할 메모리 양을 설정
maintenance_work_mem = 64MB
기타 중요 설정
max_connections: 동시에 접속할 수 있는 최대 클라이언트 수를 설정
max_connections = 100
timezone: 서버의 시간대를 설정
timezone = 'UTC'