본문 바로가기

소프트웨어-이야기

레일즈에 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를 사용..
(카오스 엔지니어링)카오스 몽키 카오스 몽키가 생긴 배경 => 넷플릭스에서 IDC에서 AWS으로 이관하면서 탄생했음. 2016년도에 릴리즈되었음카오스 몽키는 golang으로 만들어져있다. go가 설치되어있으면, go get으로 카오스몽키를 다운받을 수 있다. 카오스 몽키를 설치하려면 Spinnaker가 기본으로 설치되어있어야한다. 이게 있어야 몽키가 죽일 클러스터를 만들 수 있다. Spinnaker는 로드 밸런서, 서버 그룹 등등을 테스트 서버에 만들어준다. 카오스 몽키를 띄우려면 데이터베이스도 설치해야한다. 카오스 몽키를 사용하려면 설정 파일이 필요하다. 여기에는 카오스 몽키, 데이터베이스, 스피네이커 설정 정보가 들어간다. Kubernetes Helm은 쿠버네티스 차트를 관리하는 역할을 한다.
(도커) docker component 쓰기 Docker component란?여러개의 애플리케이션 컨테이너를 정의하고, 관리해주는 도구이다. Docker Component 실행하기 docker-compose start 이 명령문을 실행하면, 세트로 묶여있는 컨테이너가 동시에 시작된다. Docker Component 끄기docker-compose stop 이 명령문을 실행하면, 세트로 묶여있는 컨테이너가 동시에 꺼진다. 컨테이너를 하나하나 끄고 싶을 때는 container stop을 하면 된다.
[git] REFLOG - REBASE 취소하기 REBASE를 취소하는 방법잘못 리베이스된 git이 remote까지 반영된 경우, 이걸 취소해야하는 경우가 있다. 이때는 reflog와 reset을 사용하면 된다. 1. git reflog 브랜치명이 명령문은 잘못 리베이스한 로컬 컴퓨터에서 실행해야한다. 그래야 리베이스 로그를 볼 수 있다. 그리고 이 명령문은 그냥 로그를 보는 거여서, 막 쳐봐도 된다. 무서워할 필요 없다. 2. git reset -- hard 128e6d4reflog를 보고, 돌아가고 싶은 커밋명을 찾는다. 그다음 그 커밋명을 위에 명령문처럼 쓰고, 이전 커밋 이력을 모두 reset한다. 3. git push -f origin 브랜치명이렇게 리셋한 커밋이력을 리모트로 강제 푸시를 해야한다. 그러니 -f 옵션을 추가한 후, git pu..
TDD와 테스트코드의 장점 회사 내에서 Ruby On Rails 테스트 코드인 Rspec을 공유하는 세션을 하게 되었다. 그래서 TDD를 하고, 테스트코드를 작성하면서 경험한 장점들을 정리해봤다. TDD의 장점 이미지 참고 1. 단계별로 어떤 기능을 구현해야하는지 쉽게 정리할 수 있다나는 기능 구현을 할 때, 필요한 테스트 항목들을 Description으로 나열한다. 그러면 내가 어떤 기능을 단계적으로 만들야하는지 정리할 수 있다.TDD를 하면, 테스트 케이스를 기능 구현과 동시에 작성하게 되는거다. 그러다보니 예외 케이스를 빨리 인지할 수 있다. 2. 개발 사이클이 짧아진다테스트를 자동화하면, 기대하는 값을 바로 확인할 수 있다. 그러다보면 개발 주기가 짧아진다.서버 개발을 할 때, 주로 API를 구현한다. 그래서 이걸 테스트하..
(Strangler Pattern/스트랭글러 패턴) 레거시 코드를 마이크로 서비스 아키텍처로 개선하기 Strangler Pattern모놀리틱 아키텍처로 된 시스템이 계속 자라나면, 더이상 관리할 수 없는 수준이 된다.그리고 아키텍처가 복잡해지거나, 비즈니스 로직이 파편화되면 코드를 관리하기 어려워진다. 그러다보면 배포하기도 까다로워지고, 배포가 무서워지기도 한다. 이럴 땐 버티거나, 서비스 아키텍처로 코드를 리팩토링해야한다. 서비스 아키텍처로 서비스를 한번에 옮기는 것은 리스크가 있다. 시스템은 정상적으로 돌아가면서, 점진적으로 서비스 아키텍처로 코드를 분리해나가는 디자인 패턴이 Strangler Pattern이다. 개선 방법1. 분리해내야하는 도메인을 Service Layer으로 리팩토링을 해야한다. 2. 그리고 분리해낸 도메인의 API가 호출되면, Proxy 단에서 라우팅을 분기처리해준다. 3. 신규..
(AWS) S3 SELECT - S3 파일에 쿼리 날려서 필요한 데이터만 다운받기 AWS S3 SELECT란? AWS s3 / glacier에 저장된 데이터에 쿼리를 날려서, 필요한 데이터만 다운받을 수 있게 해주는 기능이다. 2018년 3월 기준, glacier select는 모든 리전에서 사용할 수 있지만, s3 select는 아직 프리뷰 상태이다. 프리뷰버전에서는 CSV와 JSON 포맷만 지원한다. 그리고 압축 포맷으로는 GZIP만 지원한다. 샘플 코드 import boto3 from s3select import ResponseHandler class PrintingResponseHandler(ResponseHandler): def handle_records(self, record_data): print(record_data.decode('utf-8')) handler = Pri..