본문 바로가기

개발/Backend

(11)
[RabbitMQ] 메시지 속성 뜯어보기 지난 글에서는 메시지를 발행하는 과정을 따라가면서 프레임의 단위에 대해 알아 보았다.이번 글에서는 메시지를 발행할 때 전송하는 프레임 중 콘텐츠 헤더 프레임에는 어떤 속성이 있는지 알아보고 각 속성 별로 사용 방법에 대해 소개하려고 한다.  ✅ Header frame 속성, 한 눈에 보기Header frame 에 포함된 속성은 위 그림처럼 14개의 속성을 포함하고 있다. 지난 글에서 알게된 delivery_mode의 경우, 1로 설정하면 메시지를 디스크에 저장하는 것처럼 AMQP 스펙에서 정의한 의미를 가지는 속성도 있는 한편, 정확한 스펙이 없는 속성도 있다. 그럼 위의 속성 별로 어떤 특징을 가지는지 알아보자.  ✔️ content_encodingAMQP를 통해 전달하는 메시지는 기본적으로 압축되지 ..
authentication & authorization 인증(authentication)과 인가(authorization)은 보안 시스템에서 가장 기본적인 요소로 종종 혼용되는 경우가 있다.밀접하게 관련이 되어 있기 때문이지만 엄밀히는 목적이나 역할이 다르기 때문에 명확하게 이해할 필요가 있다.이번 글에서는 이 두가지 개념에 대해 정리하려고 한다. ✅ authentication인증은 사용자가 스스로 주장하는 신원이 맞는지를 확인하는 절차이다.이 단계의 주요 목표는 신뢰할 수 있는 방법으로 사용자 정보를 확인하는 것이다. 이를 위해 다양한 방법이 사용되는데, 대표적인 방식을 알아보자. 지식 기반 인증사용자가 알고 있는 정보를 이용해 인증하는 방식 (아이디 및 비밀번호 등을 활용)쉽게 접근이 가능하기 때문에 비밀번호가 유출되는 경우 누구나 접근 가능 소유 기반 ..
[RabbitMQ] AMQP 통신 과정 속 프레임 구조 이해하기 이번 글에서는 지난 글에 이어서 메시지를 발행하는 과정을 따라가면서 저수준에서의 구현 방식을 이해해보고자 한다. ✅ AMQP의 RPC 프레임 구조 이해하기AMQP 스펙에는 클래스와 각 클래스 별 메소드가 정의되어 있다.통신을 위해 Connection이 필요하니 Connection을 맺는 것부터 클래스 / 메소드로 알아보면서 그 과정을 따라가보자. 클라이언트에서는 연결을 맺을 수 있는지에 대한 데이터 덩어리를 보낸다. 여기서 말하는 데이터 덩어리를 앞으로 프레임이라고 부를 것이다. 여기서 보내진 프레임은 하나의 요청으로 간주할 수 없고, 다른 통신과 다르게 명령의 성격을 가지지 않는다.여기서 전송되는 데이터 덩어리라는 프레임을 자세히 뜯어보자. 1. 프로토콜 헤더 프레임 첫번째 자리에 있는 1은 프레임의 ..
[RabbitMQ] RabbitMQ란 AI 분석 서버를 운영하게 되면 실시간으로 들어오는 요청을 처리해야 한다. 유저가 분석 요청을 하게 되면 서버는 데이터를 받아 처리하고 결과를 반환해야 한다. 그런데 분석 요청이 한두 건이 아니라 수백, 수천 건이 동시에 들어오게 된다면? 쉽게 예상할 수 있듯이 요청이 몰리면서 서버의 리소스가 한쪽에 치우친다거나, 특정 태스크가 오래 걸리면서 전체 요청의 지연으로 이어지게 된다거나 어쩌먼 특정 태스크의 분석이 실패하면 전체 작업이 중단되어 버릴 수 있다. 이때 문제를 해결하기 위한 도구가 바로 RabbitMQ다. 이번 글에서는 RabbitMQ가 무엇인지, 어떤 방식으로 구현이 되어 있는지에 대해 정리하고자 한다.글의 대부분은 각 컴포넌트에 대한 설명이 될 것이고, RabbitMQ를 사용하는 방법에 대해서..
모르면 손해보는 git rebase (1) 여러 사람이 한 프로젝트(레포지토리)에서 협업 할 때에는 브랜치 관리가 필수적이다. 다른 말로 표현하면 혼자 한 프로젝트를 전담한다면 git에서 브랜치 관리가 크게 중요하지 않다. 과거의 나는 대부분 혼자(혹은 두어명이) 하나의 레포를 전부 관리했었고, 그러다 보니 git의 다양한 커맨드를 사용할 일이 없었다. 그러다 보니 가끔 충돌이 발생할 때 문제를 해결하는 방법에 대해서도 민망할 정도로 무지한 편이었다. 그러다 최근에 git의 다양한 커맨드를 알게 되어 잘 사용하고 있는데, 사용할수록 그동안 모르고 살았던 시간이 아깝다는 생각이 들었고 (ㅋㅋㅋ) 많은 사람들이 git rebase 를 비롯한 다양한 기능을 편하게 사용하길 바라며 내용을 정리해보고자 한다. ✅ git rebase다른 사람과 협업하기 ..
HTTP/3, HTTP over QUIC HTTP/3는 3번째 메이저 버전으로 2022년 6월 6일 RFC 9114를 통해 표준화 되었습니다. HTTP/3에 대해 들어보셨다면 익히 아시겠지만, HTTP/3는 UDP 기반의 QUIC 프로토콜을 사용합니다. 그래서 RFC 9114 의 주요 내용을 읽어보면서 (그 중에서도 의미론적인 접근방법으로) HTTP/3에 대해서 간략하게 소개하고, TCP 프로토콜의 한계에 대해 먼저 알아보려고 합니다. HTTP는 1994년 ~ 1995년에 인터넷 붐을 맞이하며, 1996년에 HTTP/1.0 을 문서화한 RFC 1945를 발표했습니다. HTTP/2를 문서화한 RFC 7540 은 2012년 처음 제안되어서 2015년 표준화되었습니다. 그리고 이번엔 7년만에 HTTP/3가 표준화된 것인데요. 아래의 점유율을 보면 R..
프로세스(Process)와 스레드(Thread) 프로세스 우리는 휴대폰이나 컴퓨터를 통하여 다양한 프로그램을 사용합니다. 지금 이 글을 보고 있는 순간에도 크롬이나 다른 인터넷 브라우저를 사용하고 있을 텐데요, 이러한 프로그램이 실행되는 단위를 프로세스라고 합니다. 조금 다른 측면에서 이야기해보자면, 컴퓨터의 운영체제는 컴퓨터의 자원을 관리하는 역할을 하는데, 실행 가능한 프로그램 파일을 메모리에 올리고 이를 프로세스로 실행시키기도 합니다. 그러니까 프로세스는 운영체제로부터 할당받는 자원의 단위라고 할 수 있겠습니다. 내 컴퓨터의 프로세스 이런 단위를 눈으로 확인해보려면 macOS를 기준으로, spotlight에서 activity monitor를 검색해보면 아래처럼 눈으로 확인해 볼 수 있습니다. 캡처화면 하단 우측에 따르면 약 660개의 프로세스와 ..
[redis] redis의 데이터 타입 Strings redis에서 사용하는 가장 일반적인 형태이다. 이 타입은 binary safe한데, JPEG 이미지 등 어떤 형태의 데이터도 저장 가능하다는 것을 의미한다. 최대 512Mb의 길이를 저장할 수 있다. strings 타입으로는 아래에 있는 것들을 할 수 있다. APPEND 명령어를 사용하여 기존 문자열과 이어붙이는 것이 가능하다. INCR family(incrby, decrby)를 사용하여를 atomic한 카운터를 구현할 수 있다. GETRANGE나 SETRANGE를 사용하여 문자열 중 아무 위치로 접근할 수 있다. Lists Lists는 strings의 입력 순서로 정렬된 단순한 배열이다. List의 맨 왼쪽(head)나 맨 오른쪽(tail)에 추가하는 것이 가능하다. LPUSH는 왼쪽으..