일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Oracle
- ubuntu
- Design Patterns
- php
- db
- jsp
- elasticsearch
- linux
- Git
- jenkins
- JPA
- IntelliJ
- laravel
- springboot
- javascript
- ReactJS
- Web Server
- Gradle
- tool
- devops
- Spring Boot
- 요리
- docker
- it
- redis
- MySQL
- java
- 맛집
- AWS
- Spring
- Today
- Total
목록Spring (73)
아무거나
SpEL(Spring Expression Language) 정의 런타임시 객체 그래프를 조회하고 조작하는 강력한 표현언어이다. EL(Unified EL) 과 비슷하지만 추가적인 기능을 제공 OGNL, MVEL, JBOss EL 등 자바에서 사용할 수 있는 여러 EL이 있지만 SpEL은 모든 스프링 프로젝트 전반에 걸쳐서 사용 가능 스프링 3.0부터 지원 가능 기능 리터럴 표현식 (Literal Expression) Boolean 및 관계 연산자 (Boolean and Relational Operator) 정규식 (Regular Expression) 클래스 표현식 (Class Expression) 속성, 배열, 목록, 맵 액세스 (Accessing Properties, arrays, lists, maps)..
Spring Batch Job Flow 이전글: https://bkjeon1614.tistory.com/739 작업코드: 작업코드 실제 비지니스 로직을 처리하는 기능은 Step 에 구현되어 있다. 즉, Batch 로 실제 처리하고자 하는 기능과 설정을 모두 포함한다. Job 내부의 Step 들 간에 순서 또는 처리 프로세스를 제어하기 위해 여러 Step 들이 어떻게 관리해야 하는지 차근차근 알아보자. Next next() 는 순차적으로 Step 들을 연결시킬 때 사용 즉, step1 -> step2 -> ... 와 같이 하나씩 실행할 때 사용하면 좋다. 샘플코드를 작성해보자. [NextJobConfiguration.java] package com.example.job; import org.springfr..
POJO (=Plain Old Java Object) POJO 란 마틴파울러가 만들어낸 용어이며 당시 인기를 끌고있던 EJB처럼 복잡하고 제한이 많은 기술을 사용하는 것보다는 자바의 단순한 오브젝트를 이용해 애플리케이션의 비즈니스 로직을 구현하는 편이 낫다고 생각하여 만듬 또한 단순히 "간단한 자바오브젝트를 사용" 한다는 말보다는 "POJO 방식의 기술을 사용" 한다는 말이 첨단기술을 쓰는 것처럼 느껴진다는 심리도 이용함 POJO 의 조건 특정 규약에 종속되지 않는다 자바 언어와 꼭 필요한 API 외에는 종속되지 않아야 한다. (EJB2, 스트럿츠1 과 같이 특정 규약을 따라 비즈니스 컴포넌트를 만들어야 하는 경우는 POJO가 아님) 특정 환경에 종속되지 않는다 특정 환경에 종속되게 만들면 안되고 환경에..
Spring Boot Graceful Shutdown 애플리케이션을 배포(ex: Rolling Deploy) 또는 특정 케이스로 종료할 때 여러가지 방법이 존재한다. 다만 케이스별로 정상적은 종료를 위하여 반드시 정상 종료 프로세스는 꼭 필수이다. 그러므로 애플리케이션을 정상적으로 종료할 수 있게 도와주는 Graceful Shutdown 에 대하여 알아보자. 리눅스 KILL 명령 리눅스 환경에서 프로세스를 종료할 때 KILL 을 사용하고 옵션에 따라 종료시키는 보편적으로 사용하는 동작은 아래와 같다. -9: 작업중인 모든 데이터를 저장하지 않고 프로세스를 종료하기 때문에 저장되지 않는 데이터는 소멸된다. (강제종료) -15: 하던 작업을 모두 안전하게 저장한 후 프로세스를 종료한다. (정상종료) Grac..
Exception 을 개선하다가 예전에 포스팅을 작성해야지 하면서 깜박했던 부분이 있어 다시 작성하게되었다. @ControllerAdvice 를 통한 Global Exception Handler 처리 에러 객체 생성 [ErrorResponse.java] import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import org.springframework.validation.BindingResult; import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; import com.example.bkjeon.enum..
Java + Spring Boot 개발시에 빈번하게 작성되는 try ~ catch 또는 예외처리등을 간소화하며 에러를 공통으로 핸들링하기 위해 전역으로 사용되는 Exception Handler 객체를 만들어보자. @ControllerAdvice 사용한 방법으로 진행하자. 자세한 코드는 https://github.com/bkjeon1614/java-example-code/tree/develop/bkjeon-mybatis-codebase 를 참고하면 된다. Global Exception Handler 처리 에러 객체 생성 [ErrorResponse.java] import java.util.ArrayList; import java.util.List; import java.util.stream.Collector..
해당 포스팅은 2편인 이전 포스팅인 https://bkjeon1614.tistory.com/712을 참고하여 사전작업 후 진행하는것이 좋다. (모니터링 하는 방법에 대해서만 설명이 나오기 때문) prometheus 란? Prometheus는 이벤트 모니터링 및 경고에 사용되는 무료 소프트웨어 응용 프로그램입니다. 유연한 쿼리 및 실시간 경고와 함께 HTTP 풀 모델을 사용하여 구축 된 시계열 데이터베이스에 실시간 메트릭을 기록 풀 방식의 메트릭 수집, 시계열 데이터 저장 promQL을 활용하여 저장된 시계열을 쿼리 및 집계 promQL: 프로메테우스에서 실시간으로 시계열 데이터를 집계할 수 있는 함수형 쿼리 언어 서비스 디스커버리 데이터 시각화 grafana 란? Grafana는 오픈소스 메트릭 데이터 ..
해당 포스팅은 1편인 이전 포스팅인 https://bkjeon1614.tistory.com/711을 참고하여 사전작업 후 진행하는것이 좋다. (모니터링 하는 방법에 대해서만 설명이 나오기 때문) 서킷브레이커 테스트를 위한 코드수정 먼저 모니터링을 위하여 https://bkjeon1614.tistory.com/711 의 CircuitBreakerService.java 코드를 일부 변경하자. [CircuitBreakerService.java] import java.util.Random; import org.springframework.stereotype.Service; import com.example.bkjeon.constants.Resilience4jCode; import io.github.resilie..
서킷브레이커란 Fault Tolerance(=장애 허용 시스템) 에서 사용되는 대표적인 패턴으로써 서비스에서 타 서비스 호출 시 에러, 응답지연, 무응답, 일시적인 네트워크 문제 등을 요청이 무작위로 실패하는 경우에 Circuit를 오픈하여 메세지가 다른 서비스로 전파되지 못하도록 막고 미리 정의해놓은 Fallback Response를 보내어 서비스 장애가 전파되지 않도록 하는 패턴 (대표적으로 MSA 환경에서 사용) 상태가 정상 Client -> Service A -> Circuit Breaker (상태: 정상이므로 Bypass Traffic) -> Service B 상태가 장애상황 Client -> Service A Circuit Breaker (상태: 장애상황이므로 Fallback Message 처..
Gradle Multi Project (Gradle 7.1.1 기준 대응) 필수참고 https://bkjeon1614.tistory.com/38 포스팅을 먼저 참고하고오자. 해당 포스팅은 Gradle 업그레이드로 인한 Deprecate 대응이므로 일부 코드수정만 확인할 수 있다. (참고 Github Repo) 시작하기전에 이전 포스팅에서 작성했던 Gradle 기능중 일부 삭제된 부분이 존재한다. 삭제된 내용은 하기 내용을 참고하자. Could not find method compile() for arguments 오류해결 compile, runtime, testCompile, testRuntime 은 Gradle 4.10 (2018. 8. 27) 이래로 Deprecate 되었으며 Gradle 7.0 (2..