개발

[Docker] 4. 컨테이너 로깅

이번 장에서는 컨테이너에서 로깅환경에 대해 알아보겠습니다. 서비스 운영에서 로그 데이터 관리는 중요합니다. 컨테이너 환경에서도 중요하다는건 바뀌지 않습니다. 특히 도커와 같은 클러스터링 환경에서는 로그가 컨테이너별로 다르게 쌓이기 때문에 잘 관리하는 방법이 필요합니다. 도커는 컨테이너의 표준 출력(StdOut)과 에러 로그(StdErr)를 별도의 메타데이터 파일로 저장하여 이를 확인할 수 있게 해줍니다. 총 3가지의 로깅 방식이 있습니다. 1. json-file 로깅 docker run -d --name mysql \ -e MYSQL_ROOT_PASSWORD=1234 \ mysql:5.7 다음과 같이 실행했을 경우 정상적으로 컨테이너가 작동하지지만, 환경변수 없이 실행한다면 어떻게 될까요? -e 부분 제..

2020.09.12 게시됨

개발

[Docker] 2. 도커 볼륨

도커 볼륨이 무엇인지 제대로 이해하기 위해서는 먼저 Docker의 파일 시스템의 작동 방식을 정리 할 필요가 있습니다. Docker Image는 일련의 Read Only Layer 로 구성되어있습니다. 컨테이너가 시작될 때, Read Only Layer 맨 위에 Read Write Layer를 추가합니다. 실행중인 컨테이너가 기존 파일을 수정하는 경우, 파일은 Read Only Layer에서 맨 위의 Read Write Layer로 복사됩니다. 도커에서 이런 Read-Only + Read-Write Layer의 조합을 Union File System이라고 부릅니다. Read Only Layer 는 기존 파일이 수정될 경우 파일을 숨기지만, 삭제하지 않습니다. (위의 file 2) 이후 컨테이너가 삭제되면..

2020.09.06 게시됨

개발

[Docker] 1. Docker 개념 및 소개

[책정리] 최근 스터디에서 k8s를 스터디 하게 되면서 평소에 사용하던 도커를 먼저 정리해보게 되었습니다. 도커란 도커는 컨테이너 기반의 오픈소스 가상화 컨테이너입니다. 기존의 VM 방식은 guest OS가 host OS의 방식을 할당받아 사용하는 방식과 다르게 Host OS를 공유하며 실행되기 때문에 오버헤드가 적습니다. 또한 도커 이미지를 통해 도커가 설치되어있는 어떤 환경에서도 작동할 수 있는 immutable infrastructure 구성할 수 있습니다. 도커와 도커 이전의 가상화 방식 차이 도커 이전의 가상화 기술은 크게 Type1 그리고 Type2 로 구분됩니다. - Type 1 가상화 전가상화와 반가상화를 합쳐서 Type1 이라고 부릅니다. 전가상화는 말 그대로 하드웨어를 완정히 가상화 하..

2020.08.30 게시됨

개발/Java

[GC] 1. JVM 가비지 컬랙터란?

자바는 메모리를 자동으로 정리해주는 managed 언어이기 때문에 이걸 해주는 Garbage Colletor 가 서버 개발자 면접으로 자주 등장합니다. 개인적으로는 싫어하는 질문이지만 면접에서 의외로 자주 등장해서, 자바를 사용하는 개발자라면 깊게는 아니더라도 반드시 알아야한다고 생각하기 때문에 정리했습니다. (사실 알아도 까먹는 일이 빈번함) [ 1 ]. Introduction 프로그래머가 저수준의 세부사항을 일일히 신경쓰지 않는 댓가로, 저수준에 대한 제어권을 포기하는것이 자바(JVM)의 사상입니다. 그렇기 때문에 우리는 개발자로써 'JVM 자동으로 해주는데요?' 라는 추상화 레이어를 벗겨내고 JVM이 어떻게 동작해야하는 알아야할 필요가 있습니다. Garbage 란 먼저 가비지 컬렉터에서 회수되는 대..

2020.08.19 게시됨

PS/알고리즘

[알고리즘] GCD & LCM

최대 공약수 (Greatest Common Divisor)와 최소 공배수(least common multiple)를 구한다. 알고리즘으로는 유클리드 호재법을 사용하여 해결합니다. 큰 수를 작은수로 나눈 나머지를 0이 될때 까지 계속 나눕니다. 글로 적으니 복잡하네요. 아래의 코드를 보면 GCD 85를 51로 나눕니다. -> 나머지 34 51을 34으로 나눕니다. -> 나머지 17 34를 17로 나눕니다. -> 나머지 0 => 최대 공약수 : 17 LCM 두 수의 곱을 최대 공약수로 나눕니다. => 85 * 51 / 17 = 255 class Solution { @Test public void getGCD_LCD() { // given int x = 85; int y = 51; // when long gc..

2020.08.17 게시됨

개발/Spring

[Spring] Field Injection은 왜 나쁜가?

1. 도입 대부분 Intellij에서 다음과 같은 경고 때문에 이 글을 보고 있을 확률이 높습니다. 왜 이럴까요? 또한, 자세히 보면 인텔리제이는 다음과 같이 설명합니다. 2. 의존성 주입의 종류 스프링 공식 레퍼런스에서는 Constructor Injection과 Setter Injection 두 가지 만을 소개하고 있지만, 실제로 의존성 주입은 생성자 기반 : Constructor-based dependency injection 세터 기반 : Setter-based dependency injection 필드 기반 : Field-based dependency injection 와 같이 3가지로 구분되며, 보통 마지막 Field Injection을 제일 많이 사용합니다. 2-1. Constructor In..

2020.08.16 게시됨