인프라
12 posts
[Kafka] 2023 KAFKA KRU 스터디 회고 및 Custom Kafka Connector 만들기

Special Thanks To. STEP 2. 스터디 회고 STEP 3. 커스텀 카프카 커넥터 개발하기 STEP 3.1 Kappa 아키텍처의 대두 STEP 3.1.1 람다(Lambda) 아키텍처의 단점 STEP 3.1.2 Kappa 아키텍처 훑어보기 STEP 3.2 Kafka Connect Overview STEP 3.3 커스텀 카프카 커넥터 구현 STEP 3.3.1 Extending Docker Image STEP 3.3.2 Gradle Plugin STEP 4. 실제 커넥트 컴포넌트 구현 STEP 4.1 설정 컴포넌트 STEP 4.2 커넥터 컴포넌트 STEP 4.3 태스크 컴포넌트 STEP 4.4 Running Task STEP 4.5 트러블슈팅 STEP 5. 결론 STEP 6. 추신 STEP 1. 개요 최근에 필자는 Kafka KRU - Kafka 한국 사용자 모임에서 주최했던 스터디에 참여하였다. 해당 스터디는 위의 책을 토대로 약 4주간 스터디가 진행되었으며, 이에 따른…

November 20, 2023
개발
인프라
[Kernel] 커널과 함께 알아보는 소켓과 TCP Deep Dive

STEP 1. 소켓이란? STEP 1.1 소켓의 종류 STEP 1.1.1 스트림 소켓 STEP 1.1.2 데이터그램 소켓 STEP 2. 커널 코드로 알아보는 TCP와 소켓 STEP 2.1 커널 코드로 알아보는 TCP Handshake 과정 STEP 2.1.1 3-Way Handshake STEP 2.1.2 4-Way HandShake STEP 2.2 커널 코드로 알아보는 TCP 메시지 송/수신 과정 STEP 2.2.1 TCP 송신 과정 STEP 2.2.2 TCP 수신 과정 STEP 3. TCP 사용 시 서비스에서 겪을 수 있는 문제들 STEP 3.1 TIME_WAIT 소켓 STEP 3.1.1 클라이언트 측면 STEP 3.1.2 서버 측면 STEP 3.1.3 TIME_WAIT 소켓의 존재 의의 STEP 3.3 TCP Keep-Alive STEP 3.3.1 TCP Keep-Alive 파라미터 STEP 3.3.2 좀비 커넥션 STEP 3.3.3 HTTP 지속커넥션 vs TCP Keep-…

October 12, 2023
개발
인프라
독서요약
[Kernel] 리눅스 메모리 관리 훑어보기

STEP 1. 서론 STEP 1.1 가상 주소 공간 STEP 1.2 task_struct와 mm_struct에 대한 이해 STEP 1.3 가상 메모리 영역(Virtual Memory Area, VMA) STEP 1.4 프로세스가 가상 주소 공간에 매핑되는 방식 STEP 1.4 페이지와 페이지 캐시 STEP 1.4.1 페이지 STEP 1.4.2 페이지 캐시 STEP 1.4.3 페이지 교체 정책 STEP 2. 본론 STEP 2.1 free 명령어 분석 STEP 2.1.1 buff와 cache 영역 STEP 2.1.2 avaliable 지표 STEP 2.2 /proc/meminfo 명령어 분석 STEP 2.3 slab 메모리 영역 STEP 2.3.1 vmalloc()과 kmalloc() STEP 2.3.2 Slab STEP 3. 결론 STEP 4. 추신 개요 이전 포스팅 [Kernel] 리눅스 스케줄링 매커니즘과 Load Average 이전 내용에서는 커널을 이해하기 위한 배경지식과 더…

September 04, 2023
개발
인프라
독서요약
[Kernel] 리눅스 스케줄링 매커니즘과 Load Average

STEP 1. 서론 STEP 1.1 병렬성과 동시성 STEP 1.2 Run Queue와 Wait Queue STEP 1.2.1 Run Queue STEP 1.2.2 Wait Queue STEP 1.3 리눅스 내에서 기본적인 스케줄링 STEP 1.3.1 프로세스 상태 변화 STEP 1.4 가상 주소 공간 STEP 1.5 MMIO(Memory Mapped I/O) STEP 2. 본론 STEP 2.1 VIRT & RES & SHR STEP 2.2 Memory Commit STEP 2.3 프로세스의 상태 2.4 프로세스의 우선순위 STEP 3. Load Averrage와 시스템 부하 STEP 3.1 CPU Bound vs I/O Bound 개요 최근에 커널 책을 같이 읽고 정리하는 스터디를 시작하였다. 이를 다루기 앞서, 난이도가 조금 있다보니 배경지식이 조금 필요한 것으로 보인다. 이에 따라, 중요한 개념 몇가지만 짚고 이와 연관된 내용으로 같이 얘기를 해보고자 한다. STEP 1. 서…

August 23, 2023
개발
인프라
독서요약
왜 처리량이 중요한 JVM 어플리케이션은 vm.swappiness = 1로 설정하라고 할까?

STEP 1.1 과거의 이야기 STEP 1.2 번외) NVMe를 스왑 영역으로 잡으면 RAM과 속도가 비슷할까? STEP 2.1 운영체제의 캐시 영역과 스와핑 STEP 2.1.1 캐시영역 STEP 2.1.2 스와핑 STEP 2.1.3 운영체제의 메모리 재할당 방식 STEP 2.2 자바, 페이지 캐시 그리고 가비지 컬렉션 STEP 2.2.1 페이지 캐시와 더티 페이지 동기화 STEP 2.2.2 자바 메모리와 가비지 컬렉션 STEP 3.1 추신 STEP 1. 서론 STEP 1.1 과거의 이야기 STEP 1.2 번외) NVMe를 스왑 영역으로 잡으면 RAM과 속도가 비슷할까? STEP 2. 본론 STEP 2.1 운영체제의 캐시 영역과 스와핑 STEP 2.1.1 캐시영역 STEP 2.1.2 스와핑 STEP 2.1.3 운영체제의 메모리 재할당 방식 STEP 2.2 자바, 페이지 캐시 그리고 가비지 컬렉션 STEP 2.2.1 페이지 캐시와 더티 페이지 동기화 STEP 2.2.2 자바 메모리와…

June 19, 2023
개발
인프라
AWS Lightsail과 Github를 이용한 CI/CD 파이프라인 구축 예시

STEP 1. AWS Lightsail란? STEP 2. AWS Lightsail과 Github를 이용한 CI/CD 파이프라인 구축 예시 STEP 2.1. Spring Boot Application Dockerize STEP 2.1.1. Docker Buildkit STEP 2.2 Lightsail 배포 전 사전 작업 STEP 3. 정리 추신 STEP 4. REFERENCE 개요 이직을 한 후에 너무 바쁘다보니 블로그 포스팅을 신경을 쓰지 못하였다. 아직도 바쁘긴하지만, 그래도 여유가 조금씩 생기고 있어서 틈틈히 썼던 초안을 다듬어서 올려보려고 노력해보겠다. 이번 포스팅의 내용은 AWS Lightsail와 Github를 통한 CI/CD 구축 예시이다. AWS Lightsail과 Github를 이용한 CI/CD 파이프라인 구축 예시 STEP 1. AWS Lightsail란? STEP 2. AWS Lightsail과 Github를 이용한 CI/CD 파이프라인 구축 예시 STEP 2.1…

October 23, 2022
개발
인프라
동시성 문제 해결 전략 - 스프링으로 구현한 TCC패턴

STEP 1. 주문 <-> 재고 서비스에서의 동시성 문제 STEP 1.1 동시성 문제 해결 전략 STEP 1.1.1 낙관적 락(Optimistic Lock) STEP 1.1.2 비관적 락(Pessimitic Lock) STEP 1.1.3 단일 쓰레드 메시지 큐 도입 STEP 2. 분산 트랜잭션(Distributed Transaction)이란? STEP 3.1 최종적 일관성(Eventaul Consistency)란? STEP 3.2 스프링 카프카 예외 처리 및 재시도 매커니즘 개요 사실 분산트랜잭션과 아직 MSA에 대해서는 모르는 부분이 너무나 많다. 이 글을 쓰게된 이유는 주문 <-> 재고 서비스 간의 동시성 제어(Concurrency Control)관련해서 궁금한 점이 생겼고 실제로 이 상황에서 어떻게 처리할 수 있을지 궁금해져서 찾게 되었다. 그러다가 어쩌다 보니 분산 트랜잭션을 구현한 아티클을 보게 되었다. REST 기반의 간단한 분산 트랜잭션 구현라는 글이였고, 작성자인 유…

June 11, 2022
개발
인프라
MacOS에서 로컬 개발환경에 HTTPS 적용하기

STEP 1. HTTPS란? STEP 1.1 HTTPS Handshake STEP 2. 로컬호스트 환경에 HTTPS 적용하기 STEP 2.1 minica를 이용한 로컬호스트 CA 인증서 발급 STEP 2.2 openssl 및 keytool을 이용한 p12, jks인증서 발급 STEP 2.3 로컬호스트 환경 스프링부트에 HTTPS 적용 확인 STEP 3. REFERENCE 개요 나중에 포스팅해야지 하고 넘어갔던 부분인데 이번에 다른 분께서 질문을 올려주셨어서 포스팅을 해보고자 한다. 제목과 같이 환경에서 HTTPS를 적용하는 것이 주된 목표이고, 확인 절차는 간단하게 스프링 부트를 통해서 작업하였다. MacOS에서 로컬 개발환경에 HTTPS 적용하기 STEP 1. HTTPS란? STEP 1.1 HTTPS Handshake STEP 2. 로컬호스트 환경에 HTTPS 적용하기 STEP 2.1 minica를 이용한 로컬호스트 CA 인증서 발급 STEP 2.2 openssl 및 keyto…

March 25, 2022
개발
인프라
To The Moon - 더 나은 로깅시스템을 위한 여정 (Redis 편)

STEP 1. Redis Write Back을 도입하는 여정기 STEP 1. Redis Collection 설계 및 구현 STEP 2.1 추가 요구사항 STEP 3. 문제점 목차 개요 STEP 1. Redis Write Back을 도입하는 여정기 STEP 2. Redis Collection 설계 및 구현 STEP 2.1 추가 요구사항 STEP 3. 문제점 STEP 4. REFERENCE 개요 현재 재직 중인 회사에서 추천 시스템을 도입하기 위해서 기존의 로깅 방식에 대해서 고도화가 필요했었다. 일단, 아주 단순하게 기존 사용자에게 추천됐던 아이템과 읽은 아이템을 토대로 추천 시스템을 만들고자하였다. 이 업무를 진행하기에 앞서 진행되어야하는 부분이 바로 어떤 아이템들이 추천되었고, 어떤 아이템을 읽었는지에 대한 로그를 수집하는 일이었다. 기존에는 사용자가 클릭을 수행하면 바로 DB에 저장이 되는 형식이였으나 사용자가 증가함에 따라 DB 부하 문제도 있고, 개선책을 찾게 되었다. ST…

December 29, 2020
개발
인프라
리눅스(CentOS7)에서 자바 개발환경 구축하기 - Nginx와 Tomcat연동

STEP 1 - Nginx설치하기 STEP 1.1 - Install Nginx using webtatic repo (비추천) STEP 1.1.1 EPEL설치하기 STEP 1.1.3 Webtatic저장소 설치하기 Troubleshooting SETP 1.2 - Install Nginx using Nginx official repo (추천) STEP 2 - Nginx를 사용하는 이유 STEP 2.1 - Nginx가상호스트설정 (동작안하니까 참고만 하자!!!) STEP 2.2 - Nginx & Apache Tomcat 리버스프록시설정 개요 이전장을 통해서 우리는 리눅스 상에서 jdk와 톰캣을 설치 및 환경설정을 하였다. 이번 장에서는 nginx의 reverse proxy기능을 이용하여 톰캣과 엔진엑스를 연동하는 방법을 알아보도록하겠다. Nginx와 Apache Tomcat 연동하기 STEP 1 - Nginx설치하기 STEP 1.1 - Install Nginx using webtatic …

August 05, 2018
인프라
리눅스(CentOS7)에서 자바 개발환경 구축하기 - 톰캣 설치 및 환경설정

개요 Apache Tomcat STEP 1 - Apache Tomcat 다운로드 및 설치 STEP 2 - Apache Tomcat 환경변수 등록 및 추가 설정 STEP 2.1 - Apache Tomcat 환경변수 등록 및 방화벽 설정 STEP 2.2 - Tomcat 전용 리눅스 계정 생성 후 그 계정으로 Tomcat 실행하기 STEP 2.3 - Apache Tomcat 서비스 등록 및 시작데몬 등록 STEP 3 - Apache Tomcat CentOS7 firewalld 인바운드 룰 적용 및 index.jsp 페이지 확인 STEP 3.1 - CentOS7 firewalld 톰캣 포트 인바운드 룰 적용 STEP 3.2 - Hello Tomcat!! 마치면서 개요 이번 글은 Apache Tomcat 설치하고 Index.jsp 페이지인 고양이가 뛰어다니는 화면을 웹브라우저에 출력하는 것을 목표로 하겠다. Apache Tomcat 이전 글을 따라서 진행하는 사람이라면, Latest Ver…

July 04, 2018
인프라
리눅스(CentOS7)에서 자바 개발환경 구축하기 - JDK10 설치하기

개요 운영체제 환경 리눅스 JDK 설치하기 JDK10 Install Using Downloaded JDK10 Binary file JDK10 Install Using Downloaded JDK10 RPM file 1.1 STEP 1 - JDK10 소스 다운로드하기 1.2 STEP 2 - JDK10 명령어 등록 1.3 STEP 3 - JDK10 설치 확인 2.1 STEP 1 - JDK10 RPM 다운로드하기 2.2 STEP 2 - JDK10 설치 하기 트러블 슈팅 마치면서 개요 오늘은 Centos7에서 Java 개발환경을 구성하는 첫번째 단추인 Java(JDK)를 설치 후에 환경변수까지 설정하는 것을 적어보려고 한다. 운영체제 환경 리눅스 리눅스 배포판 버전 리눅스 커널 버전 커널 버전과 배포판 버전은 위의 코드와 같이 CentOS-7.5버전과 3.10.0 커널을 사용한다. JDK 설치하기 초기에는 원래 JDK9을 설치하려 했으나, 나온지 얼마 안되서 Java10 으로 통합이 되었는…

July 03, 2018
인프라