본문 바로가기

Spring14

2017.2 버전에 추가된 기능 정리 IntelliJ 2017.2 버전에서 추가된 기능에 대한 소개가 IntelliJ 블로그에 올라와 정리하였습니다. Endpoints TabEndpoints Tab이 추가되었습니다. Run/Debug 실행시 등장하는 화면에는 이제 SpringBoot Actuator의 Beans, Health, Mapping 정보들이 같이 노출됩니다. 단, 해당 기능은 compile('org.springframework.boot:spring-boot-starter-actuator')과 같이 프로젝트에 spring-boot-starter-actuator 의존성이 포함되어있어야만 합니다. (spring-boot-starter-actuator가 없을 경우) (spring-boot-starter-actuator가 있을 경우 - He.. 2017. 8. 31.
Spring Batch에서 영속성 컨텍스트 문제 (processor에서 lazyException 발생할때) 안녕하세요? 이번 시간엔 springboot-batch에서 reader로 읽은 데이터를 processor로 넘길때 영속성 컨텍스트가 문제가 되는 상황을 해결해보려고 합니다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다. (공부한 내용을 정리하는 Github와 세미나+책 후기를 정리하는 Github, 이 모든 내용을 담고 있는 블로그가 있습니다. ) 문제 상황주문 시스템을 구축한다고 가정하겠습니다. 주문을 받은 뒤, 배치를 돌면서 주문의 내용을 History 테이블에 저장하는 기능입니다. 주문(PurchageOrder) 테이블에는 상품(Product)이 OneToMany로 잡혀있습니다. 도메인 코드는 아래와 같습니다.그리고 이를 사용한 배치 코드는 아래와 같습니다.(.. 2017. 4. 14.
Spring Validation 공통모듈 만들기 안녕하세요? 이번 시간엔 유효성 체크(이하 validation) 공통 모듈 생성하는 예제를 진행해보려고 합니다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다. (공부한 내용을 정리하는 Github와 세미나+책 후기를 정리하는 Github, 이 모든 내용을 담고 있는 블로그가 있습니다. ) 예를 들어 아래와 같은 회원 가입 양식이 있다고 가정해보겠습니다. 대부분의 입력 양식처럼 위 양식도 등록시 몇가지 조건들이 있습니다.이름/휴대폰번호/이메일은 필수값입니다.휴대폰번호는 10자리 혹은 11자리의 숫자로 이루어져야 합니다.이메일은 이메일 양식을 지켜야한다 (xxx@xxx)이메일은 중복 등록 할 수 없다.이 조건들을 체크하기 위해서 많은 분들이 하는 방법중 하나가 jque.. 2017. 3. 6.
AOP 정리 (4) 사용법 확장 먼저 아직 AOP가 적용되지 않은 UserService를 진행해보겠습니다. Perpormance.java @Around("execution(* com.blogcode.board.BoardService.getBoards(..)) || execution(* com.blogcode.user.UserService.getUsers(..))") 포인트컷 표현식에 OR 연산자인 ||를 이용하여 UserService를 추가시켰습니다. 이로 인해 알 수 있는 것은 포인트컷 표현식에는 AND, OR, NOT와 같은 관계연산자를 이용할 수 있다는 것입니다. 여기서 만약 표현식이 더 추가가 되면 어떻게 될까요? 저 긴 표현식이 하나씩 추가 될때마다 가독성에 큰 무리가 있습니다. 더불어서 해당 표현식을 재사용하고 .. 2016. 12. 8.
AOP 정리 (3) AOP란? Spring의 핵심 개념중 하나인 DI가 애플리케이션 모듈들 간의 결합도를 낮춰준다면, AOP는 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용하도록 지원하는 것입니다. AOP (Aspect-Oriented Programming) 란 단어를 번역하면 관점(관심) 지향 프로그래밍으로 됩니다. 이 관점(관심)이란 단어가 잘 와닿지 않아 AOP를 이해하는데 있어 더 어려움을 일으킨다고 생각하였습니다. 쉽게 얘기하면 프로젝트 구조를 바라 보는 관점을 바꿔보자는 이야기입니다. 우리는 보통 제 3자의 관점에서 바라보자 라는 이야기를 합니다. (제 3자의 관점) 즉, 대상을 바라보는 방향을 바꿔보자라는 이야기입니다. (핵심기능에서 바라본 관점) 각각의 Service는 핵심기능에서 바라보았을때는 Board,.. 2016. 12. 8.
AOP 정리 (2) 문제해결하기 - DI 상속을 피하기 위해 이번시간엔 DI (Dependency Injection)를 통해 문제를 해결해보려고 합니다. 제일 먼저 바꿀것은 BoardService 입니다. 전체적으로 바꿀 구조는 아래와 같습니다. (DI로 구조를 변경) BoardService 인터페이스를 BoardServicePerformance와 BoardServiceImpl이 구현하였습니다. 대신 집중해야할 로직인 Board 리스트를 조회하는 것은 BoardServiceImpl이 담당하고, 기타옵션인 수행시간 측정은 BoardServicePerformance가 구현하되, 그 과정에서 BoardServiceImpl을 주입(Injection) 받도록 하였습니다. 이렇게 되면 BoardServiceImpl과 BoardServ.. 2016. 12. 8.