일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ubuntu
- JVM
- Oracle
- laravel
- Git
- Design Patterns
- db
- it
- Spring Batch
- springboot
- Spring
- elasticsearch
- IntelliJ
- Gradle
- devops
- php
- AWS
- java
- jenkins
- redis
- Spring Boot
- jsp
- 맛집
- tool
- 요리
- MySQL
- linux
- javascript
- ReactJS
- Web Server
- Today
- Total
목록Java & Kotlin (250)
아무거나
[Redis 시리즈 2편] Lettuce 를 사용한 Read / Write 분리 코드는 https://github.com/bkjeon1614/java-example-code/tree/develop/bkjeon-mybatis-codebase 참고 부탁드립니다. 원활한 세팅을 위해 기존 1편에서 설치된 Redis 를 제거 후 진행하자. 환경 (Reader DNS 를 통한 Replica Node 들에 분산하는 방법으로 가정) Redis Master 1대 Slave 2대 Docker Compose 로 설치 (with. Docker) $ docker network create app-tier --driver bridge [docker-compose.yml] version: '2' networks: app-tier..
[Redis 시리즈 1편] Spring Boot 에 Redis 라이브러리인 Lettuce 적용 코드는 https://github.com/bkjeon1614/java-example-code/tree/develop/bkjeon-mybatis-codebase 참고 부탁드립니다. Lettuce Lettuce 란 Netty(비동기 이벤트 기반 고성능 네트워크 프레임워크) 기반이며 고성능, 확장가능, 스레드세이프등을 지원한다. Lettuce 를 선택한 이유 주로 java 쪽에서는 Lettuce 말고도 Jedis 도 많이 사용한다고 한다. 그러나 Jedis 에 비해 몇 배 이상의 성능, 빠른 피드백, 심플하게 디자인된 코드, 잘 기재된 공식문서 등의 이유로 Lettuce 를 많이 사용하고 있는 추세라고 한다. 환경 ..
Ehcache3 (Maven) CacheManagerBean 구현을 통한 Ehcache3 적용 Ehcache3 부터는 JSR-107 로 CacheManager 로 구현해야 한다고 한다. JSR-107 호환 캐시를 사용하기 위해선 JCache 구현 필요 구현 ehcache.xml 생성 (resources 경로 - alias: @Cacheable 의 value 값, key: 키값, value-type: cache 로 저장할 값) java.lang.String java.util.ArrayList 30 com.lotteon.display.config.ehcache.CacheEventLogger ASYNCHRONOUS UNORDERED CREATED EXPIRED 10000 1000 Cache Logger [Ca..
원인 원인은 Redis 의 Packet Loss 가 발생하였고 해당 애플리케이션의 전체 Pod 에서 OOM 이 발생하면서 재시작되는 현상이였고 Pod 의 Heap 메모리 사용량은 여유가 있는 상태였습니다. 왜 이러한 문제가 발생하였는지 알아보겠습니다. 컨테이너에서 OOM 발생 먼저 서버로그를 확인해본 결과 Gzip 압축 적용후에 점진적으로 메모리 사용량이 증가한 내용이 확인되었다. 또한 컨테이너에 OOM Kill 도 발생한 것을 확인할 수 있었다. 그러나 이상한점은 Heap Memory 는 정상적인 수치로 확인되었다. 원인분석 Native Memory 에서 OOM 이 발생하였고, Heap Memory 는 정상 적이라 애플리케이션 코드에 문제가 있다고 판단 하였고 관련하여 상기 언급 되었던 배포 항목중 g..
시작에 앞서 먼저 Java8 부터 삭제되는 영역인 Permanent Generation 부터 알아보자면 Class 혹은 Method Code 가 저장되는 영역이다. 줄여서 PermGen 이라고 하며, Heap 영역에 속한다. PermGen 에는 로드된 클래스의 정보, 정적 변수, 상수 정보 등 변하지 않을 것이라고 어느 정도 보증되는 데이터가 저장된다고 한다. PermGen -> Metaspace 영역으로 변경된 이유 PermGen 은 메모리가 제한되기 때문에 OOM(=OutOfMemoryError) 이 발생하게 된다. 그래서 해당 문제를 해결하기 위해 Native 메모리를 사용하는 Metaspace 로 변경되었으며 Metaspace 영역은 Native 메모리를 이용함으로써 개발자는 영역 확보의 상한을 ..
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 조건에..
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 ..