본문 바로가기

소프트웨어 이야기/장고와 루비온레일즈

레일즈에 Service/Decorator Layer 적용하기 (2) - Value Object 이 포스팅은 이 길어져서, 두번째 글을 정리해보고자 합니다. Service Layer를 사용하는 개발 가이드라인이 글을 쓴 저자는 Service / Decorator Layer를 사용해서 개발을 할 때, 아래의 가이드라인을 따른다고 합니다. 1. ActiveRecord 모델은 association과 constant만 갖고 있어야합니다. 그 외에는 아무것도 하지 않아야합니다.model에서는 서비스 객체를 사용하지 않아야하고, 유효성 체크는 ActiveModel Form object를 사용해서 해결해야합니다. 2. 컨트롤러는 Service Object만 호출해야합니다. 컨트롤러의 코드는 짧게 구성되어야합니다. 서비스 객체 호출 외에, 컨트롤러에서 해야하는 기능들은 아래와 같습니다. -> HTTP 라우팅, 파..
레일즈에 Service/Decorator Layer 적용하기(1) - MVC 패턴 이 포스팅은 Build Sleek Rails Components With Plain Old Ruby Objects을 정리한 글입니다 :) 시작루비온레일즈는 사용자를 필요로하는 서비스를 빠르게 앱을 만들고, 검증할 수 있다는 장점이 있습니다.그러나 시스템 규모가 커지면 코드는 점점 거대해지고, 복잡해지게 됩니다. 그러다보면 모델이 너무 뚱뚱해져서, MVC에서 말하는 "fat model, skinny controller" 패턴을 버리고 싶어지기도 합니다.그러나 루비온레일즈를 계속 사용해야하는 경우 어떻게 해야할까요? 이 문제에 대한 답으로 OOP 개념을 사용해서, 코드의 커플링을 줄여주고, 가독성있게 변경하는 방법에 대해서 설명하고자 합니다. 어떤 경우에 Service / Decorator Layer를 사용..
(번역)Command 아키텍처 기반으로 루비온 레일즈의 Controller Action 리팩토링하기 REFACTORING CONTROLLER ACTION IN RUBY ON RAILS 레일즈 컨트롤러가 뚱뚱해지는 현상을 꽤 많이 봤었다. Medium 눈팅하다가, 레일즈 컨트롤러를 리팩토링했다는 글을 발견했다. 뭔 내용인지 궁금해서 ㅋㅋ 읽어본 내용을 정리해보고자 한다. 컨트롤러는 얄쌍하고, 모델은 뚱뚱하게 로직을 짜는게 루비온레일즈의 MVC 기본 원칙이다. 그러나 시간이 흐르다 보면, 프로젝트는 점점더 커지고 메서드도 늘어난다. 그러다 보니 코드를 찾거나 신규 피쳐를 추가하는게 어려워진다. 그러다 결국 컨트롤러는 더이상 얄쌍해지지 않게 되고, 복잡해진다. 이에 대한 해결 방법을 정리하고자 한다. Controllers 우리는 컨트롤러에 코드가 몇백줄이나 되는걸 원하진 않는다. 그래서 가장 좋은 방법은 다..
(읽을거리)루비온레일즈 개발자를 위한 DDD 읽을 거리medium 포스팅Ruby on rails DDD => 읽어보니 루비에서는 어떤 느낌으로 DDD를 쓰는지 감이 온다 공식적인 느낌이 드는 ddd-ruby 사이트ddd-ruby.github.io레일즈 앱에서 비즈니스 도메인을 어떻게 관리할 건지 토론하는 페이지 Struggling with complex Rails app and business domain?2012년도에 작성된 sitepoint 포스팅 시리즈 DDD for Rails Developers. Part 1: Layered ArchitectureDDD for Rails Developers. Part 2: Entities and ValuesDDD for Rails Developers. Part 3: Aggregates스크립트 언어의 DDD ..
[Ruby]루비의 메모리 이슈 루비 메모리 이슈 관련 포스팅 해석 및 따라해보기 블로그 : https://www.toptal.com/ruby/hunting-ruby-memory-issues예제 코드 : https://github.com/lingceng/momery_demo 준비물1. 예제 코드를 다운 받는다 2. Gemfile을 만들어서, 테스트용 스크립트를 돌릴 때 필요한 gem들을 설치한다 예제 코드에서는 Gemfile이 따로 없어서, 나는 아래의 Gemfile을 따로 만들어서 예제 코드를 돌려봤다.이 예제 코드 안에 아래의 Gemfile을 만들고, bundle install을 해주면, Gem들이 설치된다.source 'http://rubygems.org' gem "activerecord" gem "activesupport" ge..
[루비]RUBY KATA - 알고리즘 문제 풀어보는 사이트 CODE WARS 사이트에 가면, 루비 알고리즘을 풀어볼 수 있다. 루비 말고 다른 언어들도 지원한다. 아래의 주소로 가면, 루비 카타들을 연습해볼 수 있다.https://www.codewars.com/kata/search/ruby?q=
[RAILS] association_basics counter_cache 레일즈 가이드에 counter_cache라는 개념이 있길래, 뭔지 궁금해서 찾아봤다.class Comment < ApplicationRecord belongs_to :post, counter_cache: trueendclass Post < ApplicationRecord has_many :commentsend예를 들어, 게시물의 리스트를 조회하는 페이지를 만든다고 생각해보자. 이 때, 게시물(Post)에는 댓글(Comment)가 남는 다.이 때, 아래의 예제 코드처럼, 루프를 돌때마다 댓글의 크기를 세면N+1 쿼리 문제가 발생하게 된다. Started GET "/posts" for ::1 at 2016-03-16 23:47:08 -0700 ActiveRecord::SchemaMigration Load (..
루비온레일즈에서 Class 메서드와 Instance 메서드 이해하기 루비온레일즈에서의 클래스 메서드와 인스턴스 메서드를 어떨 때 사용하는지 찾아봤다.그런데 뭐... 루비라고 특별히 다른건 아닌거같고, 다 비슷하긴 해보인다. 참고한 포스팅http://culttt.com/2015/06/10/understanding-class-methods-verses-instance-methods-in-ruby/ 클래스 메서드란?클래스 메서드는 클래스에 정의된 메서드를 말한다. 이어서 예제 코드를 보고 설명하고자 한다 ㅎㅎ class User def self.find(id) puts "finding user with the id of #{id}" end end 보통.. ㅎㅎ 저렇게 id를 넘기면 user 객체를 리턴시켜준다.아무튼.. class 메서드는 앞에 self를 붙여준다. class..