[RabbitMQ] Routing(using the Bunny client) 이전 강의에서 간단한 로그 시스템을 만들어봤습니다. 로그 메시지들을 여러 receiver들에게 브로드캐스트할 수 있었습니다. 이번 강의에서는 메시지의 일부를 수신할 수 있게 해볼 것 입니다. 예를들어, 콘솔에 전체 로그 메시지들을 출력하는 동안 치명적인 에러 메시지들은 디스크 공간에 저장될 수 있게 로그 파일에 기록하게 할 수 있습니다. 전제조건 이 튜토리얼에서 RabbitMQ가 localhost에 설치되어있고 기본 포트인 5672로 동작 중인 것을 가정으로 진행됩니다. 다른 호스트나, 포트를 사용할 경우 적절한 세팅을 하셔야합니다. Bindings이전 예제에서 bindings을 이미 만들었습니다. 다음 코드와 같습니다.q.bi..
[Rails] 웹 API를 위한 JSON, XML 응답 보통 웹 API를 작성할 때 응답 형태를 JSON 혹은 XML 형태로 제공한다. Rails에서는 Model의 객체를 손쉽게 JSON 혹은 XML로 변환할 수 있게 제공해준다. 아래 코드의 posts_controller가 왜 api 하위 디렉토리에 있는지, module Api 가 무엇인지 궁금하다면 아래 글을 참고하세요. (일반 controller 에서 사용하신다면 그냥 무시해도 좋습니다.)2015/07/06 - [Ruby&Rails/Rails] - [Rails] Rails에서의 subdomain 설정하기 app/controller/api/posts_controller.rbmodule Apiclass PostsController < Applicatio..
[Rails] Rails에서의 subdomain 설정하기 레일즈를 이용하여 Web API를 제작할 때 서브도메인을 이용하면 DNS 레벨에서 트래픽을 로드밸랜싱해줘 효율적입니다. 서브도메인 설정은 routes.rb 파일에서 설정해주시면 됩니다. config/routes.rbresources :users resources :posts, constraints: { subdomain: 'api' }resources :comments, constraints: { subdomain: 'api' } 이렇게 설정하면 다음과 같이 사용할 수 있습니다.http://api.example.com/postshttp://api.examle.com/comments 여러 resources들이 서브도메인이 필요한 경우 아래와 같이 묶..
[RabbitMQ] Publish/Subscribe(using the Bunny Client) 이전 강의에서 work queue 를 만들어봤습니다. work queue 의 내부에서는 각 작업을 정확히 하나씩의 worker 에게 전달해줍니다. 이번 강의에서는 work queue와는 전혀 다른 하나의 메시지를 여러 consumer들에게 전송해볼 것 입니다. 이 패턴은 publish/subscribe 이라 불립니다. 이 패턴을 구현하기 위해 간단한 로그 시스템을 만들 것 입니다. 2개의 프로그램으로 구성되며, 첫 번째 프로그램은 로그 메시지를 생성하고 두 번째는 로그를 받아 출력합니다. 제작할 로그 시스템은 동작 중인 receiver 프로그램이 받는 모든 메시지들을 복사합니다. 이 경우 한 receiver 프..
Work Queues (using Bunny) 첫번째 강의에서 queue로 송/수신하는 프로그램을 작성했습니다. 이번 강의에서는 여러 작업 프로세스들 사이에서 일정 시간이 소모되는 작업들을 분배하는 Work Queue 를 만들것 입니다. Work Queue(Task Queues 라 불리는)의 핵심 개념은 자원소모가 많은 작업을 즉시 처리하지 않고 작업이 완료될 때까지 기다리는 것입니다. 대신 이 작업이 나중에 처리되어지도록 스케쥴해야합니다. 작업을 메시지로 캡슐화하여 queue에 전송할 것입니다. 작업 프로세스는 백그라운드로 실행되면서 작업을 queue로 부터 꺼내 수행합니다. 여러 작업 프로세스들을 실행시킬 경우 작업들은 프로세스들 사이에서 분배되어 실행될 것입니다. 이 개념은 웹 어플리케이션에서 복잡..
RabbitMQ란? RabbitMQ는 AMQP 프로토콜을 구현한 메시지 브로커입니다. producers 로부터 메시지들을 받아 consumers 에게 전달해주는 서비스로, 쉽게말해 시스템 간에 메시지를 전달해주는 서비스입니다. RabbitMQ는 사용자가 설정한 규칙에 따라 메시지들을 route, buffer, persist 할 수 있습니다. 일반적으로 메시징 시스템이나 RabbitMQ 에서 사용하는 컴퓨터 용어를 살펴보겠습니다. Producing 은 메시지를 전송한다는 의미입니다. 메시지들을 전송하는 프로그램을 producer 라 부릅니다. 앞으로 producer를 P 라고 나타내겠습니다. Queue는 mailbox를 의미하며 RabbitMQ 시스템 내에 위치하게 됩니다. 메시지들은 RabbitMQ를 통..
[Git] 직전 commit 내용 수정 (커밋 합치기) 이미 커밋된 내용에 철자 오류 같이 자잘한 실수 가 있을 경우 새로운 커밋을 하기보단 이전 커밋 내용을 변경하는 것이 낫다 (정확히는 새로운 변경을 커밋 후 직전의 커밋과 합치는 것이다). 위의 그림처럼 typo miss 라는 철자 오류가 작성된 Add feature-C라는 커밋이 있다고 가정하자. 우선 이 typo miss 철자 오류를 수정하고 Fix typo 라는 커밋을 합니다. 이제 git rebase 명령어를 통해 Fix typo 커밋과 Add feature-C 커밋을 합치겠습니다 (Fix typo 커밋을 Add feature-C 커밋으로). $ git rebase -i HEAD~2 위의 명령어를 입력하면 최신 브런치(HEAD)를 포함한 두 ..
직전에 작성했던 commit 메시지 수정 직전에 작성했던 커밋 메시지를 수정하고 싶을 때는 git commit --amend 명령어를 사용 $ git commit --ammend 해당 명령어를 실행하면 에이터가 실행되고 방금 입력했던 commit 메시지가 나옵니다. 이를 수정하고 저장, 종료를 해주시면 됩니다. (에디터에 따라 저장 종료 방법은 다릅니다.)(git 에디터를 설정하고 싶으면 git config --global core.editor "vim" 와 같이 설정해주시면 됩니다.) git log --graph 명령어로 확인해보면 정상적으로 commit 메시지가 변경되었음을 확인할 수 있습니다.