일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- redis
- ReactJS
- linux
- Spring
- elasticsearch
- MySQL
- Gradle
- ubuntu
- AWS
- javascript
- jsp
- Web Server
- IntelliJ
- 맛집
- Spring Batch
- JVM
- laravel
- 요리
- tool
- php
- springboot
- db
- it
- Spring Boot
- Oracle
- java
- Design Patterns
- jenkins
- devops
- Git
- Today
- Total
목록Java & Kotlin (250)
아무거나
Garbage Collection 기존글: https://bkjeon1614.tistory.com/249 GC(=Garbage Collection) 불필요한 또는 더이상은 사용하지 않는 객체들을 메모리에서 제거함으로써 Java 프로세스가 한정된 메모리를 효율적으로 사용할 수 있게 해준다. JVM Heap 구조 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다. // 10,000 건의 NewObject 객체는 Loop 내에서 생성되고, 사용되지만 Loop 밖에서는 더이상 사용할 일이 없어진다. 이런 객체들이 메모리를 계속 점유하고 있다면, 다른 코드를 실행하기 위한 메모리 자원은 지속적으로 줄어들기만 할 것이다. // GC는 이렇게 한번쓰이고 버려지는 객체들 즉, 접근 불가능 상태가 된..
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..
Optional 먼저 Optional 을 설명하기전에 NPE(=NullPointerException) 에 대해서 알아보자. NPE(=NullPointerException) 개발시 예외처리중 가장 많이 발생하는 오류가 NPE(=NullPointerException) 이다. NPE 를 방어하려면 null 여부를 검사해야 하는데 변수가 많을시에 코드의 가독성과 유지보수성이 떨어지기 때문에 null 대신 초기값을 사용하길 권장하기도 한다. Optional? Java8 에서 처음 도입되었으며 Optional 클래스를 사용하여 NPE를 방지할 수 있도록 도와준다. Optional 이란 Null 이 될 가능성을 가진 값을 객체로 감싸는 래퍼 클래스이다. 또한 하기 코드처럼 value 에 값을 저장하기 때문에 값이 n..
해당 포스팅은 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..
AWS JAVA SDK 사용시 AWS Credential 클래스별 자격증명 (AWS Credential 관련 코드를 작성할 때 필수적으로 참고해야되는 내용이다.) BasicAWSCredentials 직접 accessKey, secretKey 설정 ... .withCredentials( new AWSStaticCredentialsProvider( new BasicAWSCredentials( "{accessKey}", "{secretKey}" ) ) ) ... DefaultAWSCredentialsProviderChain 기본 작업 공급자 체인이며 하기 순서대로 자격 증명을 찾는다. EnvironmentVariableCredentialsProvider 환경변수 AWS_ACCESS_KEY_ID 과 AWS_SE..
Spring Boot 에서 aws-java-sdk-dynamodb 를 활용한 AWS DynamoDB 연동 (+Credentials Setting 포함) 먼저 AWS Credentials 설정을 application.yml 기반으로 하게된다면 중요키들이 노출하게된다. 그래서 보통 KMS(=Key Management System)를 통한 관리, 키값 암호화 관리, 서버에 설정된 AWS CLI 를 통한 저장된 프로필 사용(Ex- ~/.aws/credentials) 등의 방법이 있으며 해당 내용에서는 서버에 설정된 AWS CLI 를 통한 저장된 프로필 사용 하는 방법으로 진행하도록 한다. aws-java-sdk-dynamodb 를 선택한 이유 (=spring-data-dynamodb 의 단점) 2020.03.0..
Gradle 다중 dependsOn 선언시 예측할 수 없는 종속성 순서에 대한 문제 발생 아래와 같이 빌드관련 스크립트를 만들었지만 dependsOn 의 동작이 제대로 이루어지지 않아 myDeleteTask 태스크가 실행된 상태로만 ide 상의 폴더 구조만 표시되고 애플리케이션 구동시에 갑자기 삭제된 폴더들이 생기는 기괴한 현상이 발생한다. (실제 CI/CD 구동시에 해당 폴더자체는 삭제된 상태임 즉, myDeleteTask 만 실행되어있는 상태로 되어있음) ... task frontendNpmInstall(type: NpmTask) { dependsOn myDeleteTask ... } // Client Build Task def buildType = "build:bigbro" task npmBuild..