Ubuntu 20.04에서 Ruby on Rails 애플리케이션과 함께 PostgreSQL을 사용하는 방법
소개
PostgreSQL 데이터베이스를 사용할 때 보다 강력하고 유연한 선택이 될 것입니다. PostgreSQL을 사용하도록 Ruby on Rails 설정을 구성하려면 추가 단계를 수행해야 합니다.
이 튜토리얼에서는 Ubuntu 20.04 서버의 PostgreSQL 데이터베이스에 연결된 Ruby on Rails 개발 환경을 설정합니다. PostgreSQL을 설치 및 구성한 다음 PostgreSQL을 데이터베이스 서버로 사용하는 Rails 애플리케이션을 생성하여 설정을 테스트합니다.
전제 조건
이 자습서에는 다음이 필요합니다.
- Ubuntu 20.04용 초기 서버 설정 가이드에 따라 설정된 Ubuntu 20.04 서버에는 sudo 권한과 방화벽이 있는 루트가 아닌 사용자가 포함됩니다.\n
- Ubuntu 20.04 서버에 설치된 Ruby on Rails 개발 환경. 이를 설정하려면 Rails를 따르십시오.\n
1단계 – PostgreSQL 설치
웹 애플리케이션용 데이터베이스로 PostgreSQL을 사용하는 Ruby on Rails를 구성하려면 먼저 서버에 데이터베이스를 설치합니다.
sudo
권한을 사용하여 APT 패키지 인덱스를 업데이트하여 리포지토리가 최신 상태인지 확인하십시오.
- sudo apt update
다음으로 PostgreSQL과 해당 개발 라이브러리를 설치합니다.
- sudo apt install postgresql postgresql-contrib libpq-dev
이전 명령에서 postgresql
패키지는 기본 PostgreSQL 프로그램을 포함하고 postgresql-contrib
는 기능을 확장하는 여러 PostgreSQL 기능을 추가합니다. libpq-dev
는 클라이언트가 백엔드 서버에서 쿼리를 보내고 응답을 받을 수 있도록 하는 PostgreSQL 라이브러리로, 이를 통해 애플리케이션이 데이터베이스와 통신할 수 있습니다.
PostgreSQL과 해당 종속성이 설치되면 다음 단계는 Rails 애플리케이션이 나중에 데이터베이스를 생성하는 데 사용할 역할을 생성하는 것입니다.
2단계 – 새 데이터베이스 역할 생성
PostgreSQL에서는 역할을 사용하여 Linux에서 사용자가 할 수 있는 것과 같은 방식으로 권한과 인증을 구성할 수 있습니다. 이 단계에서는 Linux 사용자 이름에 대해 PostgreSQL 시스템 내에서 데이터베이스를 생성하고 구성할 수 있는 새로운 슈퍼 사용자 역할을 생성합니다.
PostgreSQL 슈퍼 사용자 역할을 생성하려면 다음 명령을 실행하여 강조 표시된 단어를 Ubuntu 20.04 사용자 이름으로 대체합니다.
- sudo -u postgres createuser -s sammy -P
-P
플래그를 지정했으므로 새 역할에 대한 암호를 입력하라는 메시지가 표시됩니다. 원하는 암호를 입력하고 나중에 구성 파일에서 사용할 수 있도록 기록해 두십시오.
createuser
를 사용하여 sammy
(또는 원하는 사용자 이름)라는 역할을 만듭니다. -s
플래그는 이 사용자에게 슈퍼 유저 권한을 부여하고, sudo -u
는 자동으로 생성된 postgres
계정에서 명령을 실행할 수 있도록 합니다. PostgreSQL 설치 시.
참고: Ubuntu에서 PostgreSQL의 인증 모드는 ident
로 시작하므로 기본적으로 Ubuntu 사용자는 동일한 이름의 역할로만 PostgreSQL에서 작업할 수 있습니다. 자세한 내용은 인증에 대한 PostgreSQL 공식 문서를 확인하세요.
-P
플래그를 사용하지 않았고 역할을 생성한 후 암호를 설정하려면 다음 명령을 사용하여 PostgreSQL 콘솔에 들어갑니다.
- sudo -u postgres psql
PostgreSQL 콘솔에 대한 프롬프트와 함께 다음 출력이 표시됩니다.
Outputpsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))
Type "help" for help.
postgres=#
PostgreSQL 콘솔은 postgres=#
프롬프트로 표시됩니다. PostgreSQL 프롬프트에서 다음 명령을 입력하여 새 데이터베이스 역할의 암호를 설정하고 강조 표시된 이름을 생성한 이름으로 바꿉니다.
- \password sammy
PostgreSQL은 암호를 묻는 메시지를 표시합니다. 프롬프트에 원하는 암호를 입력한 다음 확인하십시오.
이제 다음 명령을 입력하여 PostgreSQL 콘솔을 종료합니다.
- \q
이제 일반적인 메시지가 다시 나타납니다.
이 단계에서는 슈퍼 사용자 권한이 있는 새 PostgreSQL 역할을 생성했습니다. 이제 이 역할을 사용하여 데이터베이스를 생성하는 새 Rails 앱을 생성할 준비가 되었습니다.
3단계 – 새 Rails 애플리케이션 만들기
PostgreSQL에 대해 구성된 역할을 사용하여 이제 PostgreSQL을 데이터베이스로 사용하도록 설정된 새 Rails 애플리케이션을 생성할 수 있습니다.
먼저 홈 디렉토리로 이동합니다.
- cd ~
이 디렉토리에 새 Rails 애플리케이션을 생성하고 appname
을 원하는 앱 이름으로 바꿉니다.
- rails new appname -d=postgresql
-d=postgresql
옵션은 PostgreSQL을 데이터베이스로 설정합니다.
이 명령을 실행하면 appname
라는 이름의 새 폴더가 기본 Rails 애플리케이션의 모든 요소를 포함하는 홈 디렉토리에 나타납니다.
다음으로 애플리케이션의 디렉토리로 이동합니다.
- cd appname
이제 새 Rails 애플리케이션을 생성하고 프로젝트의 루트 디렉토리로 이동했으므로 Rails 앱 내에서 PostgreSQL 데이터베이스를 구성하고 생성할 수 있습니다.
4단계 – 데이터베이스 구성 및 생성
애플리케이션을 위한 development
및 test
데이터베이스를 생성할 때 Rails는 Ubuntu 사용자 이름으로 생성한 PostgreSQL 역할을 사용합니다. Rails가 이러한 데이터베이스를 생성하도록 하려면 프로젝트의 데이터베이스 구성 파일을 변경해야 합니다. 그런 다음 데이터베이스를 생성합니다.
Rails 애플리케이션에 대한 구성 변경 중 하나는 마지막 단계에서 만든 PostgreSQL 역할에 대한 암호를 추가하는 것입니다. 암호와 같은 중요한 정보를 안전하게 유지하려면 암호를 구성 파일에 직접 쓰는 것보다 환경 변수에 저장하는 것이 좋습니다.
로그인 시 환경 변수에 암호를 저장하려면 다음 명령을 실행하여 APPNAME
를 앱 이름으로 바꾸고 PostgreSQL_Role_Password를 바꿉니다.
를 마지막 단계에서 생성한 비밀번호로 변경합니다.
- echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bashrc
이 명령은 로그인 시 환경 변수가 설정되도록 export
명령을 ~/.bashrc
파일에 작성합니다.
현재 세션에 대한 변수를 내보내려면 source
명령을 사용하십시오.
- source ~/.bashrc
이제 환경에 암호를 저장했으므로 구성 파일을 변경할 수 있습니다.
원하는 텍스트 편집기에서 애플리케이션의 데이터베이스 구성 파일을 엽니다. 이 자습서에서는 nano
를 사용합니다.
- nano config/database.yml
default
섹션에서 pool: <%= ENV.fetch(\RAILS_MAX_THREADS\) { 5 } %>
라고 표시된 줄을 찾아 다음 강조 표시된 줄을 추가합니다. 자격 증명 및 생성한 환경 변수에 다음과 같아야 합니다.
...
default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see Rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: sammy
password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>
development:
<<: *default
database: appname_development
...
이 업데이트는 Rails 애플리케이션이 올바른 역할과 암호로 데이터베이스를 실행하도록 합니다. CTRL
+ x
, Y
를 누른 다음 ENTER
를 눌러 저장하고 종료합니다.
Rails에서 데이터베이스 구성에 대한 자세한 내용은 Rails 설명서를 참조하십시오.
이제 config/database.yml
을 변경했으므로 rails
명령을 사용하여 애플리케이션의 데이터베이스를 생성합니다.
- rails db:create
Rails가 데이터베이스를 생성하면 다음과 같은 결과가 표시됩니다.
OutputCreated database 'appname_development'
Created database 'appname_test'
출력에서 알 수 있듯이 이 명령은 PostgreSQL 서버에 development
및 test
데이터베이스를 생성했습니다.
이제 Rails 앱에 PostgreSQL 데이터베이스가 연결되었습니다. 애플리케이션이 작동하는지 확인하기 위해 이제 구성을 테스트합니다.
5단계 – 구성 테스트
애플리케이션이 PostgreSQL 데이터베이스를 사용할 수 있는지 테스트하려면 웹 애플리케이션을 실행하여 브라우저에 표시되도록 합니다.
rails server
명령을 사용하여 Rails 앱인 Puma의 내장 웹 서버에서 웹 애플리케이션을 실행합니다.
- rails server --binding=127.0.0.1
--binding
은 애플리케이션을 지정된 IP에 바인딩합니다. 기본적으로 이 플래그는 Rails를 0.0.0.0
에 바인딩합니다. 즉, Rails는 모든 인터페이스를 수신하므로 127.0.0.1
을 사용하여 다음을 지정하는 것이 더 안전합니다. <코드>로컬 호스트. 기본적으로 애플리케이션은 포트 3000
에서 수신 대기합니다.
Rails 앱이 실행되면 명령 프롬프트가 사라지고 다음 출력으로 대체됩니다.
Output=> Booting Puma
=> Rails 7.0.4 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma Version 5.6.5 (ruby 3.1.2-p20) ("Birdie's Version")
* Min threads: 5
* Max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
Use Ctrl-C to stop
애플리케이션이 실행 중인지 테스트하려면 서버에서 새 터미널 창을 열고 curl
명령을 사용하여 127.0.0.1:3000
에 요청을 보냅니다.
- curl http://127.0.0.1:3000
다음과 같이 끝나는 많은 HTML 출력을 받게 됩니다.
Output...
<strong>Rails version:</strong> 7.0.4<br />
<strong>Ruby version:</strong> 3.1.2 (x86_64-linux)
</p>
</section>
</div>
</body>
</html>
Rails 애플리케이션이 원격 서버에 있고 웹 브라우저를 통해 액세스하려는 경우 서버의 공용 IP 주소에 바인딩할 수 있습니다. 먼저 방화벽에서 포트 3000
을 엽니다.
- sudo ufw allow 3000
다음으로 서버의 공용 IP 주소를 찾습니다. 다음 curl
명령을 실행하여 이 작업을 수행할 수 있습니다.
- curl http://icanhazip.com
이렇게 하면 공용 IP 주소가 반환됩니다. rails server
명령과 함께 사용하여 server_public_IP
를 서버의 공용 IP로 대체합니다.
- rails server --binding=server_public_IP
이제 다음을 방문하여 포트 3000
에서 서버의 공용 IP 주소를 통해 로컬 웹 브라우저에서 Rails 애플리케이션에 액세스할 수 있습니다.
http://server_public_IP:3000
이 URL에서 Ruby on Rails 페이지를 찾을 수 있습니다.
홈 페이지에 액세스할 수 있으면 애플리케이션이 올바르게 구성되고 PostgreSQL 데이터베이스에 연결된 것입니다.
구성을 테스트한 후 3000
포트를 닫으려면 다음 명령을 사용하십시오.
- sudo ufw delete allow 3000
결론
이 자습서에서는 PostgreSQL을 Ubuntu 20.04 서버의 데이터베이스로 사용하도록 구성된 Ruby on Rails 웹 애플리케이션을 만들었습니다. Ruby 프로그래밍 언어에 대해 자세히 알아보려면 Ruby로 코딩하는 방법 시리즈를 확인하십시오.
애플리케이션용 데이터베이스 선택에 대한 자세한 내용은 관리형 데이터베이스 제품의 차이점과 사용 사례에 대한 자습서를 확인하십시오.