프로그래밍51 [Springboot] static과 templates 는 무슨 용도인가? Springboot 개발하면 static과 templates 폴더를 볼 수 있다. 누가봐도 static은 정적파일(Css, Js 등) 을 위한 디렉토리이고 templates는 html,jsp 파일들을 위한 디렉토리 같이 느껴진다. 하지만 Controller나 "/" 를 통해 정적파일을 접근하면 static으로만 가는 것을 확인 할 수 있다. Springboot의 요청 처리 우선순위가 있는데 이를 보면 이해하기 쉽다. 1. Spring Boot의 요청 처리 우선순위Controller에 매핑된 URL (@GetMapping 등)템플릿 엔진 (예: Thymeleaf → resources/templates)정적 리소스 (→ resources/static, public, etc)2. 폴더 용도폴더내용 resou.. 2025. 6. 22. [SpringBoot] @RestController 를 사용하여 View로 이동시키는 방법 RestAPI 방식으로 개발을 진행 중인데 View단으로 이동시키려고 하니깐 자꾸 실패해서 @Controller로 View로 이동시키고 @RestController 로 JSON 넘어가는 데이터 처리용으로 사용했다. 하지만 이렇게 하니 View용도, JSON통신 용도 2개가 나와야해서 번잡했다. 그래서 @RestController 로 통일 시키기로 했다. RestController로 View로 이동시키는 방법 ModelAndView를 이용하기로 했다.ModelAndView 는 컨트롤러가 반환할 데이터(Model)와 뷰 이름(View) 을 함께 담는 객체입니다.ModelAndView를 이용하면 String 반환 시 View로 이동하게 된다.@RestController@RequestMapping("/")p.. 2025. 6. 22. [SpringBoot] Lombok @Getter 등 어노테이션 인식이 안되는 현상 해결 pom.xml에서 dependency로 lombok을 받아서 사용하려고 했는데 @Getter 등 어노테이션들이 전부 인식을 하지 않는다. 이유가 뭘까? IDE에 Lombok 플러그인이 존재 하지 않아서였다. Help > Install New Software 에서 lombok을 추가하니 해결됐다. https://projectlombok.org/p2 을 삽입하고 Enter를 한다.Lombok을 체크하고 설치를 진행한다.중간에 안전한 건지 묻는 팝업창이 나오면 체크하고 Trust Selected로 진행해주자! 설치 > Restart 후 확인을 하니 정상적으로 인식되는 것을 확인 할 수 있었다. 2025. 6. 22. [JPA] JPA 기본 어노테이션 정리 JPA에 어떤 어노테이션이 있을까? 알아보면서 정리해 보도록 하겠다. 간략 정리 어노테이션 설명 @Entity클래스가 JPA 엔티티임을 선언@Id기본 키 필드 지정@GeneratedValue기본 키 생성 전략 지정@Column컬럼 매핑 및 속성 지정@Table매핑될 테이블 이름 지정@Temporal날짜 타입 지정 (Date, Calendar에만 사용)@Transient영속성 대상에서 제외 (DB 저장 안 됨) 1. @Entity@Entitypublic class User { ...}이 클래스가 DB 테이블과 매핑되는 JPA Entity라는 것을 의미반드시 기본 생성자가 있어야 하며, 클래스에는 기본 키가 하나 이상 있어야 합니다2. @Id@Idprivate Long id;해당 필드가 Primary.. 2025. 6. 22. [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. 이전 1 2 3 다음 반응형