본문 바로가기

전체 글112

Super Invention 프로젝트 소개 프로젝트 기획과 팀원 모집 회사에 입사를 한 후 느낀 것은 사용하고 싶은 기술을 모두 사용하기는 어렵다는 점입니다. 기존 프로젝트의 기술 스택을 따라가야 하기도 하고, 추가적으로 적용하는 기술과 기존 기술의 호환성 문제도 따져보아야 하며 적용한 코드를 나만 관리하는 것이 아니기 때문입니다. 그렇기 때문에 신 기술을 익히고 적용하는 최고의 방법은 개인적인 사이드 프로젝트를 통해 개발하고, 적용하며 시행착오를 겪어보는 것이라 생각합니다. 이번 프로젝트는 '쓰고 싶은 기술을 다 써보자'라는 마음으로 시작한 프로젝트입니다. 평소에 사용해보고 싶었지만 사용하지 못했던 기술, 배우고 싶었던 기술, 실전에서 쓰기 전 연습이 필요한 기술들을 이 프로젝트를 통해 익히고자 하는 원대한 꿈(?)을 꾸며 시작하였습니다. 회사.. 2020. 9. 29.
도커 컨테이너의 로그 조회 및 저장 도커의 로깅 도커 컨테이너 내부에서 발생하는 로그는 다양한 형태로 조회하고 저장할 수 있습니다. StdIn, StdOut, StdErr 등의 표준 입출력을 Json File로 저장할 수 있으며 다른 서버에 로그 파일을 저장하기도 합니다. 또한 파일로 저장하지 않고 데이터베이스인 ElasticSearch 또는 MongoDB와 같은 데이터베이스에 저장할 수도 있습니다. 도커에서는 로깅 드라이버를 사용하여 로그를 남기도록 설정하고, 이 로깅 드라이버를 교체함으로써 다양한 로그 저장기법을 지원합니다. docker logs 도커에서 기본으로 사용하는 json-file 로깅 드라이버와 journald 로깅 드라이버를 사용한다면 도커의 명령어중 docker logs 명령어를 사용할 수 있습니다. docker logs.. 2020. 9. 13.
도커 네트워크의 구조 도커 컨테이너는 호스트 내부에 격리된 어플리케이션 환경을 생성합니다. 각각의 어플리케이션은 네트워크를통해 내/외부와 통신합니다. 도커 엔진은 이 컨테이너들이 호스트의 네트워크를 사용할 수 있도록 컨테이너를 생성할 때 내부IP를 할당합니다. 내부 IP는 도커 내부에서만 사용하는 IP이므로 도커 엔진은 컨테이너가 외부와 통신하기 위해 호스트에 컨테이너를 위한 가상 네트워크 인터페이스를 생성합니다. veth, eth0 도커 엔진이 호스트에 생성한 가상 네트워크 인터페이스는 실제로 외부와 통신할 수 있으며, veth로 시작하는 이름을 가지고 있습니다. 컨테이너별로 생성된 veth 인터페이스는 컨테이너 내부 eth0 인터페이스와 연결됩니다. 컨테이너에 eth0 인터페이스가 생성되는 것은 아래와 같이 확인할 수 있.. 2020. 9. 6.
도커 볼륨의 종류 도커 볼륨을 왜 사용해야 할까? 도커 컨테이너는 컨테이너마다 기본적으로 독자적인 저장소를 가지고 있습니다. 하나의 이미지로 여러 컨테이너를 만든다면 해당 컨테이너마다 독립적인 볼륨이 할당되고, 컨테이너가 삭제되면 해당 볼륨 또한 삭제됩니다. 이러한 구조에서 오는 이슈가 하나 있는데, 컨테이너 내부에 저장되는 데이터는 컨테이너가 삭제되었을 경우 같이 삭제된다는 점입니다. 예를 들어 제가 도커 컨테이너 내부에 제 블로그 글을 txt 파일 형식으로 저장해두었다고 가정해보겠습니다. 열심히 만든 제 글이 이 컨테이너에 존재하고 있습니다. 컨테이너 내부 볼륨에 제가 작성한 파일이 저장되어 있습니다. 컨테이너가 삭제되는 순간 제 파일도 함께 삭제될 것입니다. 이처럼 컨테이너 내부에 중요한 데이터를 두는 것은 그다지 .. 2020. 9. 6.
도커와 가상머신, 그리고 OS 개요 도커와 가상 머신이란? 도커 컨테이너와 가상 머신은 애플리케이션에 독립적인 리소스를 할당하고, 격리된 프로세스를 실행할 수 있다는 장점이 있어서 널리 쓰이는 기술입니다. 가상머신과 컨테이너 모두 어떤 서버 환경에서 구동하더라도 독립적인 리소스로 구동되기 때문에 서버에 대한 모든 종속성을 제거할 수 있다는 장점이 있습니다. 한번 구성해놓은 환경으로 다른 서버에서 구동시키더라도 이동한 서버에서 다시 환경 세팅을 해주지 않아도 된다는 편리함을 가지고 있습니다. 가상머신 가상 머신은 Host OS위에 하이퍼바이저를 이용하여 물리적인 장치를 가상화합니다. 가상화된 머신에는 그에 맞는 OS를 설치해주어야 하며 이때문에 아주 작은 애플리케이션을 가상화하더라도 OS로 인해 큰 용량을 가지고 있는 무거운 가상 머신.. 2020. 8. 29.
Kotlin 기본 - 변수와 자료형 Program entry point 만들기 코틀린에서 프로그램의 시작점인 main 함수를 만들기 위해서는 아래와 같이 선언할 수 있습니다. Java에서는 class를 만들고 클래스 내부에 public static void... 와 같은 형태로 선언해야 했지만 코틀린에서는 클래스를 만들 필요 없이 아래와 같이 선언하는 것만으로도 entry point를 만들 수 있습니다. fun main() { println("Hello Eric!") } 변수 선언 변수를 선언할 때 var, val 두가지 선언 방법을 선택해서 사용할 수 있습니다. 기본적으로 모든 변수는 선언과 동시에 초기화를 해주어야 합니다. 초기화를 하지 않고 변수를 사용하려고 할 시에는 컴파일 에러가 발생하며, 이로 인해 의도하지 않은 NullPoin.. 2020. 7. 26.
[Database] 식별관계와 비 식별관계 RDBMS의 테이블을 생성하고, 각 테이블마다 관계를 설정해 줄 때 일반적으로 외래 키를 사용하곤 합니다. 외래 키를 통해 다른 테이블과 같은 키를 공유하고 이를 이용하여 조인하여 관계를 이용하는 방식을 사용합니다. 외래 키를 사용하여 테이블 간 관계를 정립해 줄 때 사용하는 전략은 크게 식별 관계, 비식별 관계 전략이 있습니다. 식별 관계 식별 관계란, 부모 테이블의 기본키 또는 유니크 키를 자식 테이블이 자신의 기본키로 사용하는 관계입니다. 부모 테이블의 키가 자신의 기본키에 포함되기 때문에 반드시 부모 테이블에 데이터가 존재해야 자식 테이블에 데이터를 입력할 수 있습니다. 즉, 부모 데이터가 없다면 자식 데이터는 생길 수 없습니다. 식별관계는 ERD상에서 실선으로 표시합니다. 자식 테이블에 데이터가.. 2020. 7. 18.
javascript로 보는 함수형 프로그래밍 함수형 프로그래밍의 콘셉트 모든 객체, 상태, 값은 불변(Immutable)이어야 한다 함수를 값처럼 사용한다. 변수에 함수를 저장하거나 리턴 값으로 함수를 반환할 수 있다. 사전 개념 정리 순수 함수 (pure function) 함수를 실행시켰을 때 부작용(side-effect)이 없는 상태를 말합니다. 함수를 실행시켜도 외부의 상태, 값에는 전혀 영향을 끼치지 않아야 합니다. 순수하게 함수 내부에서만 모든 작업이 이루어지기 때문에 함수가 어떤 역할을 하는지 파악하기도 쉽고, 다른 사이드 이펙트를 걱정할 필요도 없습니다. 사이드 이펙트가 없다면? => 스레드 안전하므로 병렬 처리를 안전하게 할 수 있습니다. var number = 10; // 외부 상태를 변경시키지 않는 순수함수 function pur.. 2020. 6. 27.
CI/CD 의 개념, 적용해본 후기 개요 얼마 전, SNS를 보다가 재미있는 글을 읽은 적이 있습니다. 이 글은 이상적인 프로그래머의 삶이 어떤 것인지를 그린듯한 글이었습니다. 출근과 퇴근이 자유롭고 소스코드 관리가 잘 되어있어서 버그는 간단하게 3줄 정도를 고치면 된다는 등 꽤나 흥미로운 내용이니 궁금하신 분은 여기서 읽어보시길 바랍니다. 캡처본이 여기저기 돌아다니니 한 번쯤 읽어 보신 분들도 꽤 많을 거 같네요. CI/CD는 위에 있는 글에서 한마디로 정의하고 있습니다. 개발 - 빌드 - 테스트 - 배포까지의 전 과정을 자동화하는 것이 바로 CI/CD의 핵심 개념입니다. CI, CD의 개념 짧게 개념잡기 CI (Continuous Integration)란 여러 개발자가 작성하거나 수정한 소스를 지속적으로 통합하고 테스트하는 것을 뜻합니.. 2020. 6. 21.