spring18 [Spring & Vue.js] 공통 코드 그룹 한 번에 요청하고 묶어서 응답받기 (조회 API 설계) 📝 개요대부분의 프로젝트에서 "공통 코드"는 필수다.특히 프론트엔드에서 드롭다운, 셀렉트박스 등을 그릴 때 다양한 코드가 필요하다.Vue.js에서 여러 개의 코드 그룹을 한 번에 요청하고, Spring 백엔드에서 그룹별로 코드들을 묶어 응답하는 구조를 설계해보자.💡 목표프론트엔드에서 이런 식으로 요청을 보내면:["position", "skill_level", "team"] 백엔드에서는 다음과 같이 그룹별로 정리된 응답을 리턴한다:[ { "groupCode": "position", "codes": [ { "code": "dev", "name": "개발자" }, { "code": "design", "name": "디자이너" } ] }, { "groupCode".. spring 2025. 5. 1. [Spring 테스트] JUnit + Mockito로 공통코드 서비스 테스트하기 (feat. Collectors.toMap, @Mock, @InjectMocks 이해하기) Spring + Mockito 환경에서 @Mock, @InjectMocks, 그리고 Stream API의 Collectors.toMap 사용법을 정리해봤다.실습 코드를 기반으로 테스트 코드 작성법과 Stream API 사용 이유를 함께 이해해보자. 📑 예제 코드 소개아래는 공통코드 그룹핑 서비스 테스트 예제:﹡CmmnCodeServiceTestpackage wpo.wpms.common;import org.junit.jupiter.api.DisplayName;import org.junit.jupiter.api.Test;import org.mockito.InjectMocks;import org.mockito.Mock;import org.mockito.junit.jupiter.MockitoExtension;.. spring 2025. 5. 1. 스프링시큐리티 [SpringBoot 3.x (Spring Security 6.x)] 🔥 SpringBoot2.x@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() // (테스트 용, 실제는 다르게) .authorizeRequests() .antMatchers("/employees/**").authenticated() // 조회는 인증만 있으면 OK .antMatchers(HttpMethod.PUT, "/.. spring 2025. 4. 28. Mockito Mockito는 테스트할 때 자주 쓰이는 Mock 객체 생성용 라이브러리다.1️⃣ Mock 객체란?Mock 객체는 말 그대로 가짜 객체다.실제 객체처럼 동작하지만, 내부 로직은 없고 우리가 원하는 대로 행동을 지정할 수 있다. 즉, "흉내만 내는 객체"다. 📝 예시:public interface EmailService { void sendEmail(String to, String message);} → 진짜 구현은 메일을 보내겠지만,테스트할 땐 진짜 메일을 보내면 안 되니까 Mock 객체로 대체그럼 "흉내만 낸다"는 건 무슨 뜻일까? // 실제 클래스 (진짜 메일을 보냄)public class NotificationService { public void send(String message) .. spring 2025. 4. 7. 싱글톤 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. 이전 1 2 다음