[Spring] 자바 리플렉션으로 알아보는 JDK 동적 프록시와 CGLIB
·
Spring Framework
프록시를 사용해서 부가기능을 추가하려고 하면 대상 클래스 수 만큼 프록시 클래스를 만들어야 하는 단점이 있었다. 하지만 자바가 기본으로 제공하는 JDK 동적 프록시 기술이나 CGLIB 같은 프록시 생성 오픈소스 기술을 활용하면 프록시 객체를 동적으로 만들어 낼 수 있다.  JDK 동적 프록시를 이해하기 위해서는 먼저 자바의 리플렉션 기술을 이해해야 한다. 리플렉션리플렉션이란?자바 프로그램이 런타임(실행 중)에 클래스, 메서드, 필드 등의 정보에 접근하고 조작할 수 있도록 해주는 메커니즘을 말한다.리플렉션 기술을 사용하면 클래스, 메서드의 메타정보를 동적으로 획득하고 코드도 동적으로 호출할 수 있다.예제를 통해서 알아보자.리플렉션 예제 @Slf4j static class Hello { ..
[Spring] 스프링 액츄에이터(actuator)로 살펴보는 프로덕션 준비 기능
·
Spring Framework
전투에서 실패한 지휘관은 용서할 수 있지만, 경계에서 실패하는 지휘관은 결코 용서할 수 없다.애플리케이션 운영 환경에서도 마찬가지로 장애가 발생하는 것은 어쩔 수 없다 해도 이를 모니터링하고 빠르게 대응하는 ‘경계 태세’만큼은 항상 갖추고 있어야 한다.  프로덕션 준비 기능이란?개발자가 애플리케이션을 만들 때는 단순히 기능 요구사항만 만족시키는 것에 그치지 않는다. 서비스가 실제 운영 단계에 올라가면 문제가 발생하지는 않는지, 지표들을 잘 수집하고 있는지, 로그 정보는 정상적으로 쌓이고 있는지 등을 지속적으로 모니터링하고 감시해야 한다.  이처럼 운영 환경에서 애플리케이션을 운용하기 위해 비기능적 요소들을 준비하고 구성하는 과정을 가리켜, 우리는 흔히 프로덕션 준비 기능(Production-Ready F..
[Spring] API 예외 처리
·
Spring Framework
기술 스택JDK 17Spring boot 3.3.5thymeleaf  1. 개요HTML 페이지의 경우 /resources/templates/error 폴더에 4xx.html, 5xx.html 와 같은 오류 페이지만 있으면 BasicErrorController가 대부분의 문제를 해결해준다. 그런데 API의 경우 생각할 내용이 더 많다. 오류 페이지는 단순히 고객에게 오류 화면을 보여주고 끝이지만 API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고 JSON으로 데이터를 내려주어야 한다. 지금부터 API의 경우 어떻게 예외처리를 하면 좋은지 알아보겠다. 2. 코드 기본 세팅Member.java@NoArgsConstructor@AllArgsConstructor@Datapublic class Member{ ..
[Spring] 예외 처리와 오류 페이지
·
Spring Framework
기술 스택JDK 17GradleSpring Boot 3.3.5Thymeleaf 1. 서블릿 예외 처리 - 시작스프링이 아닌 순수 서블릿 컨테이너는 두가지 방식으로 예외 처리를 지원한다.Exception (예외)response.sendError (HTTP 상태 코드, 오류 메시지)Exception (예외)1. 자바 직접 실행자바의 메인 메서드를 직접 실행하는 경우  main이라는 이름의 쓰레드가 실행된다. 실행 도중에 예외를 잡지 못하고 처음 실행한 main( ) 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다. 2. 웹 어플리케이션웹 어플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 어플리케이션에서 예외가 발생했는데, 어디선가 try ..
[Spring] Bean Validation (검증) - 2
·
Spring Framework
이전 포스팅:[Spring] Bean Validation (검증) - 1  [Spring] Bean Validation (검증) - 1해당 예제는 다음과 같은 기술 스택을 사용했습니다.JDK 11Spring BootThymeLeaf 1. Bean Validation이란?Bean Validation은 Java EE 환경에서 표준으로 제공되는 유효성 검증 프레임워크로, JSR-380(Bean Validation 2.0)eco-dev.tistory.com   Bean Validation의 한계와 해결책 문제점등록과 수정 시 검증 조건이 다를 수 있음하나의 도메인 객체에 모든 검증 로직을 담기 어려움해결책검증 그룹(groups) 사용: @Validated(SaveCheck.class)와 같이 그룹을 지정하여 상..
[Spring] Bean Validation (검증) - 1
·
Spring Framework
해당 예제는 다음과 같은 기술 스택을 사용했습니다.JDK 11Spring BootThymeLeaf 1. Bean Validation이란?Bean Validation은 Java EE 환경에서 표준으로 제공되는 유효성 검증 프레임워크로, JSR-380(Bean Validation 2.0) 표준에 따라 정의된다. 애노테이션 기반으로 도메인 모델의 필드에 유효성 검증 규칙을 선언하여 자동으로 검증을 수행할 수 있게 해준다. Spring Boot는 기본적으로 Hibernate Validator를 통합하여 Bean Validation을 지원한다. Hibernate Validator는 Bean Validation의 레퍼런스 구현체로, 다양한 유효성 검증 기능을 제공한다. Bean Validation은 다양한 유효성 ..
[Spring] 스프링 메시지, 국제화
·
Spring Framework
기술 스택JDK 11.0.2Spring boot 2.4.4ThymeLeaf  메시지란?개요 만약 기획자가 화면에 보이는 문구가 마음에 들지 않는다고 상품명이라는 단어를 모두 상품이름으로 고쳐달라고 하면 여러 화면에 보이는 단어들을 모두 변경해야 한다. 이런 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라 한다. 개념 스프링 부트에서 제공하는 메시지 기능은 애플리케이션에서 텍스트 메시지를 별도의 파일로 관리하여 다양한 언어와 상황에 맞춰 텍스트를 쉽게 변경할 수 있게 한다. MessageSource라는 인터페이스를 통해 애플리케이션은 텍스트 메시지를 코드에 하드코딩하지 않고 별도의 메시지 파일에서 로드할 수 있다.  국제화란?개요 및 개념국제화 (i18n) 기능은 애플리케이션을 여러 언어..
[Spring] Argument Resolver 란?
·
Spring Framework
Spring MVC로 Web개발을 할 때 쿼리 파라미터 혹은 HTTP Body에 들어오는 값을 Controller 메소드의 매개변수로만 선언을 해도 자동으로 바인딩을 해준다. 이럴 때 왜, 어떻게 바인딩을 해주지? 라는 의문이 들 것이다. 이런 바인딩을 개발자가 아닌 자동으로 해주는 것이 바로 Argument Resolver이다.   1. Argument Resolver (HandlerMethodArgumentResolver)Argument Resolver는 컨트롤러 메서드의 매개변수에 값을 자동으로 주입하는 역할을 한다. 이는 HTTP 요청의 다양한 데이터를 컨트롤러 메서드의 인자로 전달하기 위해 사용된다. 예를 들어, 요청 파라미터, 헤더, 세션 정보 등을 컨트롤러의 인자에 맞게 변환하여 제공하는 작..
@Transactional을 선언해도 내부 메서드를 실행 시 ROLLBACK이 되지 않는 문제
·
Spring Framework
문제- @Transactional을 애노테이션을 선언해도 this를 통한 내부 메서드를 호출시 롤백이 되지 않았다.아래는 문제의 코드이다. 같은 클래스안에 INSERT할 수 있는 서로 다른 메서드를 생성 뒤이 두개의 INSERT 메서드를 this로 내부의 메서드들을 한번에 호출하는 메서드를 생성하였다.(참고로 insert1 메서드를 실행 시 'INSERT INTO BOOK VALUES ('18', 'TEST1', 'TEST_WRITER1', 100, 1)' 라는 SQL 쿼리가 실행 )insert2() 메서드는 예외를 던지고 allInsert() 메서드는 insert1()와 insert2() 내부 메서드를 한번에 호출하는 메서드다. 그 후 테스트 클래스를 생성뒤 한번에 Insert 하는 메서드 실행 아래의..