분류 전체보기
[쿠버네티스 공부] Namespace
그저 사이드 플젝에서 한 번 써보고 싶어서... 쿠버네티스를 공부를 하면서 정리하는 글입니다. Namespace 용도에 따라 컨테이너와 리소스를 구분지어 관리할 수 있는, 일종의 논리적인 그룹. (리소스를 논리적으로 구분) Namespace의 활용 사용 목적에 따라 포드, 서비스 등의 리소스들을 격리함으로써 편리하게 구분할 수 있음. ResourceQuota 오브젝트를 이용해 특정 네임스페이스에서 생성되는 포드의 자원 사용량을 제한할 수 있음. Namespace 생성 apiVersion: v1 kind: Namespace metadata: name: production Namespace 사용 apiVersion: v1 kind: Pod metadata: name: pod-1 namespace: produ..
[JPA] 영속성 전이 Cascade란?, 고아 객체 제거 OrphanRemoval란?
JPA에 대해서 헷갈렸던 개념들을 위주로 정리하는 글입니다. 자바 ORM 표준 JPA 프로그래밍 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶으면 JPA에서는 CASCADE 옵션으로 영속성 전이를 제공. 영속성 전이: 저장 CascasdeType.PERSIST @Entity public class Parent { ... @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST) private List children = new ArrayList(); ... } private static void save(EntityManager em) { Child child1 = new Child(); Child child2 = n..
[JPA] 프록시란? 지연로딩 vs 즉시 로딩란?
JPA에 대해서 헷갈렸던 개념들을 위주로 정리하는 글입니다. 프록시란? 객체는 객체 그래프를 통해 연관된 객체들을 탐색한다. 그런데 객체가 데이터베이스에 저장되어 있으므로 연관된 객체를 마음껏 탐색하기는 어렵다. JPA 구현체들은 이 문제를 해결하기 위해 프록시라는 기술을 사용한다. 프록시를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있다. 하지만 자주 함께 사용하는 객체들은 조인을 사용해서 함께 조회하는 것이 효과적이다. JPA는 즉시 로딩과 지연 로딩이라는 방법으로 둘을 모두 지원한다. (fetchJoin의 방법도 있음) 프록시 클래스는 실제 클래스를 상속 받아서 만들어져 실제 클래스와 겉 모양이 같음. 프록시 객체는 실제 ..
[JPA] 영속성 컨텍스트란?
JPA에 대해서 헷갈렸던 개념들을 위주로 정리하는 글입니다. JPA 내부 동작 원리를 알려면 영속성 컨텍스트를 알아야 함. EntityManagerFactory는 여러 스레드에서 동시에 접근해도 안전하지만, 생성하는 비용이 상당히 크다. 따라서 EntityManagerFactory에서 요청이 올 때마다 생성 비용이 거의 없는 EntityManager를 생성한다. (EntityManager는 Thread Safe하지 않아, 여러 스레드가 동시에 접근하면 동시성 문제가 발생한다 = 요청(스레드)별로 한 개 씩 할당) 이때 만들어진 EntityManager는 내부적으로 Database Connnection을 사용해서 DB를 사용한다. (참고로 EntityManager는 데이터베이스 연결이 꼭 필요한 시점까지 ..
[쿠버네티스 공부] ConfigMap, Secret
그저 사이드 플젝에서 한 번 써보고 싶어서... 쿠버네티스를 공부를 하면서 정리하는 글입니다. ConfigMap, Secret의 필요성 환경마다 설정 값을 다르게 줘야하는 경우 있다. 방법 A): 도커 이미지 내부에 설정 값 또는 설정 파일을 정적으로 저장 하는 방법 => 도커 이미지는 빌드되고 나면 불변의 상태를 가져, 상황에 따라 유연하게 변경이 불가. 방법 B) 포드를 정의하는 YAML 파일에 환경 변수를 직접 적어두는 방법 => 상황에 따라 환경 변수의 값만 다른 동일한 여러 개의 YAML이 존재할 수 있음 쿠버네티스에서는 이러한 환경마다 다른 설정 값을 위해 ConfigMap, Secret 오브젝트를 제공한다. ConfigMap 일방적인 설정 값을 담아 저장할 수 있는 쿠버네티스 오브젝트. Se..