최근 서비스에서는 Kafka 메시지 처리를 위해 정규식 기반으로 여러 토픽을 하나의 consumer에서 처리하는 구조가 사용되었습니다.하지만 이 방식은 토픽에 대한 가시성이 떨어지고, 한 컨슈머에 문제가 생기면 전체에 영향을 줄 수 있다는 한계가 있습니다.이에 대한 개선 방안으로, 각 토픽마다 개별 컨슈머 그룹을 구성하고,커스텀 데코레이터(@Consume)를 통해 컨트롤러의 특정 메서드를 Kafka Consumer로 등록하는 방법을 도입해보았습니다.이 글에서는 NestJS에서 데코레이터가 어떻게 등록되고, 어떻게 동작하는지 자세히 설명하고,실제 Kafka Consumer 초기화 로직에 어떻게 응용할 수 있는지 살펴보겠습니다.NestJS에서 데코레이터가 등록되는 과정NestJS에서 데코레이터는 **마킹(M..
분류 전체보기

실제 배포 후 schema registry가 활성화 되어서 메시지가 schema registry를 통해 제대로 encoding되어 적재된 것도 있고, schema registry를 거치지 않아 제대로 적재되지 않은 message들이 혼재되어 있어 앱단에서 메시지를 decode하는 과정에서 에러가 발생하여 consumer lag이 발생했고, 이를 메시지를 비우지 않고 코드를 수정하여 해결한 과정을 작성해보겠습니다.Kafka Consumer Lag이란?Consumer Lag은 Kafka에서 프로듀서가 메시지를 계속 보내는 동안, 컨슈머가 실제로 처리하고 커밋한 offset과 최신 offset(리더의 마지막 메시지) 사이의 차이를 의미합니다.이 차이가 커질 경우, 메시지가 쌓여있는 것을 의미하며, 컨슈머가 뒤..

최근 몇개월간 개발환경에서 개발되었던 앱을 드디어 운영환경에 배포하게 되었습니다.해당 앱에는 kafka에 대한 의존성이 있었고, kafka클러스터가 Amazone msk환경에서 구축됨에 따라 이 과정에서 권한 설정과 관련한 여러가지 트러블 슈팅이 있었습니다.그 과정에서 배우게 된 것들 중 첫번째로 kafka ACL에 대해서 정리해보고자 합니다.ACL이란?Kafka에서는 ACL 규칙을 통해 토픽(topic), 컨슈머 그룹(group), 클러스터(cluster) 등 특정 리소스에 대한 사용자/애플리케이션의 접근을 제어합니다. 각 ACL 항목에는 주체(principal), 호스트(host), 권한 유형(permission type), 작업(operation), 리소스 유형(resource type) 및 리소스..

1. 공통점 및 차이점 두 토큰 모두 JWT 기반이다 Access Token은 API요청을 할 때 검증용 토큰으로 사용된다. 즉, 인증이 필요한 APi를 사용할때는 꼭 Access Token을 Header에 넣어서 보내야한다. ex) 유저 정보 수정, 회사 채용 공고 지원 인원 확인 등 Refresh Token은 Access Token을 추가로 발급할 때 사용된다. Access Token을 새로고침(Refresh)하는 기능이 있기 때문에 Refresh Token 이라고 부른다. Access Token은 유효기간이 짧고, Refresh Token은 유효기간이 길다. 자주 노출되는 Access Token은 유효기간을 짧게 해서 Token이 탈취돼도 해커가 오래 사용하지 못하도록 방지할 수 있다. 상대적으로 ..

1. Session이란? 유저의 정보를 데이터베이스에 저장하고 상태를 유지하는 도구 Session의 특징 session은 특수한 ID 값으로 구성되어있다. Session은 서버에서 생성되며 클라이언트에서 쿠키를 퉁해 저장된다. 클라이언트에서 요청을 보낼 때 Session ID를 같이 보내면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다(요청마다 매번 아이디와 비밀번호를 물어볼 필요 없음)→ JWT토큰도 마찬가지 Session ID는 데이터베이스에 저장되기때문에 요청이 있을때마다 매번 데이터베이스를 확이해야한다 서버에서 데이터가 저장되기때문에 클라이언트에 사용자 정보가 노출될 위험이 없다.→session ID는 아무런 의미 없는 string이기 때문! 데이터 베이스에 Session을 저장해야하..

1. 가상메모리의 주요 구성 요소와 메커니즘 가상 주소 공간(Virtual Address Space) 가상 주소 공간은 프로그램이 메모리를 접근할 때 사용하는 주소의 집합입니다. 이 공간은 실제 물리 메모리의 크기와 독립적이며, 운영체제에 의해 관리됩니다. 프로그램은 이 가상 주소 공간을 실제 메모리처럼 사용할 수 있으며, 실제 물리 메모리의 위치를 신경 쓰지 않아도 됩니다. 가상메모리는 OS에서 사용되는 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원(실제주소, physical address)을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말합니다. 메모리 관리 단위(Memory Management Unit, MMU) MMU는 CPU 내부에 있는 하드웨..

1. 메모리 계층(memory hierachy)이란? 메모리 계층(memory hierarchy)은 컴퓨터 시스템에서 데이터를 저장하고 접근하는 다양한 수준의 메모리 구조를 의미합니다. 이 계층 구조는 레지스터, 캐시 메모리, 주기억장치(RAM), 그리고 보조기억장치로 구분됩니다. 각 계층은 속도, 용량, 비용에서 서로 다른 특징을 가지며, 이러한 차이를 효율적으로 활용하여 컴퓨터의 성능을 최적화합니다. 2. 메모리 계층의 구성 레지스터: CPU 내부에 위치한 매우 빠른 메모리로, CPU가 현재 처리 중인 명령어와 데이터를 임시로 저장합니다. 레지스터는 매우 빠른 접근 속도를 가지지만, 그 용량은 매우 제한적입니다. 캐시 메모리: CPU와 주기억장치 사이에 위치하여 자주 사용되는 데이터와 명령어를 저장합..

1. 시스템 콜이란? 시스템 콜이란 운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 시스템 콜을 거쳐서 호출하다록 설계되어 있습니다. 프로세스 관리(생성, 삭제 등), 파일 관리, 디바이스 관리, 시간 및 날짜 관련 시스템, 프로세스 간 통신 때 이를 통해 커널 함수를 호출합니다. ex. 프로세스를 종료하는 kill()이라는 함수-> 이 함수를 발동시키면 시스템 콜을 거쳐서 커널 함수가 호출됨 1) 과정 유저 프로그램이 I/O요청을 위한 트랩(소프트웨어 인터럽트)을 발동했다고 해보면, 유저 프로그램이 I/O 요청 트랩을 발동 올바른 I/O 요청인지 확인 유저모드(modebit=1, 권한 제한)가 시스템콜을 통해 커널모드(modebit=0..