spring14 싱글톤 Context에서 전략 패턴 사용 시 동시성 문제 전략 패턴을 사용할 때 Context를 싱글톤으로 설계하면 동시성 문제가 발생할 수 있다. 특히 Context 내부에 Strategy를 필드로 가지고 있고, setStrategy()로 전략을 변경하는 구조일 경우 문제의 소지가 크다.💥 문제 예시@Slf4jpublic class Context { private Strategy strategy; public void setStrategy(Strategy strategy) { this.strategy = strategy; } public void execute() { log.info("Context.execute() 호출"); strategy.call(); // 문제 발생 가능 지점 }}이 C.. spring 2025. 3. 27. ThreadLocal, 안 쓰면 큰일 나는 이유 (멀티스레드 동시성 문제 해결법) 자바에서 싱글톤 패턴과 static 변수를 사용할 때, 멀티스레드 환경에서는 동시성 문제가 발생할 수 있다. 특히 웹 애플리케이션에서 이런 문제가 생기면 예상치 못한 버그나 데이터 오염이 일어날 수도 있다.1. 동시성 문제란? (한 번 겪으면 밤 샌다…😨)멀티스레드 환경에서는 여러 개의 쓰레드가 동시에 실행되면서 같은 데이터를 접근하거나 수정할 수 있다. 그런데 만약 공유 자원을 안전하게 관리하지 않으면 한 쓰레드가 변경한 값이 다른 쓰레드에도 영향을 미쳐서 데이터가 꼬이는 문제가 생긴다.🛑 예제: 동시성 문제가 발생하는 코드아래 코드는 여러 사용자의 세션 정보를 저장하는 클래스. 싱글톤 패턴을 사용했는데, 여기서 동시성 문제가 발생할 수 있다. public class UserSessionMan.. spring 2025. 3. 20. 스프링 MVC 학습목록 (2) 📝 학습목록 & GPT에게 물어본 질문 목록📙 1. 스프링 타입 컨버터1) Converter컨버터는 org.springframework.convert.converter.Converterpublic interface Conveter { T convert(S source);}인터페이스를 구현하여 만든다.2) ConversionService스프링은 개발 컨버터를 모아두고 그것을 묶어서 편리하게 사용할 수 있는 기능을 준다그것이 ConversionService 인터페이스package org.springframework.core.convert;import java.util.List;public interface ConversionService { boolean canConvert(Class source.. spring 2025. 1. 8. HandlerMapping & RequestMapping 📝 HandlerMapping & RequestMapping1. HandlerMappingHandlerMapping은 Spring MVC의 요청 처리 흐름에서 요청 URL을 적절한 컨트롤러(Handler)로 매핑하는 역할을 담당합니다.HandlerMapping의 역할클라이언트로부터 들어온 HTTP 요청 URL을 기반으로 어떤 컨트롤러 메서드를 호출할지 결정.Spring MVC가 제공하는 다양한 HandlerMapping 구현체 중 하나를 사용하여 URL과 컨트롤러를 연결.HandlerMapping의 구현체RequestMappingHandlerMapping: 애노테이션 기반의 매핑을 처리.SimpleUrlHandlerMapping: XML 또는 Java 설정 파일을 통해 매핑 정의.BeanNameUrlH.. spring 2024. 12. 2. SpringMVC ArgumentResolver 📝 Spring MVC의 ArgumentResolver란?ArgumentResolver는 Spring MVC에서 컨트롤러의 메서드 파라미터를 해석하고 바인딩하는 데 사용되는 인터페이스입니다. Spring MVC의 요청 처리 흐름에서 HandlerMethodArgumentResolver 인터페이스를 구현하여 특정한 타입의 메서드 파라미터를 처리할 수 있습니다.ArgumentResolver란?역할:HTTP 요청의 데이터 (예: 쿼리 파라미터, URL 경로 변수, 헤더, 요청 본문 등)를 컨트롤러 메서드의 파라미터로 변환.컨트롤러의 메서드 파라미터에 대한 맞춤형 로직 적용.주요 인터페이스:HandlerMethodArgumentResolver 인터페이스:supportsParameter(MethodParamet.. spring 2024. 12. 2. Entity 클래스와 DTO를 분리하는 이유 ❓ ChatGPT에 질문package jpabook.jpashop.controller;import jakarta.validation.Valid;import jpabook.jpashop.domain.Address;import jpabook.jpashop.domain.Member;import jpabook.jpashop.service.MemberService;import lombok.RequiredArgsConstructor;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.validation.Bind.. spring 2024. 11. 30. @RequestBody @Valid Object obj, BindingResult br 타입에러가 br에 담기지 않는 이유 @RequestBody와 @Valid의 동작 방식동작 원리 설명@RequestBody @Valid ItemSaveForm form, BindingResult br의 경우:@RequestBody는 클라이언트 요청의 HTTP 본문을 Java 객체로 변환합니다. 이 과정은 HttpMessageConverter가 담당합니다.변환 중에 JSON → Java 객체로 매핑 시 타입 에러가 발생하면, Spring은 컨트롤러 메서드에 접근하지 않고 예외(HttpMessageNotReadableException 등)를 던집니다.따라서, BindingResult에 에러가 바인딩되지 않고, 컨트롤러 메서드 실행 전에 예외가 발생하여 정상 동작하지 않습니다.@Valid ItemSaveForm form, BindingResult.. spring 2024. 11. 30. 도메인 모델 패턴 vs 트랜잭션 스크립트 패턴 🔥 도메인 모델 패턴이란?도메인 모델 패턴(Domain Model Pattern)은 애플리케이션의 비즈니스 로직을 도메인 객체(엔티티) 내부에 포함시키는 설계 패턴입니다. 즉, 비즈니스 규칙, 데이터 변경, 데이터 검증 등을 도메인 객체가 직접 수행하도록 설계합니다.이 패턴은 DDD(Domain-Driven Design)의 핵심 개념 중 하나이며, 객체지향의 장점을 최대한 활용합니다.특징도메인 객체에 책임 부여:객체가 자신의 상태를 관리하고, 관련된 비즈니스 로직을 수행합니다.예: Order 객체가 주문 생성, 주문 취소 등을 수행.비즈니스 로직의 캡슐화:데이터와 이를 처리하는 로직이 한 객체 내부에 캡슐화됩니다.엔티티 중심 설계:엔티티 객체가 단순히 데이터를 저장하는 역할만 하지 않고, 비즈니스 로직.. spring 2024. 11. 25. 자바 접근제어자 개념과 JPA @Embeddable에서 기본생성자에 proteced를 사용하는 이유 자바 접근 제어자자바에서 접근 제어자(Access Modifier)는 클래스, 메서드, 변수 등의 접근 범위를 결정하여 객체 지향 프로그래밍의 캡슐화(encapsulation)를 구현하는 데 사용됩니다. 자바는 네 가지 접근 제어자를 제공합니다: public, private, protected, 그리고 default(접근 제어자를 명시하지 않을 때).1. public설명: 모든 클래스에서 접근 가능합니다. 패키지 내부 또는 외부 어디서든 해당 멤버에 접근할 수 있습니다.접근 범위:같은 클래스: O같은 패키지: O하위 클래스(다른 패키지): O전체 외부 클래스: O예시:public class MyClass { public int myVariable; public void myMethod() { .. spring 2024. 11. 24. JPA기초 @Entity & @Id & @GeneratedValue & 영속성 컨텍스트 🔥 JPA란 무엇인가? 그리고 @Entity, @Id, @GeneratedValue의 역할JPA란?JPA(Java Persistence API)는 자바 애플리케이션에서 객체(클래스)와 관계형 데이터베이스 간의 매핑을 정의하고 관리하기 위한 표준 인터페이스입니다.역할:객체와 테이블 간의 매핑을 자동으로 처리 (ORM: Object-Relational Mapping).SQL 없이도 데이터베이스와 상호작용 가능.데이터베이스 독립적인 애플리케이션 개발 지원.구현체: Hibernate, EclipseLink, OpenJPA 등이 있으며, JPA는 이 구현체들을 위한 표준입니다.@Entity역할: 클래스가 JPA 엔터티임을 선언합니다. 데이터베이스 테이블과 매핑됩니다.@Entitypublic class User .. spring 2024. 11. 23. [Spring] Spring Bean 과 Servlet에 관한 질의응답 (ChatGPT) 🔥 스프링빈 / 서블릿❓ Question스프링빈과 서블릿은 둘다 객체이지 않나? 둘다 싱글톤이고 그럼 어떤 차이가 있지 📝 Answer스프링 빈(Spring Bean)과 서블릿(Servlet)은 모두 객체이며, 둘 다 일반적으로 싱글톤으로 관리됩니다. 하지만 이 둘 사이에는 몇 가지 중요한 차이점이 있습니다. 주요 차이점은 다음과 같습니다: 1. 역할 및 사용 목적스프링 빈(Spring Bean): 스프링 프레임워크에서 관리되는 객체로, 비즈니스 로직, 서비스, 데이터 접근 등의 다양한 역할을 수행합니다. 스프링 빈은 주로 애플리케이션의 전반적인 기능을 구성하는 데 사용됩니다. 빈은 애플리케이션 컨텍스트(Application Context)에 의해 생성되고 관리됩니다.서블릿(Servlet): 자바 E.. spring 2024. 9. 2. [Spring] 서블릿 컨테이너와 스프링 컨테이너에 관한 질의응답 (ChatGPT) 🔥 서블릿은 요청시마다 생성되는가?❓ Question여러 클라이언트가 동시에 요청을 한다면 쓰레드 여러 개가 각각 서블릿 객체를 하나씩 생성해서 동시에 service 메소드가 실행되기 때문에 속도가 빠르다.여러 요청이 A서블릿을 요청한다면 A서블릿이 여러개 생성되어 작동하는 것인가? init()이 여러번 호출되는 건가? 📝 Answer아니요, 서블릿(Servlet)은 여러 클라이언트의 요청을 처리할 때 서블릿 인스턴스를 여러 개 생성하지 않습니다. 서블릿 컨테이너(Servlet Container)는 특정 서블릿 클래스에 대해 단일 인스턴스만 생성하고, 이 인스턴스를 여러 클라이언트 요청에 대해 공유합니다. 따라서 다음과 같은 사항을 이해하는 것이 중요합니다:서블릿 인스턴스는 하나만 생성됩니다: 서블릿.. spring 2024. 8. 31. 이전 1 2 다음