[Daily Poll] 작업일지(2) - 서버 인프라 설계 : 데이터베이스

Daily Poll 의 요구사항을 세세하게 다 적지 않아도, 이 프로젝트의 시작이 명확한 Pain Point를 해결하고자 하는 것이기 때문에, Overall Server Infra 정도는 생각해 볼 수 있을 것 같다.

- 유저와 투표를 관리하고 투표를 처리할 수 있는 API Endpoint 제공 및 데이터 저장을 위한 데이터 베이스 구축.

오라클 클라우드에서의 전형적인 기본 구성은 다음 글에서 잘 보여준다.

너무나 당연하게도 데이터베이스 서버는 외부에서 직접 접근할 수 없어야 하고, Bastion과 보안 규칙들로 서버를 보호해야 한다.

제대로 된 프로젝트를 진행하려고 했다면 API 서버와 데이터베이스 서버의 인스턴스를 별도로 분리하고 4개의 무료 코어를 반반씩 나눠서 별도로 구성했어야 하지만...

취미에 가까운 프로젝트이니 저 내용은 머리로 이해만 하고, 실제는 한 서버에 모두 때려 넣었다.
그래도 구성 자체는 Docker 를 통해 분리를 하려고 한다.

먼저 데이터베이스는 PostgreSQL 을 사용하려고 한다. 왜 PostgreSQL 이냐고 묻는다면, 개인 프로젝트라면 뭘 선택해도 상관 없다고 본다. 이미 상용 서비스에서 검증이 끝난 많은 데이터베이스들이 있기에, 그 중에서 익숙한 것을 고르면 된다. 하지만 난 익숙한 데이터베이스가 없으므로, 그냥 마음이 끌리는 데로 선택하였다. 그 옛날 웹 서비스라고 하면 APM(Apache-PHP-MySQL)이 떠오르던 시절부터 MySQL과 함께 데이터베이스 영역을 지켜왔기도 하고, 오라클이 MySQL을 가져간 이후부터 MySQL은 탈락. (근데 난 OCI 쓰는데...)

데이터베이스를 다룰 때 마다 학교 다닐 때 좀 더 열심히 공부할 껄 생각을 하게 된다.
데이터베이스 수업을 정말 대충 들었는데, 중간고사를 완전히 망치고 다음 수업에 들어갔을 때 수강 인원이 반으로 줄어든 것 보고 포기하지 않고 들었더니 B 학점이 나왔던... (난 기억나는 게 하나도 없는데)

다시 Daily Poll 이야기로 돌아와서 데이터베이스 서버를 별도로 분리하지는 않아도, 특정 인스턴스 환경에 종속되거나, 해당 인스턴스 시스템에 영향을 미치지 않도록 Docker 를 사용하기로 하였다. 인터넷 검색해보면 성능이 문제니... 이런 이야기가 있던데 솔직히 공감이 되진 않는다.
Docker 자체가 VM과는 다르게 Host의 자원을 직접적으로 사용하는 기술이니까.

마지막으로 Docker PostgreSQL 셋팅하면서 몇 가지 확인했던 점을 기록해 둔다.

1. Docker 에서 그냥 postgres 가져오면 latest 이미지를 가져오니, 과제 진행 시 일관성을 위해 고정된 버전으로 postgres:18.1 을 명시적으로 지정하여 가져왔다.

2. PostgreSQL 18 버전부터는 PGDATA 위치가 변경되었다. 참고해서 Docker 볼륨 설정이 문제가 없도록 하자. 검색해보면 여기에 대한 토론 스레드와 18 버전은 어느 경로를 사용하는 지 알 수 있다.

3. 전형적인 기본 구성이라면 데이터베이스 서버를 분리하고 Private Subnet에 두었으면 Public IP 할당이 되지 않는다. 그래서 Bastion을 통해 데이터베이스에 접근을 하도록 해야 할 것이다. 하지만 이 프로젝트에서는 그렇게 구성한 게 아니라서 좀 더 강화된 보안 규칙을 지정했다.
보안 규칙에서는 5432 포트에 접근할 수 있는 외부 IP를 명시적으로 지정해서 특정 PC에서만 접근이 가능하도록 하였다.
pg_hba.conf 에서는 host all + 비밀번호 인증이 기본적으로 설정되어 있던데, 일단 이건 그냥 두었다. 이걸 IP 단위로 block 시키게 되면 집의 IP 가 변경이 되면 매번 수정하기도 번거로우니까. 실제 서비스 시작하면 데이터베이스를 직접 접근해서 처리해야 하는 일이 많이 없을테니 이때는 postgres 계정은 기본으로 막고, 프로젝트 관련 DB 관리할 계정을 필요할 때만 풀어서 사용할 까 싶다. 이 설정은 PostgreSQL 재시작하지 않아도 다시 설정을 로딩할 수 있다고 하니.

오늘은 또 여기까지... 다음 번에는 또 잠깐 딴 길로 가서 Docker 확인한 것 기록에 남겨보고자 한다.





댓글

이 블로그의 인기 게시물

[게임개발 스토리] 장르/타입/조합 정보와 몇 가지 팁

[윈도우] 실행 중인 프로그램의 타이틀을 변경하는 유틸리티

Synergy 한글키 패치 공식 버전 적용 및 최종 정리