전체 글 119

클래스 로더란?

jvm 내부에서 자바 바이트코드를 전달받아 동작하는 클래스 로더에 대해 알아보자! 클래스 로더의 개념자바는 동적 로드, 즉 컴파일 타임이 아니라 런타임(바이트코드를 실행할 때) 에 클래스를 링크하고 로드하는 특징을 가진다. 자바의 클래스 로딩은 클래스 참조 시점에 JVM 에 코드가 링크되고, 실제 런타임 시점에 로딩되는 동적 로딩을 거친다.자바는 클래스 로딩은 클래스 참조 시점에 JVM 에 코드가 링크되고, 실제 런타임 시점에 로딩되는 동적 로딩을 거진다. 런타임에 동적으로 클래스를 로딩한다는 것은 JVM 이 미리 모든 클래스에 대한 정보를 메소드 영역에 로딩하지 않았다는 것을 의미합니다. JVM 내에서 자바 바이트코드를 전달받는 클래스 로더가 자바가 동적으로 로드될 수 있도록 해주는 소프트웨어입니다. ..

JAVA 2025.03.24

JVM, JDK, JRE 의 차이, JVM의 동작방식

자바 JVM, JDK, JRE 의 차이가 무엇인지 확인해보자 JVM (Java Virtual Machine)자바 가상 머신으로 자바 바이트 코드(.class 파일) 를 OS 에 특화된 코드로 변환(인터프리터와  JIT 컴파일러)하여 실행한다.바이트 코드를 실행하는 표준 (JVM 자체는 표준) 이자 구현체 (특정 밴더가 구현한 JVM) 다.JVM 밴더: 오라클, 아마존, Azul,...특정 플랫폼에 종속적.(os 에 맞는 native 코드로 맞춰서 호출) JRE (Java Runtime Environment) : JVM + 라이브러리자바 애플리케이션을 실행 할 수 있는 배포판.jre 배포판의 목적은 자바 애플리케이션을 실행하는 것이다. 실행을 하기 위해 바이트 코드를 변환하는 jvm 과 java 의 핵심 ..

JAVA 2025.03.23

HTTP/ HTTPS , SSL 가속기

예전에 은행권 프로젝트를 진행하며 SSL 가속기를 접하게 되었는데, 당시에는 단순히 보안 장비라고만 생각했다. 이번 기회에 SSL 가속기의 역할과 필요성을 정리해보았다. HTTP와 HTTPS의 차이 HTTP는 평문 데이터를 전송하는 프로토콜이기 때문에, HTTP 로 중요한 정보를 주고받으면 제 3자에 의해 조회될 수 있다.이러한 문제를 해결하기 위해 HTTP 에 암호화가 추가된 프로토콜이 HTTPS 입니다.HTTPS 는 SSL 의 껍질을 덮어쓴 HTTP 라고 할 수 있습니다.SSL(Secure Socket Layer) 인터넷을 통해 전달되는 정보를 보호하기 위해 개발한 통신 규약클라이언트와 서버가 서로 데이터를 암호화해 통신할 수 있도록 돕는 보안계층TCP 4계층의 암호화 프로토콜HTTP 는 원래..

Network 2025.03.19

Spring Boot 애플리케이션 실시간 모니터링: Actuator, Prometheus, Grafana 활용법

서비스 운영에서 실시간 모니터링은 장애 대응의 핵심 요소다. 만약 모니터링 도구가 없다면, 장애 발생 시 원인 분석과 트러블슈팅이 어렵고 시간이 오래 걸릴 수 있다. 이 글에서는 가장 널리 사용되는 Prometheus + Grafana 조합을 활용하여 Spring Boot 애플리케이션을 효과적으로 모니터링하는 방법을 소개한다. 개인 프로젝트를 진행하면서 Spring Boot Actuator를 활용해 Prometheus로 메트릭을 수집하고, 이를 Grafana로 시각화해보았다. 이를 통해 운영 툴을 익히고 데이터 흐름을 파악하는 과정을 정리해보려 한다. 액추에이터:  메트릭을 수집할수 있는 API 엔드포인트 제공 prometheus : 매트릭 같은 시계열  데이터 스키마를 지원하는 데이터 베이스시계열 데이..

Spring 2025.03.19

Java 저울 백준 - 2437

https://www.acmicpc.net/problem/2437하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓을 수 있고, 다른 쪽에는 무게를 측정하려는 물건만 올려놓을 수 있다. 무게가 양의 정수인 N개의 저울추가 주어질 때, 이 추들을 사용하여 측정할 수 없는 양의 정수 무게 중 최솟값을 구하는 프로그램을 작성하시오.예를 들어, 무게가 각각 3, 1, 6, 2, 7, 30, 1인 7개의 저울추가 주어졌을 때, 이 추들로 측정할 수 없는 양의 정수 무게 중 최솟값은 21이다. 입력첫 째 줄에는 저울추의 개수를 나타내는 양의 정수 N이 주어진다. N은 1 이상 1..

알고리즘 2025.02.19

Spring Boot + Redis 적용기

현재 개인적으로 주식 관련 프로젝트를 진행 중인데, 여러 유저들이 동일한 종목의 정보를 조회할 때 발생하는 API 호출의 중복 문제를 해결하기 위해 Redis를 도입했습니다. 문제점여러 유저가 동일한 종목 정보를 조회하는 경우, 증권사 API를 여러 번 호출해야 하는 상황이 발생할 수 있습니다. 이는 불필요한 트래픽을 유발하고 성능 저하를 초래할 수 있습니다. 이를 해결하기 위해 디스크 기반의 DBMS 에 비해 훨씬 빠른 레디스를 도입해보았다.레디스는 인메모리에 모든 데이터를 저장하기 때문에 훨씬 빠르며 여러가지 자료구조를 지원하고  확장성을 고려하였을때도 여러 기능을 제공한다는 점에서 이점이 있다.동일한 종목 요청시 캐시된 데이터를 반환하도록 api 호출을 최적화해보고 최적화 전 후 성능을 비교해보자 ..

Spring 2025.02.19

L4 , L7 로드밸런서

L4 , L7 로드 밸런서의 정의와 특징에 대해 알아보자!  L4 로드 밸런서 정의 L4 로드 밸런서는 전송 계층 (Transprot Layer, Layer 4)에서 작동하는 로드밸런서로, 주로 TCP 및 UDP 프로토콜 기반으로 클라이언트와 서버 간의 트래픽을 분산시킵니다. L4 로드 밸런서는 클라이언트의 IP 주소와 포트,  서버의 IP 주소와 포트를 기반으로 로드밸런싱을 수행합니다. L7 로드 밸런서 정의L7 은 로드밸런서는 애플리케이션 계층 (Application Layer, Layer 7)에서 작동하는 로드 밸런서로, 주로 HTTP  및 HTTPS 프로토콜 기반으로 클라이언트와 서버 간의 트래픽을 분산시킵니다. L7 로드밸런서는 요청 내용 (URL, 헤더, 쿠키) 등을 기반으로 로드 밸런싱을 수..

Network 2025.02.12

네트워크 - 프로그램1

네트워크 프로그램 1 - 예제이제 본격적으로 자바 네트워크 프로그램을 작성해 보자.여기서는 TCP/IP로 개발할 예정이다. (UDP는 직접 사용할 일이 많지 않으므로 다루지 않겠다. 이번에 만들 프로그램은 아주 간단한 네트워크 클라이언트, 서버 프로그램이다.클라이언트가 "Hello"라는 문자를 서버에 전달하면 서버는 클라이언트의 요청에 " World!"라는 단어를 더해서 "Hello World!"라는 단어를 클라이언트에 응답한다클라이언트 서버: "Hello"클라이언트 서버: "Hello World!"package network.tcp.v1;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;imp..

JAVA 2025.01.29

자바 - IO 기본 (buffer)

데이터 통신을 다루다 보면 버퍼라는 개념이 나온다. 버퍼는 왜 쓰이는 것일까?버퍼에 목적에 대해 알아보자!핵심 요약버퍼는 데이터를 일시적으로 저장하는 메모리 영역데이터 처리 속도가 서로 다른 장치나 프로세스 간의 속도 차이를 조율하거나, 입출력 성능을 향상시키기 위해 사용되는 중간 저장소버퍼(Buffer)의 목적 (임시 저장소로서의 큐 구조)입출력 데이터를 일정량 모아 두었다가 처리함으로써 시스템 전체의 효율과 안정성을 높이는 장치입니다.I/O 호출 횟수 감소로 인한 속도 향상데이터를 버퍼에 모아 한 번에 디스크나 네트워크로 전달I/O 오버헤드 감소 → 병목 완화속도 차이 조정 (Speed Mismatch Absorption)빠른 주체(CPU 등)와 느린 주체(디스크/네트워크 등) 간 속도 불일치 해소빠..

JAVA 2025.01.28

자바 - IO 기본 (InputStream, OutputStream)

자바에서 데이터를 파일이나 네트워크 등을 통해 주고 받을 때 어떤식으로 통신하는지 알아보자  데이터의 통신 과정은 스트림으로 통신한다  자바가 가진 데이터를 hello.dat 라는  파일에 저장하려면 어떻게 해야할까?자바 프로세스가 가지고 있는 데이터를 밖으로 보내려면 출력 스트림을 사용하면 되고, 반대로 외부 데이터를 자바 프로세스 안으로 가져오려면 입력 스트림을 사용하면 된다. 참고로 스프트림을 단방향으로 흐른다. 스트림 시작 스트림 시작 - 예제1package io.start;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class StreamStartMain1_1 { ..

JAVA 2025.01.28