Home

0

[Network] NAT Gateway 란?

NAT Gateway 란?NAT Gateway는 Network Address Translation의 약자로, 프라이빗 네트워크의 리소스가 인터넷과 통신할 수 있도록 IP 주소를 변환해주는 관리형 네트워크 서비스입니다. 주로 프라이빗 서브넷의 인스턴스들이 외부 인터넷에 접근할 수 있게 하면서도, 외부에서 직접적인 인바운드 연결은 차단하는 역할을 합니다. NAT의 기본 개념NAT (Network Address Translation)NAT는 IP 패킷의 송신지 또는 목적지 IP 주소를 변환하는 기술입니다. 프라이빗 IP → NAT → 퍼블릭 IP10.0.1.5 → NAT → 203.0.113.510.0.1.10 → NAT → 203.0.113.510.0.1.15 → NAT → 203.0.113.5 NAT가 필요한 이유 IPv4 주소 고갈 문제 해결 제한된 퍼블릭 IP 주소를 효율적으로 사용 하나의 퍼블릭 IP로 여러 프라이빗 IP 리소스 관리 보안 강화 내부 네트워크 구조 은닉 외부에서 직접 접근 차단 유연한 네트워크 구성 내부 IP 체계를 자유롭게 설계 외부 네트워크 변경 시 내부 영향 최소화 NAT Gateway vs NAT InstanceNAT Gateway

0

[쿠버네티스] - Health Probes (Startup, Liveness, Readiness)

개요쿠버네티스는 컨테이너의 상태를 모니터링하고 관리하기 위해 세 가지 유형의 Health Probe를 제공합니다: Startup Probe: 컨테이너가 시작되었는지 확인 Liveness Probe: 컨테이너가 정상적으로 실행 중인지 확인 Readiness Probe: 컨테이너가 트래픽을 받을 준비가 되었는지 확인 Probe 메커니즘모든 Probe는 다음 세 가지 방식 중 하나로 동작합니다: 1. HTTP GET 요청httpGet: path: /healthz port: 8080 httpHeaders: - name: Custom-Header value: Awesome scheme: HTTP # or HTTPS 지정된 경로로 HTTP GET 요청을 보냅니다 200-399 범위의 상태 코드를 반환하면 성공 그 외의 코드는 실패로 간주 2. TCP Socket 연결

0

[Spring Boot] 애플리케이션 Warm Up 가이드

참고 - IF(kakao) 2022 https://www.youtube.com/watch?v=CQi3SS2YspY 🤔 Warm Up이 필요한 주요 이유Spring Boot 와 같은 JAVA 애플리케이션을 최초 실행하거나 재배포할 때, 첫 번째 요청이 다른 요청들에 비해 현저히 느린 현상을 경험한 적이 있을 것입니다. 이러한 현상을 Cold Start 문제라고 하며, 이를 해결하기 위해 Warm Up이 필요합니다. 1. JVM 의 JIT (Just-In-Time) 컴파일Java 애플리케이션은 바이트코드 로 컴파일되어 실행되며, JVM은 런타임에 자주 사용되는 코드를 네이티브 코드 로 최적화합니다. 초기에는 인터프리터 모드 로 실행되어 바이트 코드를 한줄 한줄 해석하기 때문에 성능이 상대적으로 낮습니다. JIT 컴파일러가 자주 실행되는 코드 핫스팟(Hot Spot) 을 식별하고 최적화된 네이티브 코드로 전환됩니다. 때문에 애플리케이션 구동 후 JIT 컴파일러가 핫스팟(Hot Spot) 을 식별하고 최적화하는 전까지는 상대적으로 느릴 수 있습니다.

0

[QueryDSL] Transform 사용 시 HikariCP Connection Leak 문제 해결

QueryDSL Transform 사용 시 HikariCP Connection Leak 문제QueryDSL의 transform() 메서드는 쿼리 결과를 그룹화하고 Map으로 변환할 때 매우 유용한 기능입니다. 하지만 부적절하게 사용할 경우 심각한 데이터베이스 커넥션 누수(Connection Leak)를 발생시킬 수 있습니다. 문제 상황운영 중인 서비스에서 다음과 같은 에러가 발생했습니다: HikariPool-1 - Connection is not available, request timed out after 30000ms. DB 커넥션 수는 POD 당 20개(max-connection-pool) 로 충분한 상태였고, 트랜잭션이 길게 잡히는 슬로우 쿼리도 없는 상황이라 아무래도 Connection Leak 이 발생하는 상황이라 생각 했습니다. 원인 분석QueryDSL의 transform() 메서드 특징문제의 원인은 QueryDSL의 transform() 메서드의 내부 동작 방식에 있었습니다. // 문제가 되는 코드 예시public Map<Long, List<OrderItem>> getOrderItemsByOrderId(List<Long> orderIds) { return queryFactory .selectFrom(orderItem) .where(orderItem.orderId.in(orderIds)) .transform( groupBy(orderItem.orderId) .as(list(orderItem)) );}

0

Git - Git Hook으로 워크플로우 자동화하기

Git Hook이란?Git Hook은 Git에서 특정 이벤트가 발생했을 때 자동으로 실행되는 스크립트입니다. 커밋, 푸시, 머지 등의 작업 전후에 사용자 정의 스크립트를 실행하여 코드 품질 검사, 테스트 자동화, 메시지 검증 등 다양한 워크플로우를 자동화할 수 있습니다. Git Hook의 종류Git Hook은 크게 클라이언트 훅(Client-side Hooks) 과 서버 훅(Server-side Hooks) 으로 나뉩니다. 클라이언트 훅 (Client-side Hooks)개발자의 로컬 저장소에서 실행되는 훅입니다. Commit 관련 훅 pre-commit: 커밋 메시지 작성 전 실행 (코드 린트, 테스트 실행) prepare-commit-msg: 커밋 메시지 에디터가 열리기 전 실행 (메시지 템플릿 설정) commit-msg: 커밋 메시지 검증 (메시지 형식 확인) post-commit: 커밋이 완료된 후 실행 (알림 전송) Merge/Rebase 관련 훅

0

Git - Gitleaks로 민감정보 탐지하기

Gitleaks란?Gitleaks는 Git 저장소에서 비밀번호, API 키, 토큰과 같은 민감한 정보(secrets)를 탐지하는 오픈소스 보안 도구입니다. 코드를 커밋하기 전이나 CI/CD 파이프라인에서 실행하여 실수로 민감정보가 코드 저장소에 포함되는 것을 방지할 수 있습니다. 주요 특징 빠른 스캔: Go 언어로 작성되어 빠른 성능 제공 다양한 탐지 규칙: 100개 이상의 내장 규칙으로 주요 서비스의 비밀정보 탐지 커스터마이징 가능: 사용자 정의 규칙 추가 가능 Git 통합: pre-commit hook으로 설정 가능 CI/CD 통합: GitHub Actions, GitLab CI 등과 쉽게 통합 설치macOS (Homebrew)brew install gitleaks Linux# Binary 다운로드wget https://github.com/gitleaks/gitleaks/releases/download/v8.18.0/gitleaks_8.18.0_linux_x64.tar.gztar -xzf gitleaks_8.18.0_linux_x64.tar.gzsudo mv gitleaks /usr/local/bin/

0

[JAVA POI] HSSFWorkbook vs XSSFWorkbook vs SXSSFWorkbook 비교

Apache POI Workbook 종류Apache POI는 Microsoft Office 파일을 처리하기 위한 Java 라이브러리입니다. Excel 파일을 다루기 위해 세 가지 주요 Workbook 구현체를 제공합니다. 📌 HSSFWorkbookHSSF (Horrible SpreadSheet Format) 는 Excel 97-2003 파일 형식(.xls)을 처리하는 구현체입니다. 특징 파일 형식: .xls (Excel 97-2003) 최대 행 수: 65,536행 (2^16) 최대 열 수: 256열 (2^8) 최대 Cell Style: 4,000개 메모리 사용: 중간 수준 (전체 파일을 메모리에 로드) 처리 속도: XSSF보다 빠름 사용 예시import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.*;import java.io.FileOutputStream;import java.io.IOException;public class HSSFExample { public static void main(String[] args) throws IOException { // HSSFWorkbook 생성 Workbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet("Sample"); // 데이터 작성 Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("Hello, HSSF!"); // .xls 파일로 저장 try (FileOutputStream fileOut = new FileOutputStream("sample.xls")) { workbook.write(fileOut); } workbook.close(); }} 장점

0

[JAVA POI] - The maximum number of Cell Styles was exceeded.

문제 상황Apache POI를 사용하여 Excel 파일(.xlsx)을 생성하거나 수정할 때 다음과 같은 오류가 발생할 수 있습니다. java.lang.IllegalStateException: The maximum number of Cell Styles was exceeded.You can define up to 64000 style in a .xlsx Workbook 발생 원인1. Cell Style 생성 방식의 문제Excel의 .xlsx 파일 형식에서는 최대 64,000개의 Cell Style만 생성할 수 있습니다. 이 제한은 Excel 파일 포맷의 스펙에 정의된 하드 리미트입니다. 일반적으로 이 오류는 다음과 같은 상황에서 발생합니다: // 잘못된 예시 - 반복문 안에서 매번 새로운 스타일 생성for (int i = 0; i < rows.size(); i++) { Row row = sheet.createRow(i); Cell cell = row.createCell(0); // 매 셀마다 새로운 스타일을 생성 (문제!) CellStyle style = workbook.createCellStyle(); Font font = workbook.createFont(); font.setBold(true); style.setFont(font); cell.setCellStyle(style); cell.setCellValue(data.get(i));} 위 코드에서 10,000개의 행을 처리한다면, 10,000개의 동일한 스타일이 생성되어 메모리를 낭비하고 결국 64,000개 제한에 도달하게 됩니다.

0

Nginx SSL/TLS 적용하기

SSL/TLS란?SSL (Secure Sockets Layer) 과 TLS (Transport Layer Security) 는 인터넷 통신을 암호화하는 프로토콜입니다. 1994년 넷스케이프에서 SSL 1.0을 개발한 이후, SSL은 웹 보안의 표준으로 자리잡았습니다. 그러나 여러 보안 취약점이 발견되면서 1999년 IETF(Internet Engineering Task Force)는 SSL 3.0을 기반으로 한 TLS 1.0을 발표했습니다. 현재 SSL 3.0과 TLS 1.0, 1.1은 보안상의 이유로 폐기되었으며, TLS 1.2(2008년 발표)와 TLS 1.3(2018년 발표)만 사용해야 합니다. 그럼에도 불구하고 역사적 이유와 관례상 “SSL 인증서” 또는 “SSL/TLS”라는 용어를 계속 사용하고 있습니다. SSL/TLS의 작동 원리SSL/TLS는 비대칭 암호화와 대칭 암호화를 조합하여 안전한 통신을 제공합니다: 핸드셰이크 단계: 클라이언트와 서버가 비대칭 암호화(공개키/개인키)를 사용하여 안전하게 세션키를 교환합니다. 데이터 전송 단계: 교환된 세션키를 사용하여 대칭 암호화로 빠르게 데이터를 암호화/복호화합니다. 검증 단계: 인증서를 통해 서버의 신원을 확인하고, 메시지 인증 코드(MAC)로 데이터 무결성을 보장합니다. 이러한 구조 덕분에 SSL/TLS는 높은 보안성과 효율성을 동시에 제공할 수 있습니다. 왜 SSL/TLS가 필수인가?1. 데이터 암호화 - 도청 방지

0

Nginx 완벽 가이드

Nginx란?Nginx(엔진엑스)는 2004년 러시아 개발자 Igor Sysoev가 만든 고성능 웹 서버이자 리버스 프록시 서버입니다. 처음에는 Rambler.ru라는 러시아 포털 사이트의 C10K 문제(동시에 10,000개의 연결을 처리하는 문제)를 해결하기 위해 개발되었으며, 현재는 전 세계 웹사이트의 30% 이상에서 사용되고 있습니다. Apache가 오랫동안 웹 서버 시장을 지배했지만, Nginx는 높은 동시 접속 처리 능력과 낮은 메모리 사용량으로 빠르게 시장 점유율을 확대했습니다. Netflix, Airbnb, GitHub, WordPress.com 등 트래픽이 많은 대형 사이트들이 Nginx를 사용하고 있습니다. 주요 특징1. 높은 성능과 확장성Nginx는 비동기 이벤트 기반(Event-Driven) 아키텍처를 채택하여 적은 수의 워커 프로세스로 수만 개의 동시 연결을 처리할 수 있습니다. Apache의 프로세스/스레드 기반 모델과 달리, 각 연결마다 새로운 프로세스나 스레드를 생성하지 않아 메모리 효율이 뛰어납니다. 2. 낮은 리소스 사용동일한 트래픽을 처리할 때 Apache 대비 메모리 사용량이 현저히 낮습니다. 이는 클라우드 환경에서 비용 절감으로 직결되며, 제한된 리소스를 가진 서버에서도 우수한 성능을 발휘합니다. 3. 확장성과 모듈화