전체 글 556

[Spring][Test] 1. Unit Testing

1. 단위 테스트 테스트 시에는 코드를 독립적으로 테스트할 수 있어야 해요. (Spring 없이도 테스트가 가능해야 함)Spring의 Dependency Injection 덕분에, J2EE 전통 방식보다 컨테이너에 덜 의존적인 코드 작성이 가능POJO(Plain Old Java Object) 중심의 구조를 만들 수 있음순수한 자바 코드로 작성된 객체로 설계 가능 (특별한 인터페이스나 어노테이션 등에 의존 ❌)객체를 직접 생성하여 테스트할 수 있음을 의미함 장점항목설명Spring IoC와의 연관성⚡ 빠른 실행 속도DB나 서버 등 외부 시스템 없이 실행 가능IoC로 객체를 외부에서 주입하므로, 테스트 시 Mock/Stubs로 대체 가능🛠️ 테스트 주도 개발(TDD)에 유리빠르고 반복적인 테스트 작성 가능P..

Spring/Spring Test 2025.04.19

[더 자바, 애플리케이션을 테스트하는 다양한 방법] 2. Mockito

백기선 님의 인프런 강의 "더 자바, 애플리케이션을 테스트하는 다양한 방법"를 정리한 글입니다. 1. 소개Java 계열에서 가장 많이 사용되는 Mock 프레임워크 (50%+) 구성 요소 Mock: 실제 객체처럼 동작하지만, 프로그래머가 행동을 제어할 수 있는 객체Mockito: Mock 객체를 쉽게 만들고, 조작하고, 검증할 수 있는 프레임워크 대체제EasyMockJMock 2. Mockito 시작하기Gradledependencies { testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0' testImplementation 'org.mockito:mockito-core:5.12.0' testImplementation 'org.mocki..

Code/Test 2025.04.19

[더 자바, 애플리케이션을 테스트하는 다양한 방법] 1. JUnit 5

백기선 님의 인프런 강의 "더 자바, 애플리케이션을 테스트하는 다양한 방법"를 정리한 글입니다. 1. JUnit 5자바 개발자들이 가장 많이 사용하는 테스트 프레임워크. (93%의 자바 개발자가 JUnit 사용) 구조구성 요소설명Platform테스트 실행을 위한 런처 및 TestEngine API 제공JupiterJUnit 5의 주요 TestEngine 구현체VintageJUnit 4 및 3을 지원하는 TestEngine 구현체 시작하기plugins { id 'java'}group 'com.example'version '1.0-SNAPSHOT'sourceCompatibility = '1.8'repositories { mavenCentral()}dependencies { testImplem..

Code/Test 2025.04.19

[Tomcat] 1. Introduction

1. Context하나의 웹 애플리케이션을 의미합니다. 2. 주요 디렉토리환경 변수항목CATALINA_HOMECATALINA_BASE정의Tomcat이 설치된 기본 루트 디렉토리특정 Tomcat 인스턴스의 런타임 설정 디렉토리역할공통된 바이너리(.jar) 및 실행 파일 제공인스턴스별 실행 환경 구성 (설정, 로그, 웹앱 배포 등)포함 내용- bin/, lib/, conf/, etc.- conf/, logs/, webapps/, temp/, work/ 등다중 인스턴스 운영 여부하나만 존재 (공유)인스턴스 수만큼 각각 존재 가능공통 설정 공유O (예: setenv.sh, jar 파일 등)X업그레이드 영향업그레이드 시 모든 인스턴스에 즉시 반영 가능변경 없음 (인스턴스별로 유지됨)설정 파일 누락 시 동작해당 디..

Spring/Spring MVC 2025.04.14

[Spring MVC] 7. HTTP Caching

웹 애플리케이션의 성능을 높이기 위한 방법브라우저나 프록시 서버가 응답을 저장하고 재사용할 수 있게 도와주는 매커니즘 1. Cache-Control클라이언트나 프록시에게 응답을 어떻게 캐시될 지 알리는 HTTP 헤더 (응답 헤더) 흐름클라이언트가 자원을 요청서버는 응답 시, Cache-Control 헤더를 포함해서 응답클라이언트가 해당 설정에 따라 캐싱 자원으로 응답할 지 결정 예시) 뉴스 기사 요청하기더보기더보기GET /news/123HTTP/1.1 200 OKCache-Control: max-age=60Content-Type: text/html브라우저에 응답을 캐싱함 GET /news/12360초 이내 재요청 시, 서버로 요청이 가지 않음. (캐시 사용)60초 이후 재요청 시, 서버로 새 요청 (캐시..

Spring/Spring MVC 2025.04.14

[Spring MVC] 6. Error Response

1. Error ResponseSpring MVC에서의 에러 응답 처리는 RFC 9457 - Problem Details for HTTP APIs를 기반으로 합니다. 2. 핵심 개념 및 클래스 개념설명ProblemDetailRFC 9457에 정의된 문제 상세 형식을 표현하는 클래스.표준 필드와 커스텀 필드를 포함할 수 있음.ErrorResponseHTTP 상태 코드, 헤더, RFC 9457 형식의 바디를 포함하는 오류 응답 계약.Spring MVC의 모든 예외가 이를 구현함.ErrorResponseExceptionErrorResponse를 구현한 기본 클래스.사용자 정의 예외에서 상속해 사용 가능.ResponseEntityExceptionHandler예외를 처리하고 ProblemDetail 형식으로 응답..

Spring/Spring MVC 2025.04.12

[Spring MVC] 3. HTTP Message Conversion

1. HTTP Message ConversionHTTP 요청/응답의 본문(body)을 Java 객체로 변환하거나, 반대로 Java 객체를 HTTP 본문으로 변환하는 컴포넌트입니다. 2. 구현체MessageConverter설명지원 기본 Media TypeStringHttpMessageConverterString을 읽고 쓰는 변환기text/*, text/plainFormHttpMessageConverter폼 데이터를 읽고 씀- 읽기: MultiValueMap- 쓰기: MultiValueMap도 가능application/x-www-form-urlencodedmultipart/form-dataByteArrayHttpMessageConverter바이트 배열을 읽고 씀*/*application/octet-strea..

Spring/Spring MVC 2025.04.12

[Spring MVC] 2. Filters

1. Form DataServlet API는 POST 요청에 대해서만 request.getParamaeter*() 사용 가능 FormContentFilterPUT, PATCH, DELETE 요청은 서블릿 스펙상으로는 바디 패싱을 하지 않음PUT, PATCH, DELETE 요청에서도 body를 파싱하여 getParamaeter*()로 접근 가능하게 함body를 application/x-www-form-urlencoded로 파싱함getParamaeter*()로 인해 FormData를 @RequestParam, @ModelAttribute에서 바인딩할 수 있음 예제) FormContentFilter 등록더보기더보기더보기public class MyWebInitializer implements WebApplica..

Spring/Spring MVC 2025.04.11

[Spring][AOP] 3. Advisor API

1. Advisor"어떤 시점에 어떤 부가기능을 실행할지"를 정의 (Advice + Pointcut을 묶은 객체)Aspect의 최소 단위 2. 구현체DefaultPointcutAdvisorAdvisor advisor = new DefaultPointcutAdvisor(pointcut, advice);기본 구현체Advice + Pointcut를 한 번에 묶어서 등록이 가능 3. Advice 혼합 사용다양한 타입들의 Advice 객체를  혼합해서 하나의 프록시에 등록할 수 있음 예제) ProxyFactory더보기더보기더보기MyService target = new MyServiceImpl();ProxyFactory factory = new ProxyFactory();factory.setTarget(target..

Spring/Spring 2025.04.09

[Spring][AOP] 2. Pointcut API

1. Spring Pointcut API어떤 Advice가 어떤 메서드에 적용될지를 결정하는 기준을 정의함 Pointcut 인터페이스public interface Pointcut { ClassFilter getClassFilter(); MethodMatcher getMethodMatcher();}Advice의 적용 대상을 지정클래스와 메서드 조건이 모두 만족될 때 적용됨 항목ClassFilterMethodMatcher역할Pointcut이 적용될 클래스를 필터링Pointcut이 적용될 메서드를 필터링평가 시점AOP 프록시 생성 시점정적: 프록시 생성 시동적: 메서드 호출 시마다 평가정적/동적 여부항상 정적정적 (isRuntime() == false) 동적 (isRuntime() == true)주..

Spring/Spring 2025.04.09