분류 전체보기 125

Spring 외부 설정값 주입 방법 총정리 : Environment, @Value, @ConfigurationProperties 비교

스프링 부트를 사용하면 application.yml 또는 application.properties 파일에 설정값을 정의하고, 이를 코드에 주입받을 수 있다.이번 포스팅은 설정을 주입하는 주요 3가지 방법을 정리하고, 그 특징과 장단점을 비교한다. 외부 설정 사용 - Environment다음과 같은 외부 설정들은 스프링이 제공하는 Environment를 통해서 일관된 방식으로 조회할 수 있다. 외부 설정의 종류설정 데이터 (application.properties)OS 환경변수자바 시스템 속성커맨드 라인 옵션 인수다양한 외부 설정 읽기스프링은 Environment는 물론이고 Environment를 활용해서 더 편리하게 외부 설정을 읽는 방법들을 제공한다. 스프링이 지원하는 다양한 외부 설정 조회 방법En..

Spring 2025.06.11

외부설정과 프로필

외부 설정이 필요한 이유애플리케이션을 개발하다 보면 운영 환경과 개발 환경이 서로 다른 설정값을 요구하는 경우가 많다.개발 환경: 개발 서버, 개발 DB 사용운영 환경: 운영 서버, 운영 DB 사용각각의 환경에 따라서 서로 다른 설정값이 존재한다.예를 들어 DB 접속 URL만 해도 환경에 따라 다를 수 있다. 개발: dev.db.com운영: prod.db.com 잘못된 접근 방식: 환경별로 빌드 결과물을 나누는 것초기에는각각의 환경에 맞게 애플리케이션을 빌드하는 것이다.개발 환경용 app-dev.jar, 운영 환경용 app-prod.jar 등 환경마다 서로 다른 빌드 결과물 생성환경에 따라 변하는 설정값을 내부에 포함개발 환경에는 dev.db.com 이 필요하므로 이 값을 애플리케이션 코드에 넣은 다음에..

Spring 2025.06.07

값 객체(Value Object)를 사용해야 할 때 – Game 클래스 리팩터링 예시

작은 클래스, 단순한 구조, 더 명확한 의도 표현들어가며작고 단순한 클래스를 만들기 위해 값 객체(Value Object) 를 활용할 수 있다.이번 글에서는 "게임 매출 관리 애플리케이션" 을 예시로,값 객체를 언제, 왜 사용하는지 그리고 참조 객체(Reference Object)와의 차이점을 소개한다게임 매출 관리 애플리케이션요구사항: 게임의 판매현황과 매출을 관리한다.게임은 판매 가능한 상품이다.판매자로 등록한 사용자는 시스템에 게임을 등록하고 판매할 수 있다.애플리케이션은 등록된 게임의 매출 정보를 관리해야한다.이때 중요한 점은 매출이 각각의 게임별로 관리된다는 점이다.게임을 하나당 하나의 매출(Sales) 객체가 생성되어야 한다.package reference;public class Game {..

객체지향 2025.05.21

네트워크 예외 - 종료

TCP 에는 2가지 종류의 종료가 있다.정상 종료강제 종료 정상 종료TCP 에서 A, B 가 서로 통신한다고 가정해보자.TCP 연결을 종료하려면 서로 FIN 메시지를 보내야한다.A (FIN) -> B : A 가 B 로 FIN 메시지를 보낸다.A socket.close() 를 호출하면 TCP 에서 종료의 의미인 FIN 패킷을 상대방에게 전달한다.FIN 패킷을 받으면 상대방도 socket.close() 를 호출해서 FIN 패킷을 상대방에게 전달한다. 클라이언트와 서버가 3-way-handshake 로 연결되어 있다.서버가 연결 종료를 위해 socket.close() 를 호출한다.서버는 클라이언트에 FIN 패킷을 전달한다.클라이언트는 FIN 패킷을 받는다.클라이언트의 OS 에서 자동으로 FIN 에 대한 ..

Network 2025.05.12

JPA 에서 준영속 상태란? 실무에서 왜 중요할까?

JPA를 사용하다 보면 "준영속 상태"라는 개념을 접하게된다. 처음엔 어렵게 느껴지지만, 실무에서 엔티티를 수정할 때 꼭 이해하고 넘어가야 할 개념이다. 이번 글에서는 준영속 상태가 무엇인지, 왜 중요한지, 그리고 실무에서는 어떻게 다뤄야 하는지 알아보자.엔티티란?JPA 에서 Entity 는 데이터베이스 테이블에 매핑되는 자바 클래스를 의미한다.@Entity, @Id 애노테이션을 통해 정의하며, 하나의 객체 인스턴스는 테이블의 한 row를 의미한다.@Entitypublic class Book { @Id private Long id; private String name; private int price; // 기타 필드 및 getter/setter 생략} 특징엔티티는 Enitit..

JPA 2025.05.08

버퍼(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

docker compose 를 활용한 컨테이너 관리

Docker Copmose란?여러개의 Docker 컨테이너들을 하나의 서비스로 정의하고 구성해 하나의 묶음으로 관리할 수 있게 도와주는 툴Docker Compose 를 사용하는 이유 여러 개의 컨테이너를 관리하는데 용이여러 개의 컨테이너로 이루어진 복잡한 애플리케이션을 한 번에 관리할 수 있게 해준다.여러 컨테이너를 하나의 환경에서 실행하고 관리하는데 도움이 된다.복잡한 명령어로 실행시키던 걸 간소화 시킬 수 있음이전에 MySQL 이미지를 컨테이너로 실행시킬 때 아래와 같은 명령어를 실행시켰다.$ docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v /Users/Documents/Develop/docker-mysql/mysql_data:/var/l..

docker 2025.04.16

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

Dockerfile 이란?Docker 이미지는 Dockerhub 을 통해 다운받아서 사용할 수 있다. 이 Docker 이미지들도 누군가 만들어서 Dockerhub 에 올려놓은 것이다. Dockerfile 이라는 걸 활용해서 Docker 이미지를 만들 수 있다.즉 Dockerfile 은 도커 이미지를 생성하기 위한 설정 파일이다.이 파일에는 어떤 OS 를 사용할지, 어떤 파일을 복사하고, 어떤 명령어를 실행할 지 등 이미지 구성에 필요한 명령어들이 순차적으로 정의 되어있다.FROM openjdk:17COPY ./app.jar /app.jarENTRYPOINT ["java", "-jar", "/app.jar"] 더보기도커 이미지(Docker Image)도커 이미지는 애플리케이션 실행에 필요한 모든것을 ..

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