Skip to main content

Docker network

· 10 min read
Haril Song
Owner, Software Engineer at 42dot

Overview

Docker 컨테이너는 격리된 환경에서 돌아가기 때문에 기본적으로 다른 컨테이너와 통신이 불가능하다. 하지만 여러개의 컨테이너를 하나의 Docker 네트워크에 연결시키면 서로 통신이 가능해진다. 이번에는 서로 다른 컨테이너들간에 통신을 위해서 네트워크를 어떻게 구성해야하는지 알아본다.

Docker volume

· 6 min read
Haril Song
Owner, Software Engineer at 42dot

Overview

도커 컨테이너는 기본적으로 완전 격리상태이기 때문에 기본적으로는 컨테이너 내부의 데이터를 호스트 머신에서 사용할 수 없다. 이 말은 곧, 컨테이너의 라이프 사이클에 내부 데이터가 완전히 의존하는 상태라는 것이다. 좀 더 쉽게 말하면 컨테이너가 사라지는 순간 데이터도 같이 사라지게 된다.

그럼 로그나 데이터베이스의 중요한 정보 등 컨테이너의 데이터를 컨테이너의 라이프사이클과는 관계없이 영구적으로 보관해야할 필요가 있는 경우에는 어떻게 해야할까?

바로 이럴 때 volume 을 사용할 수 있다.

[Jacoco] 멀티 모듈의 Jacoco report 를 하나로 합치기

· 3 min read
Haril Song
Owner, Software Engineer at 42dot

Overview

gradle 7.4 부터 여러 jacoco test report 를 집계하여 통합적으로 볼 수 있는 기능이 추가되었다. 과거에는 여러 모듈에 걸친 테스트의 결과를 하나의 파일로 확인하기가 무척 어려웠지만, 이제는 매우 편리하게 리포트를 하나로 합칠 수 있게 되었다.

Why Docker?

· 11 min read
Haril Song
Owner, Software Engineer at 42dot
info

이 글은 사내 정보 공유를 위해 작성되었기 때문에 Java 개발환경을 기준으로 설명합니다.

Docker 는 무엇일까?

Docker : Linux 컨테이너를 만들고 사용할 수 있도록 하는 컨테이너화 기술, 그리고 그 기술을 지원하는 가장 큰 회사의 이름이자 오픈소스 프로젝트의 이름

deploy-history 누구나 docker 에 대해 검색하면 한번쯤 봤을 그 그림

2013년에 등장한 돜는 인프라 세계를 컨테이너 세상으로 바꿔버렸다. 수많은 애플리케이션이 컨테이너로 배포하고 도커파일을 만들어 이미지를 빌드하고 컨테이너를 배포하는게 흔한 개발 프로세스가 되었다. 2019년 DockerCon 발표에선 무려 1052억번의 컨테이너 image pull 이 발생했다고 한다.

Docker 를 사용하면 컨테이너를 매우 가벼운 모듈식 가상머신처럼 다룰 수 있다. 또한 컨테이너를 구축, 배포, 복사하고 한 환경에서 다른 환경으로 이동하는 등 유연하게 사용할 수 있어서 애플리케이션을 클라우드에 최적화하도록 지원한다.

[Kubernetes] 쿠버네티스 훑어보기

· 6 min read
Haril Song
Owner, Software Engineer at 42dot

What is kubernetes?

쿠버네티스는 다음을 기능들을 제공한다.

  • 서비스 디스커버리와 로드 밸런싱
  • 스토리지 오케스트레이션
  • 자동화된 롤아웃과 롤백
  • 자동화된 빈 패킹
  • 자동화된 복구
  • 시크릿과 구성 관리

자세한 정보는 공식 문서에서 잘 설명해주니 공식 문서를 참조하자.

쿠버네티스를 실행할 수 있는 방법에는 여러가지가 있지만 공식 사이트에서는 minikube 를 사용하여 진행한다. 이 글에서는 Docker desktop 을 사용하여 쿠버네티스를 활용하는 방법을 정리하고 있다. minikube 를 사용하는 방법을 알고 싶다면, 공식 사이트를 참고하시면 되겠다.

minikube 는 일단 간단하게 짚어보고 넘어가자.

[Java] First collection(일급 컬렉션)을 더욱 Collection 답게 - iterable

· 4 min read
Haril Song
Owner, Software Engineer at 42dot

Overview

// Iterable 을 구현하고 있는 java Collection.
public interface Collection<E> extends Iterable<E>

일급 컬렉션은 객체를 다루는데에 있어서 굉장히 유용한 방법 중 하나다. 하지만 일급 컬렉션이라는 이름이 무색하게도 Collectionfield 로 가지고 있을 뿐 실제 Collection 은 아니기 때문에, Collection 이 제공하는 다양한 method 들을 사용할 수는 없다. 이 글에선 Iterable 을 활용해서 일급 컬렉션을 진짜 Collection 처럼 쓸 수 있는 방법을 소개해본다.

간단한 예제를 작성해보자.

우아한 HTTP CLI, HTTPie

· 2 min read
Haril Song
Owner, Software Engineer at 42dot

Overview

curl 명령어를 대체할 수 있는 CLI tool

평소 Linux 를 자주 사용하는 개발자라면 curl 명령어를 쓸 일이 많다. 서버에서 외부 API 요청을 보내려면 필수적인 명령어인데, 출력 결과의 가독성이 좋지 않다는 단점이 있었다. HTTPie 는 이런 단점을 해소해줄 수 있는 재밌는 툴이기에 소개해보려 한다.

getter/setter 에 대한 사실과 오해

· 6 min read
Haril Song
Owner, Software Engineer at 42dot

구글에 getter/setter 에 대해 검색해보면 정말 많은 게시글이 나온다. 대부분 getter/setter 를 사용하는 이유에 대해서 작성되어 있고 그 이유 중 하나로 캡슐화, 정보 은닉 같은 키워드를 중심으로 설명하고 있다.

필드 변수를 private 로 선언하여 외부에서 접근을 막고 getter/setter 만 공개하여 캡슐화한다는 설명이 90%는 되는 것 같다.

하지만 getter/setter 를 쓰면 진짜로 캡슐화가 될까?

결론부터 말하자면 getter/setter 는 캡슐화를 전혀 달성할 수 없다. 캡슐화를 하고 싶다면 getter, setter 는 쓰지 말아야한다는 것이다. 이걸 이해하기 위해서는 먼저 캡슐화에 대해 정확히 이해할 필요가 있다.

'sitemap.xml 을 찾을 수 없습니다' 해결하기

· One min read
Haril Song
Owner, Software Engineer at 42dot

블로그 글이 구글에 노출될 수 있도록 sitemap.xml 을 등록했으나, '사이트맵을 찾을 수 없음' 이라는 에러 메세지만 휑하게 나왔었는데 드디어 해결하게 되어 제가 사용한 방법을 공유합니다.

이 방법이 모든 케이스를 해결해주진 못하겠지만, 시도해볼 가치는 있는 것 같습니다.

아래 명령어를 실행해줍니다.

curl https://www.google.com/ping\?sitemap\={제출하고자 하는 sitemap 의 경로}

그리고 다시 search console 에 접속해보면...!