일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- tool
- jenkins
- redis
- Oracle
- linux
- Spring
- Spring Boot
- Gradle
- ubuntu
- php
- Git
- laravel
- Web Server
- MySQL
- 맛집
- 요리
- jsp
- javascript
- AWS
- Design Patterns
- elasticsearch
- db
- it
- IntelliJ
- ReactJS
- Spring Batch
- devops
- springboot
- JVM
- java
- Today
- Total
목록Java & Kotlin/Spring (76)
아무거나
Spring Boot + Jacoco 를 활용한 코드 커버리지 관리 해당 포스팅에 대한 코드는 https://github.com/bkjeon1614/java-example-code 를 참고 Jacoco 란? Java 코드 커버리지를 측정하는 도구이다. (코드 커버리지란 소프트웨어 테스트를 논할 때 얼마나 테스트가 충분한가를 나타내는 지표중 하나이다. 또한 코드 커버리지는 소스코드 기반으로 수행하는 화이트 박스 테스트를 통하여 측정한다.) Jacoco 를 사용할 경우 장점은 아래와 같다. 소프트웨어의 안정성을 높여준다. 사이드 이펙트가 발생할 확률이 높아진다. 간결하고 재사용성이 좋은 코드를 작성할 수 있게 해준다. 코드 커버리지 측정기준 코드 커버리지의 측정기준은 구문(Statement), 조건(Cond..
Spring Boot + Junit5 를 활용한 테스트 코드 분리 해당 포스팅에 대한 코드는 https://github.com/bkjeon1614/java-example-code 를 참고 테스트 분리를 왜 하는가? 각각의 테스트 규칙에 따라 테스트 코드를 작성하게 될 경우 통합 테스트가 단위 테스트보다는 아무래도 전체적으로 하다보니 수행속도가 느릴 수 밖에 없다. 즉, 개발과정에서 통합 테스트를 지속적으로 수행하게 된다면 개발생산성이 매우 저하 될 것이다. 그러므로 테스트 분리에 따라 테스트 수행을 하는것이 더 효과적일 수 있다. Given - When - Then Pattern Given - When - Then Pattern 은 테스트 코드를 접해본 개발자들은 한 번쯤은 보았을거라고 생각한다. 해당 ..
Spring Boot + Gradle 을 활용한 정적 코드 분석 도구 Spotbugs 적용 해당 내용은 Spotbugs 4.7.3 기준으로 작성하였고, Spotbugs Gradle Plugin 5.0.14 를 활용하였다. 예제소스: https://github.com/bkjeon1614/java-example-code/tree/develop/bkjeon-mybatis-codebase 정적 코드 분석 도구란 정적 분석 도구 는 코드를 검사하여 메모리 누수 또는 버퍼 오버플로우 등 일반적으로 알려진 오류 및 취약점을 파악하고 코딩 표준 적용이 가능하다. 즉, 코드의 정확도, 스타일, 성능 등 코드 품질에 관련된 패턴을 분석해서 알려준다. 또한 GNU Lesser General Public License 조건에..
SpringBoot + Zipkin 을 활용한 트레이스 환경 구성 샘플코드는 하기 링크로 확인 샘플코드 MSA 환경과 OpenTracing 모놀리식 아키텍쳐의 경우 하나의 서버가 서비스의 전반적이 기능을 모두 제공하므로 클라이언트의 요청을 받으면 하나의 스레드에서 모든 요청을 실행하여 로그를 확인하기 쉽다. 반면에 MSA 는 여러개의 마이크로 서비스 간에 통신이 발생하기 때문에 로그를 확인하기 어렵다. 이와 같은 문제를 해결하기 위한 방법으로는 OpenTracing 이 알려져 있다. OpenTracing 는 애플리케이션 간 분산 추적을 위한 표준이라고 정의할 수 있으며, 이 표준의 대표적인 구현체로 Jaeger 와 Zipin 이 있다. (다른 방법으로는 APM (Ex: Jennifer, Pinpoint ..
Feign 이란 Feign 이란 Netflix 에서 개발된 오픈소스이며 선언적 방식으로 REST 기반 호출을 추상화해서 제공한다. 즉, interface 와 annotaion 만으로 간편하게 HTTP API Client 를 구현할 수 있으며 RestTemplate 을 만들 필요없이 사용할 수 있어 코드의 복잡성이 낮아진다. 샘플코드는 하기 링크로 확인 샘플코드 사용법 Dependency [build.gradle] ... // https://spring.io/projects/spring-cloud 에서 Spring Boot 버전에 맞게 세팅한다. (해당 포스팅은 Spring Boot 2.2.2.RELEASE 로 진행) ext { set('springCloudVersion', "Hoxton.SR3") } d..
MDC(Mapped Diagnostic Context)는 현재 실행중인 쓰레드에 메타 정보를 넣고 관리하는 공간이다. MDC는 내부적으로 Map을 관리하고 있어 (Key, Value) 형태로 값을 저장할 수 있다. Application 에서 로그를 남길시에 Request 관련 값들을 좀 더 상세하게 다루고 싶어 해당 포스팅을 작성하게 되었다. (Ex: url, parameter 등) 하기 코드만 그대로 사용하면 되므로 활용해보자. https://github.com/bkjeon1614/java-example-code/tree/develop/bkjeon-mybatis-codebase/base-api 의존성 추가 [build.gradle] ... // LoggingFilter (Spring Version 에 ..
Scope & Job Parameter 이전글: Spring Batch 4편 - Spring Batch Job Flow 작업코드: 작업코드 Job Parameter, Scope 외부/내 에서 파라미터를 받아 처리할 때 해당 파라미터를 Job Parameter 라고 한다. Job Parameter 를 사용하려면 항상 Scope 를 선언해야 하는데 Scope 는 크게 @StepScope 와 @JobScope 가 있다. 사용법은 아래와 같다. @Value("#{jobParameters[파라미터명]}") 그 외에도 jobExecutionContext, stepExecutionContext 등 에도 SpEL 로 사용할 수 있다. @JobScope 에선 stepExecutionContext 는 사용할 수 없고, j..
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)..
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..