JAVA/Spring29 [스프링 빈과 싱글톤 패턴: 무상태로 설계해야 하는 이유?] [스프링 빈과 싱글톤 패턴: 무상태로 설계해야 하는 이유??] 1. 싱글톤 패턴과 스프링 빈스프링 프레임워크는 객체를 싱글톤 패턴 방식으로 관리한다. 싱글톤은 객체 인스턴스를 단 하나만 생성하고, 이를 여러 클라이언트와 공유하기 때문에 메모리 사용을 절약할 수 있다는 장점이 있다.그러나 싱글톤 방식에서 공유되는 객체를 상태를 유지(stateful) 하게 설계하면 큰 문제가 발생할 수 있다. 2. 상태를 유지하는 객체의 문제점싱글톤 객체는 하나의 인스턴스를 여러 클라이언트가 공유한다. 이때 상태를 유지하는 필드가 있다면 다음과 같은 문제가 발생한다.특정 클라이언트에 의존적인 필드가 생긴다.필드를 변경할 수 있는 클라이언트가 값을 덮어쓰게 된다.여러 클라이언트가 동시에 객체를 사용할 경우 데이터 불일치.. JAVA/Spring 2024. 12. 17. AssertThat의 isEqualTo와 isSameAs의 차이점 알아보기 AssertThat의 isEqualTo와 isSameAs의 차이점 알아보기 테스트 코드를 작성할 때, AssertJ 라이브러리를 많이 사용하게 된다. 특히 assertThat 메서드와 함께 자주 사용되는 isEqualTo와 isSameAs는 헷갈리기 쉬운 부분이다. 이 두 메서드는 비슷해 보이지만 실제로는 중요한 차이점이 있다. 오늘은 isEqualTo와 isSameAs가 각각 어떤 역할을 하는지, 차이점은 무엇인지 명확하게 정리해보겠다. 1. isEqualTo란? (값 비교)**isEqualTo**는 두 객체의 값이 같은지를 확인한다. 여기서 값이 같다는 것은 equals() 메서드를 기준으로 판단한다는 의미다. 즉, 두 객체의 내용이 같은지 검사한다. 예시 코드:String a = new String.. JAVA/Spring 2024. 12. 17. 스프링 BeanDefinition 완벽 정리: 빈 설정 메타정보 탐구 스프링 BeanDefinition 완벽 정리: 빈 설정 메타정보 탐구1. BeanDefinition이란?BeanDefinition은 스프링 컨테이너가 빈(bean)의 메타정보를 담아두는 추상화 모델이다. 스프링은 다양한 형태의 빈 설정 정보(Java Config, XML, 어노테이션)를 모두 BeanDefinition이라는 하나의 모델로 추상화하여 사용한다.즉, 개발자가 Java 코드로 설정하든, XML로 설정하든 스프링 내부에서는 결국 BeanDefinition 객체로 변환되어 관리된다. 2. BeanDefinition 주요 정보BeanDefinition이 담고 있는 주요 속성은 다음과 같다:BeanClassName: 생성할 빈의 클래스명예) hello.core.service.MemberService.. JAVA/Spring 2024. 12. 16. 스프링 빈 조회: 부모 타입과 Object 타입의 차이점 스프링 빈 조회: 부모 타입과 Object 타입의 차이점스프링 프레임워크에서 빈(Bean)을 조회할 때 부모 타입과 Object 타입으로 조회하는 경우가 있다. 이 두 가지 방식 모두 빈의 타입 계층에 따라 결과가 달라지므로 이를 정확히 이해해야 스프링 애플리케이션을 효과적으로 관리할 수 있다. 1. 부모 타입으로 빈 조회부모 타입으로 빈을 조회하면 해당 부모 타입과 그 자식 타입까지 조회된다. 즉, 부모 타입을 상속받거나 구현한 모든 빈이 조회 대상이 된다. @Configurationclass AppConfig { @Bean public ParentBean childBean1() { return new ChildBean1(); } @Bean public .. JAVA/Spring 2024. 12. 16. JAVA SPRING 테스트 코드 작성: JUnit 5에서는 public을 생략해야된다고? 심지어 권장?! JUnit 5에서는 public을 생략해도 된다: 간결하고 깔끔한 테스트 코드 작성법 JUnit 5의 변화: public을 생략하라JUnit 4와는 다르게 JUnit 5에서는 테스트 클래스와 메서드에 public 접근 제어자를 명시하지 않아도 실행된다. 이는 테스트 코드를 더욱 깔끔하고 간결하게 만들기 위한 변화이다. 왜 public을 생략할 수 있을까?JUnit 5는 "Less is More" 원칙을 따른다. 불필요한 코드를 제거하고 가독성을 높이는 데 초점을 맞추었기 때문이다.주요 이유는 다음과 같다:테스트 메서드는 JUnit 프레임워크 내부에서만 실행된다. 외부에서 직접 호출될 필요가 없다.Java의 **패키지 수준 접근 제어자(package-private)**로도 충분히 테스트를 실행할 수 있다.. JAVA/Spring 2024. 12. 16. Spring 컨테이너(ApplicationContext)를 사용해야 하는 이유 Spring 컨테이너(ApplicationContext)를 사용해야 하는 이유 Spring 프레임워크를 사용하면서 ApplicationContext와 같은 컨테이너를 적용하면 처음에는 코드가 복잡해진다고 느낄 수 있다. 하지만 장기적으로 보면 Spring 컨테이너의 도입은 코드의 유지보수와 확장성에 큰 이점을 제공한다. 이번 글에서는 Spring 컨테이너를 사용했을 때 얻을 수 있는 장점과 함께 간단한 예제를 통해 그 필요성을 살펴보겠다. 1. Spring 컨테이너(ApplicationContext)란 무엇인가?Spring 컨테이너는 애플리케이션의 객체를 생성하고 관리하는 핵심 역할을 한다. Spring에서는 IoC(Inversion of Control) 원칙을 기반으로 객체의 생성 및 의존성 주입을 .. JAVA/Spring 2024. 12. 16. AppConfig: 어셈블러이자 오브젝트 팩토리로 불리는 이유 AppConfig: 어셈블러이자 오브젝트 팩토리로 불리는 이유Spring Framework를 다루다 보면 AppConfig가 어셈블러(Assembler) 또는 오브젝트 팩토리(Object Factory)로 불리는 경우가 많다. 이는 AppConfig가 빈(bean)의 생성과 의존관계(Dependency)를 동적으로 관리하는 역할을 하기 때문이다. 1. AppConfig는 어셈블러이다소프트웨어에서 "어셈블러"는 여러 컴포넌트를 조합하여 하나의 시스템을 구성하는 역할을 의미한다. Spring에서 AppConfig는 애플리케이션의 다양한 의존관계를 조립하는 역할을 한다. 즉, 하나의 빈이 다른 빈에 의존할 때 그 관계를 설정하고 애플리케이션 전반의 흐름을 완성하는 중요한 조립기(Assembler) 역할을 .. JAVA/Spring 2024. 12. 16. ASSERTTHAT 메서드 사용법 assertThat은 JUnit이나 AssertJ 라이브러리에서 제공하는 정적 메서드이다. 이 메서드는 주로 단위 테스트에서 결과를 검증하는 데 사용된다. assertThat을 사용하면 테스트 코드가 더 직관적이고 가독성이 좋아지며, 여러 가지 검증 방법을 손쉽게 적용할 수 있다. 1. 기본 사용법 assertThat 메서드는 주어진 값을 검증하는데 사용된다. 주로 isEqualTo, isNotEqualTo, isNull 등 다양한 매처를 사용하여 값을 비교한다. 다음은 기본적인 사용 예시이다.int discount = 0;assertThat(discount).isEqualTo(0);이 코드는 discount 값이 0과 같은지 비교하고, 만약 다르면 테스트가 실패한다. 2. 다양한 매처 사용assert.. JAVA/Spring 2024. 12. 14. 테스트 코드의 중요성과 작성 방법에 대한 심층적인 이해 테스트 코드의 중요성테스트 코드는 소프트웨어 개발에서 필수적인 역할을 한다. 코드가 의도한 대로 작동하는지 검증할 수 있는 안전망 역할을 한다. 개발 과정에서 기능을 추가하거나 기존 코드를 리팩터링할 때, 테스트 코드는 코드의 안정성을 유지하도록 돕는다. 이를 통해 예상치 못한 오류를 빠르게 발견하고 수정할 수 있다.또한 테스트 코드는 개발자의 생산성을 높이는 데 기여한다. 수동으로 기능을 테스트하는 시간과 노력을 줄일 수 있다. 특히, 큰 프로젝트에서는 기능이 서로 얽혀 있어 수동 테스트만으로는 모든 문제를 발견하기 어렵다. 테스트 코드는 이러한 문제를 자동화된 방식으로 해결해 준다.마지막으로, 테스트 코드는 개발자 간의 소통 도구로도 활용된다. 코드가 어떤 동작을 수행해야 하는지 명확하게 보여주기 때.. JAVA/Spring 2024. 12. 14. HashMap과 ConcurrentHashMap의 차이점 그리고 동시성 문제 해결 개발을 하다 보면 데이터를 저장하고 관리하기 위해 HashMap을 사용하는 경우가 많다.하지만 여러 스레드가 동시에 접근하는 환경에서는 HashMap 사용이 적합하지 않다. 이런 환경에서 동시성 문제를 해결하기 위해 ConcurrentHashMap이 등장한다. 이 글에서는 HashMap과 ConcurrentHashMap의 차이를 이해하고, 언제 어떤 것을 사용해야 하는지 알아본다. 1. HashMap의 특징과 문제점HashMap은 java.util 패키지에서 제공하는 가장 기본적인 Map 구현체이다. 빠른 데이터 삽입과 검색 속도를 제공하며, 단일 스레드 환경에서 매우 유용하다. 하지만 다중 스레드 환경에서는 문제가 발생할 수 있다.예제: 단일 스레드 환경에서 HashMap 사용import java.ut.. JAVA/Spring 2024. 12. 13. DI(Dependency Injection) 이란? / (포스팅 하나로 세부내용까지 총 정리) TIL 목표: Spring 컨테이너(Container)와 빈(Bean)의 의미를 이해할 수 있다. 빈 스코프(Bean Scope)의 의미를 이해할 수 있다. Java 기반 컨테이너(Container) 설정에 대해 이해할 수 있다. Spring DI(Dependency Injection)의 의미를 이해할 수 있다. Component 스캔에 대해 이해할 수 있다. 1️⃣ DI란? (의존성 주입) 생성자 뿐 아니라 다른 방식으로도 의존성 주입이 가능하지만, 일반적으로는 생성자를 통한 의존관계 주입을 사용한다. 2️⃣ 스프링 컨테이너 (Spring Container) 스프링 프레임워크(Spring Framework)는 자바 기반의 오픈소스 프레임워크로서, 자바 애플리케이션을 개발하기 위한 다양한 기능을 제공한다.. JAVA/Spring 2023. 3. 13. Java 기반 컨테이너 설정방법 (Spring 어노테이션 활용) 1️⃣ Java 기반 컨테이너 설정방법 (어노테이션 활용) Java 기반의 컨테이너 설정 방법 중 어노테이션을 활용한 것은 스프링 프레임워크에서 제공하는 애노테이션 기반의 설정 방법이다. 2️⃣ 스프링 프레임워크에서는 아래와 같은 어노테이션들을 제공한다. @Component: 해당 클래스를 빈으로 등록. @Repository: DAO(Data Access Object) 클래스를 빈으로 등록. @Service: 서비스 클래스를 빈으로 등록. @Controller: 컨트롤러 클래스를 빈으로 등록. @RestController: RESTful 웹 서비스를 처리하는 컨트롤러 클래스를 빈으로 등록. @Configuration: 설정 클래스를 나타내며, 빈을 등록하고 설정하는 메서드를 포함. @Bean: 해당 메서.. JAVA/Spring 2023. 3. 13. 이전 1 2 3 다음