5.2

원본: http://guides.rubyonrails.org/5_2_release_notes.html

Ruby on Rails 5.2 릴리즈 노트

레일즈 5.2 하이라이트:

  • Active Storage

  • Redis 캐시 저장소

  • HTTP/2 초기 힌트

  • Credentials

  • Content Security Policy

이 릴리즈 노트에는 주요 변경점만 포함됩니다. 더 다양한 변경점과 버그 수정을 보려면 GitHub에서 Rails 메인 저장소의 커밋 목록arrow-up-right이나 변경 로그를 확인하세요.

레일즈 5.2로 업그레이드하기

기존 애플리케이션을 업그레이드하기 전에 충분한 테스트 커버리지를 확보하는 것이 좋습니다. 애플리케이션이 레일즈 5.1로 업그레이드하지 않았다면 우선 업그레이드하고, 애플리케이션이 정상적으로 동작하는지 충분히 확인한 뒤에 레일즈 5.2로 올려주세요. 업그레이드 시 주의점에 대해서는 Ruby on Rails 업그레이드 가이드arrow-up-right를 참고해주세요.

주요 변경점

Active Storage

Pull Requestarrow-up-right

액티브 스토리지arrow-up-right는 Amozon S3, Google Cloud Storage, Microsoft Azure Storage 같은 클라우드 스토리지 서비스에 파일을 업로드하고 액티브 레코드 객체에 첨부하는 작업을 용이하게 합니다. 개발 및 테스트 용으로 로컬 디스크 기반 서비스가 함께 제공되고, 백업과 마이그레이션을 위해 다른 서비스로 미러링 할 수도 있습니다. 액티브 스토리지에 대한 더 자세한 내용은 Active Storage Overviewarrow-up-right 가이드를 참고하세요.

Redis 캐시 저장소

Pull Requestarrow-up-right

레일즈 5.2부터 Redis 캐시 저장소가 내장됩니다. 자세한 내용은 Caching with Rails: An Overviewarrow-up-right 가이드를 참고하세요.

HTTP/2 초기 힌트

Pull Requestarrow-up-right

레일즈 5.2부터 HTTP/2 초기 힌트를 지원합니다. 초기 힌트를 활성화하려면 서버 시작 시 --early-hints 플래그를 사용하세요.

Credentials

Pull Requestarrow-up-right

프로덕션 앱 보안을 위한 config/credentials.yml.enc 파일이 추가되었습니다. 서드파티 서비스의 인증 정보가 config/master.key 파일 또는 RAILS_MASTER_KEY 환경변수로 암호화되어 레파지토리에 직접 저장할 수 있습니다. 이 기능은 레일즈 5.1에서 소개했던 Rails.application.secrets를 대체합니다. 또한, 레일즈 5.2 추가된 API를 통해 암호화된 커스텀 설정, 키, 파일 등을 쉽게 처리arrow-up-right할 수 있습니다. 더 자세한 내용은 Securing Rails Applicationarrow-up-right 가이드를 참고하세요.

Content Security Policy

Pull Requestarrow-up-right

레일즈 5.2는 Content Security Policyarrow-up-right 설정을 위한 새로운 DSL이 추가되었습니다. 전역 기본 정책을 설정하고 리소스 별로 정책을 오버라이드해서 사용할 수 있으며 람다 문법을 이용해서 계정 별 서브도메인 같은 요청 별 값을 헤더에 넣을 수도 있습니다. 더 자세한 내용은 Securing Rails Applicationarrow-up-right 가이드를 참고하세요.

Railties

자세한 변경사항은 변경로그arrow-up-right를 참고하세요.

Deprecations

  • 제너레이터와 템플릿의 capify! 메서드가 Deprecated 되었습니다. (Pull Requestarrow-up-right)

  • rails dbconsole, rails console 커맨드에 환경변수 이름을 매개변수로 전달하는 기능이 Deprecated 되었습니다. -e 옵션을 사용하세요. (Commitarrow-up-right)

  • 레일즈 서버를 실행하기 위해 Rails::Application의 서브클래스를 사용하는 것이 Deprecated 되었습니다. (Pull Requestarrow-up-right)

  • 레일즈 플러그인 템플릿의 after_bundle 콜백이 Deprecated 되었습니다. (Pull Requestarrow-up-right)

주요 변경점

  • config/database.yml 파일에 모든 환경에서 로드되는 shared 섹션이 추가되었습니다. (Pull Requestarrow-up-right)

  • 플러그인 제너레이터에 railtie.rb 파일이 추가되었습니다. (Pull Requestarrow-up-right)

  • tmp:clear 작업 시 스크린샷 파일들이 제거됩니다. (Pull Requestarrow-up-right)

  • bin/rails app:update 실행 시 사용하지 않는 컴포넌트가 생략됩니다. 초기 앱 생성 시 액션 케이블, 액티브 레코드 등을 생략했다면 업데이트 작업에서도 생략됩니다. (Pull Requestarrow-up-right)

  • 3-레벨 데이터베이스 구성 사용 시 rails dbconsole 커맨드에 커스텀 연결 이름을 전달 할 수 있습니다. 예시: bin/rails dbconsole -c replica. (Commitarrow-up-right)

  • bootsnap 잼이 Gemfile 파일에 추가되었습니다. (Pull Requestarrow-up-right)

  • 새 레일즈 앱을 생성할 때 현재 루비 버전을 ruby x.x.x 디렉티브로 Gemfile에 추가하고 .ruby-version 파일을 생성합니다. (Pull Requestarrow-up-right)

  • 플러그인 제너레이터에 --skip-action-cable 옵션이 추가되었습니다. (Pull Requestarrow-up-right)

  • 플러그인 제너레이터에서 git_source 디렉티브가 Gemfile에 추가되었습니다. (Pull Requestarrow-up-right)

  • bin/rails 실행 시 사용하지 않는 컴포넌트가 생략됩니다. (Commitarrow-up-right)

  • 제너레이터 액션의 들여쓰기 동작이 최적화되었습니다. (Pull Requestarrow-up-right)

  • 라우트 생성 시 네임스페이스 들여쓰기 동작이 최적화되었습니다. (Pull Requestarrow-up-right)

  • 플러그인 제너레이터에 --skip-yarn 옵션이 추가되었습니다. (Pull Requestarrow-up-right)

  • 제너레이터의 gem 메서드에 여러 버전 매개변수가 지원됩니다. (Pull Requestarrow-up-right)

  • 개발과 테스트 환경에서 secret_key_base 값이 앱 이름으로부터 자동으로 파생됩니다. (Pull Requestarrow-up-right)

  • mini_magick 잼이 Gemfile 파일에 주석으로 추가되었습니다. (Pull Requestarrow-up-right)

  • rails newrails plugin new에 액티브 스토리지 기능이 기본적으로 추가됩니다. --skip-active-storage 옵션으로 생략할 수 있고, --skip-active-record 옵션이 사용되면 자동적으로 함께 생략됩니다. (Pull Requestarrow-up-right)

Action Cable

자세한 변경사항은 변경로그arrow-up-right를 참고하세요.

제거된 것

주요 변경점

Action Pack

자세한 변경사항은 변경로그arrow-up-right를 참고하세요.

제거된 것

Deprecations

주요 변경점

Action View

자세한 변경사항은 변경로그arrow-up-right를 참고하세요.

제거된 것

Deprecations

  • image_tag 뷰 헬퍼가 자동으로 생성하는 이미지의 대체 텍스트와 여기에 사용되는 image_alt 뷰 헬퍼가 Deprecated 되었습니다. (Pull Requestarrow-up-right)

주요 변경점

Action Mailer

자세한 변경사항은 변경로그arrow-up-right를 참고하세요.

주요 변경점

Active Record

자세한 변경사항은 변경로그arrow-up-right를 참고하세요.

제거된 것

Deprecations

주요 변경점

  • 동적 픽스쳐 접근자를 인자없이 호출하면 빈 배열을 반환하는 대신 해당하는 타입의 모든 픽스쳐를 반환합니다. (Pull Requestarrow-up-right)

  • 액티브 레코드의 어트리뷰트 리더를 오버라이딩 할 때 변경되는 어트리뷰트가 불일치 하는 문제를 수정했습니다. (Pull Requestarrow-up-right)

  • MySQL의 내림차순 인덱스가 지원됩니다. (Pull Requestarrow-up-right)

  • bin/rails db:forward 명령어가 올바르게 동작하도록 수정했습니다. (Commitarrow-up-right)

  • 마이그레이션 변경 시 현재 마이그레이션이 존재하지 않으면 UnknownMigrationVersionError 에러가 발생합니다. (Commitarrow-up-right)

  • 데이터베이스 구조 덤프 작업 시 SchemaDumper.ignore_tables 값이 적용되도록 수정했습니다. (Pull Requestarrow-up-right)

  • ActiveSupport::Cache의 버전이 적용된 항목들을 통해 재활용 가능한 캐시 키를 지원하는 ActiveRecord::Base#cache_version가 추가됐습니다. 이제 ActiveRecord::Base#cache_key가 타임스탬프를 사용하지 않고 더 안정적인 키를 반환합니다. (Pull Requestarrow-up-right)

  • 형변환 된 값이 nil인 경우 파라미터가 바인딩되지 않도록 막습니다. (Pull Requestarrow-up-right)

  • 픽스쳐 삽입 시 더 나은 성능을 위해 일괄(Bulk) INSERT 구문을 사용합니다. (Pull Requestarrow-up-right)

  • 두 중첩 조인 관계를 병합할 때 더 이상 LEFT OUTER JOIN 구문으로 변환되지 않습니다. (Pull Requestarrow-up-right)

  • 부모 트랜잭션을 롤백할 때 부모 트랜잭션의 상태를 자식 트랜잭션에도 반영하도록 수정했습니다. 이전에는 중첩 트랜잭션이나 외부 트랜잭션을 롤백해도 내부 트랜잭션의 레코드가 계속 지속적(persisted)인 것으로 인식했습니다. (Commitarrow-up-right)

  • 조인 스코프를 포함하는 Pre/Eager 로딩 관계를 수정했습니다. (Pull Requestarrow-up-right)

  • sql.active_record 알림 구독자가 발생시키는 에러가 ActiveRecord::StatementInvalid 예외로 변환되지 않도록 수정했습니다. (Pull Requestarrow-up-right)

  • find_each, find_in_batches, in_batches 메서드로 작업할 때 쿼리 캐싱이 생략됩니다. (Commitarrow-up-right)

  • SQLite3의 boolean 시리얼라이저가 1과 0을 사용하도록 변경했습니다. SQLite는 1과 0을 논리값으로 식별하는 것을 기본적으로 지원하지만, 이전의 't'와 'f'는 지원되지 않습니다. (Pull Requestarrow-up-right)

  • 다중 매개변수로 할당된 속성을 폼에서 단일 필드 입력으로 사용할 수 있습니다. (Commitarrow-up-right)

  • ApplicationRecord가 더 이상 모델을 생성하지 않습니다. 생성하려면 rails g application_record 명령어를 사용하세요. (Pull Requestarrow-up-right)

  • Relation#or 메서드가 서로 다른 references 값을 사용하는 경우를 허용합니다. (Commitarrow-up-right)

  • Relation#or 메서드를 사용할 때 일반적인 조건들을 추출해서 OR 조건 이전에 삽입합니다. (Pull Requestarrow-up-right)

  • binary 픽스쳐 헬퍼 메서드가 추가되었습니다. (Pull Requestarrow-up-right)

  • STI의 inverse 관계가 자동으로 추론됩니다. (Pull Requestarrow-up-right)

  • LockWaitTimeout 에러 클래스를 추가했습니다. (Pull Requestarrow-up-right)

  • sql.active_record 인스트루먼테이션의 페이로드 이름이 더 자세한 내용을 나타내도록 수정했습니다. (Pull Requestarrow-up-right)

  • 데이터베이스의 인덱스를 삭제할 때 전달된 알고리즘을 사용합니다. (Pull Requestarrow-up-right)

  • Relation#where 메서드에 Set을 전달하는 것이 이제 배열을 전달하는 것 과 동일하게 동작합니다. (Commitarrow-up-right)

  • PostgreSQL tsrange 형식이 이제 1초 미만의 정밀도를 유지합니다. (Pull Requestarrow-up-right)

  • Dirty 레코드에서 lock! 메서드를 호출하면 에러를 발생시킵니다. (Commitarrow-up-right)

  • SQLite 어댑터를 사용할 때 인덱스의 열 순서가 db/schema.rb 파일에 기록되지 않는 버그를 수정했습니다. (Pull Requestarrow-up-right)

  • bin/rails db:migrate 명령어에 VERSION 값을 지정합니다. VERSION 값이 비어있으면 버전을 지정하지 않은 것처럼 동작합니다. VERSION 값에는 마이그레이션 버전 넘버나 마이그레이션 파일명을 사용할 수 있습니다. 값의 형식이 올바르지 않거나 해당하는 마이그레이션이 존재하지 않는 경우 에러가 발생합니다.

  • StatementTimeout 에러 클래스를 추가했습니다. (Pull Requestarrow-up-right)

  • update_all 메서드가 이제 Type#serialize 메서드에 값들을 전달하기 전에 Type#cast 메서드에 먼저 전달합니다. 따라서 update_all(foo: 'true')처럼 사용할 때 올바르게 boolean 타입으로 처리됩니다. (Commitarrow-up-right)

  • 관계형 쿼리 메서드에서 원시 SQL을 사용할 때 명시적인 표현을 위해 SQL 프래그먼트가 요구됩니다. (Commitarrow-up-right, Commitarrow-up-right)

  • 데이터베이스 마이그레이션에서 업그레이드에만 관련된 코드를 위해 #up_only 메서드를 추가했습니다. (Pull Requestarrow-up-right)

  • Add new error class QueryCanceled which will be raised when canceling statement due to user request. (Pull Requestarrow-up-right)

  • Don't allow scopes to be defined which conflict with instance methods on Relation. (Pull Requestarrow-up-right)

  • Add support for PostgreSQL operator classes to add_index. (Pull Requestarrow-up-right)

  • Undefine attribute methods on descendants when resetting column information. (Pull Requestarrow-up-right)

  • Using subselect for delete_all with limit or offset. (Commitarrow-up-right)

  • Fixed inconsistency with first(n) when used with limit(). The first(n) finder now respects the limit(), making it consistent with relation.to_a.first(n), and also with the behavior of last(n). (Pull Requestarrow-up-right)

  • Fix nested has_many :through associations on unpersisted parent instances. (Commitarrow-up-right)

  • Take into account association conditions when deleting through records. (Commitarrow-up-right)

  • Don't allow destroyed object mutation after save or save! is called. (Commitarrow-up-right)

  • Fix relation merger issue with left_outer_joins. (Pull Requestarrow-up-right)

  • Support for PostgreSQL foreign tables. (Pull Requestarrow-up-right)

  • Clear the transaction state when an Active Record object is duped. (Pull Requestarrow-up-right)

  • Fix not expanded problem when passing an Array object as argument to the where method using composed_of column. (Pull Requestarrow-up-right)

  • Make reflection.klass raise if polymorphic? not to be misused. (Commitarrow-up-right)

  • Fix #columns_for_distinct of MySQL and PostgreSQL to make ActiveRecord::FinderMethods#limited_ids_for use correct primary key values even if ORDER BY columns include other table's primary key. (Commitarrow-up-right)

  • Fix dependent: :destroy issue for has_one/belongs_to relationship where the parent class was getting deleted when the child was not. (Commitarrow-up-right)

Active Model

자세한 변경사항은 변경로그arrow-up-right를 참고하세요.

주요 변경점

Active Support

자세한 변경사항은 변경로그를 참고하세요.

제거된 것

Deprecations

주요 변경점

Active Job

자세한 변경사항은 변경로그arrow-up-right를 참고하세요.

주요 변경점

  • ActiveJob::Base.discard_on 메서드에 블럭을 전달해서 잡 취소를 커스텀으로 처리하는 것을 허용합니다. (Pull Requestarrow-up-right)

가이드 문서

자세한 변경사항은 변경로그arrow-up-right를 참고하세요.

주요 변경점

크레딧

레일즈를 견고하고 안정적인 프레임워크로 만들기 위해 많은 시간을 사용해주신 많은 개발자들을 레일즈 기여자 목록arrow-up-right에서 확인할 수 있습니다. 이 분들에게 경의를 표합니다.

Last updated