웹 서비스를 만들 때 가장 먼저 떠오르는 기능 중 하나는 회원가입과 로그인이죠.
하지만 이걸 직접 구현하려면 암호화, 세션 처리, CSRF 보호 등 생각보다 고려할 게 많아요.
이럴 때 Rails 개발자들이 가장 많이 선택하는 보석이 있으니, 바로 Devise입니다.
이번 글에서는 Devise를 활용해 간단하게 로그인 시스템을 구현하는 방법을 실제 코드와 함께 알아봅니다.
🔧 1. Devise 설치하기
# Gemfile
gem 'devise'
$ bundle install
$ bin/rails generate devise:install
설치 후 출력되는 메시지를 따라 config/environments/development.rb
에 메일 설정을 추가하고, flash
메시지를 layout에 렌더링해 주세요.
# config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
# app/views/layouts/application.html.erb
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
👤 2. User 모델 생성
$ bin/rails generate devise User
$ bin/rails db:migrate
이제 User 모델은 이메일, 비밀번호, 암호화, 세션, 리마인더 등 다양한 인증 기능을 자동으로 포함하게 됩니다.
🧪 3. 로그인/회원가입 테스트
$ bin/rails server
브라우저에서 http://localhost:3000/users/sign_in
으로 접속해보세요. 이미 로그인/회원가입/비밀번호 찾기 등의 화면이 완성되어 있습니다!
/users/sign_in
— 로그인/users/sign_up
— 회원가입/users/password/new
— 비밀번호 초기화
🔐 4. 인증이 필요한 페이지 제한하기
class PostsController < ApplicationController
before_action :authenticate_user!, except: [:index, :show]
end
이렇게 하면 로그인하지 않은 사용자는 글쓰기, 수정, 삭제 페이지에 접근할 수 없습니다.
⚙️ 5. Devise 설정 커스터마이징
rails generate devise:views
명령으로 뷰를 복사해 커스터마이징할 수 있어요.
$ bin/rails generate devise:views
뷰 파일은 app/views/devise/
아래에 위치하며, HTML과 ERB로 자유롭게 꾸밀 수 있어요.
📌 로그인 후 이동 경로 커스터마이징
# app/controllers/application_controller.rb
def after_sign_in_path_for(resource)
posts_path
end
🛡️ Devise가 기본으로 제공하는 보안 기능
- 비밀번호 암호화 (bcrypt)
- 자동 세션 관리
- CSRF 토큰 검증
- 이메일 확인, 비밀번호 재설정
이 모든 것이 기본 제공되니, 우리는 기능 개발에 집중할 수 있어요.
🎯 마치며
Devise는 Rails에서 인증 기능을 쉽게, 그리고 매우 안전하게 구현할 수 있게 도와주는 필수 라이브러리입니다.
로그인부터 비밀번호 재설정까지 대부분의 기능을 단 몇 줄의 코드로 처리할 수 있어요.
“이게 정말 다야?” 싶은 순간에도, Devise는 당신의 시간을 아껴주고 있을 거예요.
'Ruby On Rails' 카테고리의 다른 글
관리자 페이지 만들기 — RailsAdmin vs ActiveAdmin (0) | 2025.07.17 |
---|---|
파일 업로드 구현 — ActiveStorage와 Cloudinary 활용하기 (1) | 2025.07.15 |
Rails의 철학과 Convention over Configuration 이해하기 (6) | 2025.07.12 |
Partial, Layout, Helper — 뷰를 깔끔하게 정리하는 기술 (2) | 2025.07.11 |
Validation & Callback — 데이터의 품질을 지키는 방법 (2) | 2025.07.10 |