Loading...
2020. 11. 21. 18:42

[Kubernetes] 4. Minikube로 시작하는 kubernetes

Kubernetes 클러스터를 구축하기 위해 두 개의 노드를 준비하고 이를 마스터와 각 노드로 나누어야 하는 구조를 갖춰야 하지만 이는 실제 서비스하기 위한 환경에 대한 권장 사항이었습니다. 쿠버네티스를 실 서비스해보기 전에 직접 사용해보는 방법은 여러 가지 있습니다. AWS의 EKS, GCP의 GKE 등 클라우드 벤더를 사용하는 방법 직접 쿠버네티스 클러스터를 구축하는 방법이 있지만 실제로 체험해보기 위해 클라우드 벤더의 값비싼 비용을 사용하거나 마스터, 노드의 하드웨어 장비를 직접 구입하는 것은 비용적으로 부담이 될 수 있을 것입니다. Minikube는 로컬 환경에서 최상의 쿠버네티스 환경을 제공하기 위한 프로젝트로 우리는 쿠버네티스를 간단하게 체험해보기 위해 일련의 마스터, 슬레이브 노드를 구성하고..

2020. 11. 18. 21:49

[Kubernetes] 3. Controller로 더 나아간 애플리케이션 배포

우리는 쿠버네티스의 4개 객체들의 역할과 그들의 모임으로 한 서비스를 배포하고 운영하는 데 있어 기본적인 요소라는 것을 알았습니다. 쿠버네티스는 서비스의 트래픽에 따라 컨테이너를 자동으로 증가시켜주는 스케일 업/아웃, 애플리케이션에 필요한 batch 작업 등 애플리케이션 설정, 배포에 더욱 빛을 발휘할 수 있는 강력한 기능을 제공합니다. Controller 쿠버네티스의 컨트롤러는 이전에 설명한 객체를 이용하여 배포한 서비스들에 더 많은 기능을 추가시켜주는 존재입니다. 예를 들어, 우리의 서비스는 사용자가 많아 요청 수가 많을 것이므로 Namespace에 부여된 리소스 허용량에 한하여 트래픽량이 증가함에 따라 자동으로 컨테이너를 생성/삭제하는 오토 스케일링 기능, 내 서비스 앞단에 로그를 수집하거나 데몬을..

2020. 11. 14. 17:44

[Kubernetes] 2. Kubernetes 기본 구성과 객체(object)

지난 포스트에서 Kubernetes와 Container Deployment에 대해 알아보며 컨테이너로 서비스 배포하기까지의 과정과 Docker Swarm 등의 다른 오케스트레이션 툴과 어떤 점이 다른지 살펴봤습니다. 이러한 점을 확인하고, 우리가 운영하는 서비스가 쿠버네티스에 적합한지, 차후 미래 운영 대책으로 사용할만한지를 정확하게 고려 대상으로 선정하셨다면 이 글을 계속 읽으며 Kubernetes를 직접 공부해보고, 사용해보시는 것이 좋을 것 같네요. Kubernetes의 기본 구조 이제 본격적으로 Kubernetes가 어떻게 이루어졌는지 알아보겠습니다. 기존의 Docker에서는 컨테이너를 관리할 때 중앙의 Docker Engine이 자리잡고 있어, 이 엔진이 애플리케이션 이미지를 관리하고, 생성하는..

2020. 11. 7. 22:37

[Kubernetes] 1. Container Deployment와 Kubernetes

저에게 있어 쿠버네티스는 Docker Swarm을 지나 이전부터 사용하고 있었던 컨테이너 오케스트레이션 툴이었습니다. 최근에 이직을 한 회사에서 쿠버네티스를 이용하여 시스템을 구성하고 서비스를 운영하게 되어 주 오케스트레이션 툴로 쿠버네티스를 사용하게 되었고, 이 때부터 Docker Swarm 보다는 Kubernetes로 시스템을 구성하는 일이 자주 생겨났습니다. 이 글은 Docker를 자주 사용하지만 Kubernetes에 대해서는 잘 모르고, 그리고 사용을 고려해보고 싶은 분들에게 드리는 글의 시작입니다. Container Deployment으로 거슬러 올라오기까지.. Kubernetes는 Go 언어를 기반으로 Google에서 개발하여 2014년에 공개된 Container Orchestration to..

2020. 6. 14. 21:53

[Docker] HAProxy를 이용한 로드 밸런싱

이번 포스트는 지난 포스트에 이어 HAProxy를 이용한 로드 밸런싱을 다뤄보도록 하겠습니다. What is HAProxy ? 이름만 놓고 보면 프록시의 역할을 하는 소프트웨어인 듯 보입니다. 맞습니다. HAProxy의 본래 기능은 Reverse Proxy 역할을 수행하는 소프트웨어이고, 본래는 High Availbility Proxy의 약자입니다. 그러나 이 소프트웨어를 가지고 TCP / HTTP Load Balancer로 사용할 수도 있습니다. nginx랑 다른 점은 무엇일까요? nginx에서도 물론 Reverse Proxy, Load Balancer 기능을 제공하지만 HAProxy는 여기에 Active Health Check 기능을 무료로 제공합니다. (nginx에서도 Active Health Ch..

2020. 6. 10. 12:25

[Docker] nginx web server를 이용한 로드 밸런싱

최근 들어, 쿠버네티스를 활용하려 노력하면서도 가끔은 Docker를 다시 돌아보는 경향이 많아졌습니다. 로드 밸런싱을 하는 방법에는 여러 방법이 있지만 그 중에서도 컨테이너를 이용한 로드 밸런싱은 여러모로 많은 도움이 되었습니다. 무엇보다도 100개 이상의 컨테이너를 생성하기 위해 Docker Compose, Docker Swarm을 많이 사용했었다는 점. 이 부분은 수동으로 인스턴스를 만들어주는 번거로움을 많이 덜어주었고, 그 때문에 컨테이너 기반 운영을 많이 선호했던 점이 기억에 남았습니다. 서론을 접고, 이제 본론으로 넘어가보죠. 이전에 로드 밸런싱에 대한 글을 올렸던 적이 있었습니다. 로드 밸런싱은 실무에서 많이 다루는 기술이지만 이를 적용하기 위해서는 역시 개념에 대해 정확히 알고 사용해야 합니..

2020. 6. 2. 11:17

[Network] Load Balancing (로드 밸런싱)의 개념과 이해

처음 서버를 개발하고, 이를 운영하는 데까지 많은 학습 시간이 필요했습니다. 서버 개발을 위해 Servlet, JSP, Spring을 배우게 되었고, 나아가서는 더 나은 프레임워크 및 차이를 알아보기 위해 Flask, Django, Nest.js 등 다양한 프레임워크를 사용했었죠. 그러나 서버 공부는 이것이 끝이 아니었습니다. 우리는 이러한 서버를 인터넷에 서비스하기 위해 많은 것을 고민해야 했습니다. 서버에서 10, 100명만 접속해서 끝날 일이라면 그냥 서버를 개발하고, 배포하는 것만으로 끝날 일이지만, 만약 수십만 명의 사용자들이 내 서버에 접속해야 한다면 어떤 일이 벌어질까요? 만약, 서버가 멀티 스레드를 사용하고, 각 사용자가 접속할 때마다 스레드를 생성하는 형태를 가지고 있다면, 1만 명 아니..

2020. 5. 26. 10:55

[Linux] GRUB Command Line을 이용하여 리눅스 수동 부팅하기

어제, 계속 사용하던 Ubuntu 18.04 LTS를 20.04 LTS 버전으로 업데이트의 계획을 수행하고 있었습니다. 사용했던 IDE 도구, vim과 환경 변수 설정 등을 모두 정리하고, 살펴보니 그다지 많은 설정 값이 적용되어 있지 않았습니다. 사용했던 노트북을 처분하고 새로 PC를 구입한 것이 어느 덧 3개월 정도 되어갔는데, 그 때문에 20.04 릴리즈가 나오기 전까지 기존의 18.04를 설치하고, 간단한 셋팅만 하고 임시 방편으로 사용하기로 했던 것입니다. 어차피 거의 모든 셋팅을 다시해야 했기 때문에 과감하게 새로 설치를 하기로 마음 먹고, Ubuntu Official 홈페이지에서 Ubuntu Desktop 20.04 iso 이미지를 다운로드 받고, iodd를 사용하여 클린 설치를 하였습니다...

2018. 12. 31. 13:10

리눅스에서 Unix ODBC를 사용해보자

안녕하세요. 2018년의 연말이 다가왔습니다. 오늘은 2018년의 마지막 포스트로 우분투에서 Unix ODBC를 설정하는 방법에 대해 알아보도록 하겠습니다. What is ODBC?Unix ODBC를 설치하기 전에, ODBC가 무엇인지에 대해 간단히 알아보도록 하겠습니다. ODBC는 Open DataBase Connectivity의 약자로 우리 말로는 데이터베이스 미들웨어를 연결하기 위한 공개형 응용 프로그램 인터페이스라 합니다. 한마디로 말하자면 데이터베이스 애플리케이션과 연결해주는 공개형 인터페이스라는 것이죠.ODBC는 Microsoft에서 주니어 개발자가 데이터베이스에 쉽게 연동할 수 있도록 개발한 애플리케이션 인터페이스(API)입니다. 본래 우리가 새로운 응용 프로그램을 개발하기 위해 데이터베이스..

Netplan - 우분투(리눅스) 네트워크 설정

안녕하세요. 블로그에 글을 쓴지 어느 덧 3개월이 되어 가네요. 많은 정보들을 남기고 공유하고자 블로그 활동을 시작하게 되었지만 공교롭게도 모자른 시간 덕택에 이제는 이 활동도 점차 줄어가고 있네요. 하지만 블로그 활동의 중단 계획은 없으니, 앞으로도 계속 많은 정보를 공유하려고 노력하겠습니다.저는 데스크톱과 서버 모두 CentOS가 아닌 Ubuntu Server OS를 사용하고 있습니다. 물론 아예 CentOS를 배제하는 것은 아니지만 아무래도 PC 운영체제를 Ubuntu로 사용하다보니 CentOS에 비해서 더 편한 느낌이 있다고 해야 할까요.. 그래서 이번에 우분투 18.04 서버를 설치하게 되었는데, 네트워크 설정이 조금 바뀐 것을 알게 되었습니다. 우분투 네트워크 설정보통 리눅스에서 네트워크 환경..

2018. 1. 22. 20:08

Intel CPU Spectre 패치(Retpoline) 와 테스트

지난 Meltdown 취약점 패치를 통해서 System Call 함수 호출시 4배의 성능이 하락되는 것을 알 수 있었습니다. 하지만 이 취약점은 Intel CPU에서만 존재하는 취약점이며 Kernel Page Table Isolation (KPTI) 패치를 통해 취약점을 고칠 수 있었고, AMD 및 ARM 프로세서에서는 영향이 없었음을 알 수 있었습니다. Spectre 취약점은 이전 포스트에서도 설명한 적이 있었습니다. 간단하게 다시 한 번 설명드리자면, A 프로그램이 B 프로그램의 메모리 주소를 침범할 수 있는 취약점으로, 크게는 가상 머신의 OS가 Host OS의 주소 범위까지 침범할 수도 있는 매우 무서운 취약점입니다. 이 취약점은 Intel CPU 뿐만 아니라, AMD, ARM CPU에도 취약점이..

2018. 1. 5. 17:06

Intel CPU Meltdown 취약점 패치 2차 테스트와 마무리

1차 테스트에 이어서 2차 테스트를 진행해봤습니다. 2차 테스트는 1차에서 진행했던 File I/O 뿐만 아니라, 서버 애플리케이션으로 사용하는 웹 서버, DBMS, 그리고 생각보다 리소스를 많이 사용하는 오디오 인코딩과 비디오 인코딩 등의 테스트를 진행하였습니다. 테스트 진행 사항- SQLite I/O Test (only HDD)- FLAC Audio Encoding- Opus Codec Encoding- nginx Benchmark- GCC Compile Test- File I/O Test 테스트는 총 6가지로 진행하였으며 그 중 마지막 File system Test는 어제 진행했던 4000번의 파일 생성을 다시 테스트한 것입니다. SQLite의 DBMS 테스트는 저의 노트북 환경상 HDD에서만 진행..

2018. 1. 4. 17:32

Intel CPU 보안 취약점 패치로 인한 성능 감소와 1차 테스트

안녕하세요. 2018년 첫 포스팅이네요. 모두들 새해 복 많이 받으시기 바랍니다. 새해부터 뭔가 큰 일이 터진 듯합니다. 현재 인텔의 모든 프로세서에서 커널 메모리 취약점이 발견되어 현재 리눅스를 포함한 윈도 운영체제 Redstone 3 버전도 패치 조치가 내려진 상태입니다. 그런데, 패치를 한 뒤에 성능이 30% 감소한다는 이야기가 있는데요. 어떤 취약점이고, 왜 이런 일이 발생하는지 조금 알아보도록 하겠습니다. Meltdown, Spectre 이번 취약점의 이름은 위와 같은 두 개 이름의 취약점을 가지고 있습니다. 먼저 이 취약점은 구글의 보안기술팀인 Project zero 팀에 의해 발견되었습니다.. Meltdown 취약점은 Intel CPU에 적용된 OoOE(비순차적 명령어 처리) 기술의 버그를 ..

2017. 8. 28. 10:52

Linux에서 MQTT Broker, Mosquitto 설치

MQTT를 처음 사용해보려 하시나요? 그렇다면, 먼저 아래의 글을 읽어보시기 바랍니다. MQTT 프로토콜 개념과 이해 지난 포스트에서 MQTT에 대한 개념과 간단한 특징을 소개해 드렸습니다. 이제 우리는 MQTT Broker를 설치해서, 이를 구동해보고 서비스를 해보려 합니다. MQTT Broker에는 여러가지가 존재하지만, 그 중에서도 가장 보편적이고 무난한 mosquitto를 설치해보도록 하겠습니다. Mosquitto 설치 리눅스에서 Mosquitto를 사용하려면 리눅스의 레포지터리에 있는 Mosquitto 패키지가 있습니다. 이 패키지를 사용하여 쉽게 설치할 수 있습니다. $ sudo apt install mosquitto 터미널을 실행하여 위 명령어를 타이핑합니다. $ sudo systemctl ..

2017. 8. 26. 15:57

MQTT 프로토콜 개념과 이해

안녕하세요. 요즘 졸업 준비가 한창이어서, (핑계지만.. ㅜㅜ) 블로그에 글을 자주 못쓰게 되는군요. MQTT 프로토콜에 대한 글을 작성해보려 합니다. MQTT는 제가 현재 졸업 작품에서 사용하고 있는 통신 프로토콜인데요. 처음에는 XMPP 를 사용하여 메시지를 교환하려고 하였으나, 교수님의 조언으로 MQTT 를 사용하게 되었습니다. MQTT는 무엇일까, XMPP랑 차이는?제 블로그 포스트에서 XMPP 관련 포스트를 보신 분이시라면, 이 글도 반드시 참고해보시기 바랍니다. 과거 제가 채팅 서비스를 구현하기 위해 XMPP 프로토콜을 사용한 적이 있었습니다. XMPP는 예전 Google Talk 과 Facebook Messenger 에서 사용한 채팅 프로토콜로 현재는 Hangouts 서비스는 XMPP와 호환..

2017. 4. 9. 23:32

네트워크 프로그래밍의 기초 - Socket

네트워크 프로그래밍을 하기 전에는 Socket 이라는 개념을 이해하셔야 합니다. 왜냐하면, 대부분 네트워크 프로그램에는 바로 이 소켓을 사용하여 통신을 하고 있기 때문이지요. 오늘은 프로그래밍으로 다가가는 네트워크 첫 걸음인 소켓에 대해 시작해보려 합니다. Network Socket 소켓이라는 것은 무엇일까요? 네트워크 프로그래밍에 관심을 가지고 있다거나 아니면 이제 시작하려고 하시는 분들이라면, 한 번 쯤은 들어봤을 법한 단어입니다. 컴퓨터에서 이야기하는 소켓은 보통 네트워크 소켓이라고 하며, 요즘에는 인터넷을 사용한 통신이 많기 때문에 인터넷 소켓이라고도 이야기를 합니다. 프로그램은 다른 컴퓨터에 있는 프로그램과 통신하기 위해 바로 이 소켓을 사용합니다. BSD UNIX 운영체제에서 처음 소개 된 소..

2017. 4. 8. 00:18

Linux로 시작해보는 간단한 소켓 프로그래밍

아직 소켓에 대한 개념을 모르시겠다구요? 아래의 버튼을 클릭하여 Socket 포스트를 미리 읽어보시기 바랍니다. 네트워크 프로그래밍의 기초 - Socket BSD Unix Socket 구성유닉스에서 소켓 프로그래밍을 할 때는 파일로 하여금 통신을 합니다. 그 이유는 유닉스의 리소스 구성은 파일로 이루어져 있기 때문입니다. 그래서, 유닉스 프로그래밍을 할 때 read, write 함수를 사용할 때도 파일 디스크립터를 사용하여 입력하고 출력합니다. 실제 Unix Programming에서 파일을 새로 열 때, open 함수를 사용합니다. open 함수는 int 형 값을 반환하며 이 반환 값은 File descripter Index입니다. 이미지 출처: (한국소프트웨어진흥원 저, Network Programmi..

2017. 2. 24. 13:03

Cerebro Search - OS X Spotlight 검색

간단한 프로그램을 하나 소개해보고자 합니다. OS X의 UI/UX를 너무 좋아하는 나머지 차마 Macbook 구입하는 것은 못하고, Ubuntu Linux에 Mac OS X 냄새를 풍기워 사용하고 있지만, 사실 저는 OS X 보다는 Linux를 더 좋아하는 개발자입니다. Spotlight SearchOS X에는 Spotlight 검색이 있습니다. Spotlight 검색은 검색 위젯바와 비슷한 것을 띄워 마치 Windows의 실행 창에서 모든 커맨드를 동작시키고, 게다가 웹이랑 연동해 원하는 검색을 띄워주기도 하는 OS X 의 유용한 유틸리티 도구 중 하나입니다. 이런 비슷한 기능의 프로그램에는 Linux에서 Albert이라고 하는 프로그램이 존재합니다. 하지만 Albert은 일반 응용 프로그램임에도 불구..