전체 글 112

HTTP 메서드란? 멱등성

http 메서드의 기본 개념을 알아보고 주요메서드인 GET, POST, PUT, DELETE, PATCH 등의 역할과 차이에 대해 알아보자.실무에서 적절한 HTTP 메서드를 선택해보자. 또한 멱등이라는 개념을 잘 이해하는 것이 중요하다.API 설계 뿐 아니라 IO(특히 네트워크) 가 포함된 실행흐름을 설계할 때 꼭꼭 신경써야한다.  HTTP 메서드란?HTTP 메서드를 클라이언트가 서버에 요청을 보낼 때 수행할 동작을 지정하는 방식image , 영상, 음성, html, text 등 우리가 생각할 수 있는 모든 데이터를 바이너리로 전송가능하다.http 은 요청과 응답 메시지 구조가 약간 다르다.HTTP 요청과 응답 메시지는 시작라인, 헤더, message body 부분으로 이루어져 있다. 요청메시지요청메시지..

Network 2025.04.01

Java 예외 처리, 제대로 알고 쓰자

예외 처리는 프로그램을 작성할 때 필수적인 부분이지만, 어떻게 예외를 처리할지에 대한  기준을 명확히 해야 합니다.잘못된 예외 처리 방식은 오히려 코드의  가독성을 떨어뜨리고 성능을 저하시킬 수 있다.이 글에서는 예외를 잘못 사용했을 때 발생할 수 있는 문제점과 올바른 예외 처리 방법을 정리해보겠습니다.예외는 예외적인 상황에서만 사용하자예외를 활용한 분기 처리는 절대로 사용하지 말아야 합니다. 예외는 예측 불가능한 문제를 처리하는데 사용해야 하며, 일상적인 제어 흐름에는 사용되지 않아야 합니다.  예외를 활용한 조건문 대체 (잘못된 반복문 종료 방식) try { int[] arr = {1, 2, 3}; int i = 0; while (true) { System.out.prin..

JAVA 2025.03.26

모니터링 메트릭 활용

마이크로미터를 사용해서 메트릭을 직접 등록하는 방법을 알아보자 MeterRegistry마이크로미터 기능을 제공하는 핵심 컴포넌트스프링을 통해서 주입 받아서 사용하고, 이곳을 통해서 카운터, 게이지 등을 등록한다. 카운터단조롭게 증가하는 단일 누적 측정항목단일값보통 하나씩 증가누적이므로 전체 값을 포함(total)프로메테우스에서는 일반적으로 카운터의 이름 마지막에 _tatal 을 붙여서 my_intersetstock_tatol 과 같이 표현함값을 증가하거나 0으로 초기화 하는 것만 가능예 ) HTTP 요청수 메트릭 등록 - 예제 만들기관심 주식 등록 서비스에 카운터 메트릭을 적용해보자!package com.flab.mars.domain.service;import com.flab.mars.db.entity...

Spring 2025.03.25

바이트코드 조작

스카우터는 어떻게 xlog 를 측정할까? 궁금증을 살펴보다 바이트 조작이라는 개념을 알게되었다.어떤 원리로 바이트 조작이 발생하는 것일까? 해당 방식에 대해 알아보자 바이트 코드 사용 예시자바 커버리지 측정도 바이트코드 조작과 면밀한 연관이 있다. 코드 커버리지코드 커버리지는 어떻게 측정할까?테스트 케이스 실행 시 커버리지로 실행을 할 수 있다. 커버리지 실행 후 보고서를 확인할 수 있다.  바이트 코드 조작 라이브러리 비교ASM 바이트 코드 조작시 가장 고전적이고 널리 쓰이는 라이브러리  (비지터 패턴과 어뎁터 패턴을 알아야 잘 쓸 수 있음) 매우 어렵고 러닝커브가 높으며 자바 바이트코드 구조를 어느정도 알고 있어야 한다.스프링 프레임워크를 포함하여 많은 곳이서 쓰인다.JavasistASM 보다는 아니..

JAVA 2025.03.24

클래스 로더란?

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