소개
루비 온 레일즈 웹 프레임워크를 사용할 때, 기본적으로 응용 프로그램은 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를 사용합니다. 최신 버전에 대한 정보는 Ruby 및 Rails의 공식 사이트를 참조하십시오.
단계 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 및 해당 종속성을 설치한 후 다음 단계는 레일즈 응용 프로그램이 나중에 데이터베이스를 생성하는 데 사용할 역할을 생성하는 것입니다.
단계 2 – 새 데이터베이스 역할 만들기
PostgreSQL에서 역할은 Linux에서 사용자와 마찬가지로 권한 및 인증을 구성하는 데 사용할 수 있습니다. 이 단계에서는 PostgreSQL 시스템 내에서 데이터베이스를 생성하고 구성할 수 있는 새로운 슈퍼 사용자 역할을 만들 것입니다.
PostgreSQL 슈퍼 사용자 역할을 만들려면 다음 명령을 실행하십시오. 강조된 단어를 Ubuntu 20.04 사용자 이름으로 바꿔 입력하십시오:
- sudo -u postgres createuser -s sammy -P
-P
플래그를 지정했으므로 새 역할에 대한 암호를 입력하라는 프롬프트가 나타납니다. 원하는 암호를 입력하고, 나중의 단계에서 구성 파일에서 사용할 수 있도록 기록하십시오.
당신은 createuser
를 사용하여 sammy
(또는 원하는 사용자 이름)이라는 역할을 만듭니다. -s
플래그는 이 사용자에게 슈퍼 사용자 권한을 부여하고, sudo -u
는 PostgreSQL을 설치할 때 자동으로 생성되는 postgres
계정에서 명령을 실행할 수 있도록 합니다.
참고: 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 – 데이터베이스 구성 및 생성
개발 및 테스트 데이터베이스를 만들 때 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
# 연결 풀링에 대한 자세한 내용은 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
명령을 사용하여 응용 프로그램의 데이터베이스를 생성하십시오:
- 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에 바인딩합니다. 기본적으로이 플래그는 레일즈를 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
으로 보냅니다:
- 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
을 엽니다:
- sudo ufw allow 3000
다음으로 서버의 공개 IP 주소를 찾습니다. 다음 curl
명령을 실행하여 수행할 수 있습니다:
- curl http://icanhazip.com
이 명령은 공개 IP 주소를 반환합니다. 해당 서버의 공개 IP로 rails server
명령을 사용하고 server_public_IP
를 서버의 공개 IP로 대체합니다:
- rails server --binding=server_public_IP
이제 해당 URL을 통해 로컬 웹 브라우저에서 서버의 공개 IP 주소와 포트 3000
으로 레일즈 응용 프로그램에 액세스할 수 있습니다:
http://server_public_IP:3000
이 URL에서 Ruby on Rails 페이지를 찾을 수 있습니다:
홈 페이지에 액세스할 수 있다면 응용 프로그램이 올바르게 구성되어 있고 PostgreSQL 데이터베이스에 연결되어 있는 것입니다.
테스트 구성을 거친 후 포트 3000
을 닫으려면 다음 명령을 사용하십시오.
- sudo ufw delete allow 3000
결론
이 튜토리얼에서는 Ubuntu 20.04 서버에서 PostgreSQL을 데이터베이스로 사용하도록 구성된 Ruby on Rails 웹 응용 프로그램을 만들었습니다. 루비 프로그래밍 언어에 대해 더 알고 싶다면 루비로 코딩하는 방법 시리즈를 확인하십시오.
애플리케이션에 대한 데이터베이스 선택에 대한 자세한 정보는 SQLite, PostgreSQL 및 MySQL의 차이 및 사용 사례 튜토리얼을 참조하십시오. 데이터베이스 사용에 대한 자세한 내용을 알아보려면 PostgreSQL에서 쿼리 소개 문서를 읽거나 DigitalOcean의 Managed Databases 제품을 살펴보십시오.