Category: Develop

0

EC2 를 이용한 WireGuard Full Tunnel 구성

✅ VPN 서버 설정 WireGuard 내부 대역: 10.100.0.0/24 EC2 VPC 대역: 10.1.0.0/16 EC2 설정EC2 를 VPN 서버로 사용하기 위해서는 일단 Client 와 연결하기 위한 Port 가 오픈이 돼 있어야 합니다. Wireguard 는 51820 UDP 포트를 사용하므로 해당 포트를 통해 Client 가 접속할 수 있도록 보안 그룹 허용 목록에 추가해줍니다. EC2 에 WireGuard 설치Debian 계열 리눅스# 패키지 목록 업데이트sudo apt update# WireGuard 설치sudo apt install wireguard -y# WireGuard 버전 확인wg --version RHEL 계열 리눅스

0

PostgreSQL - Top N 쿼리 확인 방법

pg_stat_statements를 이용한 Top N 쿼리 확인PostgreSQL에서 가장 많이 실행되거나 느린 쿼리를 확인하는 방법을 정리합니다. 1. pg_stat_statements 확장 설치-- 확장 설치CREATE EXTENSION IF NOT EXISTS pg_stat_statements;-- 설치 확인SELECT * FROM pg_available_extensions WHERE name = 'pg_stat_statements'; 2. postgresql.conf 설정# postgresql.conf 파일에 추가shared_preload_libraries = 'pg_stat_statements'# 추적할 쿼리 수 (기본값: 5000)pg_stat_statements.max = 10000# 쿼리 추적 모드 (top: 최상위 쿼리만, all: 중첩 쿼리 포함)pg_stat_statements.track = all 설정 변경 후 PostgreSQL 재시작 필요: # 재시작sudo systemctl restart postgresql# 또는pg_ctl restart 3. 실행 횟수가 많은 Top N 쿼리

0

MySQL - Top N 쿼리 확인 방법

MySQL에서 가장 많이 실행되거나 느린 쿼리를 확인하는 방법을 정리합니다. Log 파일 기반 Top N 쿼리 확인5. Slow Query Log 설정-- Slow Query Log 활성화SET GLOBAL slow_query_log = 'ON';-- Slow Query 기준 시간 설정 (초 단위)SET GLOBAL long_query_time = 2;-- Slow Query Log 파일 위치 확인SHOW VARIABLES LIKE 'slow_query_log_file';-- 인덱스를 사용하지 않는 쿼리도 로깅SET GLOBAL log_queries_not_using_indexes = 'ON'; SHOW VARIABLES LIKE 'slow_query%';SHOW VARIABLES LIKE 'long_query_time'; SHOW VARIABLES LIKE 'slow_query_log_file'; 6. Slow Query Log 분석 (mysqldumpslow)# 가장 느린 쿼리 10개mysqldumpslow -s t -t 10 /path/to/slow-query.log# 가장 많이 실행된 쿼리 10개mysqldumpslow -s c -t 10 /path/to/slow-query.log# 평균 실행 시간이 긴 쿼리 10개mysqldumpslow -s at -t 10 /path/to/slow-query.log Performance Schema를 이용한 Top N 쿼리 확인

0

Ubuntu Linux에 OpenVPN 설치 및 설정 가이드

OpenVPN 개요OpenVPN은 오픈소스 VPN 솔루션으로, 안전한 원격 접속과 네트워크 간 통신을 제공합니다. SSL/TLS를 사용하여 강력한 암호화를 지원하며, 방화벽을 통과하기 쉬운 구조로 설계되어 있습니다. 1. OpenVPN 서버 설치# 패키지 목록 업데이트sudo apt updatesudo apt upgrade -y# OpenVPN 설치sudo apt install openvpn -y# Easy-RSA 설치 (인증서 관리 도구)sudo apt install easy-rsa -y# OpenVPN 버전 확인openvpn --version# 설치된 파일 확인dpkg -L openvpn | grep bin 2. PKI (Public Key Infrastructure) 설정Easy-RSA 디렉토리 설정# Easy-RSA 디렉토리 생성make-cadir ~/openvpn-ca# 디렉토리 이동cd ~/openvpn-ca CA (Certificate Authority) 설정# vars 파일 편집nano vars# 다음 내용 수정 (예시)set_var EASYRSA_REQ_COUNTRY "KR"set_var EASYRSA_REQ_PROVINCE "Seoul"set_var EASYRSA_REQ_CITY "Seoul"set_var EASYRSA_REQ_ORG "MyCompany"set_var EASYRSA_REQ_EMAIL "admin@example.com"set_var EASYRSA_REQ_OU "IT Department"

0

Fail2ban 설치 및 사용 가이드

Fail2ban 개요Fail2ban은 로그 파일을 모니터링하여 악의적인 활동(무차별 대입 공격, 포트 스캔 등)을 탐지하고 자동으로 차단하는 침입 방지 소프트웨어입니다. 주요 기능 로그 파일 실시간 모니터링 정규표현식 기반 패턴 매칭 자동 IP 차단 (iptables, firewalld, ufw 등) 시간 기반 자동 차단 해제 이메일 알림 기능 다양한 서비스 지원 (SSH, Apache, Nginx, MySQL 등) 작동 원리 로그 모니터링: Fail2ban은 지정된 로그 파일을 실시간으로 감시합니다. 패턴 매칭: 설정된 정규표현식 패턴(filter)과 로그를 비교합니다. 실패 횟수 카운트: 특정 IP에서 실패가 발생할 때마다 카운트를 증가시킵니다. 차단 실행: 설정된 임계값(maxretry)을 초과하면 해당 IP를 차단합니다. 자동 해제: 설정된 시간(bantime) 후 자동으로 차단을 해제합니다. 1. 설치Ubuntu/Debian# 패키지 업데이트sudo apt update# Fail2ban 설치sudo apt install fail2ban -y# 서비스 시작 및 자동 시작 설정sudo systemctl start fail2bansudo systemctl enable fail2ban# 상태 확인sudo systemctl status fail2ban

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

우아한 종료 (Graceful Shutdown)

Graceful Shutdown이란?Graceful Shutdown은 애플리케이션이 종료될 때 현재 처리 중인 작업을 안전하게 완료하고, 리소스를 정리한 후 종료하는 방식입니다. 갑작스러운 종료(Abrupt Shutdown)와 달리, 진행 중인 요청을 처리하고 데이터 손실을 방지합니다. 왜 필요한가?일반적인 종료 문제점// 갑작스러운 종료 시 발생할 수 있는 문제들- 처리 중인 HTTP 요청이 중단됨- 데이터베이스 트랜잭션이 롤백됨- 파일 쓰기 작업이 중단되어 데이터 손실- 외부 API 호출이 타임아웃- 메시지 큐의 메시지가 손실됨 Graceful Shutdown의 이점 데이터 무결성: 진행 중인 트랜잭션을 완료 사용자 경험: 진행 중인 요청에 대한 정상 응답 리소스 정리: 연결, 파일, 스레드 등 정리 무중단 배포: 롤링 업데이트 시 서비스 중단 최소화 JVM Shutdown HookJVM은 종료 시 등록된 Shutdown Hook을 실행합니다. 기본 사용법

0

[PostgreSQL] 사용자별 보안 설정 가이드

🔒 PostgreSQL 사용자별 보안 설정 완벽 가이드PostgreSQL에서는 사용자(Role)별로 다양한 보안 설정을 적용하여 데이터베이스를 안전하게 보호할 수 있습니다.이 문서에서는 세션 타임아웃부터 접속 제한, 권한 관리까지 실무에서 꼭 필요한 보안 설정들을 정리합니다. 1️⃣ 세션 타임아웃 설정✅ idle_session_timeout (PostgreSQL 14+)유휴 세션을 자동으로 종료하여 불필요한 연결을 정리합니다. -- 세션 레벨에서 설정 (30분)SET idle_session_timeout = '30min';-- 전역 설정 (postgresql.conf)idle_session_timeout = '30min'-- 특정 사용자에 설정ALTER ROLE webapp_user SET idle_session_timeout = '30min';-- 특정 데이터베이스에 설정ALTER DATABASE mydb SET idle_session_timeout = '1h'; ✅ statement_timeout단일 쿼리의 최대 실행 시간을 제한하여 과도한 리소스 사용을 방지합니다. -- 세션 레벨 (10초)SET statement_timeout = '10s';-- 웹 애플리케이션 사용자: 짧은 타임아웃ALTER ROLE webapp_user SET statement_timeout = '30s';-- 배치 작업 사용자: 긴 타임아웃ALTER ROLE batch_user SET statement_timeout = '10min';-- 관리자: 제한 없음ALTER ROLE admin_user SET statement_timeout = 0;

0

Linux 로그 확인 및 관리 방법

Linux 로그 시스템 개요Linux 시스템에서 로그는 시스템 상태, 애플리케이션 동작, 보안 이벤트 등을 추적하는 중요한 도구입니다. 로그를 효과적으로 관리하고 분석하는 것은 시스템 관리자와 개발자에게 필수적인 역량입니다. 1. systemd 기반 로그 관리 (journalctl)현대 Linux 배포판의 대부분은 systemd를 사용하며, journalctl은 systemd의 로그 조회 도구입니다. 기본 조회# 전체 시스템 로그 확인journalctl# 최근 로그만 확인 (기본 10줄)journalctl -n# 최근 100줄 확인journalctl -n 100# 실시간으로 로그 확인 (tail -f 처럼)journalctl -f# 페이지 단위로 확인 (기본)journalctl --no-pager 서비스별 로그 확인# 특정 서비스 로그 확인journalctl -u nginx.servicejournalctl -u apache2.servicejournalctl -u mysql.service# 여러 서비스 동시 확인journalctl -u nginx.service -u mysql.service# 서비스 로그 실시간 모니터링journalctl -u nginx.service -f 시간 기반 필터링

0

JAVA - 자바 버전별 주요 특징 총정리 (Java 8 ~ Java 25)

들어가며자바는 1996년 처음 등장한 이후 지속적으로 발전해왔습니다. 특히 Java 8 이후로는 6개월마다 새로운 버전이 출시되면서 빠르게 진화하고 있습니다. 이 글에서는 Java 8부터 최신 버전인 Java 25까지의 주요 특징들을 살펴보겠습니다. 각 버전의 핵심 기능들을 이해하면 현대적인 자바 개발을 더 효과적으로 할 수 있습니다. Java 8 (2014년 3월) - LTSJava 8은 자바 역사상 가장 혁명적인 변화를 가져온 버전입니다. 함수형 프로그래밍 패러다임을 본격적으로 도입하면서 자바의 코딩 스타일을 완전히 바꾸어 놓았습니다. 람다 표현식 (Lambda Expressions)람다 표현식은 익명 함수를 간결하게 표현할 수 있게 해주는 기능입니다. 기존에는 익명 내부 클래스를 사용해야 했던 코드를 훨씬 간결하게 작성할 수 있게 되었습니다. // Java 7 이전button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Button clicked!"); }});// Java 8 이후button.addActionListener(e -> System.out.println("Button clicked!")); 스트림 API (Stream API)

0

JAVA - 버전별 주요 특징과 예시

정리 기준 자바 8부터 25까지의 흐름을 LTS 위주로 묶고, 미리보기/인큐베이터 상태를 함께 표기했다. 코드 예제는 해당 버전에서 동작하도록 작성했고, 미리보기 기능은 --enable-preview 플래그가 필요하다. Java 8 (2014, LTS)람다, Stream API, Optional, 새로운 java.time 패키지가 등장해 함수형 스타일과 안전한 시간 처리의 기반이 마련되었다. 인터페이스에 default/static 메서드를 둘 수 있어 라이브러리 진화도 쉬워졌다. List<String> names = Arrays.asList("Java", "Kotlin", "Scala");List<String> upper = names.stream() .filter(s -> s.startsWith("J")) .map(String::toUpperCase) .collect(Collectors.toList()); Java 9 (2017)프로젝트 지그소로 JDK 자체와 애플리케이션을 모듈화할 수 있게 되었고, JShell 덕분에 REPL 실험이 편해졌다. HTTP 클라이언트가 인큐베이터로 공개되어 이후 표준화의 발판을 마련했다. // module-info.javamodule com.example.app { requires com.example.service; exports com.example.app.api;} Java 10 (2018)

0

Django 시작하기 - 설치부터 프로젝트 생성까지 🚀

안녕하세요! 👋 오늘은 Python의 대표적인 웹 프레임워크인 Django를 시작하는 방법에 대해 알아보겠습니다. Django를 처음 접하시는 분들도 쉽게 따라할 수 있도록 자세히 설명해드릴게요! 😊 1️⃣ Django란 무엇인가요? 🤔Django(장고)는 Python으로 작성된 무료 오픈소스 웹 애플리케이션 프레임워크입니다. “빠른 개발”과 “깔끔하고 실용적인 디자인”을 목표로 만들어졌어요. Django의 주요 특징 ✨MTV 패턴 📐Django는 MTV(Model-Template-View) 패턴을 사용합니다. 이는 다른 프레임워크의 MVC 패턴과 유사한데요: Model: 데이터베이스와 상호작용하는 부분 💾 Template: 사용자에게 보여지는 화면 (HTML) 🎨 View: 비즈니스 로직을 처리하는 부분 ⚙️ 배터리 포함(Batteries Included) 🔋Django는 웹 개발에 필요한 거의 모든 기능을 기본적으로 제공합니다: 강력한 ORM(Object-Relational Mapping) 시스템 사용자 인증 시스템 🔐 관리자 페이지(Admin Page) 자동 생성 👨‍💼 폼(Form) 처리 📝 세션 관리 보안 기능 (CSRF, XSS, SQL Injection 방지) 🛡️ 확장성과 안정성 💪Instagram, Pinterest, NASA 등 많은 대형 서비스들이 Django를 사용하고 있어요. 이는 Django가 얼마나 안정적이고 확장 가능한지를 증명합니다!