본문 바로가기

Programming

(31)
메세지 브로커: In-Memory vs Log-Based 이 글은 메세지 브로커가 무엇인지, 메세지 브로커 종류에 대해 설명한다. (아래 영상을 참고했다.)https://www.youtube.com/watch?v=_5mu7lZz5X4Message Broker(메세지 브로커)는 최신 분산 애플리케이션 아키텍처의 필수 기능 중 하나이다. 비동기적으로 메세지를 교환할 수 있는 기능을 제공한다. 대표적으로 RabbitMQ와 Kafka가 있으며 AWS에서는 SQS, Kinesis와 같은 서비스가 많이 사용된다. 메세지 브로커는 크게 두 개의 종류가 있다.In Memory Message Broker모든 이벤트를 메모리에서 들고있다Queue(Linked List 혹은 메모리에 Array 형태)에 각각의 이벤트가 저장되어 있고, 하나의 이벤트가 Consumer에게 전달되면,..
[번역] Facebook이 Memcache를 사용하여 초당 수십억개의 요청을 제공한 방법 이 글은 ByteByteGo에 기재된 'How Facebook served billions of requests per second Using Memchaced' 를 번역한 글입니다. 잘못 번역된 문장이나, 매끄럽지 못한 번역 내용이 있다면 댓글 부탁드립니다. Facebook 규모의 소셜 네트워크를 운영하기위해서는 두 가지 절대적인 진실이 있다.첫째, 서버가 멈춰서는 안된다.둘째, 서버가 느려지면 안된다.이 두 가지의 요소는 사람들이 소셜 네트워크를 계속 사용할지말지 여부를 결정한다. 사용자들이 연결되어있기 때문에 몇 명의 사람만 떠나더라도, 전체 사용자 기반에 영향을 미친다. 대부분의 사람들은 친구나 친척들이 온라인에 있고, 도미노 효과가 있기 때문에 온라인에 있다. 한 사용자가 이슈로 인해 이탈하게 ..
Angular Component Lifecycle 컴포넌트의 lifecycle은 컴포넌트의 생성부터 제거되기까지 발생하는 일련의 단계를 뜻한다. 각 단계는 Angular의 컴포넌트 렌더링의 각 부분들을 나타내며 시간에 따른 업데이트를 확인한다. Angular는 애플리케이션 트리를 top에서 bottom 경로로 돌면서 변경되어야 할 템플릿 바인딩이 있는지 확인한다. Angular가 이런 트리 순회를 하는 동안 lifecycle hook이 실행된다. 이 트리 순회는 각 컴포넌트를 1번씩 방문하기때문에 프로세스 중간에 state 변경이 일어나지않도록 대비해야한다. 이 글은 Angular 공식문서의 LifeCycle 항목을 읽고 번역해본 내용이다. 참고로 Version 17 기준이다.공식 문서 바로보기: https://angular.dev/guide/compo..
GraphQL Apollo Client - 캐싱 전략 (1편) 해당 글은 GraphQL - Apollo Client의 캐싱 전략에 대한 글이다. 모든 ApolloClient 인스턴스에서 InMemoryCache를 사용한다. Apollo Client는 GraphQL query의 결과들을 로컬, 정규화된(normalized), in-memory cache에 저장한다. 네트워크 요청을 전송하지 않고도 이미 캐시된 데이터를 사용하여 즉각 응답한다. InMemoryCache는 오브젝트들이 서로 참조가능하도록 flat lookup table형태로 데이터를 저장한다. 동일한 객체의 다른 필드를 가져오는 경우 하나의 캐시된 객체에는 다수의 쿼리 결과 필드를 포함할 수도 있다. 캐시는 flat한 구조지만, GraphQL query로부터 반환되는 객체는 flat하지 않다. InMem..
Apollo GraphQL custom plugin - 나만의 로그 만들기 import { ApolloServer } from '@apollo/server';const server = new ApolloServer({ typeDefs, resolvers, // 여기! plugins: [loggerPlugin, errorHandlingPlugin],});클라이언트로부터 받는 모든 GraphQL 요청들에 대해서 로그를 남겨 모니터링해야하는 일이 있었다. 현재 Apollo GraphQL을 사용하고 있는데 공식 문서를 찾아보던중 custom plugin을 직접 만들어서 GraphQL의 라이프 사이클의 각 단계마다 원하는 동작을 추가할 수 있다는 것을 알게 되었다. 그래서 이번 글에서는 Apollo GraphQL custom plugin에 대한 글이다. Plugin의 기본 구조P..
MongoDB Replica Set 구성하기 - Docker Swarm 회사에서 MongoDB를 사용하고있다. Stand alone DB로 이중화 구성이 되어있지 않은데 Replica Set 구성을 통해 이중화 구성하는 작업을 맡게 되었다. 구성하면서 찾아본 내용들이 너무 기본적인 내용들만 적혀있었는데, 본 글에서는 찾아본 내용들에 대해 최대한 많은 내용을 담아보려고 한다. 목차는 다음과 같다. 1. MongoDB의 Replica Set이란? 2. Replica Set 구성하는 방법 - with Docker Compose 3. DB 이중화하기 - with Docker Swarm 쿠버네티스가 아닌 도커 컴포즈와 스웜 환경으로 구성한 이유는 현재 업무에서 도커 스웜으로 서비스를 운영하고 있기 때문이다. MongoDB의 Replica Set이란? Replication이란 DB의 ..
애플리케이션 렌더링 전략 (CSR, SSR) 웹 개발을 할 때 고려해야하는 중요한 사항들 중 하나는 애플리케이션 어디에서 로직 및 렌더링을 구현할지이다. 웹사이트를 만드는데에는 여러 다른 방법들이 있으므로 각자 방식의 특성을 이해하고, 상황에 맞는 전략을 사용해야한다. 렌더링 서버 사이드 렌더링(Server Side Rendering - SSR) 서버 렌더링은 네비게이션의 응답으로 서버의 페이지에 대한 전체 HTML을 생성한다. 이렇게 할 경우 브라우저가 응답 받기 전에 처리되므로 클라이언트에서 데이터 가져오기 및 템플릿을 위한 추가 동작이 필요없다. 서버 렌더링은 보통 빠른 FP(First Paint)와 FCP(Fisrt Contentful Paint)를 생성한다. 서버에서 렌더링을 하게되면, 많은 JS코드들을 클라이언트에게 전송할 필요가 없어진..
프레임워크와 라이브러리의 차이 "프레임워크와 라이브러리의 차이점이 뭔가요?" 얼마 전에 받은 질문인데 명확하게 대답하지 못했다. 내가 아는 프레임워크의 대표적인 종류는 'Spring framework', 'Angular framework'이다. 반면 라이브러리는 'React library', 'jQuery' 대표적이다. 과연 프레임워크와 라이브러리는 어떻게 다른지, 어떨 때 써야 하는지 알아보자. 호출을 누가 하는가? "Who calls Whom" 누가 누구를 호출하는지? 가 프레임워크와 라이브러리의 차이점의 핵심이다. 코드를 작성하는 '우리'가 '라이브러리' 코드를 호출하고, '프레임워크' 코드가 '우리'가 작성한 코드를 호출한다. 조금 더 자세히 알아보자. 라이브러리 라이브러리는 특정 기능을 위해 동작하는 유용한 함수/객체/모듈들..