우분투 20.04에서 루비 온 레일 애플리케이션과 함께 PostgreSQL 사용하는 방법

소개

루비 온 레일즈 웹 프레임워크를 사용할 때, 기본적으로 응용 프로그램은 SQLite을 데이터베이스로 사용합니다. SQLite는 가벼우며 휴대용이며 사용하기 쉬운 관계형 데이터베이스로, 낮은 메모리 환경에서 특히 잘 작동하여 많은 경우에 잘 작동합니다. 그러나 더 신뢰할 수 있는 데이터 무결성과 프로그래밍적 확장성이 필요한 매우 복잡한 응용 프로그램의 경우, PostgreSQL 데이터베이스가 더 견고하고 유연한 선택이 될 것입니다. PostgreSQL을 사용하도록 루비 온 레일즈 설정을 추가 구성해야 할 것입니다.

이 튜토리얼에서는 Ubuntu 20.04 서버에 연결된 PostgreSQL 데이터베이스를 사용하는 루비 온 레일즈 개발 환경을 설정합니다. PostgreSQL을 설치하고 구성한 다음 PostgreSQL을 데이터베이스 서버로 사용하는 레일즈 응용 프로그램을 만들어서 설정을 테스트합니다.

전제 조건

이 튜토리얼에는 다음이 필요합니다:

  • Ubuntu 20.04 서버가 있어야 하며, 이는 Ubuntu 20.04 초기 서버 설정 가이드에 따라 설정되어 있어야 합니다. 비 루트 사용자가 sudo 권한을 가지고 방화벽이 설정되어 있어야 합니다.

  • Ubuntu 20.04 서버에 설치된 Ruby on Rails 개발 환경입니다. 이를 설정하려면 Ubuntu 20.04에서 rbenv로 Ruby on Rails 설치하는 방법을 따르십시오. 이 튜토리얼에서는 루비 버전 3.1.2 및 레일즈 버전 7.0.4를 사용합니다. 최신 버전에 대한 정보는 RubyRails의 공식 사이트를 참조하십시오.

단계 1 – PostgreSQL 설치

웹 애플리케이션을 위한 데이터베이스로 PostgreSQL을 사용하도록 Ruby on Rails를 구성하려면 먼저 데이터베이스를 서버에 설치해야 합니다.

sudo 권한을 사용하여 APT 패키지 인덱스를 업데이트하여 저장소가 최신 상태인지 확인합니다.

  1. sudo apt update

그런 다음 PostgreSQL 및 해당 개발 라이브러리를 설치합니다.

  1. sudo apt install postgresql postgresql-contrib libpq-dev

이전 명령에서 postgresql 패키지는 주요 PostgreSQL 프로그램을 보유하고 있으며, postgresql-contrib는 여러 PostgreSQL 기능을 추가하여 기능을 확장합니다. libpq-dev는 클라이언트가 백엔드 서버로 쿼리를 보내고 응답을 받을 수 있는 PostgreSQL 라이브러리로, 이를 통해 응용 프로그램이 데이터베이스와 통신할 수 있게 됩니다.

PostgreSQL 및 해당 종속성을 설치한 후 다음 단계는 레일즈 응용 프로그램이 나중에 데이터베이스를 생성하는 데 사용할 역할을 생성하는 것입니다.

단계 2 – 새 데이터베이스 역할 만들기

PostgreSQL에서 역할은 Linux에서 사용자와 마찬가지로 권한 및 인증을 구성하는 데 사용할 수 있습니다. 이 단계에서는 PostgreSQL 시스템 내에서 데이터베이스를 생성하고 구성할 수 있는 새로운 슈퍼 사용자 역할을 만들 것입니다.

PostgreSQL 슈퍼 사용자 역할을 만들려면 다음 명령을 실행하십시오. 강조된 단어를 Ubuntu 20.04 사용자 이름으로 바꿔 입력하십시오:

  1. sudo -u postgres createuser -s sammy -P

-P 플래그를 지정했으므로 새 역할에 대한 암호를 입력하라는 프롬프트가 나타납니다. 원하는 암호를 입력하고, 나중의 단계에서 구성 파일에서 사용할 수 있도록 기록하십시오.

당신은 createuser를 사용하여 sammy (또는 원하는 사용자 이름)이라는 역할을 만듭니다. -s 플래그는 이 사용자에게 슈퍼 사용자 권한을 부여하고, sudo -u는 PostgreSQL을 설치할 때 자동으로 생성되는 postgres 계정에서 명령을 실행할 수 있도록 합니다.

참고: Ubuntu에서 PostgreSQL의 인증 모드는 기본적으로 ident로 시작되므로 기본적으로 Ubuntu 사용자는 동일한 이름의 역할로만 PostgreSQL에서 작동할 수 있습니다. 자세한 정보는 PostgreSQL 인증에 대한 공식 문서를 참조하세요.

-P 플래그를 사용하지 않았고 역할을 만든 후 비밀번호를 설정하려는 경우 다음 명령을 사용하여 PostgreSQL 콘솔에 들어갑니다:

  1. sudo -u postgres psql

다음 출력과 함께 PostgreSQL 콘솔에 대한 프롬프트를 받게 됩니다:

Output
psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1)) Type "help" for help. postgres=#

PostgreSQL 콘솔은 postgres=# 프롬프트로 표시됩니다. PostgreSQL 프롬프트에서 다음 명령을 입력하여 새 데이터베이스 역할의 비밀번호를 설정합니다. 하이라이트된 이름을 만든 이름으로 바꿉니다:

  1. \password sammy

PostgreSQL은 비밀번호를 요구할 것입니다. 프롬프트에서 원하는 비밀번호를 입력한 후 확인합니다.

이제 다음 명령을 입력하여 PostgreSQL 콘솔을 종료합니다:

  1. \q

이제 보통의 프롬프트가 다시 나타납니다.

이 단계에서 슈퍼 사용자 권한이 있는 새 PostgreSQL 역할을 만들었습니다. 이제 이 역할을 사용하여 데이터베이스를 만드는 새로운 Rails 앱을 생성할 준비가 되었습니다.

단계 3 – 새로운 Rails 애플리케이션 생성

PostgreSQL을 위한 역할을 구성했으므로 이제 PostgreSQL을 데이터베이스로 사용하도록 설정된 새로운 Rails 애플리케이션을 생성할 수 있습니다.

먼저 홈 디렉토리로 이동하세요:

  1. cd ~

이 디렉토리에 새로운 Rails 애플리케이션을 만들어서 앱 이름을 appname으로 대체하세요:

  1. rails new appname -d=postgresql

-d=postgresql 옵션은 PostgreSQL을 데이터베이스로 설정합니다.

이 명령을 실행하면 홈 디렉토리에 appname이라는 새 폴더가 생성되며, 기본 Rails 애플리케이션의 모든 요소가 포함됩니다.

다음으로 애플리케이션의 디렉토리로 이동하세요:

  1. cd appname

새로운 Rails 애플리케이션을 생성하고 프로젝트의 루트 디렉토리로 이동했으므로 이제 Rails 앱 내에서 PostgreSQL 데이터베이스를 구성하고 생성할 수 있습니다.

단계 4 – 데이터베이스 구성 및 생성

개발 및 테스트 데이터베이스를 만들 때 Rails는 애플리케이션에 대해 Ubuntu 사용자 이름으로 생성한 PostgreSQL 역할을 사용합니다. Rails가 이러한 데이터베이스를 생성하도록 하려면 프로젝트의 데이터베이스 구성 파일을 수정해야 합니다. 그런 다음 데이터베이스를 생성합니다.

Rails 애플리케이션을 위한 구성 변경 중 하나는 마지막 단계에서 생성한 PostgreSQL 역할에 대한 비밀번호를 추가하는 것입니다. 비밀번호와 같은 민감한 정보를 안전하게 보관하려면 비밀번호를 구성 파일에 직접 쓰는 대신 환경 변수에 저장하는 것이 좋습니다.

로그인 시 비밀번호를 환경 변수에 저장하려면 다음 명령을 실행하고 APPNAME을 앱 이름으로, PostgreSQL_Role_Password를 마지막 단계에서 생성한 비밀번호로 대체하세요:

  1. echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bashrc

이 명령은 export 명령을 ~/.bashrc 파일에 작성하여 환경 변수가 로그인 시 설정되도록 합니다.

현재 세션에 대한 변수를 내보내려면 source 명령을 사용하세요:

  1. source ~/.bashrc

이제 비밀번호를 환경에 저장했으므로 구성 파일을 수정할 수 있습니다.

선호하는 텍스트 편집기에서 애플리케이션 데이터베이스 구성 파일을 엽니다. 이 튜토리얼에서는 nano를 사용합니다:

  1. nano config/database.yml

default 섹션에서 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>라고 쓰여진 줄을 찾아 아래 강조된 줄을 추가하고 자격 증명 및 생성한 환경 변수를 채워 넣습니다. 다음과 같이 보일 것입니다:

config/database.yml
...
default: &default
  adapter: postgresql
  encoding: unicode
  # 연결 풀링에 대한 자세한 내용은 Rails 구성 가이드를 참조하십시오
  # 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 명령을 사용하여 응용 프로그램의 데이터베이스를 생성하십시오:

  1. rails db:create

Rails가 데이터베이스를 생성하면 다음 출력이 표시됩니다:

Output
Created database 'appname_development' Created database 'appname_test'

출력에 따르면이 명령은 PostgreSQL 서버에 developmenttest 데이터베이스를 생성했습니다.

이제 Rails 앱에 연결된 PostgreSQL 데이터베이스가 있습니다. 응용 프로그램이 작동하는지 확인하려면 구성을 테스트하십시오.

단계 5 – 구성 테스트

응용 프로그램이 PostgreSQL 데이터베이스를 사용할 수 있는지 테스트하려면 웹 응용 프로그램을 실행하여 브라우저에 표시하십시오.

rails server 명령을 사용하여 Rails 앱의 내장 웹 서버 Puma에서 웹 응용 프로그램을 실행하십시오:

  1. rails server --binding=127.0.0.1

--binding은 응용 프로그램을 지정된 IP에 바인딩합니다. 기본적으로이 플래그는 레일즈를 0.0.0.0에 바인딩하며, 이는 레일즈가 모든 인터페이스에 대해 수신 대기하도록 하므로 localhost를 지정하는 데 127.0.0.1을 사용하는 것이 보안상 더 안전합니다. 기본적으로 응용 프로그램은 포트 3000에서 수신 대기합니다.

레일즈 앱이 실행되면 명령 프롬프트가 사라지고 이 출력으로 대체됩니다:

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으로 보냅니다:

  1. 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>

레일즈 응용 프로그램이 원격 서버에 있고 웹 브라우저를 통해 액세스하려는 경우 해당 서버의 공개 IP 주소에 바인딩할 수 있습니다. 먼저 방화벽에서 포트 3000을 엽니다:

  1. sudo ufw allow 3000

다음으로 서버의 공개 IP 주소를 찾습니다. 다음 curl 명령을 실행하여 수행할 수 있습니다:

  1. curl http://icanhazip.com

이 명령은 공개 IP 주소를 반환합니다. 해당 서버의 공개 IP로 rails server 명령을 사용하고 server_public_IP를 서버의 공개 IP로 대체합니다:

  1. rails server --binding=server_public_IP

이제 해당 URL을 통해 로컬 웹 브라우저에서 서버의 공개 IP 주소와 포트 3000으로 레일즈 응용 프로그램에 액세스할 수 있습니다:

http://server_public_IP:3000

이 URL에서 Ruby on Rails 페이지를 찾을 수 있습니다:

홈 페이지에 액세스할 수 있다면 응용 프로그램이 올바르게 구성되어 있고 PostgreSQL 데이터베이스에 연결되어 있는 것입니다.

테스트 구성을 거친 후 포트 3000을 닫으려면 다음 명령을 사용하십시오.

  1. sudo ufw delete allow 3000

결론

이 튜토리얼에서는 Ubuntu 20.04 서버에서 PostgreSQL을 데이터베이스로 사용하도록 구성된 Ruby on Rails 웹 응용 프로그램을 만들었습니다. 루비 프로그래밍 언어에 대해 더 알고 싶다면 루비로 코딩하는 방법 시리즈를 확인하십시오.

애플리케이션에 대한 데이터베이스 선택에 대한 자세한 정보는 SQLite, PostgreSQL 및 MySQL의 차이 및 사용 사례 튜토리얼을 참조하십시오. 데이터베이스 사용에 대한 자세한 내용을 알아보려면 PostgreSQL에서 쿼리 소개 문서를 읽거나 DigitalOcean의 Managed Databases 제품을 살펴보십시오.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-postgresql-with-your-ruby-on-rails-application-on-ubuntu-20-04