Programming12 [Ruby On Rails] Module Mixin (1) - include, prepend, extend Ruby는 다중 상속을 지원하지 않는다. 즉 Ruby 클래스는 하나의 부모 클래스(슈퍼 클래스)만 가질 수 있다는 뜻이다. Ruby에서는 다중 상속을 모듈의 Mixin을 통해 구현이 가능하다. Mixin에 대해 알아보기 전 Class와 Module의 차이점과 클래스 조상의 목록인 Ancestors에 대해 먼저 확인해보자. Class vs Module Class 객체 지향 프로그래밍에서 클래스는 클래스 인스턴스, 클래스 객체, 인스턴스 객체 또는 간단히 객체라고 하는 자체 인스턴스를 만드는 데 사용되는 구성이다. 클래스는 인스턴스가 상태와 동작을 가질 수 있도록 하는 구성 요소를 정의한다. 따라서 클래스는 객체 생성을 위해 만드는 것이다. Module 루비에서 모듈은 “메서드와 상수의 모음”을 뜻한다. 따.. 2023. 4. 18. [Ruby On Rails] Eager loading으로 N+1 문제 해결하기 Ruby On Rails에서 N+1 문제를 해결할 수 있는 방법에 대해 알아보려고 한다. N+1 문제란? 연관 관계가 설정된 엔티티를 조회할 경우 조회된 데이터 개수(n)만큼 연관 관계의 조회 쿼리가 추가로 실행되는 것을 의미한다. School 테이블과 Teacher 테이블이 1:N 관계라고 가정해보자. class School < ApplicationRecord has_many: :teachers end class Teacher < ApplicationRecord belongs_to: :school end 각 학교별 선생님들의 이름을 출력하고자 했을 때, School 데이터 전체를 조회하는 쿼리 하나와 각각의 school에 속해 있는 teachers 데이터를 조회하는 쿼리가 추가로 발생하는 것을 볼 수 .. 2023. 4. 16. [Ruby On Rails] Elasticsearch 검색 템플릿(Search Template) 사용하기 2023.03.26 - [Programming/ElasticSearch] - [ElasticSearch] 검색 템플릿이란? (Search Template) 위 포스팅에서는 Elasticsearch의 검색 템플릿에 대해 정리하였다. 그러면 이 검색 템플릿을 Ruby On Rails 프로젝트에서는 어떻게 사용할 수 있을까? Elasticsearch에서는 공식 Ruby 클라이언트를 제공하고 있는데 elasticsearch gem을 다운로드하여 두 개의 개별 라이브러리를 사용할 수 있다. elastic-transport- Elasticsearch 클러스터에 연결하기 위한 저수준 코드를 제공 elasticsearch-api- Elasticsearch RESTful API를 위한 Ruby API를 제공 https:.. 2023. 3. 28. [Elasticsearch] 검색 템플릿이란? (Search Template) Elasticsearch 검색 템플릿(Searh Template) 기능을 사용하면 편리하고 간단하게 쿼리 호출이 가능하다. 장점 여러 인덱스에서 사용하는 동일한 쿼리가 있는 경우 템플릿을 통해 편리하게 사용 가능 코드 수정 없이도 부스팅을 하거나 쿼리의 간단한 수정 가능 검색 템플릿 생성 PUT _scripts/my-search-template { "script": { "lang": "mustache", "source": { "query": { "match": { "message": "{{query_string}}" } }, "from": "{{from}}", "size": "{{size}}" } } } 파라미터 기본값 정의 아래 구문처럼 작성하면 파라미터 기본값 정의도 가능하다. {{my-var}}{{.. 2023. 3. 26. [Ruby On Rails] enum 경고 문구 - Overwriting existing method Ruby On Rails에서 enum은 자동으로 필드의 허용 값을 기반으로 하는 스코프를 제공한다. 이때 enum으로 정의한 값이 다른 라이브러리에서 사용 중이었고 아래와 같은 경고 문구를 보게 되었다. Creating scope :open. Overwriting existing method .open. 모델에서 정의한 enum 필드의 스코프가 다른 open 메서드를 덮어쓰고 있다고 한다. 모델에서 enum 선언 이전에 undef_method를 통해 해결할 수 있다. class 2023. 3. 26. [Ruby On Rails] 동시성 제어하기 - ActiveRecord Locking API 동시 호출로 인하여 데이터의 무결성이 깨지는 문제가 있었고 트랜잭션 동시성 제어의 필요성을 느꼈다. 동시성 제어 (Concurrency Control) 란? : 동시에 실행되는 여러 개의 트랜잭션이 작업을 성공적으로 마칠 수 있도록 트랜잭션의 실행순서를 제어하는 기법 동시성 제어의 목적 트랜잭션의 직렬성 보장 공유도 최대, 응답시간 최소, 시스템 활동의 최대 보장 데이터 무결성 및 일관성 보장 그렇다면 동시성 제어를 어떻게 할 수 있을까? 락킹(locking) : 트랜잭션이 데이터에 잠금을 설정하면 다른 트랜잭션에서 해당 데이터에 대해 잠금이 해제되기 전까지 접근/수정/삭제를 불가능하도록 하여, 트랜잭션이 사용하는 자원에 대하여 상호 배제 기능을 제공하는 방식 타임스탬프 : 시스템에서 생성하는 고.. 2023. 3. 22. 이전 1 2 다음