본문 바로가기

전체 글

(15)
리버스 프록시와 포워드 프록시 프록시란?프록시는 대리 서버입니다. 사용자의 요청을 대신 전달하거나 응답을 대신 받아오는 중간자 역할을 합니다.포워드 프록시(Forward Proxy)개념사용자(클라이언트)가 직접 서버에 접속하지 않고, 프록시 서버를 통해 외부로 요청을 보냅니다.[Client] → [Forward Proxy] → [Internet/Web Server]특징클라이언트가 프록시를 인식하고 사용외부에서는 클라이언트의 IP가 보이지 않음 (익명성 보장)내부 사용자들의 접근 제어에 유리사용 사례사내 네트워크에서 외부 인터넷 차단 및 모니터링국가 차원의 검열VPN, 웹 필터링예시기업 방화벽 프록시Squid 프록시 서버웹 크롤러가 아이피 우회를 위해 사용하는 프록시리버스 프록시(Reverse Proxy)개념클라이언트는 서버에 직접 요..
try-catch-finally와 안티 패턴과 catch에서 해야할 일 Java의 try-catch-finally 구문은 예외 처리의 핵심 도구입니다. 하지만 잘못 사용하면 코드 품질을 망치고, 디버깅을 어렵게 만들며, 성능에 악영향을 줄 수 있습니다.이번 포스팅에서는 실무에서 자주 보게 되는 try-catch 안티패턴들을 정리하고, 올바른 사용법도 함께 알려드립니다.1. 빈 catch 블록try { // ...} catch (Exception e) { // 아무것도 안 함}문제점:예외를 완전히 무시 → 버그가 숨어버림로그도 없고 사용자에게도 알리지 않음바른 예:catch (Exception e) { log.error("예외 발생", e); // 필요시 사용자 응답 반환} 2. 너무 광범위한 예외 처리 (catch Exception)catch (Exce..
Kubernetes의 Probe Probe란?Probe는 Kubernetes의 컨테이너가 상태를 판단하기 위해 주기적으로 수행하는 검사입니다.총 3가지 종류가 있으며, 각각의 목적이 다릅니다. 1. livenessProbe (생존 여부 확인)목적: 컨테이너가 '살아있는지' 판단합니다.동작: livenessProbe에 실패하면 kubelet이 컨테이너를 재시작합니다.사용 예시: 애플리케이션이 응답은 멈췄지만 프로세스는 살아 있는 상태에서 재시작이 필요한 경우livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 5 periodSeconds: 10 2. readinessProbe (서비스 준비 여부 확인)목적: 컨테이너가 트래픽을 받을 준비가 되었는지 확..
Elasticsearch의 데이터는 어디에 저장될까? Elasticsearch는 대용량의 데이터를 빠르게 검색하고 분석할 수 있는 분산 검색엔진입니다. 그럼 Elasticsearch가 저장하는 데이터는 실제로 어디에 저장될까요?Elasticsearch 데이터 기본 저장 위치Linux/macOS: /var/lib/elasticsearchWindows: C:\ProgramData/Elastic\Elasticsearch\data위 경로는 운영체제 및 설치 방법(예: tar, deb, rpm, docker 등)에 따라 달라질 수 있습니다.Elasticsearch 데이터 저장 위치 설정Elasticsearch의 저장 위치는 설정 파일 elasticsearch.yml에서 지정할 수 있습니다.# elasticsearch.yml 예시path.data: /mnt/elast..
JVM 모니터링 방법 JVM(Java Virtual Machine) 모니터링은 자바 애플리케이션의 성능을 최적화하고 문제를 디버깅하는 데 필수적입니다. 다양한 도구와 방법을 활용하여 JVM의 상태를 효과적으로 모니터링할 수 있습니다.1. JDK 내장 모니터링 도구jps (Java Process Status)jps -l 명령어를 사용하면 현재 실행 중인 모든 Java 프로세스의 ID와 클래스명을 확인할 수 있습니다. 이는 모니터링을 시작하기 전 대상 프로세스를 식별하는 첫 단계입니다.$ jps -l12345 com.example.Application23456 org.eclipse.equinox.launcher_1.5.0.v20180119-0753.jarjstat (JVM Statistics Monitoring Tool)메모리와..
jvm 가비지 컬렉션 가비지 컬렉션(GC)이란?JVM에서 더 이상 참조되지 않는 객체를 찾아서 자동으로 메모리에서 해제하는 메커니즘메모리 누수 방지 및 프로그램 안정성 향상개발자가 직접 메모리 해제를 관리하지 않아도 됨GC 대상이 되는 경우더 이상 참조되지 않는 객체도달할 수 없는 객체 (root 객체부터 참조 경로가 끊어진 객체)ex) 지역 변수 범위를 벗어난 객체, null 할당된 객체코드 예시 - GC 대상이 되는 경우public class GCExample { public static void main(String[] args) { // 1. 참조 변수가 없는 객체 (Anonymous Object) new String("이 객체는 생성 직후 GC 대상이 됩니다"); // 2...
Transformer와 Attention 트랜스포머와 어텐션에 대한 대략적인 설명머신러닝에서 트랜스포머와 어텐션은 LLM을 발전시키는 데 크게 기여.트랜스포머는 RNN, LSTM과 같은 모델의 한 종류다.어텐션은 문장에서 각 단어가 다른 단어들과의 관계를 계산하는 매커니즘이다.예를 들어 i am a dog과 dog is hungry라는 두 문장이 있을 때 처음 임베딩과정에서 dog는 같은 벡터를 가진다. (컨텍스트 임베딩의 경우는 초기 임베딩부터 다르다)하지만 dog가 문장 내에서 항상 같은 의미를 지니지않는다. 예를 들어 dog가 주어일수도 있고 목적어 일수도있다. 심지어는 사람의 이름이나 신조어 등을 나타낼수도 있다.어텐션을 통해 dog가 문장 내에서 어떤 역할을 하는지 혹은 dog가 진짜로 동물 dog인지 아니면 다른 무언가를 지칭하는지 ..
Machine Learning과 ETL 파이프라인 Machine Learning이란일반적인 개발에서는 어떤 input을 통해 명시적으로 작성한 코드에 의해 분기처리와 여러 연산을 하여 output을 구한다.머신러닝(ML)을 통한 개발의 경우, input을 통해 output을 구하는 명시적인 로직을 사람이 작성하지 않는다. 대신 모델이 학습 데이터로부터 그 경향성을 파악하고, 이후 input에 대해 적절한 output을 예측한다.대신 학습 데이터를 통해 input에 따른 output의 경향을 파악하고 추후 들어오는 input을 통해 output을 예측한다.예를 들면 현재 관측된 기상 데이터를 통해 내일 날씨를 예상한다고 해보자. 일반적인 개발const todayData = await fetch("https://기상청.com/today")const { 습도..
Spring의 Bean과 Static의 차이 스프링을 사용하는 입장에서 의존성 주입을 통해 컴포지션 형태로 받아온 클래스와 스태틱 클래스 사이에 무슨 차이가 있는지 궁금해졌다. 차지하는 메모리 영역과 장단점을 알아보자. 정의 및 기본 개념스프링 빈스프링에서 빈은 스프링 IoC 컨테이너가 관리하는 객체다. 빈은 애플리케이션 컨텍스트가 초기화될 때 생성되고, 종료될 때 소멸된다. 빈은 싱글톤, 프로토타입 등 다양한 스코프를 가질 수 있다.스태틱스태틱은 클래스에 속한 변수나 메소드로, 클래스 인스턴스를 생성하지 않고 클래스 이름을 통해 접근할 수 있다. 스태틱 변수와 메소드는 클래스 로딩 시 한 번만 할당되고, 클래스가 JVM에 로드된 후 계속해서 사용할 수 있다. 메모리 관리 및 사용스프링 빈클래스 정보는 코드 영역(Method Area)에 저장된다...
요청 처리 전략: 프로세스 VS 쓰레드 DB나 API 서버에서 클라이언트 요청을 처리할 때는 보통 쓰레드나 프로세스를 활용하게 된다.요청마다 새로운 쓰레드를 만들거나, 아예 프로세스를 생성해서 처리할 수도 있고,혹은 하나의 쓰레드를 여러 작업이 나눠서 사용하는 구조도 있다. 요청 단위로 리소스를 할당하는 방식과 작업 단위로 재사용하는 방식은 동시성, 성능, 안정성 측면에서 각기 다른 장단점을 가지게 된다. 이번 포스팅에서는 각 방식의 메커니즘과 장단점을 비교해보자. 프로세스란디스크에 저장되어있는 프로그램을 실행하여 메모리 위에 올려진 것을 프로세스라고 한다. 예시프로그램: chrome.exe프로세스 : 메모리에 올라와 실행중인 chrome프로세스 2개: chrome을 두 개 띄움 쓰레드란프로세스 내에서 실행되는 작업 단위를 쓰레드라고 한다.한..