일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- @Bean
- 빈
- open session in view
- @Configuration
- Dispatcher Servlet
- Batch
- Request flow
- Spring Batch
- OSIV
- Open EntityManager In View
- @componentScan
- open-in-view
- 메서드 주입
- Spring Framework
- 불변 객체
- 참조 타입
- 익명 함수
- 가변 객체
- View Resolver
- 이펙티브 자바
- 싱글 스레드
- spring boot
- 필드 주입
- 생성자 주입
- @FunctionalInterface
- Handler Adepter
- 일괄처리
- 스프링 빈
- mavenCentral
- 컴포넌트스캔
- Today
- Total
목록전체 글 (18)
보다 더 나은 내일의 나를 위해
개요 자바에서 빌더 패턴(Build Pattern)은 크게 두 가지가 있습니다. 1. 이펙티브 자바의 빌더 패턴 2. GoF 디자인 패턴 중 빌더 패턴 두 패턴은 관점이 다른데, 여기서 패턴의 차이점이 나타납니다. 이펙티브 자바의 빌더 패턴을 필드가 많은 객체를 생성할 때 필요에 따라 생성자나 setter를 많이 만들지 않아도 손쉽게 생성하는데 목적이 있습니다. 그에 반해 GoF의 설명을 보면 다음과 같습니다. 빌더 패턴이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. - wikipedia 즉, 객체 생성과 조립 방법을 분리해 객체 생성 절차는 동일하게 하며, 서로 다른 필드를 가진 객체를 생성하는데 목적이 있습니다. GoF ..
개요 빈 클래스에 @Component 어노테이션을 사용하는 것과 @Configuration 클래스에서 @Bean으로 빈 클래스를 등록하는 것 모두 스프링 빈에 클래스를 등록하는 동작을 하는 어노테이션입니다. 그렇다면 @Component와 @Bean의 차이는 무엇일까요? @Component 기본적으로 @Component 어노테이션은 빈 클래스 위에 사용해 빈에 등록하는 기능을 합니다. @Component public class MyClass { ... } 위 코드처럼 작성하게 되면 MyClass 객체가 스프링 빈에 등록됩니다. @Controller와 @Service 등은 @Component를 포함하고 있으므로 따로 명시해 주지 않아도 스프링 빈에 등록됩니다. @Component를 사용하게 되면 @Sprin..
✍️ Spring MVC request flow 스프링 MVC 구조에서는 요청을 받으면 여러 가지 과정을 거쳐 요청을 수행합니다. 오늘은 이 요청에 대한 흐름을 살펴봅시다. 📝 요약 우선 전체적인 흐름은 다음 사진과 같습니다. 그렇다면 이제 차근차근 살펴봅니다. 📲 요청이 들어왔을 때 우선 전면 컨트롤러인 Dispatcher Servlet이 요청을 받습니다. 그 후 Handler Mapping을 통해서 해당 요청을 수행할 수 있는 Controller를 찾습니다. 🔧 요청의 처리 Dispatcher Servlet은 찾아온 Controller를 토대로 Handler Adepter를 통해 요청을 위임합니다. 컨트롤러는 비즈니스 로직을 통해 요청을 처리하고 뷰 이름을 반환합니다. 📄 뷰 랜더링 마지막으로 Dis..
멀티 스레드와 싱글 스레드 간단히 우선 싱글 스레드는 프로그램을 실행할 때 스레드를 단 하나만을 사용해 수행하는 기술을 말합니다. 따라서 프로그램을 차례대로 순차 처리하게 됩니다. 반면에 멀티 스레드는 여러 개의 스레드를 사용해 둘 이상의 프로그램을 동시에 실행하는 기술입니다. 이는 컨텍스트 스위칭(context switching)을 통해서 여러 스레드를 병렬적으로 처리함으로써 가능하게 할 수 있었습니다. 그렇다면 각각의 장﹒단점은 무엇일까요? 멀티 스레드 장점 응답성 긴 작업을 수행하거나 프로그램의 일부분(스레드)이 중단되어도 프로그램의 수행이 계속 수행되므로 사용자에 대한 응답성이 증가하게 됩니다. 자원 공유 스레드는 그들이 속한 프로세스의 자원들과 메모리를 공유합니다. 따라서 한 응용 프로그램이 같..
JPA에서는 객체를 DB에서 찾아올 때의 방식을 위한 즉시 로딩과 지연 로딩 옵션 중 하나를 설정해 줄 수 있습니다. @ManyToOne의 기본값은 즉시 로딩이고, @ManyToMany의 기본값은 지연 로딩으로 되어있습니다. 이 두 옵션은 무슨 차이가 있을까요? 즉시 로딩 : 즉시 로딩은 DB에서 엔티티를 찾아올 때 연관관계를 맺고 있는 엔티티들을 한 번에 바로 조회합니다. 지연 로딩 : 지연 로딩은 DB에서 엔티티를 찾아올 때 연관관계를 맺고 있는 엔티티들은 프록시 객체를 할당해 주어 나중에 실제로 사용할 때 따로 조회를 시도합니다. 코드를 통해 한번 알아봅시다. 우선 사용할 엔티티 구조입니다. Human과 Organism은 서로 1 : N 관계입니다. 이때 fetch의 기본 값은 즉시 로딩(EAGER..
OSIV Open In View는 Open Session In View라 불리며 관례상 OSIV라 부릅니다. OSIV는 영속성 컨텍스트를 트랜잭션이 종료되어도 VIew 렌더링 또는 응답 시까지 살아있도록 합니다. Spring Boot에서는 spring.jpa.open-in-view의 기본값이 true로 되어있습니다. 이 값이 true 일 때와 false 일 때 무엇이 다를까요? True라면? spring.jpa.open-in-view의 값이 기본값인 true라면 트랜잭션이 종료되어도 영속성 컨텍스트가 살아있다. 예를 들어 Book와 Bookcase라는 엔티티가 있습니다. // 책 @Entity public class Book { ... @ManyToOne(fetch = FetchType.LAZY) @Jo..
이 포스트는 공식 문서를 참고하여 작성되었습니다. 예제 코드는 깃허브에 작성되어 있습니다. Person package com.example.batch.model; public class Person { private String lastName; private String firstName; // Constructor, getter, setter, toString... } 읽어온 데이터로 구성될 객체입니다. BatchConfiguration package com.example.batch.config; // ... public class BatchConfiguration { // ... @Bean public FlatFileItemReader reader() { return new FlatFileItem..
스프링 배치 (Spring Batch) 일괄 처리를 위한 오픈소스 프레임 워크 여러 Job을 순차적으로 처리한다. 보통 어떤 경우에 사용할까? 대용량 비지니스 데이터를 복잡한 작업으로 처리해야하는 경우 특정한 시점에스케쥴러를 통해 자동화된 작업이 필요한 경우 ( ex. 푸시알림, 월 별 리포트) 대용량 데이터 포멧을 변경, 유효성 검사 등의 작업을 트랜젝션 안에서 처리 후 기록해야하는 경우 스프링 배치 시나리오 읽기 → 데이터 저장소(데이터베이스, 파일 등)에서 데이터를 읽어온다. 처리 → 데이터를 원하는 대로 가공 / 처리 한다. 쓰기 → 처리 완료된 데이터를 저장한다. 스프링 배치 관계도 Job과 Step은 1:M의 연관 관계를 맺고 있다. Step와 ItemReader, ItemProcessor,..