전체 글
-
[Database] IndexCS/Database 2022. 1. 14. 22:55
Index란 우리가 실생활에서 자주 접해볼 수 있는 단어이다. 우리는 책에서 원하는 내용을 찾기 위해서 책의 처음부터 끝까지 원하는 내용을 찾아보는 것이 아니라 목차나 인덱스에서 원하는 내용을 먼저 찾은 뒤 해당 내용이 있는 페이지를 찾아간다. 이와 같은 방식으로 데이터베이스에서도 인덱스를 사용한다. Database에서 Index 란 ❔❔ 데이터베이스에서 인덱스란 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 데이터베이스에서 데이터 조회 요청을 하면, DB 서버 프로세스는 메모리(DB 버퍼 캐시)를 먼저 확인한다. 메모리에는 자주 사용되는 테이블이 캐싱되어 있는데, 메모리에 원하는 데이터가 없는 경우 디스크에서 데이터 파일을 복사해온 후 조회한 데이터를 찾아 반환한다. 이때 인덱스를 사..
-
[Kubernetes] ObjectsDevOps/Kubernetes 2022. 1. 11. 19:38
Kubernetes Objects Pod 가장 작은 배포 단위 쿠버네티스는 컨테이너를 직접 관리하지 않고 Pod으로 감싸서 관리함 전체 클러스터에서 Pod 별로 고유한 IP 할당 하나의 Pod 안에 여러 개의 컨테이너가 속할 수 있음 ReplicaSet 여러 개의 Pod를 관리 새로운 Pod은 Template을 참고하여 생성 새로운 Pod을 생성하거나 기존의 Pod을 제거하여 원하는 Replica 수를 유지함 Deployment 배포 버전 관리 무중단 배포를 위해 내부적으로 ReplicaSet을 이용 Service ClusterIP 클러스터 내부에서 사용하는 프록시 → 클러스터 내부의 Pod들을 로드밸런서하는 서비스 Pod은 동적이지만, 서비스는 고유 IP를 가짐 Pod이 업데이트될 때, 자신의 IP를 ..
-
[Kubernetes] ArchitectureDevOps/Kubernetes 2022. 1. 11. 17:14
Desired State Desired State는 쿠버네티스의 가장 중요한 핵심이다. 쿠버네티스는 원하는 상태를 계속 체크하고 차이점이 있다면 자동으로 조치를 한다. 여기서 원하는 상태(Desired State)는 관리자가 바라는 환경을 의미하고, 좀 더 구체적으로 몇 개의 웹 서버를 구동시킬 것인지, 몇번 포트로 서비스할 것인지 등에 대한 정보를 말한다. Desired State를 설정하는 방법 쿠버네티스에서는 YAML 또는 JSON 파일을 사용해 원하는 상태(Desired State)에 대해 명시적으로 설정할 수 있다. 쿠버네티스는 작성 파일에 정의된 사양(spec)에 따라 컨테이너의 라이프사이클을 관리한다. Architecture 쿠버네티스의 아키텍처는 크게 마스터 노드(Master Node)와 ..
-
[Kubernetes] Container OrchestrationDevOps/Kubernetes 2022. 1. 9. 17:57
Background 서버를 관리한다는 것은 ❔❔ 서버를 관리한다는 것은 서버 상태를 관리한다는 말이다. 즉, 서버 관리자가 서버에 문제가 없도록, 서버가 죽지 않도록 관리하는 것이다. 서버가 언제 어떠한 이유로 죽을지 모르기 때문에 서버 관리자가 서버 상태를 모두 관리하는 것은 굉장히 어려운 일이다. 그래서 서버 관리를 간편하게 하기 위한 다양한 방법들이 등장했다. 문서화 서버의 현재 상태, 리소스 사용량, 프로그램 설치 방법 등을 문서화함으로써 서버를 관리할 수 있다. 하지만 문서를 아무리 잘 만들었다고 해도 업데이트가 안 될 수도 있고, OS나 버전 등 환경이 바뀌면 문서가 무용지물될 수 있다. 서버 관리 도구 문서화의 관리가 힘들다는 단점을 보완하기 위해 CHEF, Puppet, Ansible과 같..
-
[Spring Data JPA] Cascade와 OrphanRemovalSpring/Spring Data JPA 2022. 1. 5. 10:51
JPA를 사용하여 Entity 클래스를 설계하다보면 @OneToMany나 @ManyToOne와 같은 연관 관계 매핑을 주로 사용하게 된다. 이때 cascade 옵션을 사용하여 매핑된 Entity를 함께 관리할 수 있다. Entity Cascade Entity cascade는 Entity의 상태 변화를 전파시키는 옵션이다. 매핑되어 있는 Entity에 대해 어느 한 쪽 Entity의 상태가 변경되었을 때 그에 따른 변화를 바인딩된 Entity에게 전파하는 것을 말한다. 다음과 같이 Post Entity와 Comment Entity가 OneToMany 연관 관계를 가진다고 가정해보자. @Entity @ToString(exclude = "commentList") @Getter public class Post ..
-
[Java] Mutable과 ImmutableJava 2022. 1. 4. 23:25
자바의 객체는 기본적으로 힙 영역에 할당되고 스택 영역에 참조값을 갖는 참조 타입 변수를 통해 데이터에 접근한다. 이러한 객체는 Mutable(가변) 객체와 Immutable(불변) 객체로 나눌 수 있다. Immutable Object 불변 객체는 데이터 변경이 불가능한 객체를 말한다. 단순하게 생각하면 final 키워드처럼 초기화 이후에 값을 변경할 수 없다고 생각할 수 있다. 하지만 불변 객체는 객체의 데이터 수정이 아예 불가능한 것이 아니라 힙 영역에 저장된 값을 수정할 수 없는 것이다. 불변 객체의 종류로는 String, Boolean, Integer, Float, Long, Double 등이 있다. 이는 String을 제외하곤 원시 타입의 래퍼 타입이다. 어 ❔ 저 타입의 객체는 수정할 수 있는..
-
[Java] Singleton PatternJava 2022. 1. 3. 23:37
Java에서 Singleton 패턴이란 ❔ 싱글톤 패턴은 소프트웨어 디자인 패턴 중에 하나로, 하나의 객체만을 생성해 이후에 호출된 곳에서는 생성된 객체를 반환하여 프로그램 전반에서 하나의 인스턴스만을 사용하게 하는 디자인 패턴을 말한다. public class Singleton { // Instance private static Singleton instance = new Singleton(); // private construct private Singleton() {} public static Singleton getInstance() { return instance; } } 위 코드는 싱글톤 패턴을 적용한 예제이다. 객체를 static 변수로 설정하여 인스턴스화하지 않고 접근 제한자를 privat..
-
[Java] Serialization과 DeserializationJava 2022. 1. 3. 21:58
자바에서 데이터(객체)를 외부로 전송하려면 어떻게 해야할까 ❔❔ 객체를 저장/복원하거나 네트워크 상으로 전송하기 위해서는 객체의 내용을 I/O가 처리할 수 있는 형태로 변환해야 한다. 이를 할 수 있게 해주는 것이 직렬화(Serialization)과 역직렬화(Desirialization)이다. 직렬화(Serialization) 직렬화는 객체를 외부로 저장/복원하거나 네트워크 상으로 전송할 수 있도록 바이트 형태로 변환하는 기술을 말한다. 역직렬화(Deserialization) 역직렬화는 직렬화를 통해 변환된 바이트 형태를 다시 원상태인 객체로 변환시키는 기술을 말한다. 직렬화의 특징 객체의 데이터는 파일로 변환되어 저장되어 있기 때문에 프로그램이 종료되어도 언제든지 객체로 변환할 수 있으며, 외부로 보내..