macOS에 RabbitMQ 설치하기

macOS에 RabbitMQ 설치하기

맥북에 RabbitMQ를 설치하는 과정을 정리해본다. 이미 웹상에 많은 자료가 있지만 시간이 조금 지난 문서들인 것 같아서 현재 최신 버전인 3.8을 기준으로 작성하려고 한다.

일단 RabbitMQ라는 소프트웨어는 AMQP 프로토콜을 구현한 메세지 큐이다. ‘큐’라는 단어에서 알수있듯이 무언가를 순차적으로 저장하는 역할을 한다. 이렇게 저장된 메세지를 다른 시스템에게 순서대로 전달해주는 일을 하며 이러한 역할을 하는 소프트웨어를 메세지 큐 또는 메세지 브로커라고 한다.

보통, 웹 환경에서 보다 나은 사용자 경험을 위해서 비동기 작업 또는 백그라운드 작업을 해야할 때 이용하며 Redis와 함께 자주사용되는 메세지 브로커 소프트웨어 중 하나이다.

웹 환경에서 메세지 브로커를 사용하는 예제를 보면 RabbitMQ와 Redis에 대한 자료가 가장 많을 것이다.

설치하기

일단 맥북의 homebrew를 업데이트 한다.

1
brew update

그리고 바로 rabbitmq를 설치해주면 된다. RabbitMQ는 Erlang이라는 언어로 작성되어 있는 오픈소스 소프웨어인데 인스톨하는 과정에서 Erlang 설치와 의존성 패키지들을 설치할 것이다. (보통의 brew와는 다르게 설치 시간이 좀 걸린다)

1
brew install rabbitmq

rabbitmq와 관련한 CLI tools을 사용하기 위해서 환경변수를 설정해주어야 하는데, 바로 이 부분이 과거와 비교했을때 바뀐 부분일 것이다. rabbitmq 서버 스크립트와 관련 커맨드라인 툴은 /usr/local/Cellar/rabbitmq 디렉토리의 sbin 폴더에 설치가 되는데 /usr/local/opt/rabbitmq/sbin 의 경로를 통해 사용할 수 있다고 한다. 이 경로가 PATH에 잡혀있지 않기 때문에 따로 명시해주어야 한다.

1
export PATH=$PATH:/usr/local/opt/rabbitmq/sbin

터미널을 재시작하거나 사용중인 쉘 설정파일을 source 해주면 rabbitmq-server로 시작하는 명령어를 사용할 수 있다.


[참고]
https://www.rabbitmq.com/install-homebrew.html

Share

리눅스 명령어 - head / tail

리눅스의 head / tail 명령어

파일의 앞 부분과 뒷 부분을 출력하는 명령어.

파일 앞 부분의 10줄을 출력한다. 다양한 옵션을 사용할 수 있다.

1
2
3
head /etc/passwd # 기본이므로 상위 열 줄 출력
head /etc/passwd -n 5 # 위에서부터 다섯 줄 출력
head /etc/passwd -n -3 # 아래의 세 줄을 제외하고 모든 내용 출력

tail

파일 뒷 부분의 10줄을 출력한다

-n 옵션을 이용해서 몇 개의 라인을 출력할지 설정할 수 있다

1
2
3
tail /etc/passwd # 기본이므로 아래의 열 줄 출력
tail /etc/passwd -n 3 # 아래의 세 개의 줄만 출력
tail /etc/passwd -n +3 # 3번째 줄부터 모든 내용 출력

-f 와 -F 옵션을 사용하면 파일이 내용이 변경되는 것까지 추적할 수 있다

1
2
tail -f # 파일의 변경을 추적. 파일이 삭제된다면 더 이상 추적하지 않음
tail -F # 파일의 변경을 추적. 파일이름이 변경되더라도 계속해서 추적한다
1
2


Share

어드민 패널의 save_model 오버라이드

admin app의 save_model 메소드

어드민 패널의 save_model 메소드는 모델을 저장하는 작업의 전, 후에 영향을 미칠 수 있다. ModelForm을 사용중이라면 admin.py에 form 클래스는 따로 명시해주지 않았을때 기본적으로 생성해서 사용하지만, form 클래스를 만들어서 어드민 패널에서만 사용할 수 있도록 할 수 있다.

나의 경우 이미 앱에서 사용 중인 모델 폼이 있었는데, 이 모델 폼을 어드민 패널에서 사용하기에는 조금 안맞는 부분이 있어서 어드민에서만 사용할 폼을 생성해서 admin.py에 명시하여 수정하는 방법을 사용했다.

어드민에서 모델 인스턴스를 저장할때 save_model 메소드를 오버라이딩해서 로직을 수정할 수 있다.

ModelAdmin.save_model(request, obj, form, change)

네 개의 인자를 받는다.

  • request
  • 모델 인스턴스(model instance)
  • 모델 폼 인스턴스(modelform instance)
  • 생성인지 수정인지 나누는 부울 값(True / False)
1
2
3
4
5
6
from django.contrib import admin

class ArticleAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.user = request.user
super().save_model(request, obj, form, change)

장고 공식페이지의 예제이다. Article 모델의 어드민 관련 코드이며 save_model 메소드를 오버라이드 하고 있다.

모델 코드를 보지 않고서라도 Article 모델에 user라는 일대일 관계를 가진 필드가 있음을 알 수 있다. 현재 어드민에 로그인한 유저를 Article 모델 인스턴스의 user 필드에 저장을 하기 위한 코드인 것 같다.

Share