2020.01.18
안녕하세요 효진입니다.
이번에는 좀 다른 주제로 포스팅을 이어 가볼려고 합니다.
바로 서버에 대해서 아주 살짝 발을 담궈 볼텐데요.
이번 포스팅은 크리스님의 서버강의를 들으면서 복습과 정리를 위한 글 입니다.
지난 서버강의를 들어면서 아주 좋았어서 이번에도 좋은 기회가생겨 듣게 되었습니다.
아하(Aha) | 전문 지식 검색은 아하!
광고 없는 전문 지식 답변을 원하세요? 세상의 모든 전문 지식이 모여있는 곳. 변호사, 노무사, 세무사, 회계사 등 사전에 검증된 전문직 및 현업 실무자로 부터 받을 수 있는 신뢰할 수 있는 전문 답변. 이제부터 궁금한건 아하에서 물어보세요!
www.a-ha.io
이번주가 첫 강의 시작 날이자 1주차 강의 입니다. 첫 시작이니 만큼 아주 상세히 설명해주시면서 TCP/IP, HTTP, 네트워크, 데이터베이스 기초와 Docker설치부터 Docker란 무엇이며 Docker Compose를 이용하여 Nginx, MySql, Node등의 환경을 구성하는것 까지 해보았습니다.
(이렇게 적고 보니 엄청 나군용 😁)
강의를 통해 들었던 내용들의 개념을 정리하고 이해한 부분들을 정리하고자합니다. 한걸음씩 나아가 보겠습니다.
Monolithic Architecture? - 참고
Monolithic은 하나로 묶어있는, 하나의 덩어리라는 의미를 가지고있습니다. 즉, 모든 것들이 하나의 프로젝트에 묶여있는 구조라고 생각하시면 되겠습니다.
위와 같은 구조에서는 Monolithic의 구조로 운영에 있어 아주 간편합니다. 왜냐구요? 하나의 덩어리로 이루어져있기때문에 관리해야할 서버가 적기때문입니다. 그렇다면 단점으로는 하나의 덩어리로 묶여있기때문에 확장이 어렵습니다. 그리고 언어에 종속적입니다. 이 말은 Java Spring로 만들어진 Monolithic 구조에서는 언어의 선택의 여지 없이 Java Spring을 사용해야합니다.
Micro Service Architecture? - 참고
micro 즉 아주 세세하게 나누어진 구조를 말합니다.
위와 같은 구조에서는 선택적으로 확장이 가능합니다. 또한 각 서비스별 빌드와 테스트를 진행 할 수 있기때문에 빌드,테스트 시간이 단축됩니다. 하지만 여러개의 서비스들이 하나의 프로젝트로 구성되어있기때문에 관리포인트가 늘어납니다.
Circuit Breaker? - 참고
Circuit Breaker는 전기 회로에서 과부하가 걸리거나 단락으로 인한 피해를 막기 위해 자동으로 회로를 정지시키는 장치입니다. 한국어로는 회로차단기라고 불립니다. 이것을 프로그래밍에서는 Service A가 Service B를 호출하는 상황에서 어떤 문제로 인하여 Service B가 응답을 못하거나 또는 응답 속도가 매우 느려진 상황이라고 가정한다면. Service A가 Service B에 대한 호출 시도를 하면, Service A에서 Service B를 호출한 쓰레드는 응답을 받지 못하기 때문에, 계속 응답을 기다리는 상태로 잡혀있게 됩니다. 지속해서 Service A가 Service B를 호출을 하게 되면 앞과 같은 원리로 각 쓰레드들이 응답을 기다리는 상태로 변하게 되고 결과적으로는 남은 쓰레드가 없어서 다른 요청을 처리할 수 없는 상태가 됩니다.
이 상황에서 Service A를 호출하는 서비스가 또 있다면, 같은 원리로 인하여 그 서비스까지 장애가 전파되서 전체 시스템이 장애 상태로 빠질 수 있습니다. 따라서 중간에 Circuit Breaker를 두고 해당 문제를 해결하고자 하는 패턴 입니다.
API Gateway? - 참고
API 서버 앞단에서 모든 API 서버들의 End-Point를 단일화하여 묶어주는 기능을 합니다.
이렇게 하면 API Gateway만 public하게 공개해두고 각 서비스의 endpoint는 private하게 두어 외부로 부터 접근을 막아 보안적으로 아주 큰 이점이 있습니다.
RDB?
RDB는 Relational Database의 약자로써 관계형 데이터베이스를 말합니다.
관계형 데이터베이스는 칼럼(colum)과 로우(row)를 이루는 하나 이상의 테이블로 정의하며, 고유키(primary key)가 각 로우를 식별합니다.
RDB는 SQL 계열 DB들이 여기에 속하며, 각행은 테이블이 객체로 인식합니다.
Key Value Store?
Key-Value-Store는 Key-Value-Database로도 불리며, Map과 동일하게 Key-Value에 의한 동작을 수행합니다.
가장 간단한 NoSql DB이며, Redis, Amazon Dynamu, Oracle NoSql이 여기에 속합니다.
RDB는 데이터베이스에 자료 구조를 자료형이 잘 정의된 필드를 포함하는 일련의 테이블로 미리 정의하며, 자료형은 데이터베이스 프로그램에 노출시킴으로써 수많은 최적화를 허용합니다.
반면, Key-Value-Store는 데이터를 정수,문자열,배열,JSON등 자유롭게 저장가능하며, 자유로운 형식덕분에 빠른 CRUD가 가능합니다. 하지만 고급 쿼리를 사용하지 못하거나 복잡도가 올라가는 단점이 있습니다.
Document Based Store?
Document-Based-Store는 Document와 Collection으로 데이터를 저장하며 Document내의 데이터는 Key-Value쌍으로 저장합니다. 또한 여러 Document가 모여 하나의 Collection을 구성하며, 메모리를 최대한 활용하여 빠른 CRUD 성능을 지원합니다. 하지만 효율적인 데이터 모델링이 매우 어려우며, 조인이 불가능합니다.
Document-Based-Store를 들으면서 가장 먼저 떠올랐던 것이 바로 Firebase Database인데요. 이번 개인 앱을 만들면서 Firebase Database를 사용했었고, Document-Based-Store의 개념과 딱 맞는 구조였었습니다.
위사진이 개발중인 제 앱의 Firebase Database 구조인데요 제일 왼쪽이 Collection, 그 다음이 Documents로 구성되어있는 DB입니다.
이제 기초에 대한 정리가 끝이 났습니다. 그럼 이제 Docker에 대해 알아 보겠습니다.
Docker란 무엇인가? - 참고
도커란 컨테이너 기반의 오픈소스 가상화 플랫폼 입니다. 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술입니다.
이 또한 가상화 기술의 하나지만 기존 방식과는 차이가 있습니다.
기존의 가상화 방식은 주로 OS를 가상화 하였습니다.
이를 더 거슬러 올라가 보자면 컴퓨터안에 컴퓨터를 소프트웨어적으로 구현하고자 하는 끝에 1960년대에 가상화 개념이 등장하였고, 그 후 컴퓨터 성능이 급격하게 좋아지게 되어지면서 가상 머신의 보급이 이루어 지게되었습니다. 서버성능은 당연히 더 좋아 지게되게되고, 그러다 보니 노는 서버가 많아지게됩니다.(서버의 프로세스를 모두 활용하지 못함) 그래서 서버에 가상머신을 돌려 제대로 활용해보고자 하였습니다. 하지만 가상머신은 컴퓨터를 통째로 만드는 기술이다 보니 각종 성능 손실이 발생하게됩니다.
항상 Gest OS가 설치되어야하며, 이미지안에 OS가 포함되기때문에 용량이 매우 큽니다. 이렇게 한 컴퓨터 내에서 자원을 효과적이고 안전하게 격리하기 위한 시도를 하며, 1979년, Unix V7에서 처음 등장한 chroot 시스템 호출은 현재 실행 중인 프로세스와 자식 프로세스가 접근할 수 있는 루트 디렉터리를 특정 디렉터리로 변경하고, 해당 디렉터리 상위의 디렉터리는 수정하지 못하도록 하였습니다. 2000년에는 FreeBSD에 chroot의 개념이 jail이라는 기능으로 추가되었고, jail을 통해 격리된 시스템마다 IP 주소와 설정을 할당할 수 있는 기능을 제공
2004년에는 오라클이 Solaris Zone을 발표. 2005년에는 Linux 커널을 패치하여 리소스 격리를 구현한 OpenVZ 프로젝트가 등장. 2007년, 구글이 내부적인 사용을 위해 Process Containers를 발표했고, 이 기능은 Control Groups (cgroups) 라는 이름으로 리눅스 커널에 추가되었습니다. 이 cgroups를 이용하여 만들어진 것이 LXC(Linux Containers)인데, 커널에 이미 존재하는 네임스페이스 관련 여러 기능을 활용하여 각 환경을 격리하는 기능을 제공하였습니다. 2013년 초, dotCloud가 새로운 컨테이너 엔진 Docker를 오픈 소스로 공개하였습니다. - 참고
그래서 왜 핫하게 떠오르는가?
도커는 게스트 OS를 따로 설치하지 않습니다. 이미지에 프로그램과 라이브러리만 격리해서 설치합니다. 이미지에 OS가 설치되지 않기때문에 용량이 크게 줄어듭니다. 또한 호스트 OS와의 자원(시스템콜)을 공유하기 때문에 성능적으로도 거의 손실이 없습니다. - 참고
도커는 완전히 새로운 기술은 아니지만 이미 존재하는 기술을 도커는 잘 조합하여 사용하기 쉽게, 원하는 기능들을 간단하지만 획기적인 아이디어로 구현하였습니다.
도커 설치 및 Compose이용하기
도커 설치는 해당 포스트가 너무 길어져 새로운포스트를 작성하여 올리도록 하겠습니다.
미세 팁
새롭게 알게된 정보하나!
아래 사진처럼 Mac 터미널을 이쁘게 사용하고 싶다?
그렇다면 Iterm2로 이쁘고 강력한 개발?을 할수 있습니다.!! 자세한 설정정보는 여기에서 확인 할 수있습니다!
마치며
1주차 강의가 끝났습니다.
기존의 알고 있던내용들 혹은 기존에 조금 헷갈렸던 내용들을 다시 상기할수 있었던 아주 유익한 시간이였습니다. 또한 새로운 개념들 새로운 것을 접하면서 재밌으면서 신기했습니다. 앞으로 남은 강의가 아주 기대됩니다.ㅎㅎ 이렇게 강의를 듣고 배운 내용, 공부한 내용을 블로그를 통해 조금이나마 정리하며, 기록하려고 합니다.
끝까지 읽어 주셔서 감사합니다.
아하(Aha) | 전문 지식 검색은 아하!
광고 없는 전문 지식 답변을 원하세요? 세상의 모든 전문 지식이 모여있는 곳. 변호사, 노무사, 세무사, 회계사 등 사전에 검증된 전문직 및 현업 실무자로 부터 받을 수 있는 신뢰할 수 있는 전문 답변. 이제부터 궁금한건 아하에서 물어보세요!
www.a-ha.io
감사합니다.
❤️
Love YourSelf
'개발 > Server' 카테고리의 다른 글
[NodeJS] Node.js 설치 (0) | 2019.06.02 |
---|