분류 전체보기
-
option 설명 etc -Xms 초기 Heap 메모리 size Heap -Xm 최대 사용 가능한 Heap 메모리 size Heap -XX:MetaspaceSize 초기/최소 metaspace size metaspace -XX:MaxMetaspaceSize 최대 metaspace size metaspace defaul = -1 ( unlimited ) -java.net.preferipv4stack=true IPv4, IPv6 중에 IPv4를 더 우선으로 사용 defaul = false
[Java] JVM 옵션 정리option 설명 etc -Xms 초기 Heap 메모리 size Heap -Xm 최대 사용 가능한 Heap 메모리 size Heap -XX:MetaspaceSize 초기/최소 metaspace size metaspace -XX:MaxMetaspaceSize 최대 metaspace size metaspace defaul = -1 ( unlimited ) -java.net.preferipv4stack=true IPv4, IPv6 중에 IPv4를 더 우선으로 사용 defaul = false
2024.04.21 -
Dockerfile을 통해서 docker image를 build 하고 생성된 image들의 버전을 관리하는 방법을 알아보자. build docker build --tag [이미지 이름:이미지 버전] [Dockerfile의 경로] docker build --tag my-image:v1.0 ./ image list docker images tag 기존에 생성된 이미지의 이름 변경 or 버전 변경 이름은 유지하고 버전만 변경 가능 이름 변경 가능 이름&버전 변경 가능 docker tag [기존 이미지 명:버전] [rename:버전] remove image docker rmi [이미지명:버전] or docker rmi [이미지ID]
[DOCKER] docker image build&tagDockerfile을 통해서 docker image를 build 하고 생성된 image들의 버전을 관리하는 방법을 알아보자. build docker build --tag [이미지 이름:이미지 버전] [Dockerfile의 경로] docker build --tag my-image:v1.0 ./ image list docker images tag 기존에 생성된 이미지의 이름 변경 or 버전 변경 이름은 유지하고 버전만 변경 가능 이름 변경 가능 이름&버전 변경 가능 docker tag [기존 이미지 명:버전] [rename:버전] remove image docker rmi [이미지명:버전] or docker rmi [이미지ID]
2024.04.17 -
코드 내부에서 java의 다형성 특징을 이용해서 abstract, interface를 이용해 기능을 작성하는 경우가 있다. 이러한 경우에 하나의 application 내에서만 호출되는 관계가 아니고, 다른 application에 메시지로 전달되거나 redis와 같은 storage에 저장되는 경우 object를 string이나 byte로 변환하는 과정이 필요하게 된다. 해당 과정에서 abstract, interface를 사용하게 되면 실제로 deserialize 되는 시점에 해당 정보가 어떠한 concrete class에 매핑되는지에 대한 정보가 필요하게 된다. 이러한 구체적인 정보가 없이는 serialize 된 정보가 다시 객체로 변환되기는 불가능하다. @JsonTypeInfo를 사용하면 이러한 문제를 ..
[Java] 다형성 serialize (jackson, JsonTypeInfo)코드 내부에서 java의 다형성 특징을 이용해서 abstract, interface를 이용해 기능을 작성하는 경우가 있다. 이러한 경우에 하나의 application 내에서만 호출되는 관계가 아니고, 다른 application에 메시지로 전달되거나 redis와 같은 storage에 저장되는 경우 object를 string이나 byte로 변환하는 과정이 필요하게 된다. 해당 과정에서 abstract, interface를 사용하게 되면 실제로 deserialize 되는 시점에 해당 정보가 어떠한 concrete class에 매핑되는지에 대한 정보가 필요하게 된다. 이러한 구체적인 정보가 없이는 serialize 된 정보가 다시 객체로 변환되기는 불가능하다. @JsonTypeInfo를 사용하면 이러한 문제를 ..
2024.04.13 -
동기적으로 API를 호출한다면 응답이 올 때까지 기다렸다가, 응답을 받으면 해당 응답의 결과 값을 기반으로 다음 로직을 진행한다. 다만, 최근에는 kafka와 같은 message queue의 도입으로 요청을 보내는 쪽에서 결과에 대한 처리를 보장하는 것보다는 요청을 받은 쪽에서 멱등성을 보장해 주는 역할이 더 커진 것 같다. 이러한 consumer의 역할을 만족하기 위해서 spring-kafka에서는 consumer에서 요청을 처리하는 과정에 exception이 발생했을 때 쉽게 처리할 수 있도록 @RetryableTopic 기능을 제공한다. 쉽게 말하면, Consumer에서 요청을 처리하는 과정에서 문제가 생겼을 때 다시 처리할 수 있도록 재처리-토픽을 두고, 해당 토픽에 메시지를 전송해 주는 것이다...
[Kafka] Spring Kafka @RetryableTopic or RetryTopicConfiguration동기적으로 API를 호출한다면 응답이 올 때까지 기다렸다가, 응답을 받으면 해당 응답의 결과 값을 기반으로 다음 로직을 진행한다. 다만, 최근에는 kafka와 같은 message queue의 도입으로 요청을 보내는 쪽에서 결과에 대한 처리를 보장하는 것보다는 요청을 받은 쪽에서 멱등성을 보장해 주는 역할이 더 커진 것 같다. 이러한 consumer의 역할을 만족하기 위해서 spring-kafka에서는 consumer에서 요청을 처리하는 과정에 exception이 발생했을 때 쉽게 처리할 수 있도록 @RetryableTopic 기능을 제공한다. 쉽게 말하면, Consumer에서 요청을 처리하는 과정에서 문제가 생겼을 때 다시 처리할 수 있도록 재처리-토픽을 두고, 해당 토픽에 메시지를 전송해 주는 것이다...
2024.04.08 -
docker와 host 사이의 파일 전송은 아래와 같이 두 가지로 나눌 수 있다. docker를 실행한 host의 파일을 docker container로 복사 docker container의 파일을 docker를 실행한 host로 복사 host -> container $ docker cp [host 파일경로] [container name]:[container 내부 경로] 예시 $ docker cp test_file.json myContainer:/home/mydir/ container -> host docker cp [container name]:[container 내부 파일경로] [host 경로] 예시 $ docker cp myContainer:/home/mydir/test_file.json ./cur..
[DOCKER] docker cp (host<->container 파일 복사)docker와 host 사이의 파일 전송은 아래와 같이 두 가지로 나눌 수 있다. docker를 실행한 host의 파일을 docker container로 복사 docker container의 파일을 docker를 실행한 host로 복사 host -> container $ docker cp [host 파일경로] [container name]:[container 내부 경로] 예시 $ docker cp test_file.json myContainer:/home/mydir/ container -> host docker cp [container name]:[container 내부 파일경로] [host 경로] 예시 $ docker cp myContainer:/home/mydir/test_file.json ./cur..
2024.04.04 -
redis는 key-value 형태의 데이터 저장소 모든 데이터는 key에 연결돼 있어 항상 key를 식별자로 이용 value는 redis에서 제공하는 다양한 형태의 자료 구조 활용 가능 Redis 자료 구조 String List 순서를 가지는 문자열의 목록 Hash field-value 쌍을 가진 아이템의 집합 객체를 표현하기 적절한 자료 구조 Set 정렬되지 않는 문자열의 모음 Sorted Set score값에 따라 정렬되는 고유한 문자열의 집합 score-value 쌍을 가지며, 저장될 때부터 score 값으로 정렬돼 저장된다 Redis 키 관리 키 조회 > exists {key} > keys {pattern} > scan {curor} match {pattern} type {type} keys는 ..
[Redis] Redis 기본 개념redis는 key-value 형태의 데이터 저장소 모든 데이터는 key에 연결돼 있어 항상 key를 식별자로 이용 value는 redis에서 제공하는 다양한 형태의 자료 구조 활용 가능 Redis 자료 구조 String List 순서를 가지는 문자열의 목록 Hash field-value 쌍을 가진 아이템의 집합 객체를 표현하기 적절한 자료 구조 Set 정렬되지 않는 문자열의 모음 Sorted Set score값에 따라 정렬되는 고유한 문자열의 집합 score-value 쌍을 가지며, 저장될 때부터 score 값으로 정렬돼 저장된다 Redis 키 관리 키 조회 > exists {key} > keys {pattern} > scan {curor} match {pattern} type {type} keys는 ..
2024.03.31 -
spring-retry의 2.0.1 버전부터는 @EnableRetry 어노테이션에 order 설정이 추가되었다. @Retryable의 order 기본값은 Ordered.LOWEST_PRECEDENCE - 1 @Transational의 order 기본값은 Ordered.LOWEST_PRECEDENCE 그렇기 때문에 @Transational 보다 먼저 @Retryable이 적용될 수 있다. @Retryable { @Transactional { Your method body } End of @Transactional } End of @Retryable 위와 같은 순서로 적용되어서 만약 내부 로직에 DB Operation이 있다면 retry시에 기존 Transaction과는 다른 Transaction으로 적용이..
[Spring] @Retryable @Transational 적용 순서spring-retry의 2.0.1 버전부터는 @EnableRetry 어노테이션에 order 설정이 추가되었다. @Retryable의 order 기본값은 Ordered.LOWEST_PRECEDENCE - 1 @Transational의 order 기본값은 Ordered.LOWEST_PRECEDENCE 그렇기 때문에 @Transational 보다 먼저 @Retryable이 적용될 수 있다. @Retryable { @Transactional { Your method body } End of @Transactional } End of @Retryable 위와 같은 순서로 적용되어서 만약 내부 로직에 DB Operation이 있다면 retry시에 기존 Transaction과는 다른 Transaction으로 적용이..
2024.03.27 -
순단과 같은 네트워크 에러가 가끔 발생하는 부분에 대한 처리를 어떻게 해야 할지 고민하는 도중 spring-retry를 발견하게 되었고, 간편하게 retry 로직을 수행할 수 있을 것 같아 학습하고 적용해 보았다. Spring project https://github.com/spring-projects/spring-retry Dependency implementation("org.springframework.retry:spring-retry") implementation("org.springframework:spring-aspects") @EnableRetry @Configuration @EnableRetry public class MyConfig { ... } @Retryable @Retryable( ..
[Spring] spring-retry 재시도 with TestCode순단과 같은 네트워크 에러가 가끔 발생하는 부분에 대한 처리를 어떻게 해야 할지 고민하는 도중 spring-retry를 발견하게 되었고, 간편하게 retry 로직을 수행할 수 있을 것 같아 학습하고 적용해 보았다. Spring project https://github.com/spring-projects/spring-retry Dependency implementation("org.springframework.retry:spring-retry") implementation("org.springframework:spring-aspects") @EnableRetry @Configuration @EnableRetry public class MyConfig { ... } @Retryable @Retryable( ..
2024.03.23