본문 바로가기

전체 글

(19)
Apache Kafka의 성능: append-only and zero copy 아파치 카프카는 어떻게 대량의 데이터를 효율적으로 전송할까 카프카의 내부 아키텍처 동작 방식을 살펴보면 2가지 포인트가 존재한다 1. sequentail I/O 카프카는 append-only 방식으로 파일의 맨 끝에다 immutable한 새 record를 추가한다 카프카는 append만 가능한 순차적인 자료구조인 log를 기본 아키텍처로 사용하고 있다. 디스크에 random access 방식으로 data retrieve하는 것이 아닌, sequential 하게 데이터를 저장하여, conumser가 해당 record의 immutable한 offset 번호를 따라 데이터를 읽고 주기적으로 commit하여 어디까지 읽었는지 기록한다 2. zero-copy 만약 zero copy를 사용하지 않는다면 , 2번의 ..
장애? docker 컨테이너에서 block I/O가 너무 심하다 AWS ec2 인스턴스로 t3a.small에 docker container를 2개 띄웠다. elasticsearch와 kibana를 elasticsearch와 kibana를 구동 시키니 둘이 합해서 거의 80%에 달하는 메모리를 점유하고 있었다. 여기에 spring boot 이미지를 컨테이너까지 구동시키니 터미널에서 ec2 접속이 먹통이 되어서 부랴부랴 ec2 인스턴스를 종료시킬 수 밖에 없었다. 어제 장애 현상 발견하고 오늘 확인을 해 보니 아무래도 컨테이너가 점유중인 메모리의 한계에 다다라 그런 것이라 생각했다. 애초에 2gib 뿐인 인스턴스이기도 하고... 그래서 elasticsearch와 kibana만 ec2에 띄우고, spring boot는 로컬 노트북에서 컨테이너로 동작시키기로 했다. spri..
docker run command 시 컨테이너의 환경 변수에 값 전달하기 docker run 커맨드 시, 파라미터의 순서가 정말 중요하다. 환경 변수를 설정하는 -e 파라미터가 실행할 도커 이미지 앞에 와야 하는듯 하다. + 컨테이너와 연결할 상대 컨테이너의 host 주소를 줄 때, container 실행 시 정의한 이름을 사용한다 ex) docker run --name kafka-to-elasticsearch --net elastic -p 9092:9092 -p 443:443 -p 6667:6667 -e "ELASTICSEARCH_HOSTS=es01-test" kafka-twitch 참고 링크 https://stackoverflow.com/questions/50035024/passing-environment-variables-with-docker-to-spring-boot-..
spring boot 프로젝트 docker 빌드하고 실행하기 1. intellij에서 좌측 gradle 탭에서 clean을 클릭, 기존의 build 내역 삭제한다 2. 프로젝트 디렉터리에서 ./gradlew build 명령어를 실행, jar 파일을 빌드한다 3. (이건 지금은 안해도 됨) build/libs 디렉토리 아래의 *plain-jar 파일을 삭제 (근데 build.gralde 파일에 설정을 해서 더이상 생성되지 않는다) 4. docker build --build-arg JAR_FILE=build/libs/*.jar -t {태그 이름}. 명령어를 실행, docker image를 빌드한다 5. docker run {이미지 id} -p 6667:6667 -p 9092:9092 -p 443:443 명령어로, twitch irc, confluent bootstra..
LeetCode #2 Add Two Numbers 두 개의, 비어있지 않은 linked list들이 입력으로 주어지고, 각각의 리스트에는 음수가 아닌 정수가 담긴다. numbers들은, 역순으로 저장이 되어 있고, 각 노드는 하나의 숫자만을 저장하고 있다. 가장 큰 자릿수에 0은 오지 않는다 (단, 0 하나만 담긴 linked list는 가능하다) 저장된 숫자를 더하고, 이를 다시 linked list에 담아서 return 하는 문제 Example) Input: l1 = [2,4,3], l2 = [5,6,4] Output: [7,0,8] 2,4,3의 역순은 342가 되고, 5,6,4의 역순은 465 이므로, 둘을 합한 결과인 807을 다시 역순으로 linked list에 담아서 저장하면 된다. 제한사항: node의 값으로는 0~9만이 올 수 있으며, l..
Intellij에서 Git Merge하기 프로젝트의 git branch로 master에서 분리된 작업을 하다가, 작업을 마치고 다시 master branch로 분리되었던 작업을 통합하고 싶은 경우가 있다 (사실 그런 경우가 있는게 아니라 issue 설정하고 해결을 한다면 당연히 그렇게 해야지...) 그럴 때 git merge를 이용하면 되고 (사실 Rebase라는 방법도 있다), intellij에서 이를 할 수 있는 방법을 알아보자 intellij 우측 하단이다. 지금은 master branch에서 프로젝트 작업이 이뤄지고 있는 모습이다. 현재 나의 local branches에는, master와 create one-to-one-for-UoM 두개가 있다. 만약 후자의 branch에서 작업을 하다 master로 이를 통합하고 싶다면, 우선 che..
Spring Boot로 H2 console 연결하기 Spring Framework 5: Biginner to Guru 영상을 공부하며 정리하는 내용이다 Spring Boot를 사용하면서, in memory 방식의 데이터베이스인 H2 database를 사용하기 위한 설정법이다 우선 pom.xml에 의존성 주입을 해준다. 스프링부트의 장점이 알아서 어플리케이션과 호환되는 버전을 initilizer에서 지원해 주니 버전을 신경 쓰지 않아도 된다 다음으로, h2 console과의 연결을 위한 설정을 application.properties에서 해준다. yml 확장자로 하면, spring.datasource 부분이 중복 되는 걸 하지 않아도 될 것이다 저 설정 중에서 중요한 것은, datasource.url 부분과 username이다 밑의 사진에서 h2 conso..
Spring MVC란 SKPlanet Tacademy에서 제공하는 Spring Framework Basic 강의와, 스프링 철저 입문에서 제공한 내용을 정리한 글이다 MVC 패턴이란, Model View Controller의 architecture pattern으로, Business logic과 Presentation logic(사용자 interface)을 분리하고자 한다 (서로 독립적으로 동작하게 하여, 각자에게 영향 없이 수정 변경할 수 있다) Model: application의 정보(데이터, business logic 등)를 제공한다 View: 모델이 가진 데이터를 참조, 클라이언트에 반환할 응답 데이터를 생성 Controller: 모델과 View 사이의 상호작용 관리, request를 받아 모델과 뷰의 호출을 제어한다..