일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Web Server
- laravel
- JVM
- javascript
- Spring Batch
- Gradle
- tool
- db
- AWS
- jenkins
- MySQL
- devops
- elasticsearch
- php
- jsp
- Design Patterns
- Spring
- java
- Spring Boot
- springboot
- it
- redis
- linux
- ubuntu
- Oracle
- 요리
- 맛집
- IntelliJ
- Git
- ReactJS
- Today
- Total
목록전체 (810)
아무거나
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 은 테스트 코드를 접해본 개발자들은 한 번쯤은 보았을거라고 생각한다. 해당 ..
BatchGetItem (WHERE IN) 정의 다수의 테이블 아이템을 hashkey, rangedkey 를 지정해서 가져올 수 있으나 결과값이 100개로 제한된다, 특정 rangedkey 로 다수의 아이템 검색이 필요하면 query 과 권장된다. BatchGetItem 은 조건식을 사용할 수 없고 쿼리 결과를 수정할 수 없기 때문에 상황에 따라 GetItem 과 적절하게 선택하여 사용하는것이 좋다. WHERE IN 절과 비슷하게 사용할 수 있다. 사용법(SDK) [build.gradle] ... implementation 'com.amazonaws:aws-java-sdk-dynamodb:1.12.239' ... [DynamoDBConfig.java] ... import com.amazonaws.serv..
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 조건에..
파티션 (partition) 대량의 데이터를 테이블에 저장할 때, 물리적으로 별도의 테이블로 분리해서 저장시키는 기법 (단, mysql 내부적으로 분리되어 처리되기 때문에, 파티션이 얼마나 있든 사용자는 하나의 테이블로 보인다.) 특정 DML과 Query의 성능을 향상시키고, 주로 데이터가 실시간으로 쌓이는 데이터베이스 환경에서 효율적이다. 특히 Full Scan에서 데이터의 접근 범위를 줄여 성능 향상을 가져올 수 있습니다. 물리적인 파티셔닝으로 인해 전체 데이터의 훼손 가능성이 줄어들며, 각 파티션 별로 독립적으로 백업하고 복구할 수 있다. 다만, 테이블 간 Join이 일어날 경우 비용이 증가 하며 테이블과 인덱스를 별도로 파티셔닝 할 수는 없다. 파티션 종류 기본적으로 파티셔닝은 수평 분할과 수직 ..
Heap 모니터링 및 Heap Dump 분석 Heap 모니터링 OracleJDK 에서 제공하는 GUI 모니터링 툴 VisualVM 을 다운 VisualVM 상단에 [Tools] - [Plugin]을 접속하여 VisualGC 플러그인을 다운 플러그인 다운이 끝났다면, 창을 종료하고 좌측 메뉴를 확인 후 프로세스 클릭 Monitor 및 Visual GC 를 통하여 각 원하는 항목들을 모니터링한다. Heap Dump 분석 OOM 을 발생시킬 코드 작성 [TestController.java] package com.example.bkjeon; import java.util.ArrayList; import java.util.List; import org.springframework.web.bind.annotatio..
SpringBoot + Zipkin 을 활용한 트레이스 환경 구성 샘플코드는 하기 링크로 확인 샘플코드 MSA 환경과 OpenTracing 모놀리식 아키텍쳐의 경우 하나의 서버가 서비스의 전반적이 기능을 모두 제공하므로 클라이언트의 요청을 받으면 하나의 스레드에서 모든 요청을 실행하여 로그를 확인하기 쉽다. 반면에 MSA 는 여러개의 마이크로 서비스 간에 통신이 발생하기 때문에 로그를 확인하기 어렵다. 이와 같은 문제를 해결하기 위한 방법으로는 OpenTracing 이 알려져 있다. OpenTracing 는 애플리케이션 간 분산 추적을 위한 표준이라고 정의할 수 있으며, 이 표준의 대표적인 구현체로 Jaeger 와 Zipin 이 있다. (다른 방법으로는 APM (Ex: Jennifer, Pinpoint ..
SCDF(=Spring Cloud Data Flow) SCDF 란 Spring Cloud Data Flow 는 Cloud Foundry 및 Kubernetes에서 스트리밍 및 일괄 데이터 처리 파이프라인을 구축하기 위한 마이크로서비스 기반 툴킷이다. 공식문서 우선 SCDF 로 검색해보면 아래 3가지의 단어를 많이 볼 수 있다. 내용은 아래와 같다. Data MicroService 데이터를 Function 단위의 비즈니스 로직이 들어 있는 Application 으로 DataPipeLine 을 구성 Orchestrator Stream 을 구성하는 Application 과 Application 간의 Channel 을 관리(Ex: Kafka topic, group, partition..) 즉, Message M..
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..
S3 에 File Upload 기능 구현 라이브러리 설치 $ npm install multer $ npm install aws-sdk File Upload Util const fs = require("fs") const path = require("path") const multer = require("multer") /** * Save For File Upload (Use Multer Module) */ export const saveForFileUpload = multer({ storage: multer.diskStorage({ destination(req, file, done) { const dirPath = path.resolve("./") + "\\uploads" if (!fs.existsSyn..