Spring
-
[스프링 5 레시피] 10장: 스프링 트랜잭션 관리Spring 2021. 4. 20. 21:10
1. 트랜잭션 관리와 성질 트랜잭션 관리는 엔터프라이즈 애플리케이션에서 데이터 무결성과 일관성을 보장하는 필수 기법입니다. 트랜잭션 관리를 하지 않으면 데이터의 일관성이 깨질 수 있기 때문에 저장되어있는 데이터를 신뢰할 수 없게 됩니다. 트랜잭션의 성질은 ACID로 설명할 수 있습니다. 원자성(Atomicity) : 트랜잭션은 연속적인 작업으로 이루어진 원자성 작업이기 때문에 트랜잭션의 작업은 부분적으로 성공하거나 실패할 수 없고, 전부 다 수행되거나 아무것도 수행되지 않도록 보장합니다. 일관성(Consistency) : 트랜잭션이 실행을 완료하면 커밋되고 데이터베이스는 언제나 비즈니스 규칙에 맞는 일관된 상태를 유지하는 것을 의미합니다. 예를 들어, 무결성 제약 조건이 회원의 이메일은 필수 값이어야 한..
-
[스프링 5 레시피] 5장: 스프링 MVC 비동기 처리Spring 2021. 4. 7. 15:46
이 장의 주제인 스프링 MVC 비동기 처리가 필요한 이유에 대해서 간단하게 살펴보겠습니다. 클라이언트에서 요청을 보내면 하나의 서블릿 쓰레드가 그 요청을 받아서 처리하고 응답까지 도맡아 하기 때문에 클라이언트에게 응답을 돌려줄 때까지 해당 쓰레드는 블로킹(차단)됩니다. Tomcat의 쓰레드 풀에 생성할 수 있는 최대 쓰레드 개수는 기본 200개이기 때문에 요청이 폭주하게 되면 여유 쓰레드가 없어서 Connection refuse나 Connection timeout이 발생할 수 있는데요, 이러한 문제로 서블릿 3부터는 HTTP 요청을 비동기로 처리할 수 있게 되면서 HTTP 요청을 접수했던 쓰레드를 WAS에 반환하고 Backend 작업을 할 때는 스레드를 작업 쓰레드 풀에서 꺼내 쓰다가 작업이 완료되면 다..
-
[스프링 5 레시피] 3장: 스프링 MVCSpring 2021. 3. 10. 22:15
먼저 이 장의 주제인 스프링 MVC와 그의 Front Controller를 담당하고 있는 DispatcherServlet에 대해 알아보겠습니다. 스프링 MVC MVC 패턴은 웹 개발을 할 때 필수적으로 알아야 할 디자인 패턴인데요, MVC 패턴을 적용하면 애플리케이션에서 모델, 뷰, 컨트롤러의 역할을 각각 분담하고 UI에서 비즈니스 로직을 떼어낼 수 있습니다. UI에서 비즈니스 로직을 떼어낸다는 말을 이해하려면 예전에 사용하던 모델1 방식과 현재의 MVC 패턴을 따르는 모델2 방식의 차이를 이해해야 합니다. 모델1 방식 화면의 기능과 비즈니스 로직 처리를 하나의 JSP 페이지에서 개발하는 방법을 모델1 방식이라고 하는데요, 클라이언트에서 입력값과 함께 요청이 들어오면 JSP 페이지는 자신이 직접 작성한 ..
-
[스프링 5 레시피] 2장: 스프링 코어 (2-7 ~ 2-12)Spring 2021. 3. 4. 14:45
2-7. 프로퍼티 파일에서 로케일마다 다른 다국어 메시지를 해석하기 IoC 컨테이너는 국제화(i18n)와 관련된 기능을 제공해 주는데요, 스프링에서는 리소스 번들 메시지를 처리하는 메서드가 정의되어있는 MessageSource 인터페이스를 사용할 수 있습니다. 메시지 properties 파일 작성하기 resources 디렉토리 아래에 message.properties를 여러 개 작성하면 인텔리제이에서 자동으로 'messages'라는 이름의 Resource Bundle 패키지로 묶어줍니다. 기본 파일인 messages.properties와 messages_en_US.properties는 greeting의 값을 영어로 작성하고 messages_ko_KR.properties는 한국어로 작성하겠습니다. 중괄호 ..
-
[스프링 5 레시피] 2장: 스프링 코어 (2-1 ~ 2-6)Spring 2021. 2. 26. 13:16
개요 이 장의 주제는 스프링의 주요 기능입니다. IoC는 스프링 프레임워크의 심장부라고 할 수 있는데요. IoC가 무엇인지 간단히 살펴보겠습니다. IoC 란? Inversion of Control의 약자로 해석하면 제어의 역전이라는 뜻인데요, 스프링을 사용하기 전에는 객체를 생성하고 객체 간의 의존 관계를 연결하는 등 제어권이 개발자에게 있었습니다. 무슨 의미인지 간단한 코드를 통해 알아보겠습니다. public class A { private B b; public A() { this.b = new B(); // 자기가 사용할 의존성을 직접 만들어서 사용 } } A 객체는 B객체에게 의존하고 있는데요, 개발자는 A 객체를 생성할 때 B 객체를 함께 생성해서 의존하고 있는 객체를 직접 주입하고 있습니다. 다..
-
[JPA] JpaRepository save() 메서드 주의 사항Spring 2021. 2. 17. 17:09
오늘은 JpaRepository 인터페이스의 메서드 중 주의하여 사용해야 할 save() 메서드에 대해 알아보겠습니다. 우리가 ORM 프레임워크인 JPA와 Spring 프레임워크를 연계하여 사용할 때 Spring Data에서 지원하는 JpaRepository 인터페이스를 자주 사용하는데요, 실제 동작하는 구현체인 SimpleJpaRepository는 @Repository 어노테이션이 붙어있기 때문에 스프링이 실행될 때 AnnotationApplicationContext에 의해 스프링 컨테이너에 빈으로 등록이 됩니다. 이 모든 것을 스프링이 해주기 때문에 개발자는 JpaRepository를 확장하는 인터페이스만 만들어서 Repository로 사용하면 되는 것입니다. (스프링은 알면 알수록 애플리케이션을 ..
-
[JPA] N+1 문제 해결하기Spring 2020. 12. 25. 12:01
안녕하세요. 오늘 알아볼 주제는 OneToOne 또는 ManyToOne 관계에서 발생하는 N + 1 문제 해결하기 입니다. 해당 블로그의 코드는 Github에서 제공됩니다. XToMany 관계에서 N+1 문제 해결하기는 추후에 게시할 예정입니다. 본문 JPA를 사용하다보면, 자주 만나는 문제가 N+1 문제입니다. 다음과 같이 하나의 부서(Department)에 여러명의 직원(Employee)이 소속되어 있다고 가정하겠습니다. Department와 Employee의 관계를 코드로 간단하게 표현해보겠습니다. Employee가 연관관계 주인으로써 조회할 때 Department를 지연로딩 합니다. @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTE..
-
[JPA ] Auditing 기능 살펴보기Spring 2020. 11. 26. 22:05
Spring Boot 2.4.0 / Spring Data Jpa / JDK 8 / h2database 개요 Auditing 활성화하기 BaseEntity 생성하기 Entity에 적용하기 JUnit으로 테스트해보기 1 @CreatredBy, @ModifiedBy 사용하기 JUnit으로 테스트 해보기 2 실무에서 사용하기 서론 ORM(Object Relationship Mapping) 기술인 JPA는 Application의 Entity와 DB의 Table을 매핑하여 사용합니다. DB는 해당 데이터를 누가, 언제 생성 또는 수정했는지 기록하는 것이 꽤나 중요합니다. 이 데이터들은 많은 테이블에서 사용되기 때문에 Entity에도 필드로 중복되어 들어가고, 해당 Entity가 생성 또는 수정될 때마다 개발자가 신..