본문 바로가기

전체 글

(106)
Apache Zeppelin 내부의 Thrift RPC를 gRPC로 바꾼다면? 이 글은 Zeppelin의 Thrift RPC를 gRPC로 바꾼다면 어떻게 될까? 라는 의문에서 시작한 글입니다.그리고 Apache Zeppelin의 Thrift RPC는 어떻게 동작할까? 에서 이어지는 글입니다.11. Thrift를 gRPC로 바꿀 때 고려해야 할 것은 무엇일까?11.1 먼저 통신 토폴로지를 결정해야 한다선택지는 크게 세 가지가 되겠습니다.방법 A: 현재 구조를 그대로 gRPC로 옮긴다Zeppelin → Interpreter ServiceInterpreter → Zeppelin Event Service장점은 기존 동작과 가장 유사하다는 것입니다. 위험도 낮고 기능별 비교 테스트도 쉽습니다.단점은 interpret()의 blocking 구조와 반복되는 출력 callback을 그대로 유지하..
Apache Zeppelin의 Thrift RPC는 어떻게 동작할까? 이 글은 Zeppelin의 Thrift RPC를 gRPC로 바꾼다면 어떻게 될까? 라는 의문에서 시작한 글입니다.Apache Zeppelin의 구조와 설계 철학 에서 부터 이어진 글입니다. 1. RPC, Thrift, gRPC의 관계RPC(Remote Procedure Call)는 다른 프로세스나 다른 서버에 있는 함수를 마치 로컬 함수처럼 호출하는 통신 방식입니다.Apache Thrift와 gRPC는 RPC를 구현하기 위한 프레임워크가 됩니다.구분의미RPC원격 함수 호출이라는 개념Apache ThriftIDL, 코드 생성, 직렬화 Protocol, Transport를 제공하는 RPC 프레임워크gRPC.proto, Protocol Buffers, HTTP/2 기반 통신을 사용하는 RPC 프레임워크일반적..
Apache Zeppelin의 구조와 설계 철학 요약 : Zeppelin은 화면과 코드 실행을 하나의 프로그램에서 처리하지 않습니다. 노트와 사용자 요청은 Zeppelin 서버가 관리하고, Spark나 Python 코드는 별도의 인터프리터 프로세스가 실행합니다. 브라우저와 서버는 WebSocket으로, 서버와 인터프리터는 Thrift RPC로 통신합니다. 1. Zeppelin은 왜 만들어졌을까초기 Git 기록을 보면 목적의 변화를 비교적 선명하게 볼 수 있습니다.2013년 최초 README: “graphical analytics tool on top of Hadoop”같은 해: “Zeppelin simplifies analytics on Hadoop”현재: SQL, Scala 등을 이용해 대화형·협업형 문서를 만드는 웹 기반 노트북여기서 이렇게 해석..
딥러닝을 함수 근사기로 바라보기 이 글은 AI 모델을 직접 만드는 입장은 아니지만, 실무에서 모델 기반 API를 붙여본 백엔드 개발자의 관점에서 딥러닝이 왜 강력한 함수 근사기로 여겨지는지 UAT를 통해 가볍게 정리한 글입니다. 최근에 작업했던 프로젝트에서는 AI 엔지니어 분이 AI 모델을 직접 구축하고,저는 이 모델 기반의 API를 사용해 프로젝트를 진행했습니다.그런데 제가 ML/DL/AI에 대해서 막연히만 알고 있었더군요.그래서 이런 저런 개념과 차이를 알아보다 수학적인 내용이 나와 흥미로워서 소개해봅니다. 1. AI, ML, DL, LLM 간략 설명 흔히 인공지능을 소개하면 나오는 여러 개념들이 있고, AI ⊃ ML ⊃ DL ⊃ LLM 와 같이 포함관계를 가지죠.AI는 현실 세계의 문제를 판단하고, 선택하고, 예측하는 등의 지..
[DDD] 도메인 주도 설계에서의 도메인 서비스란? 도메인 주도 설계에서의 서비스크게 도메인 서비스와 애플리케이션 서비스로 나뉜다.도메인 서비스 : 도메인 객체에는 객체의 행동을 정의할 수 있는데, 도메인 객체로 구현하기 어색한 서비스, 부자연스러움을 해결해주는 서비스비즈니스 로직이 존재한다.Stateless어플리케이션 서비스 : 도메인 객체가 수행하는 태스크를 관리하고, 문제를 해결하게 이끄는 존재 도메인 객체를 서로 협조하게 해서 *use-case를 구현하는 객체비즈니스 로직은 존재하지 않는다.*use-case : 소프트웨어 개발에서 시스템이 사용자(액터)에게 제공하는 특정 기능이나 서비스 ❓ 어색하고 부자연스러운 객체의 행동이란 뭘까?유저 네임의 중복을 확인하는 로직은 어디에 있어야 할까? 부자연스러움을 코드로 표현하면 아래와 같다public cl..
[DDD] 도메인 객체 - 값 객체와 엔티티 📌 Value Object란?원시 타입과 달리, “우리 시스템 고유의 값을 가지는 객체”.도메인 지식은 엄청나게 복잡한데, “값 객체”에서 부터 해당하는 도메인 지식을 코드로 녹여내야 한다.Entity와의 차이점?식별자가 없음 (Entity : id값으로 같은 객체인지 아닌지를 구별함)Entity는 id와 같은 식별자가 같으면 같은 객체이지만, Value Object는 아니다불변객체 : immutable 한 객체따라서 설정된 값이 모두 같아야 같은 객체이다.Primitive Type과의 차이점?비즈니스적인 제약과 의미를 부여할 수 있음.메서드를 부여하거나객체를 생성할때, 값의 제약이 있는 경우 가려 받을 수 있다.더보기⭐️ 과거에 Value Object가 뭔지에 대해서 김영한님의 JPA 강의에서 들은 ..
웹은 당신의 눈을 속인다(2) - 실시간 (아님) 온라인 게임을 생각해 보자. 게임이라 그럴 수 있지만, 몇 분만, 아니 몇 초만 해봐도 이는 무조건 실시간 통신임을 확인할 수 있다. 우리가 흔히 ping이라고 하는 응답 속도가 우리나라 내의 유저끼리는 한 자릿수의 ms정도가 되고,이 말은 실제 상대방의 무빙(입력)은 우리에게 그 정도의 시간 내에 오기에, 이는 거의 실시간과 동일하다고 볼 수 있다.그렇지만 이것은 정해진 상대들에게만 입력 정보를 보내주기에 괜찮을 것으로 생각한다. 하지만 한 때 존재했었던 검색 엔진에서의 실시간 검색어 순위나 이런 것은 어떤가?만약 네이버 실시간 동시접속자 모두에게 fps게임마냥 ms단위로 실시간 정보를 바로바로 주어야 한다면...아마 네이버는 트래픽을 감당하지 못하고 터지지 않을까?그렇기 때문에 이들은 실시간이라고 써..
API 호출 성능 최적화 (feat. 사영 - Projection은 어디서나 보여요) 문제 상황클라이언트가 자주 사용하는 특정 API가 있는데, 이게 체감상 로딩이 느린것 같다라는 얘기를 들었다. 실제로 내가 사용해봐도, 부쩍 느려진 느낌이다.그래서 일단 AOP를 통해 @PerformanceCheck를 구현하고, API에서 걸리는 총 시간을 측정하기로 했다.아래의 코드 예시는 실제 코드가 아니라, 해당 상황을 재현하기 위해 사용된 코드이다. 문제 원인 파악정량적 상황 파악 파악을 위해 다음의 준비를 가진다.간편한 사용과 시간 체크라는 관심사 분리를 위해서 Spring AOP를 통한 어노테이션을 생성하고, 이를 통해 성능체크를 진행하려 한다. 자세한 내용은 이전에 관련 글을 써두었기에, 이를 참조하기 바란다.https://namucy.tistory.com/81 Aspect Oriented ..