Ruby on Rails 6.0 릴리스 노트

Rails 6.0의 주요 기능:

  • Action Mailbox
  • Action Text
  • 병렬 테스팅
  • Action Cable 테스팅

이 릴리스 노트에서는 주요 변경 사항만 다룹니다. 다양한 버그 수정 및 변경 사항에 대해서는 변경 로그를 참조하거나 GitHub의 Rails 주 저장소에서 커밋 목록을 확인하세요.


Rails 6.0으로 업그레이드하기

기존 애플리케이션을 업그레이드하는 경우, 업그레이드 전에 충분한 테스트 커버리지를 확보하는 것이 좋습니다. 또한 Rails 5.2로 먼저 업그레이드하고 애플리케이션이 여전히 예상대로 작동하는지 확인한 후에 Rails 6.0으로 업데이트를 시도해야 합니다. Rails 6.0으로 업그레이드할 때 주의해야 할 사항은 Ruby on Rails 업그레이드 가이드에서 확인할 수 있습니다.

주요 기능

Action Mailbox

Pull Request

Action Mailbox를 사용하면 들어오는 이메일을 컨트롤러 유사 메일박스로 라우팅할 수 있습니다. Action Mailbox에 대해 자세히 알아보려면 Action Mailbox 기본 사항 가이드를 참조하세요.

Action Text

Pull Request

Action Text는 Rails에 리치 텍스트 콘텐츠와 편집 기능을 제공합니다. 이는 Trix 편집기를 포함하며, 서식, 링크, 인용, 목록, 임베드된 이미지 및 갤러리 등을 처리합니다. Trix 편집기에서 생성된 리치 텍스트 콘텐츠는 애플리케이션의 기존 Active Record 모델과 연결된 별도의 RichText 모델에 저장됩니다. 포함된 RichText 모델과 연결된 임베드된 이미지(또는 다른 첨부 파일)는 자동으로 Active Storage를 사용하여 저장됩니다.

Action Text에 대해 자세히 알아보려면 Action Text 개요 가이드를 참조하세요.

병렬 테스팅

Pull Request

병렬 테스팅을 통해 테스트 스위트를 병렬로 실행할 수 있습니다. 프로세스 포크가 기본 방법이지만 스레딩도 지원됩니다. 테스트를 병렬로 실행하면 전체 테스트 스위트 실행 시간이 단축됩니다.

Action Cable 테스팅

Pull Request

Action Cable 테스팅 도구를 사용하면 연결, 채널, 브로드캐스트 등 모든 수준에서 Action Cable 기능을 테스트할 수 있습니다.

Railties

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

제거

  • 플러그인 템플릿 내부의 after_bundle 헬퍼 제거. (Commit)

  • 애플리케이션 클래스를 run 인수로 사용하는 config.ru에 대한 지원 제거. (Commit)

  • environment 인수를 rails 명령에서 제거. (Commit)

  • 생성기 및 템플릿에서 capify! 메서드 제거. (Commit)

  • config.secret_token 제거. (Commit)

사용 중단

  • rails server 명령에 Rack 서버 이름을 일반 인수로 전달하는 것 사용 중단. (Pull Request)

  • HOST 환경을 사용하여 서버 IP를 지정하는 것 사용 중단. (Pull Request)

  • config_for에서 반환된 해시의 비 기호 키 액세스 사용 중단. (Pull Request)

주요 변경 사항

  • rails server 명령에 명시적 옵션 --using 또는 -u를 추가하여 서버 지정. (Pull Request)

  • rails routes의 출력을 확장된 형식으로 볼 수 있는 기능 추가. (Pull Request)

  • 인라인 Active Job 어댑터를 사용하여 seed 데이터베이스 작업 실행. (Pull Request)

  • 애플리케이션의 데이터베이스를 변경할 수 있는 rails db:system:change 명령 추가. (Pull Request)

  • Action Cable 채널만 테스트하는 rails test:channels 명령 추가. (Pull Request)

  • DNS 리바인딩 공격에 대한 보호 기능 추가. (Pull Request)

  • 생성기 명령 실행 중 실패 시 중단할 수 있는 기능 추가. (Pull Request)

  • Rails 6의 기본 JavaScript 컴파일러로 Webpacker 설정. (Pull Request)

  • rails db:migrate:status 명령에 다중 데이터베이스 지원 추가. (Pull Request)

  • 생성기에서 다중 데이터베이스의 다른 마이그레이션 경로 사용 기능 추가. (Pull Request)

  • 다중 환경 자격 증명 지원 추가. (Pull Request)

  • 테스트 환경에서 null_store를 기본 캐시 저장소로 설정. (Pull Request)

Action Cable

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

제거

  • ActionCable.startDebugging()ActionCable.stopDebugging()ActionCable.logger.enabled로 대체. (Pull Request)

사용 중단

  • Action Cable에 대한 사용 중단 사항 없음.

주요 변경 사항

  • cable.yml의 PostgreSQL 구독 어댑터에 channel_prefix 옵션 추가. (Pull Request)

  • ActionCable::Server::Base에 사용자 정의 구성 전달 기능 추가. (Pull Request)

  • :action_cable_connection:action_cable_channel 로드 후크 추가. (Pull Request)

  • Channel::Base#broadcast_toChannel::Base.broadcasting_for 추가. (Pull Request)

  • ActionCable::Connection에서 reject_unauthorized_connection을 호출할 때 연결을 닫도록 변경. (Pull Request)

  • Action Cable JavaScript 패키지를 CoffeeScript에서 ES2015로 변환하고 npm 배포판에 소스 코드 게시. (Pull Request)

  • WebSocket 어댑터 및 로거 어댑터 구성을 ActionCable 속성에서 ActionCable.adapters로 이동. (Pull Request)

  • Redis 어댑터에 Action Cable의 Redis 연결을 구분하기 위한 id 옵션 추가. (Pull Request)

Action Pack

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

제거

  • fragment_cache_key 헬퍼 대신 combined_fragment_cache_key 사용. (Commit)

  • ActionDispatch::TestResponse의 deprecated 메서드 제거: #success?#successful?로, #missing?#not_found?로, #error?#server_error?로 대체. (Commit)

사용 중단

  • ActionDispatch::Http::ParameterFilterActiveSupport::ParameterFilter로 대체. (Pull Request)

  • 컨트롤러 수준의 force_sslconfig.force_ssl로 대체. (Pull Request)

주요 변경 사항

  • ActionDispatch::Response#content_type이 Content-Type 헤더 그대로 반환하도록 변경. (Pull Request)

  • 리소스 매개변수에 콜론이 포함된 경우 ArgumentError를 발생시키도록 변경. (Pull Request)

  • ActionDispatch::SystemTestCase.driven_by에 브라우저 기능을 정의하는 블록을 전달할 수 있도록 변경. (Pull Request)

  • DNS 리바인딩 공격을 방지하는 ActionDispatch::HostAuthorization 미들웨어 추가. (Pull Request)

  • ActionController::TestCase에서 parsed_body 사용 허용. (Pull Request)

  • 동일한 컨텍스트에 여러 루트 경로가 있는 경우 as: 명명 지정 없이 ArgumentError를 발생시키도록 변경. (Pull Request)

  • 매개변수 구문 분석 오류 처리를 위해 #rescue_from을 사용할 수 있도록 변경. (Pull Request)

  • ActionController::Parameters#each_value를 추가하여 매개변수를 반복할 수 있도록 변경. (Pull Request)

  • send_datasend_file에서 Content-Disposition 파일 이름 인코딩. (Pull Request)

  • ActionController::Parameters#each_key 노출. (Pull Request)

  • 쿠키 값을 다른 쿠키로 복사하는 것을 방지하기 위해 서명/암호화 쿠키에 목적 및 만료 메타데이터 추가. ([네, 번역을 계속하겠습니다.

Action View

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

제거

  • image_alt 헬퍼 제거. (Commit)

  • 기능이 이미 record_tag_helper 젬으로 이동된 빈 RecordTagHelper 모듈 제거. (Commit)

사용 중단

  • 대체 방법 없이 ActionView::Template.finalize_compiled_template_methods 사용 중단. (Pull Request)

  • 대체 방법 없이 config.action_view.finalize_compiled_template_methods 사용 중단. (Pull Request)

  • options_from_collection_for_select 뷰 헬퍼에서 비공개 모델 메서드 호출 사용 중단. (Pull Request)

주요 변경 사항

  • 파일 변경 시에만 개발 모드에서 Action View 캐시를 지워 개발 모드 속도 향상. (Pull Request)

  • 모든 Rails npm 패키지를 @rails 범위로 이동. (Pull Request)

  • 등록된 MIME 유형만 허용하도록 변경. (Pull Request, Pull Request)

  • 템플릿 및 부분 렌더링 서버 출력에 할당량 추가. (Pull Request)

  • date_select 태그에 year_format 옵션 추가하여 연도 이름 사용자 정의 가능. (Pull Request)

  • Content Security Policy에 대한 자동 nonce 생성을 지원하는 nonce: true 옵션을 javascript_include_tag 헬퍼에 추가. (Pull Request)

  • action_view.finalize_compiled_template_methods 구성을 추가하여 ActionView::Template finalizer를 비활성화하거나 활성화할 수 있도록 변경. (Pull Request)

  • rails_ujs에서 JavaScript confirm 호출을 별도의 재정의 가능한 메서드로 추출. (Pull Request)

  • action_controller.default_enforce_utf8 구성 옵션을 추가하여 UTF-8 인코딩 적용 여부를 제어할 수 있도록 변경. 기본값은 false. (Pull Request)

  • submit 태그에 대한 I18n 키 스타일 지원 추가. (Pull Request)

Action Mailer

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

제거

사용 중단

  • Action Mailbox를 사용하도록 ActionMailer::Base.receive 사용 중단. (Commit)

  • DeliveryJobParameterized::DeliveryJobMailDeliveryJob로 대체. (Pull Request)

주요 변경 사항

  • 일반 및 매개변수화된 메일 전송을 위한 MailDeliveryJob 추가. (Pull Request)

  • Action Mailer 테스트 어설션에서 사용자 정의 이메일 전송 작업이 작동하도록 변경. (Pull Request)

  • 작업 이름만 사용하는 대신 블록을 사용하여 다중 파트 이메일에 대한 템플릿 이름을 지정할 수 있도록 변경. (Pull Request)

  • deliver.action_mailer 알림의 페이로드에 perform_deliveries 추가. (Pull Request)

  • perform_deliveries가 false인 경우 이메일 전송이 건너뛰었음을 나타내는 개선된 로깅 메시지 추가. (Pull Request)

  • 블록 없이 assert_enqueued_email_with를 호출할 수 있도록 변경. (Pull Request)

  • assert_emails 블록에서 대기 중인 메일 전송 작업 실행. (Pull Request)

  • ActionMailer::Base에서 옵저버와 인터셉터를 등록 취소할 수 있도록 변경. (Pull Request)

Active Record

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

제거

  • 트랜잭션 객체의 deprecated #set_state 제거. (Commit)

  • 데이터베이스 어댑터의 deprecated #supports_statement_cache? 제거. (Commit)

  • 데이터베이스 어댑터의 deprecated #insert_fixtures 제거. (Commit)

  • deprecated ActiveRecord::ConnectionAdapters::SQLite3Adapter#valid_alter_table_type? 제거. (Commit)

  • 블록이 전달될 때 sum에 열 이름을 전달하는 기능 제거. (Commit)

  • 블록이 전달될 때 count에 열 이름을 전달하는 기능 제거. (Commit)

  • 관계에서 누락된 메서드를 Arel로 위임하는 기능 제거. (Commit)

  • 관계에서 클래스의 비공개 메서드로 누락된 메서드를 위임하는 기능 제거. (Commit)

  • #cache_key에 타임스탬프 이름을 지정하는 기능 제거. (Commit)

  • deprecated ActiveRecord::Migrator.migrations_path= 제거. (Commit)

  • deprecated expand_hash_conditions_for_aggregates 제거. (Commit)

사용 중단

  • 고유성 유효성 검사기에 대한 대소문자 구분 불일치 비교 사용 중단. (Commit)

  • 수신기 범위가 누출된 경우 클래스 수준 쿼리 메서드 사용 중단. (Pull Request)

  • config.active_record.sqlite3.represent_boolean_as_integer 사용 중단. (Commit)

  • connection.assume_migrated_upto_versionmigrations_paths 전달 사용 중단. (Commit)

  • ActiveRecord::Result#to_hashActiveRecord::Result#to_a로 대체. (Commit)

  • DatabaseLimits 메서드 사용 중단: column_name_length, table_name_length, columns_per_table, indexes_per_table, columns_per_multicolumn_index, sql_query_length, joins_per_query. (Commit)

  • update_attributes/!update/!로 대체. (Commit)

주요 변경 사항

  • sqlite3 젬의 최소 버전을 1.4로 업데이트. (Pull Request)

  • 데이터베이스가 존재하지 않는 경우 생성하고 마이그레이션을 실행하는 rails db:prepare 추가. (Pull Request)

  • after_save_commit 콜백을 after_commit :hook, on: [ :create, :update ]의 단축 방식으로 추가. (Pull Request)

  • 관련 레코드를 관계에서 추출하는 ActiveRecord::Relation#extract_associated 추가. (Pull Request)

  • Active Record::Relation 쿼리에 SQL 주석을 추가하는 ActiveRecord::Relation#annotate 추가. (Pull Request)

  • 데이터베이스에 Optimizer Hints 설정 지원 추가. (Pull Request)

  • 대량 삽입을 위한 insert_all/insert_all!/upsert_all 메서드 추가. (Pull Request)

  • 현재 환경의 각 데이터베이스 테이블을 잘라내고 시드를 로드하는 rails db:seed:replant 추가. (Pull Request)

  • unscope(:select).select(fields)의 단축 형태인 reselect 메서드 추가. (Pull Request)

  • 모든 enum 값에 대한 부정 범위 추가. (Pull Request)

  • 조건부 제거를 위한 #destroy_by#delete_by 추가. (Pull Request)

  • 데이터베이스 연결을 자동으로 전환할 수 있는 기능 추가. (Pull Request)

  • 블록 기간 동안 데이터베이스 쓰기를 방지할 수 있는 기능 추가. (Pull Request)

  • 다중 데이터베이스를 지원하는 연결 전환 API 추가. (Pull Request)

  • 마이그레이션에서 정밀도가 있는 타임스탬프를 기본값으로 설정. (Pull Request)

  • MySQL에서 textblob 크기를 변경할 수 있는 :size 옵션 추가. ([Pull Request](https://github.com/rails/rails/pull/35네, 번역을 계속하겠습니다.

Active Storage

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

제거

사용 중단

  • config.active_storage.queueconfig.active_storage.queues.analysisconfig.active_storage.queues.purge로 대체. (Pull Request)

  • ActiveStorage::DownloadingActiveStorage::Blob#open으로 대체. (Commit)

  • 이미지 변형 생성에 mini_magick을 직접 사용하는 것을 image_processing으로 대체. (Commit)

  • Active Storage의 ImageProcessing 변환기에서 :combine_options 사용 중단(대체 방법 없음). (Commit)

주요 변경 사항

  • BMP 이미지 변형 생성 지원 추가. (Pull Request)

  • TIFF 이미지 변형 생성 지원 추가. (Pull Request)

  • 프로그레시브 JPEG 이미지 변형 생성 지원 추가. (Pull Request)

  • Active Storage 생성 경로 구성을 위한 ActiveStorage.routes_prefix 추가. (Pull Request)

  • ActiveStorage::DiskController#show에서 요청된 파일이 디스크 서비스에 없는 경우 404 Not Found 응답 생성. (Pull Request)

  • ActiveStorage::Blob#downloadActiveStorage::Blob#open에서 요청된 파일이 없는 경우 ActiveStorage::FileNotFoundError 발생. (Pull Request)

  • Active Storage 예외가 상속받는 일반 ActiveStorage::Error 클래스 추가. (Commit)

  • 레코드가 저장될 때 레코드에 할당된 업로드된 파일을 즉시 저장하는 대신 지연 저장. (Pull Request)

  • 첨부 파일 컬렉션에 할당할 때 기존 파일을 추가하는 대신 교체할 수 있는 옵션 추가(config.active_storage.replace_on_assign_to_many). (Pull Request, Pull Request)

  • 기존 Active Record 반영 메커니즘을 사용하여 정의된 첨부 파일을 반영할 수 있는 기능 추가. (Pull Request)

  • ActiveStorage::Blob#open을 추가하여 Blob을 디스크의 임시 파일로 다운로드하고 임시 파일을 반환. (Commit)

  • Google Cloud Storage에서 스트리밍 다운로드 지원. google-cloud-storage 젬 1.11+ 버전 필요. (Pull Request)

  • Active Storage 변형 생성에 mini_magick 대신 image_processing 젬 사용. (Pull Request)

Active Model

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

제거

사용 중단

주요 변경 사항

  • ActiveModel::Errors#full_message 형식을 사용자 정의할 수 있는 구성 옵션 추가. (Pull Request)

  • has_secure_password에 대한 속성 이름 구성 지원 추가. (Pull Request)

  • ActiveModel::Errors#slice! 메서드 추가. (Pull Request)

  • 특정 오류 존재 여부를 확인하는 ActiveModel::Errors#of_kind? 추가. (Pull Request)

  • ActiveModel::Serializers::JSON#as_json 메서드에서 타임스탬프 처리 수정. (Pull Request)

  • Active Record를 제외하고 숫자성 유효성 검사기가 여전히 형변환 전 값을 사용하도록 수정. (Pull Request)

  • BigDecimalFloat의 숫자성 동등성 유효성 검사를 BigDecimal로 캐스팅하여 수정. (Pull Request)

  • 다중 매개변수 시간 해시 변환 시 연도 값 수정. (Pull Request)

  • 부울 속성에 거짓 부울 기호를 false로 변환. (Pull Request)

  • value_from_multiparameter_assignment에서 ActiveModel::Type::Date에 대한 올바른 날짜 반환. (Pull Request)

  • 오류 번역을 가져올 때 :errors 네임스페이스로 폴백하기 전에 부모 로케일로 폴백. (Pull Request)

Active Support

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

제거

  • Inflections에서 deprecated #acronym_regex 메서드 제거. (Commit)

  • deprecated Module#reachable? 메서드 제거. (Commit)

  • 대체 방법 없이 Kernel#` 제거. (Pull Request)

사용 중단

  • 음수 정수 인수를 사용하는 String#firstString#last 사용 중단. (Pull Request)

  • String#downcase/upcase/swapcase로 대체하여 ActiveSupport::Multibyte::Unicode#downcase/upcase/swapcase 사용 중단. (Pull Request)

  • String#unicode_normalize로 대체하여 ActiveSupport::Multibyte::Unicode#normalizeActiveSupport::Multibyte::Chars#normalize 사용 중단. (Pull Request)

  • String#is_utf8?로 대체하여 ActiveSupport::Multibyte::Chars.consumes? 사용 중단. (Pull Request)

  • array.flatten.pack("U*")string.scan(/\X/).map(&:codepoints)로 대체하여 ActiveSupport::Multibyte::Unicode#pack_graphemes(array)ActiveSupport::Multibyte::Unicode#unpack_graphemes(string) 사용 중단. (Pull Request)

주요 변경 사항

  • 병렬 테스팅 지원 추가. (Pull Request)

  • String#strip_heredoc이 문자열의 동결 상태를 유지하도록 수정. (Pull Request)

  • 다국어 문자 또는 그래픽 클러스터를 손상시키지 않고 최대 바이트 크기로 문자열을 자르는 String#truncate_bytes 추가. (Pull Request)

  • delegate 메서드에 비공개 메서드로 위임하는 private 옵션 추가. (Pull Request)

  • ActiveSupport::Inflector#ordinalActiveSupport::Inflector#ordinalize에 대한 I18n 키 스타일 지원 추가. (Pull Request)

  • Date, DateTime, Time, TimeWithZonebefore?after? 메서드 추가. (Pull Request)

  • 혼합 유니코드/이스케이프 문자 입력으로 URI.unescape가 실패하는 버그 수정. (Pull Request)

  • 압축이 활성화된 경우 ActiveSupport::Cache가 저장소 크기를 크게 늘리는 버그 수정. (Pull Request)

  • Redis 캐시 저장소: delete_matched가 더 이상 Redis 서버를 차단하지 않도록 변경. (Pull Request)

  • ActiveSupport::TimeZone.allActiveSupport::TimeZone::MAPPING에 정의된 모든 타임존에 대한 tzinfo 데이터가 누락된 경우 실패하는 버그 수정. (Pull Request)

  • 전달된 블록의 값 또는 기본 인수를 사용하여 열거형에서 해시를 만드는 Enumerable#index_with 추가. (Pull Request)

  • Range#===Range#cover? 메서드가 Range 인수로 작동하도록 변경. (Pull Request)

  • RedisCacheStore의 increment/decrement 작업에 키 만료 지원 추가. (Pull Request)

  • 로그 구독자 이벤트에 CPU 시간, 유휴 시간 및 할당량 기능 추가. (Pull Request)

  • Active Support 알림 시스템에 이벤트 객체 지원 추가. (Pull Request)

  • ActiveSupport::Cache#fetchskip_nil 옵션 추가하여 nil 항목 캐싱 방지. (Pull Request)

  • 블록이 true를 반환하는 요소를 제거하고 반환하는 Array#extract! 메서드 추가. (Pull Request)

  • HTML 안전 문자열을 자른 후에도 HTML 안전 상태 유지. (Pull Request)

  • 로깅을 통한 상수 자동 로드 추적 지원. (Commit)

  • travel_back의 별칭으로 unfreeze_time 정의. (Pull Request)

  • ActiveSupport::TaggedLogging.new가 인수로 받은 로거 인스턴스를 변경하는 대신 새 로거 인스턴스를 반환하도록 변경. (Pull Request)

  • #delete_prefix, #delete_suffix#unicode_normalize 메서드를 HTML 안전 메서드로 취급. (Pull Request)

  • 기호 인수로 ActiveSupport::HashWithIndifferentAccess#without가 실패하는 버그 수정. (Pull Request)

  • Module#parent, Module#parents, Module#parent_name을 각각 module_parent, module_parents, `moduleparent네, 번역을 계속하겠습니다.

Active Job

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

제거

사용 중단

주요 변경 사항

  • Active Job 인수에 대한 사용자 정의 직렬화기 지원 추가. (Pull Request)

  • Active Job이 대기열에 추가된 타임존에서 실행되도록 지원 추가. (Pull Request)

  • retry_on/discard_on에 여러 예외 전달 허용. (Commit)

  • 블록 없이 assert_enqueued_withassert_enqueued_email_with 호출 허용. (Pull Request)

  • after_enqueue 콜백 대신 around_enqueue 콜백에서 enqueueenqueue_at 알림 래핑. (Pull Request)

  • 블록 없이 perform_enqueued_jobs 호출 허용. (Pull Request)

  • 블록 없이 assert_performed_with 호출 허용. (Pull Request)

  • 작업 어설션 및 헬퍼에 :queue 옵션 추가. (Pull Request)

  • 작업 재시도 및 폐기에 대한 후크 추가. (Pull Request)

  • 작업 수행 시 인수 부분 집합 테스트 방법 추가. (Pull Request)

  • Active Job 테스트 헬퍼에서 역직렬화된 인수 포함. (Pull Request)

  • only 키워드에 Proc을 전달할 수 있도록 Active Job 어설션 헬퍼 변경. (Pull Request)

  • 어설션 헬퍼에서 작업 인수의 마이크로초와 나노초 제거. (Pull Request)

Ruby on Rails 가이드

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

주요 변경 사항

  • Active Record를 사용한 다중 데이터베이스 가이드 추가. (Pull Request)

  • 자동 로드 문제 해결에 대한 섹션 추가. (Commit)

  • Action Mailbox 기본 사항 가이드 추가. (Pull Request)

  • Action Text 개요 가이드 추가. (Pull Request)

크레딧

Rails에 많은 시간을 보내 안정적이고 견고한 프레임워크로 만든 많은 기여자들의 전체 목록을 참조하세요. 모든 분들께 박수를 보냅니다.