Spring Boot 15

Spring Boot 전역 예외 처리

👣 개요 예외 처리를 위해 try - catch - finally 문을 사용할 수도 있지만 해당 방법은 가독성을 해치기도 하고 반복된 코드를 계속해서 작성해야 하는 불상사가 발생하곤 한다. 때문에 이러한 과정을 @Transactional과 같이 AOP로 처리를 할 수 있는 방법에 대해 작성하고자 한다. try-catch 문으로 인해 가독성 떨어지게 작성된 코드 예시 public class UserService { public void updateUser(User user) { try { // 사용자 정보 업데이트 로직 userRepository.update(user); } catch (DataAccessException ex) { // 데이터베이스 업데이트에 실패한 경우 log.error("Failed ..

Spring Boot 2023.07.30

@Transactional

👣 개요 Spring AOP를 기반으로 작동되는 Spring의 트랜잭션 처리 Annotation이다. // 트랜잭션 시작 EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); try { // 트랜잭션 범위 내에서 실행할 코드 작성 // 성공적으로 실행되면 커밋 transaction.commit(); } catch (Throwable e) { // 예외가 발생하면 롤백 transaction.rollback(); throw e; } 위 과정을 @Transactional 어노테이션으로 대체할 수 있다. 👣 트랜잭션 전파 '@Transactional을 적용한 메서드 A' 내부에 또다른 '@Transactional을..

Spring Boot 2023.07.30

Lombok

👣 개요 Java 개발 중에 단순 노동에 가까운 코드들이 존재한다. 예를 들어, Getter, Setter, Hashcode, toString 등등의 코드들은 번거롭고 반복되는 코드의 예시라고 볼 수 있다. 이러한 코드들은 가독성도 해치고 많은 Cost이 소요될 수 밖에 없다. 이러한 코드를 손쉽게 처리해주는 라이브러리가 Lombok이다. Lombok은 컴파일 시점에서 바이트코드를 변환하여 원하는 부분을 주입해주는 방식으로 동작한다. Lombok이 처리되는 과정은 아래와 같다. 자바 컴파일러는 소스파일을 파싱하여 AST트리를 만듭니다. Lombok은 AnnotationProcessor에 따라 AST트리를 동적으로 수정하고 새 노드를 추가하고 마지막으로 바이트 코드를 분석 및 생성합니다. 최종적으로 자바 ..

Spring Boot 2023.07.29

SpEL - Spring Expression Language

👣 개요 스프링 프레임워크에서 제공하는 표현 언어로서 XML 설정이나 어노테이션 기반의 스프링 빈 정의, 프로퍼티 파일 등에서 데이터를 참조하고 조작하는 데 사용된다. 👣 SpEL의 값 평가 - evaluation SpelParser는 쌍따옴표 내부의 문자열을 평가해서 결과물을 출력한다. ExpressionParser parser = new SpelExpressionParser(); Expression exp = parser.parseExpression("'Hello World'"); String message = (String) exp.getValue(); // "Hello World" Expression exp = parser.parseExpression("'Hello World'.concat('!'..

Spring Boot 2023.07.29

Spring Boot AOP

👣 개요 특정 클래스들에 공통적으로 수행해야 하는 Logic들을 해당 클래스 코드를 건드리지 않고 하나의 코드로 일괄 적용할 수 있는 도구. 예를 들면, 로깅, 보안 처리, 예외 처리 등등의 경우엔 다수의 클래스에서 공통적으로 적용되어야 하는데 만약 모든 코드에 개별적으로 코드를 부여하면 동일한 기능을 가짐에도 불구하고 코드들이 다원화 되기 때문에 수정, 유지보수가 매우 어려워진다. 아래는 AOP 적용이 필요한 예시 코드다. 더보기 public class UserService { public User getUserById(long id) { // 공통 코드 long startTime = System.currentTimeMillis(); // 비즈니스 로직 User user = userRepository...

Spring Boot 2023.07.29

Spring Boot Bean 등록 방법 5가지

1. resources/application.xml 작성 매우 원시적인 방법으로 Bean으로 등록할 클래스를 작성한 후에, 다음과 같이 application.xml에서 Bean으로 등록함. 더보기 import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { // 스프링 컨테이너를 생성하고 XML 설정 파일을 로드합니다. ApplicationContext context = new ClassPathXmlApplicationCo..

Spring Boot 2023.07.29

Spring Logging System

👣 개요 Logging은 프로그래밍에 있어서 매우 중요한 역할을 차지한다. Logging은 어플리케이션의 안정성, 성능, 보안 등 다양한 측면에서 활약을 할 수 있는데, 다음과 같은 사례에서 사용될 수 있다. 디버깅과 오류 분석 프로그램이 실행 중에 발생하는 오류나 예외를 기록하면, 이후에 오류의 원인을 분석하고 디버깅하는데 도움이 된다. 오류 로그를 살펴봄으로써 어떤 상황에서 오류가 발생하는지, 어디에서 오류가 발생했는지를 확인할 수 있다. 성능 최적화 로깅을 통해 프로그램의 성능을 평가하고 최적화하는데 도움을 준다. 예를 들어, 어떤 함수가 느리게 실행되고 있는지, 얼마나 자주 호출되는지 등을 로그로 기록하여 성능에 대한 통찰을 얻을 수 있다. 보안 감시 보안 관련 로그를 남겨서 시스템의 보안 상태를..

Spring Boot 2023.07.29

Spring Boot 외부 설정법

👣 개요 Spring Boot에서 설정값을 부여하는 방법은 하드 코딩 외에도 여러 가지를 지원한다. application.properties 파일 application.yml 파일 환경 변수 커맨드 라인 Argments 👣 프로퍼티 우선 순위 유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties 테스트에 있는 @TestPropertySource @SpringBootTest 의 properties 속성 커맨드 라인 Argments SPRING_APPLICATION_JSON (환경 변수 또는 시스템 프로티) 에 들어있는 프로퍼티 ServletConfig 파라미터 ServletContext 파라미터 java:comp/env JNDI 애트리뷰트 System.getProperties..

Spring Boot 2023.07.28

Spring Boot HTTP2 적용

👣 개요 HTTP/2를 적용해 좀 더 빠른 속도로 응답할 수 있게 적용하는 방법. HTTP/2는 HTTPS가 적용되어 있어야 작동되기에 우선 HTTPS 설정을 먼저 해야 한다. HTTP/2에 대한 개념적인 이야기는 다음 링크에 존재함. HTTP 👣 HTTP/1.0 1개의 연결당 1개의 요청만 처리. 이는 RTT[패킷 왕복 시간]를 증가시켰다. 👣 RTT 증가 대처 방안 1. 이미지 스플리팅 하나의 이미지를 여러 조각으로 잘라서 병렬적으로 다운로드 받는 ikadnorth.tistory.com 👣 적용 방법 - Tomcat 기준 주의! 해당 방법을 적용하기 위해선 Tomcat 9.0.x 버전 이상이어야 하고 JDK 9 이상이어야 함. 1. HTTPS 적용. Spring Boot HTTPS 적용 👣 개요 SS..

Spring Boot 2023.07.28

Spring Boot HTTPS 적용

👣 개요 SSL 적용을 통한 보안 강화 및 HTTP/2를 사용하기 위한 기본 설정을 위한 절차. SSL에 대한 개념적 설명은 다음 링크에 있다. SSL/TLS 👣 개요 SSL은 초기 버전으로 차후 TLS로 명칭이 변경되었으나 보통 SSL/TLS라고 부른다. SSL은 Client와 Server가 통신할 때, 제 3자가 도청하지 못하도록 변조를 하는 방법이다. 👣 CA 등록 TLS Handshake를 ikadnorth.tistory.com 👣 무료 SSL 인증서 발급 무료 SSL 인증서를 발급해주는 CA 중 (Let's Encrypt) 라는 곳이 있다. Let's Encrypt는 사용자에게 무료로 TLS 인증서를 발급해주는 비영리기관이다. 몇 가지 TLS 인증서 종류 중에서 완전 자동화가 가능한 DV (Do..

Spring Boot 2023.07.28