Computer >> 컴퓨터 >  >> 프로그래밍 >> Ruby

Ruby on Rails 트랜잭션 마스터하기:5가지 필수 설계 방식

데이터 무결성 문제는 Rails 개발자가 직면하는 가장 일반적인 데이터베이스 문제 중 하나입니다. 적절한 검증을 허용하는 것 외에도 올바르게 설계된 거래 블록은 데이터가 부분적으로 생성되거나 업데이트되지 않도록 보장합니다.

그러나 트랜잭션이 적절하게 설계되지 않으면 애플리케이션에 해를 끼치거나 심지어 전체 데이터베이스를 다운시킬 수도 있습니다.

이 문서에서는 트랜잭션 작업에 대한 일련의 모범 사례를 제공합니다. 팁은 매우 간단하지만 귀하의 거래를 완벽하고, 읽기 쉽고, 상대적으로 안전하게 만드는 데 도움이 될 것입니다.

뛰어들어 보세요!

1. 가능하다면 Rails에서 Bang 메소드를 사용하세요

Rails에서 !가 포함된 메소드 버전 문제가 발생하면 오류가 발생할 것이라는 확신을 줄 수 있습니다.

예를 들어 #save 메소드가 save!에도 존재합니다. 버전. 오류가 발생하지 않도록 하려면 컨트롤러에서 이 버전을 사용하는 것이 좋습니다:

 

위의 접근 방식은 트랜잭션에서 잘 작동하지 않습니다. save을 사용하여 , 오류가 발생하면 프로세스를 롤백할 수 없습니다. 그렇기 때문에 !을 사용하는 것이 매우 중요합니다. 메소드 버전:

 

위의 경우 회원 기록이 생성되지 않아도 트랜잭션이 성공하고 결국 데이터베이스의 데이터 구조가 엉망이 됩니다.

다음 버전을 사용하는 경우 ActiveRecord::RecordNotSaved으로 인해 트랜잭션이 되돌려집니다. 오류:

 

2. Rails 트랜잭션의 오류를 적절하게 처리

거래 오류와 관련하여 준수해야 할 몇 가지 규칙이 있습니다. 이러한 규칙을 따르면 다른 개발자 사이에 혼란을 일으키거나 디버깅하기 어려운 이상한 동작을 일으키지 않고 읽기 쉽고 잘 작동하는 코드를 갖게 됩니다.

ActiveRecord::StatementInvalid에서 구조하지 마세요

ActiveRecord::StatementInvalid 데이터베이스 수준에서 문제가 발생할 때 발생하는 특수 오류입니다. 이 오류로부터 절대로 구조하지 마십시오. 데이터베이스 쿼리에 문제가 있을 경우 항상 명시적으로 알림을 받아야 합니다.

다음 코드는 사용하지 마세요:

 

적절한 수준의 구조 사용

다음 수준에서 구조를 사용하면 오류가 발생합니다:

 

오류가 발생했기 때문에 트랜잭션이 롤백되지 않습니다. 오류가 발생하도록 하고 트랜잭션 블록 외부에서 이를 잡아냅니다.

 

위의 접근 방식에서는 오류가 발생할 경우 트랜잭션이 롤백되며 오류를 포착합니다. 이는 트랜잭션 동작을 덮어쓰지 않고 트랜잭션 내부에서 발생한 오류를 잡는 올바른 접근 방식입니다.

일반 오류를 포착하지 마세요

StandardError와 같은 일반적인 오류를 포착하지 않아야 합니다. 또는 ArgumentError . 이는 읽기 쉽고 테스트하기 쉬운 코드에 대한 일반적인 규칙에 가깝지만 언급할 가치가 있습니다.

이러한 오류를 포착하면 코드의 다른 위치에서 오류가 발생할 수 있으므로 디버깅이 더 어려워질 수 있습니다. 이렇게 하면 구조한 장소와 반드시 관련되지 않은 앱의 심각한 문제가 잠잠해질 수 있습니다.

ActiveRecord의 기본 롤백 오류를 현명하게 사용하세요

ActiveRecord는 트랜잭션 내부에서 자동 롤백을 수행하는 데 사용할 수 있는 특정 오류 클래스를 제공합니다. ActiveRecord::Rollback를 발생시켜 트랜잭션을 롤백합니다. 오류가 발생하지만 다른 오류와 마찬가지로 오류가 외부에서 발생하지 않습니다. 이 행동을 염두에 두고 현명하게 사용하세요.

3. Rails에서 트랜잭션 사용을 피해야 할 때를 알아두세요

다른 것과 마찬가지로 코드에서 트랜잭션을 과도하게 사용해서는 안 됩니다. 예를 들어, 일반적인 실수는 하나의 쿼리만 트랜잭션에 래핑하는 것입니다. 쿼리가 성공하지 못하면 아무것도 롤백할 필요가 없기 때문에 이는 의미가 없습니다.

또 다른 일반적인 실수는 데이터베이스 호출과 관련 없는 코드를 트랜잭션으로 래핑하는 것입니다. 블록 내부의 코드가 실행되지 않으면 트랜잭션이 연결을 유지하므로 이러한 접근 방식을 피해야 합니다. 가능하다면 데이터베이스만 호출하도록 블록 내부의 코드를 제한하세요.

4. 거래의 단점 이해

트랜잭션은 데이터베이스 내에서 데이터 무결성을 유지하는 데 도움이 되지만 단점도 알고 있어야 합니다. 예를 들어, 트랜잭션 블록에 래핑된 쿼리는 단일 쿼리보다 더 많은 DB 리소스를 사용합니다.

트랜잭션 사용의 또 다른 단점은 코드가 더 복잡해진다는 것입니다. 트랜잭션을 잘못 사용하면 코드 읽기가 어려워질 수 있습니다.

5. 올바른 상황에서 트랜잭션 블록을 사용하세요

클래스가 ActiveRecord에서 상속받을 때 트랜잭션 메서드를 사용할 수 있습니다. 수업. 이는 사용하는 버전이 중요하지 않다는 의미는 아닙니다. 기능적인 관점에서는 중요하지 않을 수 있지만 코드를 읽을 수 있다는 점에서는 중요합니다.

세 가지 일반적인 버전은 거래 방법을 사용합니다:

 

많은 모델을 사용하고 인스턴스 메서드 호출을 블록 내부의 클래스와 혼합하는 경우 ActiveRecord::Base.transaction를 사용해야 합니다. :

 

특정 모델에 속하는 코드를 주로 다루는 경우 클래스에서 트랜잭션 메서드를 호출하세요.

 

모델 인스턴스를 작업할 때 인스턴스 수준에서 트랜잭션 메서드를 호출하는 것이 좋습니다.

 

물론 이 규칙은 공식적인 것이 아닙니다. 이는 단지 코드를 더 읽기 쉽게 만들기 위한 제안일 뿐입니다.

다음 단계:Ruby on Rails 프로젝트의 거래 검토

Ruby on Rails의 트랜잭션 작업에 대한 이러한 팁이 도움이 되었기를 바랍니다.

우리는 데이터 무결성을 향상하고 프로세스가 예상치 못한 부작용 없이 수행되도록 보장하기 위해 Rails 트랜잭션을 올바르게 설계하는 것의 중요성을 다루었습니다.

그러나 적절한 오류 처리 정책은 트랜잭션을 사용할 때 유용할 뿐만 아니라 전체 코드베이스도 향상시킵니다. 다음에 코드에서 오류가 발생할 것으로 예상되면 이 점을 명심하세요.

이제 Ruby on Rails 프로젝트 디자인의 트랜잭션을 검토하여 오류를 방지할 수 있는 좋은 기회입니다. 애플리케이션을 더욱 안정적으로 만들기 위해 데이터베이스와의 효율적이고 안정적인 통신을 설계하세요.

즐거운 코딩 되세요!

추신 Ruby Magic 게시물이 보도되는 즉시 읽으려면 Ruby Magic 뉴스레터를 구독하고 단 하나의 게시물도 놓치지 마세요!

Ruby on Rails 트랜잭션 마스터하기:5가지 필수 설계 방식

파웰 동브로스키

우리의 객원 작가인 Paweł은 인간과 컴퓨터 모두를 위한 글쓰기 분야에서 10년 이상의 경험을 보유한 오픈 소스 팬이자 성장을 추구하는 사람입니다. 그는 점들을 연결하여 고품질 소프트웨어를 만들고 사람 및 기업과 귀중한 관계를 구축합니다.

Paweł Dąbrowski의 모든 기사