전체 글

Actions lead thoughts.
· Java
JDBC DBCP라는 것에 대해 알아보기 전에 먼저 JDBC에 대해 알아보자. JDBC는 Java DataBase Connectivity의 약자로 자바에서 데이터베이스에 연결하기 위해 사용되는 인터페이스이다. Oracle, MySQL, Postgresql 등 여러 데이터베이스에서는 JDBC를 사용하기 위해 필요한 각각의 Driver를 제공하는데 우리는 이것을 이용해 DB에 접속할 수 있다. JDBC를 이용해 DB에 접속하는 순서는 다음과 같다. DB접속을 위해 JDBC 드라이버 로드 getConnection 메소드로 DB 커넥션 객체를 얻는다. 쿼리 수행을 위해 PreparedStatement 객체 생성 excuteQuery 를 실행해 쿼리 실행 결과를 받는다. 이때 DB 연결마다 1번과 2번의 과정(D..
브라우저에서 google.com을 주소에 입력하고 접속하면 어떤 일이 벌어질까? 주소창에 http://www.google.com이라고 작성하는 것은 구글 웹서버의 80port에 HTTP로 작성된 request 메시지를 보내는 것을 의미한다. (설명을 쉽게 하기 위해 HTTPS가 아닌 HTTP로 설명) 이 request 메시지를 구글 웹서버로 보내기 위해 각 계층에 필요한 정보를 포함한 패킷을 만들어야 한다. 여기서 계층은 Application Layer(HTTP), Transport Layer(TCP), Internet Layer(IP), Network Access Layer(Ethernet) 프로토콜을 사용한다고 가정한다. 요즘은 보통 TCP와 IP 프로토콜을 사용하기 때문에 이를 TCP/IP라고 부른..
Blocking과 Non-Blocking, Sync와 Async는 비슷한 부분이 많지만 어떤 것에 관심사를 두고 있는지에 따라 구분되는 개념이기 때문에 헷갈릴 수 있고 구분하기 어려운 개념 중 하나이다. 그래서 각각에 대한 개념과 차이점을 알아보며 정리를 해보겠다. Blocking & Non-Blocking Blocking과 Non-Blocking의 관심사는 제어권의 반환에 있다. 즉 제어할 수 없는 대상을 어떻게 처리하는가? 에 관한 문제이다. 먼저 그림을 살펴보자 Blocking 호출된 스레드가 자신의 작업을 모두 마칠 때까지 호출한 스레드에게 제어권을 넘겨주지 않고 대기하게 만드는 것을 말한다. Non-Blocking 호출된 스레드가 작업을 마치지 않더라도 호출한 스레드에게 제어권을 넘겨주어 호출한..
· Java
자바 8버전 이후부터 인터페이스에 기본 메소드(default method)와 스태틱 메소드(static method)를 사용할 수 있다. 기본 메소드(Default Method) 여러 구현체들이 한 인터페이스를 구현하고 있을 때, 인터페이스에 어떤 기능을 추가하기 위해서는 그것을 구현한 구현체들 모두에서 기능에 대해 정의해주어야 한다. 이런 불편함 때문에 자바 8 버전 이후부터 인터페이스 내부에 default method를 구현할 수 있게 됐다. (때문에 함수형 인터페이스(Functional Interface)에 여러 개의 default method와 static method가 있어도 추상 메소드가 하나인 경우 함수형 인터페이스로 본다. 즉, 추상 메서드의 개수가 기준이 된다.) 기본 메소드란 인터페이스..
· Java
Lambda Capturing 람다(Lambda)의 바디에서는 파라미터가 아닌 바디 외부에 있는 변수를 참조할 수 있다. 유사하게 로컬 클래스, 익명 클래스에서도 참조가 가능하다. public class VariableCapture { private void run() { // 로컬 클래스, 익명 클래스, 람다에서 이 변수를 참조하면 effective final로 변경 int baseNumber = 10; // 람다 IntConsumer lambda = (i) -> System.out.println(i + baseNumber); // i + 10 // 로컬 클래스 class LocalClass { void printBaseNumber() { System.out.println(baseNumber); // ..
· Java
Java에는 Checked Exception과 Unchecked Exception(Runtime Exception)이 있다. Exception 처리 예외 복구 예외 처리 회피 예외 전환 예외 복구 예외 상황 파악 후 문제를 해결하는 방법 예외를 catch해서 일정 시간, 조건만큼 대기 후 다시 재시도 반복 최대 재시도 횟수를 넘길 경우 예외 발생 예외 처리 회피 예외 처리를 직접 담당하지 않고 호출한 쪽으로 throws하는 방법 보통의 경우 예외를 그냥 던지는 것은 무책임한 방법일 수 있다. (로그라도 출력하는 것을 권장) 예외 전환 예외 회피와 비슷하게 throws를 하지만, 적절한 예외로 전환하여 던지는 방식 더 명확한 의미로 전달하기 위해 전환 단순하게 만들기 위해 wrap할 수도 있다. Check..
· Kubernetes
Authentication K8S로 접근하는 방법 X509 Client Certs Cluster에는 접근할 때 필요한 정보(CA crt, Client crt, Client key)가 들어있는 kubeconfig라는 파일이 존재 외부에서 Client Key와 Client crt를 가지고 https로 API Server에 접근이 가능 kubectl은 kubeconfig를 복사하기 때문에 accept-hosts 로 proxy를 개방하면 외부에서 proxy port로 http 접근이 가능 kubectl 외부의 kubectl에서 각 cluster의 kubeconfig 파일을 갖고 있다면 원하는 cluster에 접근이 가능 $ kubectl config user-context context-A kubeconfig ..
· Kubernetes
Controllers ReplicaSet, Replication Controller ReplicaSet, Replication Controller Template Pod를 재생성할 때, 어떤 Pod를 재생성할 지에 대한 template Template을 update한 후 pod를 재생성하면 업데이트 된 버전으로 재생성함 기존에 연결된 Pod들은 자동으로 변경되지 않음 Template에 Pod dongb.tistory.com Deployment Deployment Update 방식 Recreate 기존 Pod들을 전체 삭제하고 새로운 Pod들을 만든 후 트래픽을 연결하는 방식 특징 삭제 후 새로운 버전의 Pod생성까지 시간만큼 Down Time 발생하는 단점 방법 기존 버전의 Pod를 삭 dongb.tis..
· Kubernetes
HPA (Horizontal Pod AutoScaler) HPA를 Controller에 연결하면 HPA가 해당 Controller의 Pod 자원 사용량을 체크 임계치 이상 자원을 사용하면 Controller의 replicas를 늘려 Pod을 scale out 시킴 적절한 조건 기동이 빠르게 되는 App에 적용해야 함 Stateless App에 적용해야 함 동작 원리 Node마다 존재하는 Resource Estimator인 cAdvisor가 Container 리소스 사용량을 체크하고 kubelet은 cAdvisor로부터 리소스 정보를 수집 metrics server(Pod)를 설치하면 각 Node의 kubelet으로부터 리소스 사용량을 종합하여 수집 metrics server는 control plane의 ..
· Kubernetes
사용 예시 Service LoadBalancing Pod마다 Service를 연결한 후 path에 따라 트래픽을 연결시켜 줌 Canary Upgrade 업그레이드 할 Pod에 별도의 Service를 연결시킨 후 설정한 비율의 트래픽을 업그레이드 할 Pod으로 연결시킬 수 있음 Ingress Controller Ingress Controller라고 부르는 Ingress를 구현할 별도의 플러그인을 설치해야 함 대표적인 예시로 Nginx, Kong과 같은 플러그인이 존재 플러인을 설치하면 namespace가 생성되고 그 위에 Ingress 구현체 역할을 하는 Pod이 생성됨 (Deployment가 생성되어 관리 및 생성) 구현체 Pod의 Ingress rule에 따라 Service 및 Pod에 트래픽을 전달시..
dongb
Now or Never