전체 글 119

버퍼(Buffer)와 I/O 최적화

웹/애플리케이션 개발뿐 아니라 저수준 시스템 프로그래밍에서도 성능은 늘 중요한 주제입니다.그중에서도 I/O(Input/Output) 작업과 버퍼(Buffer)의 역할은 성능 병목을 해소하는 핵심 키워드입니다. 1. I/O란?I/O는 컴퓨터의 내부 장치(CPU·메모리)와 외부 장치(디스크·네트워크) 사이에서 데이터를 주고받는 모든 작업을 말합니다.디스크 I/O: 파일 읽기/쓰기, 데이터베이스 액세스네트워크 I/O: HTTP 요청/응답, API 호출사용자 I/O: 키보드/마우스 입력, 터미널 출력디바이스마다 속도가 다르고, 외부 장치는 내부 메모리보다 훨씬 느리기 때문에 I/O는 큰 병목을 일으킬 수 있습니다.2. 버퍼(Buffer)란?**버퍼(Buffer)**는 **임시 저장소(Queue 형태)**로, ..

Network 2025.04.21

Dokerfile 활용해 이미지 직접 만들기

Dockerfile 이란?Docker 이미지는 Dockerhub 을 통해 다운받아서 사용할 수 있다. 이 Docker 이미지들도 누군가 만들어서 Dockerhub 에 올려놓은 것이다. Dockerfile 이라는 걸 활용해서 Docker 이미지를 만들 수 있다.Dockerhub 에 올려놓은 Docker 이미지가 아닌, 나만의 Docker 이미지를 만들고 싶을 수 있다. . 예를 들어, 내가 만든 Spring Boot 프로젝트가 있다. 내가 만든 Spring Boot 프로젝트 자체를 Docker 이미지로 만들고 싶을 수 있다. 이럴 때에도 Dockerfile을 활용하면 나만의 Docker 이미지를 만들 수 있게 된다. 즉 Dockerfile 이란? Docker 이미지를 만들게 해주는 파일 FROM :..

docker 2025.04.15

Docker CLI - 기본 명령어

이미지 다운로드[최신 버전(latest) 이미지 다운로드]# docker pull 이미지명$ docker pull nginx # docker pull nginx:latest와 동일하게 작동이미지를 다운로드 할 때 Dockerhub이라는 곳에서 이미지를 다운 받는다.Github은 사람들이 올려놓은 다양한 코드들이 저장되어 있어서 clone, pull을 받아서 사용할 수 있다. Dockerhub도 마찬가지로 사람들이 올려놓은 이미지들이 저장되어 있어서 pull을 통해 다운받아서 사용할 수 있다.Dockerhub은 Github처럼 이미지를 저장 및 다운받을 수 있는 저장소 역할을 하고 있다.  [특정 버전 이미지 다운로드]# docker pull 이미지명:태그명$ docker pull nginx:stable-..

docker 2025.04.12

도커란? 컨테이너란? 이미지란?

도커란?컨테이너를 사용하여 각각의 프로그램을 분리된 환경에서 실행 및 관리할 수 있는 툴. 컨테이너란?윈도우의 여러 사용자가 있어서 독립적인 사용환경을 가짐. 하나의 컴퓨터 환경내에서 독립적인 컴퓨터 환경을 구성해서, 각 환경에 프로그램을 별도로 설치할 수 있게 만든 개념.하나의 컴퓨터 환경내에서 여러개의 미니 컴퓨터 환경을 구성 할 수 있는 형태.여기서 이야기하는 미니컴퓨터를 보고 Docker 에서는 컨테이너라 부른다. 컨테이너(Container)를 이해할 때 머릿속의 이미지로 미니 컴퓨터를 떠올리면 이해하기 편하다.여기서 컨테이너와 컨테이너를 포함하고 있는 컴퓨터를 구분하기 위해 컨테이너를 포함하고 있는 컴퓨터를 호스트 컴퓨터라고 부른다. 컨테이너 독립성위의 설명에서 컨테이너는 독립적인 컴퓨..

docker 2025.04.12

Jenkins 설치: 전통적인 방식 vs Docker 방식 비교

Docker 방식으로 설치? 뭐가 다를까?Docker 는 애플리케이션을 어디서든 동일하게 실행하기 위해 등장한 기술이다. Docker의 목적은 실행 환경을 컨테이너 안에 통째로 담아,개발 환경과 운영 환경의 차이로 인한 문제(이른바 ‘내 PC에선 잘 되는데?’ 문제)를 해결하는 것입니다. 개발자들이 Docker를 도입한 이유 요약:"서버에 배포했더니 에러가 나요!" → 로컬과 서버의 환경 차이 때문"라이브러리 버전이 달라서 오류나요" → 의존성 충돌"운영 서버에서만 나는 버그" → 환경 차이이런 문제를 해결하기 위해 Docker는 실행 환경 자체를 통째로 패키징해서언제, 어디서 실행해도 같은 결과를 보장하도록 만드는 것이다, 편리한 도커 전통방식과의 차이를 알아보자전통적 방식과 Docker 방식의 비교전..

docker 2025.04.12

동시성 문제와 해결 방안

자바에서의 동시성 문제란?자바에서 동시성 문제는 여러 스레드가 동시에 공유 자원에 접근 할 때 발생할 수 있는 문제.Race Condition : 둘 이상의 접근 흐름이 동시에 자원에 같은 자원에 접근해서, 실행 순서에 따라 결과가 달라지는 문제Deadlock: 여러 스레드가 서로 자원을 기다리며 영원히 대기 상태에 빠지는 문제  동기화(Synchronization)란? 여러 프로세스나 스레드가 공유자원에 동시에 접근하는 것을 제어하여, 데이터의 일관성과 무결성을 보장하는 기법 동시성을 제어하기 위해 뮤텍스, 세마포어 ,  BlockingQueue 가 있다.세마포어의 목적과 동시성 제어의 방법 차이점을 알아보자.뮤텍스나 세마포어는 동시성 제어를 위한 자료 구조이다. 동시성 제어를 위한 자료구조 뮤텍스(M..

JAVA 2025.04.09

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

바이트코드 조작

"스카우터(Scouter)는 어떻게 애플리케이션의 XLog를 실시간으로 측정할까?" 이 단순한 궁금증에서 시작해, 나는 자바의 *바이트코드 조작(Bytecode Manipulation)*이라는 흥미로운 개념을 알게 되었다.이 글에서는 바이트코드 조작이란 무엇인지, 그리고 그것이 어떻게 코드 커버리지 측정이나 APM 도구에 활용되는지 살펴보려 한다. 바이트 코드 사용 예시자바 커버리지 측정도 바이트코드 조작과 면밀한 연관이 있다. 코드 커버리지코드 커버리지는 어떻게 측정할까?테스트 케이스 실행 시 커버리지로 실행을 할 수 있다. 커버리지 실행 후 보고서를 확인할 수 있다.  바이트 코드 조작 라이브러리 비교ASM 바이트 코드 조작시 가장 고전적이고 널리 쓰이는 라이브러리  (비지터 패턴과 어뎁터 패턴을 알..

JAVA 2025.03.24