일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 트랜잭션 쓰기 지연
- Multi Datasource
- Java
- Multi Transaction
- 종료코드
- OneToOne
- 활성프로브
- openjdk
- 다중 트랜잭션
- JPA
- MaxRAMPercentage
- JDK
- chroot exit code
- OneToMany
- SpringBoot 2.0
- ManyToOne
- 다중 데이타소스
- OracleJDK
- 변경 감지
- dirty check
- Entity
- ManyToMany
- docker
- exit code
- 디자인 패턴
- K8s
- SpringBoot
- mybatis
- Design Pattern
- 영속화
- Today
- Total
목록개발 (21)
조금 평범한 개발 이야기
개요 k8s 는 클러스트 노드에 대한 장애 내성을 가지고 있어 문제가 있다고 판단하면 컨테이너를 재시작 합니다. 문제가 있다는 것을 판단하는 기준은 다양한데 k8s worker 문제가 있어 활성 프로브 (LivenessProbe) 의 응답을 제대로 받지 못하거나 OOM 에러와 같이 컨테이너가 필요한 메모리를 충분히 확보하지 못했을때 발생 됩니다. 이렇게 다양한 기준으로 컨테이너가 종료되는데 원인을 파악하는 방법에 대해서 알아 보도록 하겠습니다. 컨테이너 상태 확인하기 컨테이너가 재시작 되면 재시작되기 직전의 종료 상태가 컨테이너 설정에 남는데 이를 먼저 확인해 봅니다. 컨텍스트에 있는 파드 리스트를 확인해 보겠습니다. (⎈ |jogeum-context:default)❯ kubectl get pods NA..
개요 mybatis 와 같은 query template 엔진이 아니라 JPA 와 같은 ORM 을 사용하다 보면 기대하는 영속화 (DB 에 값을 쓰는) 시점과 실제 영속화 시점이 달라 당황 할 수 있습니다. 이것은 JPA 가 값 (Entity) 을 관리하는 방식이 조금 차이가 있기 때문 입니다. 이 문서에서는 JPA 에서 영속화 하는 시점에 대해서 설명하고 있습니다. 영속성 컨텍스트(Persistence Context) JPA 의 영속화에 대해 알아보기 위해선 가장 먼저 영속성 컨텍스트에 대해 이해해야 합니다. 자바는 OOP 개념을 가지고 데이터를 객체처럼 관리 하고 데이터베이스(RDB) 는 관계형으로 데이터를 관리 합니다. 그래서 이 간극을 매우기 위해 ORM 이라는 개념이 등장 했습니다. ORM 에서는..
개요 k8s 는 워커의 자원 (cpu, memory) 을 공유하기 때문에 리소스 제한을 통해 파드가 사용할 자원을 미리 정의 합니다. 이는 워커에 있는 파드들이 요구하는 자원이 워커의 자원을 넘어서는 오버커밋 상태가 되었을때 특정 파드가 종료되거나 이상 동작되는 것을 막기 위함 입니다. resources: requests: cpu: 1 memory: 1Gi limits: cpu: 1 memory: 1Gi SPRING BOOT 으로 구성되었고 xms, xmx 메모리 설정이 아래와 같이 run.sh 에 1g 로 설정된 이미지가 있다고 가정해 보겠습니다. # Dockerfile ENTRYPOINT ["./run.sh"] #!/usr/bin/env bash exec java \ -jar /usr/local/se..
리소스 오버커밋 k8s에 파드를 띄울때 리소스 제한을 설정하지 않으면 파드는 워커 vm 에 있는 cpu, memory 를 서로 공유 하게 됩니다. 즉 파드 하나가 worker 의 모든 자원을 사용할 수도 있다는 이야기 입니다. 일반적인 경우에는 문제가 없으나 일순간 파드들이 동시에 많은 cpu, memory 자원을 사용하려고 할때 문제가 발생 됩니다. CPU CPU 의 경우 워커 vm 이 가지는 최대 Core 를 넘어서는 요청이 들어오면 오버커밋 상황이 되며 기대하는 응답 보다 느리게 동작이 됩니다. 이 경우에는 초과되는 요청을 한 파드가 퇴거(evict) 대상으로 지정되지 않으며 단지 워커가 전체적으로 느리게 동작이 될 뿐입니다. MEMORY 메모리의 경우 이와 다르게 최대 메모리 를 넘어서는 오버커밋..
시작하기 자바를 주 프로그래밍 언어로 선택한 개발자들이 웹 프로그래밍을 하기 위해선 자연스럽게 스프링 프레임웍 (Spring Framework) 을 사용 합니다. 프레임웍(Framework) 이란 레고와 같이 미리 만들어진 개별 컴포넌트를 내가 원하는 형태로 가공해 프러덕(Product) 을 만드는걸 도와 주는 일종의 뼈대와 같은 기능을 제공 합니다. 스프링 프레임웍은 2003년에 최초에 발표되고 나서 웹 프로그래밍 관련해 한번도 이 기본 뼈대가 변경되지 않았고 Spring MVC 를 기반으로 하는 방법만 제공 되었습니다. 하지만 리액티브(Reactive) 프로그래밍 방식을 지원하기 위해 이 구조가 처음으로 변경이 됩니다. 이제 스프링 프레임웍은 고전적인 형태의 Spring MVC 와 리액티브 프로그래밍..
쿠버네티스 준비 대시보드 설치 계정과 권한 계정 생성 계정 토큰 조회 대시보드 로그인 대시보드 삭제 쿠버네티스 (kubernetes) 쿠버네티스는 컨테이너화 되어 있는 서비스를 배포하고 손쉽게 스케일링 및 관리를 할 수 있는 오케스트레이션 도구 입니다. 쿠버네티스는 모든 명령은 커멘드(kubectl) 기반으로 이루어지지만 쿠버네티스에 구성된 서비스를 한눈에 확인하기 쉽게 하기 위해 gui 도구인 대시보드 (dashboard)를 별도로 설치해야 합니다. 준비 테스트 환경은 mac에서 작업이 진행되기 때문에 먼저 대시보드를 사용하기 전에 docker desktop for mac 이 설치되어 있어야 합니다. docker desktop 다운로드 https://hub.docker.com/editions/commu..
준비 CustomText CustomTextType CustomImage 이미지 변환 소스코드 준비 문득 블로그를 하다가 보니 글 자주 작성하진 않아 리스트가 휑해 보이는 것도 있겠지만 필연적으로 기술 블로그이다 보니 이미지가 없어 왠지 글이 허전해 보인다는 생각이 들었습니다. 그래서 머라도 채워 넣을까 하는 생각에 TEXT를 간단하게 IMAGE로 변환해 주는 사이트를 찾다가 그냥 귀찮아서 로그를 만들기 위한 용도로 코드를 작성해 봤습니다. 순전히 개인적으로 사용할 목적으로 만들었기 때문에 실제 사용할 때 부족한 부분이 발생할 수 있다는 점 염두해 주시길 바랍니다. 먼저 프로젝트에서 lombok 라이브러리를 사용할 예정이니 다운로드 후 프로젝트 환경설정에 추가해 줘야 합니다. lombok download..
개요 Object와 MSA 메시지 주도 MSA 메시지 브로커 RabbitMQ vs Apache Kafka 개요 이번에는 Spring Cloud Stream의 기능과 사용법에 대해서 설명하도록 하겠습니다. Spring Cloud Stream 은 RabbitMQ, Apache Kafka 등과 같은 메시지 브로커와 연결할 수 있는 공통 기능을 제공해 줍니다. 이것은 각기 다른 메시지 브로커들을 하나의 인터페이스로 사용할 수 있게끔 추상화시킨 라이브러리라고 할 수 있습니다. 이 때문에 어떤 종류의 메시지 브로커를 사용하는지와 상관없이 항상 동일한 소스 코드를 이용해 동일한 메시지 전송을 구현할 수 있게 해 줍니다. Spring Cloud Stream 은 메시지 브로커의 종류와 상관없이 동일한 인터페이스로 메시지..