프로그래밍47 [SpringBoot] HikariCP로 커넥션 풀 수동 설정 방법을 알아보자. Spring Boot에서 HikariCP 커넥션 풀을 직접 설정하고, 초기 커넥션 풀을 미리 생성(preload) 하도록 구성하려면 DataSourceConfig.java에서 HikariDataSource를 수동으로 생성하는 방식이 필요하다. [SpringBoot] DataSourceConfig.java 설정 및 역할DataSourceConfig.java의 역할은 Spring Boot 애플리케이션에서 DB 연결 정보(DataSource)를 커스터마이징하고 관리하는 설정 클래스 입니다. application.yml(properties) 로 설정하면 되지 않나? 라고 생각 할 수도bears-paw.tistory.com 나는 보통 egovframework/spring/context-datasource.xml .. 2025. 6. 22. [SpringBoot] DataSourceConfig.java 설정 및 역할 DataSourceConfig.java의 역할은 Spring Boot 애플리케이션에서 DB 연결 정보(DataSource)를 커스터마이징하고 관리하는 설정 클래스 입니다. application.yml(properties) 로 설정하면 되지 않나? 라고 생각 할 수도 있고 다른 프로젝트에서 많이 사용한다. 하지만 application.yml(properties)은 동적으로 설정하거나 복잡한 로직이 필요한 경우 한계가 있기 때문에 DB설정 방식을 분리 시키는 게 옳은 방법이라고 생각한다. 예시 소스)@Configuration@EnableTransactionManagementpublic class DataSourceConfig { @Bean @Profile("h2") // h2 환경에서만 이 Be.. 2025. 6. 22. [SpringBoot] Spring Boot Dashboard가 안 보임. SpringBoot Project를 import했는데 Dashboard가 생성되지않아 프로젝트를 Start를 시켜볼 수 가 없다. 방법과 이유를 정리해보자. 1. Eclipse에 STS 플러그인 설치Eclipse는 설치했지만 SpringBoot 를 실행하기 위해서는 STS 플러그인을 설치해야한다. Help > Eclipse Marketplace에서 Spring Tools 를 다운해준다. Install을 쭉 진행하다가 보안 경고(Trust Authorities) 화면이 뜨면 체크박스에 체크하고 Trust Selected로 진행해준다. 신뢰할 수 있는 제공자인지 물어보는거다. 설치 완료 후 Restart Windows Defender 예외 설정 안내창 Windows Defender가 Eclipse 성능.. 2025. 6. 22. [Spring Boot] SpringBoot Project Import 방법 프로젝트에 참여해서 프로젝트를 압축해서 주면 항상 Import > General > Existing Projects into Workspace로 했다. 그후 convert to maven, update Maven 등을 통해 생성 및 설정을 진행해줬다. https://start.spring.io/ 에서 프로젝트를 GENERATE 후 Eclipse에서 Import 하려고 시도하니 Existing Projects into Workspace로는 Project Not Found가 발생했다. Import 방법과 이유를 정리하고 비교를 기록해보겠다. Import 방법1. Import > Maven > Existring Maven Projects로 Import를 한다. - Project를 찾을 수 있었다. 실패,.. 2025. 6. 22. Java ArrayList vs LinkedList 차이점 총정리! 언제, 왜 사용해야 할까? ArrayList vs LinkedList 비교Java에서 ArrayList와 LinkedList는 List 인터페이스를 구현한 두 가지 자료구조로, 각각의 특징과 차이점을 이해하면 더 적절한 용도로 사용할 수 있습니다.1. 구조적 차이 특징 ArrayList LinkedList 내부 구조동적 배열 (Resizable Array)이중 연결 리스트 (Doubly Linked List)데이터 저장 방식연속된 메모리 공간에 저장노드(Node)로 연결노드 간 연결없음각 노드가 이전/다음 노드를 참조2. 성능 비교 연산 ArrayList LinkedList 설명 조회 (get, index 접근)O(1)O(n)ArrayList는 인덱스로 즉시 접근 가능하지만, LinkedList는 앞에서부터 탐색해야 함삽입 (a.. 2025. 3. 4. Java 주요 컬렉션(List, Set, Map)의 특징 및 내부 구조 Java의 컬렉션(Collection)Java의 컬렉션(Collection)은 여러 개의 데이터를 효율적으로 저장하고 관리할 수 있도록 도와주는 자료구조(데이터 구조) 라이브러리입니다. Java에서는 java.util 패키지에서 다양한 컬렉션 클래스를 제공하며, 이를 활용하면 배열보다 더 유연한 데이터 관리가 가능합니다.1. 컬렉션 프레임워크(Collection Framework) 개요컬렉션 프레임워크는 데이터를 저장하고 조작하는 인터페이스와 클래스의 집합입니다.컬렉션 프레임워크의 특징데이터 구조와 알고리즘을 제공하여 데이터 관리가 편리함인터페이스 기반 설계로 다양한 구현체 사용 가능제네릭(Generics) 지원으로 타입 안정성 제공데이터 조작(검색, 정렬, 추가, 삭제 등) 기능 포함2. 컬렉션 계층 .. 2025. 3. 4. Java 제네릭 와일드카드 사용법 | ?, ? extends, ? super 차이점 한눈에! 제네릭 와일드카드(Generics Wildcards)제네릭 와일드카드(Generics Wildcards)는 제네릭 타입을 좀 더 유연하게 사용하기 위해 제공되는 기능이다. 주로 메서드에서 제네릭 타입을 사용할 때 타입의 불확실성을 처리하거나, 특정한 범위의 타입만 허용하도록 할 때 사용한다.1. 와일드카드의 종류제네릭 와일드카드는 ?(물음표) 기호를 사용하며, 크게 세 가지 종류가 있다. 와일드카드 설명 ? (Unbounded Wildcard)제한이 없는 와일드카드? extends T (Upper Bounded Wildcard)T 또는 T의 하위 클래스만 허용? super T (Lower Bounded Wildcard)T 또는 T의 상위 클래스만 허용2. 와일드카드 상세 설명(1) 제한 없는 와일드카드.. 2025. 3. 4. Java 제네릭(Generic) 쉽게 이해하기 – 타입 안정성과 코드 재사용성 극대화 Java에서 제네릭(Generic)이란?제네릭(Generic)의 정의제네릭(Generic)이란, 데이터 타입을 일반화하여 컴파일 시 타입을 체크하고, 타입 안정성을 높이는 Java의 기능이다.제네릭을 사용하면 타입 안정성(Type Safety)을 보장하면서도 코드의 재사용성을 높일 수 있다.제네릭이 왜 필요할까? Java의 제네릭(Generic)은 컴파일 시 타입을 체크(타입 세이프)하여 코드의 안정성과 재사용성을 높이는 기능이다.1. 제네릭의 기본 개념타입 안정성 보장: 컴파일 시점에서 타입 체크를 하므로, 런타임에 발생할 수 있는 ClassCastException을 방지할 수 있음코드 재사용성 증가: 특정 타입에 의존하지 않으므로 여러 타입에서 동일한 코드 사용 가능가독성 및 유지보수성 향상: 불필요.. 2025. 3. 4. Java 리스트(List), Map 의 깊은 복사 완벽 정리 (+ 예제 코드) Java에서 Map, List, String의 깊은 복사 방법Java에서 Map, List, String을 깊은 복사하는 방법을 살펴보겠습니다.1. ArrayList 깊은 복사방법 1: for 루프 사용 (가장 기본적인 방법)List deepCopy = new ArrayList();for (Item item : originalList) { deepCopy.add(new Item(item.name)); // 개별 객체 복사}장점: 간단하고 빠름.단점: 코드가 길어질 수 있음.방법 2: stream() + map() 사용 (람다식 활용)List deepCopy = originalList.stream() .map(item -> new Item(item.name)) // 새로운 객체 생성 .. 2025. 3. 3. Java 깊은 복사 vs 얕은 복사 완벽 정리 (+ 예제 코드) 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)의 개념얕은 복사: 객체의 주소만 복사하여 동일한 객체를 공유깊은 복사: 참조 객체도 새롭게 생성하여 원본과 독립적인 객체로 복제 얕은 복사(Shallow Copy)객체를 복사할 때, 주소값만 복사하는 방식원본 객체와 복사된 객체가 같은 참조값을 공유하게 되어 한쪽에서 값을 변경하면 다른 쪽에도 영향을 미침🔹 얕은 복사 예제class Person { String name; Person(String name) { this.name = name; }}class ShallowCopyTest { public static void main(String[] args) { Person perso.. 2025. 3. 3. Java 불변 객체(Immutable Object)란? 불변객체 vs 가변객체 정리 불변 객체(Immutable Object)란? 한 번 생성되면 내부 상태를 변경할 수 없는 객체를 의미합니다. 즉, 객체의 필드 값이 생성 이후 절대 변경되지 않습니다.1) 불변 객체의 특징불변 객체를 만들기 위해서는 다음과 같은 원칙을 따라야 합니다.1 모든 필드는 final로 선언final 키워드를 사용하면 객체가 생성된 후 해당 필드를 변경할 수 없습니다.public final class ImmutablePerson { private final String name; private final int age;}2. 객체를 변경하는 setter 메서드를 제공하지 않음불변 객체는 객체의 값을 변경할 수 없도록 setter 메서드를 제공하지 않습니다.public void setName(Strin.. 2025. 3. 3. 객체 지향 프로그래밍(OOP)란? 객체 지향 프로그래밍(OOP) vs 함수형 프로그래밍(FP) 차이점 1. 객체 지향 프로그래밍(OOP)란?객체를 기반으로 프로그램을 설계하는 패러다임OOP는 현실 세계의 개념을 코드로 표현하는 방식으로, 클래스와 객체를 이용해 프로그램을 구성합니다.주요 개념은 다음과 같습니다.OOP의 4가지 핵심 원칙캡슐화(Encapsulation)데이터와 메서드를 하나의 단위(클래스)로 묶고, 외부에서 접근을 제한하는 것.예: private 필드와 getter/setter 사용상속(Inheritance)기존 클래스를 확장하여 새로운 클래스를 생성하는 것.예: extends 키워드 사용다형성(Polymorphism)같은 인터페이스나 부모 클래스를 기반으로 여러 구현을 제공하는 것.예: 메서드 오버로딩(Overloading) & 오버라이딩(Overriding)추상화(Abstraction).. 2025. 3. 3. Java 자주 사용되는 디자인 패턴 정리! Java에서 많이 사용되고 중요한 디자인 패턴을 정리해 줄게.디자인 패턴은 크게 **생성 패턴(Creational Patterns), 구조 패턴(Structural Patterns), 행동 패턴(Behavioral Patterns)**으로 나뉜다.1. 생성 패턴 (Creational Patterns)객체를 생성하는 방식을 다루며, 객체 생성의 유연성과 재사용성을 높이는 패턴이다.(1) 싱글톤 패턴 (Singleton Pattern)하나의 인스턴스만 생성되도록 보장하는 패턴예제: 데이터베이스 연결, 설정 클래스, 로깅 시스템구현 방식:Lazy Initialization (필요할 때 생성)Eager Initialization (미리 생성)Double-Checked Locking (스레드 안전 보장)Enum .. 2025. 3. 3. Java tryLock() 사용 방법 (Java ReentrantLock) 1. tryLock() 이란?tryLock()은 java.util.concurrent.locks.ReentrantLock 클래스에서 제공하는 메서드로,락을 시도해보고 즉시 반환하거나, 일정 시간 동안 락을 기다린 후 반환하는 기능을 한다.synchronized 블록과 달리 락을 획득할 수 없는 경우 바로 반환되므로 데드락 방지에 유용하다.2. tryLock() 기본 사용법🔹tryLock()을 사용하여 락을 즉시 획득 시도import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class TryLockExample { private final Lock lock = new ReentrantL.. 2025. 3. 3. Java 멀티스레드 완벽 정리! 싱글 스레드와의 차이점부터 구현 방법까지 1. 스레드(Thread)란?스레드는 프로세스 내에서 실행되는 하나의 흐름을 의미한다.즉, 프로그램(프로세스) 내에서 실행되는 작업 단위라고 할 수 있다.2. 싱글 스레드(Single Thread)와 멀티 스레드(Multi Thread)싱글 스레드: 하나의 작업을 순차적으로 실행하는 방식멀티 스레드: 하나의 프로세스에서 여러 개의 스레드를 실행하여 동시에 작업을 수행하는 방식싱글 스레드와 멀티 스레드의 차이점실행 방식하나의 스레드가 순차적으로 실행됨여러 개의 스레드가 동시에 실행됨성능작업이 하나씩 처리되므로 느릴 수 있음여러 작업을 동시에 실행하여 성능 향상자원 활용하나의 스레드만 사용하여 CPU 활용도가 낮음CPU 활용도가 높아짐동기화 문제동기화 문제가 없음스레드 간 데이터 공유로 동기화 문제가 발생 .. 2025. 3. 2. Java 싱글톤 패턴 완벽 가이드: 데이터베이스 연결, 설정, 로깅 시스템 구현 예제 싱글톤 패턴의 예제를 살펴보자.데이터베이스 연결, 설정, 로깅 시스템에 대해서 예제를 들어보겠다.데이터베이스, 설정, 로깅 은 스프링을 사용하면 Bean으로 관리되어 싱글톤을 쉽게 유지할 수 있지만 싱글톤 구조를 보기 위해 예제를 살펴보자! 1. 데이터베이스 연결 (이중 체크 락킹 방식)데이터베이스 연결은 하나의 인스턴스만 유지해야 하므로, 이중 체크 락킹(Double-Checked Locking) 방식이 적절합니다. 이 방식은 멀티스레드 환경에서도 안전하게 인스턴스를 생성할 수 있으며, 필요할 때만 객체를 생성하여 성능을 최적화할 수 있습니다.예제 코드import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException.. 2025. 3. 1. Java 싱글톤 패턴 완벽 정리! 개념부터 구현까지 총정리 (Singleton Pattern) 1. 싱글톤 패턴이란?싱글톤 패턴(Singleton Pattern)은 클래스의 인스턴스를 오직 하나만 생성하도록 제한하고, 전역적으로 접근할 수 있도록 제공하는 디자인 패턴입니다. 객체가 여러 개 생성되는 것을 방지하고, 동일한 객체를 재사용하도록 보장합니다.2. 싱글톤 패턴을 사용하는 이유객체 생성을 제한하여 메모리 낭비를 방지할 수 있음전역 상태 관리가 필요할 때 유용함 (예: 설정 파일, 데이터베이스 연결, 로그 관리 등)멀티스레드 환경에서 하나의 객체만 유지해야 할 경우 (예: Thread Pool, Cache 등) ※싱글톤 을 이용한 데이터베이스 연결, 설정, 로깅 시스템 예제 Java 싱글톤 패턴 완벽 가이드: 데이터베이스 연결, 설정, 로깅 시스템 구현 예제싱글톤 패턴의 예제를 살펴보자.데이.. 2025. 3. 1. Java 디자인 패턴 완벽 정리 | 개념, 종류, 사용 이유 1. 디자인 패턴(Design Pattern)이란?디자인 패턴(Design Pattern)은 소프트웨어 설계에서 자주 발생하는 문제들을 해결하기 위한 재사용 가능한 설계 방식이다.즉, 반복적으로 발생하는 문제에 대한 최적의 해결책을 정리한 설계 템플릿이라고 볼 수 있다.디자인 패턴은 객체 지향 프로그래밍(OOP)의 4대 원칙(추상화, 캡슐화, 상속, 다형성)을 기반으로 하며,코드의 유지보수성, 확장성, 가독성을 높이는 데 도움이 된다.2. 디자인 패턴을 사용하는 이유Java에서 디자인 패턴을 사용하는 이유는 다음과 같다.1) 코드의 재사용성 증가검증된 설계 방식이므로 동일한 문제를 해결할 때 다시 사용할 수 있다.2) 유지보수성 향상코드가 모듈화되면서 변경이 필요할 때 특정 부분만 수정하면 된다.3) 코.. 2025. 3. 1. Java SOLID 원칙 완벽 정리: SRP, OCP, LSP, ISP, DIP 개념과 예제 SOLID 원칙은 객체 지향 프로그래밍(OOP)에서 유지보수성과 확장성을 높이기 위한 다섯 가지 설계 원칙을 의미합니다. 각각의 원칙을 자세히 설명하겠습니다.1. SRP (Single Responsibility Principle) - 단일 책임 원칙"클래스는 단 하나의 책임만 가져야 한다."하나의 클래스는 오직 하나의 기능(책임)만 수행해야 하며, 변경해야 하는 이유도 하나만 존재해야 한다.즉, 한 클래스가 여러 가지 기능을 가지면 수정할 때 예상치 못한 부작용이 발생할 가능성이 커진다.예제// ❌ 단일 책임 원칙 위반: 한 클래스가 여러 가지 역할을 수행함. class Report { public void generateReport() { System.out.println("Report Ge.. 2025. 3. 1. Oracle Database 아키텍처 이해하기: 인스턴스와 데이터베이스의 핵심 개념 Oracle 아키텍처: 인스턴스(Instance)와 데이터베이스(Database)Oracle Database는 인스턴스(Instance)와 데이터베이스(Database)라는 두 개의 핵심 요소로 구성됩니다.이 둘은 상호 작용하여 데이터 저장, 관리 및 처리를 수행합니다.1. 인스턴스(Instance)Oracle 인스턴스는 데이터베이스를 운영하는 데 필요한 메모리 구조(SGA)와 백그라운드 프로세스로 구성됩니다.즉, 인스턴스는 데이터베이스를 실행하고 관리하는 프로그램과 같은 역할을 합니다. (1) 인스턴스의 구성 요소① 시스템 글로벌 영역(SGA, System Global Area)SGA는 인스턴스가 사용하는 공유 메모리 영역으로, 모든 사용자 세션이 데이터를 공유할 수 있도록 합니다.SGA는 데이터 처리.. 2025. 2. 28. 이전 1 2 3 다음 반응형