서버 구축 - 개요

antlikelion·2020년 2월 10일
0

서버구축

목록 보기
1/1

1.서버란?

서버(영어: server)는 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템으로 컴퓨터 프로그램(server program) 또는 장치(device)를 의미한다.
-위키백과

뭐라는지 모르겠다

거칠게 단순화하자면 서버는 서비스를 제공하고 있는 회사의 컴퓨터라고 볼 수 있다.

일반 사용자가 클라이언트(웹 브라우저, 스마트폰 등)를 통해서 제공받는 대부분의 것들은 클라이언트가 아닌, 회사가 관리하는 서버 컴퓨터에 있는 것이다.

2.서버를 관리한다는 것

예전에는 이러한 서버 컴퓨터를 회사에서 자체적으로 구입해서 관리했다고 한다.

이것저것 다 건너뛰고 말하자면 이러한 기존 방식이 가지고 있는 여러 단점이 해소된 방식이 현재 보편화되어 있는 클라우드 서비스를 이용해 서버를 관리하는 방식이다.

클라우드 컴퓨팅(영어: cloud computing)은 클라우드(인터넷)을 통해 가상화된 컴퓨터의 시스템리소스(IT 리소스)를 요구하는 즉시 제공(on-demand availability)하는 것이다.
-위키백과

무슨 소릴까

이것 역시 거칠게 요약하자면 서버 컴퓨터를 빌리는 방식이라고 볼 수 있겠다.

어쨌거나 저쨌거나 서버를 관리한다는 건 결국 컴퓨터를 관리한다는 것이다.
그리고 컴퓨터를 관리한다는 것은 다음의 세 가지를 관리한다는 것이다.
(사실 잘 모른다. 그냥 이렇게 배웠다)

  • cpu
    cpu는 컴퓨터의 연산 속도를 결정하는 요소로, 인간으로 치자면 뇌이다.
    cpu의 성능은 코어의 개수와 그 코어의 성능에 의해 결정된다고 한다.

  • 메모리(램)
    이름처럼 기억을 하는 장치이다.
    컴퓨터가 연산을 수행하는 데 있어서 중복되는 정보가 있기 마련이고, 그러한 정보를 메모리에 저장해두면 매번 같은 연산을 반복하지 않고 단순히 불러오기만 하면 되기 때문에 연산 속도가 비약적으로 빨라진다.

    • 메모리에 저장되는 정보들은 휘발성 정보로 컴퓨터를 끄면 리셋된다.
    • 우리가 const, let 등으로 선언하는 변수들도 다 메모리에 저장되는 정보들이다.
    • 컴퓨터에서 가장 많은 딜레이를 유발하는 것은 입출력(IO)인데, 메모리는 단순히 기록을 읽어오는 것이므로 속도가 빠르다.
  • 스토리지(디스크)
    영구적인 기록을 하는 공간이다.
    HDD, SSD가 있다.
    이걸 알아야 되는 이유는 aws에서 SSD를 쓰려면 다 돈이기 때문에...

3.AWS에서 서버 빌리기

서버를 다룰 때 고려해야할 요소를 알아봤으니, 실제로 aws에서 서버를 빌려보자.

  1. aws에서 서버 컴퓨터를 빌리려면 EC2를 이용해야 한다.
    EC2라는 매장이 있어 방문한다고 치자.

  1. 매장에 왔으니 빌릴 컴퓨터의 사양을 골라보자.
    처음 선택해야 할 것은 운영체제이다.
  • 윈도우를 제외하면 전부 리눅스 계열이다.
  • 우분투가 자료가 많고 세팅이 쉽기 때문에 골랐다
    (일반 사용자들이 가장 많이 이용한다고 함)
  • 레드햇 : 보안이 우수하기 때문에 기업에서 많이 사용함(비쌈)
  • centOS : 레드햇의 오픈 소스 버전

  1. 운영체제를 고른 후엔 앞서 살펴봤던 컴퓨터의 3요소에 대한 사양을 선택해보자.
    (어차피 답은 프리티어)

cpu의 개수, 메모리, 스토리지, 그리고 네트워크 성능이 있다.

  • vCPU : 그냥 cpu가 아니라 vCPU, 즉 가상 CPU이다.
    애초에 서버를 빌린다는 것은 정말 물리적으로 컴퓨터 한 대를 빌리는 것이 아니라 virtual machine기술을 이용해 생성된 인스턴스를 빌리는 것이다.(무슨 소릴까)
    즉, vCPU가 4라고 해도 항상 우리 서버에 CPU자원 4개가 상주하고 있는 것은 아니다.
    사실상 더 낮은 사양의 컴퓨터를 사용하게 되는 것인데, 해당 자원을 우리 서버에 고정시키고 싶다면 돈을 더 내면 된다...

  • 메모리
    메모리도 CPU와 마찬가지이다.
    16기가라고 써져있다고 해서 항상 16기가의 성능을 내는 것이 아니다.

  • 스토리지
    요새 파는 노트북 중에 SSD가 아닌 게 있던가
    하지만 aws에서 완전하게 SSD를 사용하려면 그 또한 돈이다

  • 네트워크 성능
    네트워크는 컴퓨터의 사양이라기 보단 랜선의 사양이라고 보면 되겠다.
    제아무리 슈퍼컴퓨터라고 한들 집에 있는 랜선 쓰면 무슨 소용일까
    동시 접속자가 많아진다고 네트워크 성능이 내려가는 개념이 아닌데, 회사 측에서 임의로 내린다고 한다.

내가 선택한 프리티어 인스턴스인 t2.micro는 cpu 1개, 메모리 1기가, 완전 SSD가 아닌 스토리지, 낮음에서 중간의 네트워크 성능을 가지고 있는(실제 성능은 그것보다 안 나오는) 노답 컴퓨터다.

요새 노트북 표준 사양이라는 쿼드 코어에 메모리 16기가를 선택하려면 대략 월에 16만원 꼴로 나온다고 한다.

서버를 운용한다는 것 자체가 돈이니, 비용을 최소화하는 방법에 대해 조금만 더 말해보자.

위의 사진을 보면 인스턴스 t3a.xlarge처럼 인스턴스 유형 이름에 a가 들어가 있는 것이 있다.
이는 메이저 cpu 제조사 중 하나인 amd를 의미한다.
a가 들어가 있지 않은 인스턴스의 cpu는 cpu시장의 기존 강자인 인텔의 cpu이다.
여기서 중요한 것은 똑같은 스펙의 cpu라 하더라도 amd의 cpu가 인텔 cpu의 반값 정도 밖에 안된다는 것이다.

또한 우리가 지금 진행하고 있는 인스턴스 생성 방식은 온디맨드 방식으로, 인스턴스를 언제든지 삭제할 수 있다.
그런데 만약 인스턴스를 사용할 기간이 고정적일 것으로 예상된다면(예를 들어 1년은 써야 된다면), "예약 인스턴스"를 구매하면 훨씬 저렴한 비용으로 이용할 수 있다

  1. 인스턴스 세부 정보 구성 내역은 모르겠으니 pass
    스토리지 추가로 넘어가자.

  • 스토리지 크기가 8기가라고 되어 있지만, 앞서 vCPU와 메모리가 그러했듯이 이 8기가의 자원이 온전히 내 서버에만 할당되어 있는 것이 아니다.
    따라서 사용자가 많아지면 느려지게끔 aws에서 설정해두었는데, 이러한 제약을 풀려면 역시 돈이다

  • IOPS는 입출력의 속도와 관련된 것이다.
    이 또한 사용자가 많아지면 aws측에서 자동으로 그 속도를 낮춘다고 한다.

  • 여기에서 EBS범용(SSD)라고 적혀 있는데, 이는 완전한 SSD를 의미하는 게 아니라고 한다.

  1. 태그 추가에서도 딱히 해줄 건 없으니, 보안 그룹 구성으로 넘어가자.
  • 보안 그룹은 말하자면 서버 컴퓨터에 접근할 수 있는 방식을 규정하는 것이다.
    여기서처럼 SSH(22포트)를 이용하면 pem키를 이용해 해당 컴퓨터에 원격 접속할 수 있고, HTTP나 HTTPS를 이용할 수도 있다.
    일단은 인스턴스를 새로 생성하는 것이므로 SSH만 설정해주자.

  • 기존에 보안 그룹을 생성해두었다면 기존 보안 그룹을 선택해도 무방하고, 새로이 보안 그룹을 생성해도 무방하다.
    나는 새로 보안 그룹을 생성하고 보안 그룹 이름을 구분할 수 있게끔 적당히 지었다.
    보안 설명도 적당히 지어주자.

  • 소스에서 '위치 무관'을 선택하거나 '사용자 지정'을 '0.0.0.0/0'으로 두면 아래 경고에 나온 것처럼 모든 IP주소에서 접근이 가능하다.
    이곳저곳 와이파이를 써가며 작업할 걸 생각하면 그 편이 편하긴 하지만 아무래도 보안을 생각하면 '사용자 지정'으로 특정 IP를 지정해두거나, 그때 그때 '내 IP'로 설정해주는 것이 좋을 듯하다.

  1. '인스턴스 시작 검토'단계에서 검토 후 '시작하기'로 인스턴스를 생성해주자.
    그럼 다음과 같은 화면이 뜬다.

새로운 키 페어를 생성해도 되고, 기존에 생성한 키 페어가 있다면 그것을 선택해도 된다.
무엇이 되었건 해당 키페어를 반드시 잘 보관해야 된다는 것이 중요하다.
혹시라도 분실하면 해당 인스턴스를 삭제하는 것 외에는 답이 없다

유치한 비유를 들어보자면, EC2매장에서 컴퓨터를 빌릴 때 해당 컴퓨터를 키기 위한 일종의 열쇠를 받는 것이라고 생각하면 된다.
5에서 설정한 SSH는 이 열쇠(pem키)가 들어갈 열쇠구멍이라고 볼 수 있다.

이 실습에서는 인스턴스를 한 대 발급 받았지만, 즉 컴퓨터를 한 대 빌려왔지만 실제로는 여러 대의 컴퓨터를 빌려올 수도 있다.
우리는 이 컴퓨터들에 각각 다른 열쇠를 발급받을 수도 있고, 하나의 열쇠로 여러 대의 컴퓨터에 접속할 수도 있는 것이다.

6번까지의 과정으로 우리는 EC2라는 매장에서 서버 컴퓨터를 빌려 집으로 가져왔다고 볼 수 있다.
이제 가져온 컴퓨터를 켜서 확인해보자.

  1. 앞서 언급했듯이 우리는 여러 컴퓨터를 빌려올 수도 있다.
    그럼 그 컴퓨터는 어떻게 구분할까?

  • Name은 적당히 적어서 구분할 수 있게끔 해주자
  • 인스턴스 상태가 running이 될 때까지 기다려줘야 한다.

바로 네트워크 상에서의 주소인 IP주소로 구분할 수 있다.
(퍼블릭 DNS(IPv4)와 IPv4 퍼블릭 IP 모두 가능하다)
그냥 간단히 일종의 아이디라고 생각하자.

이제 접속할 컴퓨터의 아이디로 구분할 수 있으니 해당 컴퓨터에 접속해보자.
맥 사용자라면 터미널을, 윈도우 사용자라면 git bash를 켜서 6에서 받은(혹은 이미 가지고 있던) pem파일이 있는 디렉토리로 이동해주자.
그리고 다음과 같이 입력해주자.

ssh -i 파일이름.pem ubuntu@해당 서버 컴퓨터의 IP주소

그러면 다음과 같은 화면이 뜰 텐데 yes로 진행해주자.

permission에러가 뜬다.
해당 pem키의 권한이 너무 열려 있어서 발생하는 문제다.
다음의 코드를 입력해주자.

chmod 400 파일명.pem
(해당 파일의 소유자에게 쓰기와 실행 권한을 제외하고 읽기 권한만을 주는 명령어이다)

(위의 작업은 git을 통해 협업하는 사람들도 각자의 컴퓨터에서 한 번은 해줘야 하는 작업이다)

그리고 다시 아래의 코드를 입력해주자.

ssh -i 파일이름.pem ubuntu@해당 서버 컴퓨터의 IP주소

이제 해당 서버 컴퓨터에 접속을 했으니, 아래와 같은 화면을 확인할 수 있다.

앞서 이야기했던 컴퓨터를 관리할 때 필요한 3요소에 대해 확인 가능하다.
(모든 리눅스가 이렇게 접속하자마자 알려주는 것은 아니다.
저렇게 빨간 박스에 나온 것처럼 바로 보여주는 건 우분투의 설정이다.)

  • System load : cpu에 걸리는 부하를 의미한다.
    어지간해서는 잘 오르지 않으며 20%정도만 돼도 꽤나 가혹한 것이라고 한다.

cpu를 상세하게 확인하고 싶다면 top명령어를 사용하면 된다.

  • Usage of / : 스토리지 사용률을 의미한다.

스토리지의 가용공간을 상세하게 확인하고 싶다면 df(disk free space)명령어를 사용하면 된다.

스토리지 사용률을 보면 7.69GB 중 13.6%를 쓰고 있다고 한다.
여기서 8기가 바이트가 아니라 7.69기가바이트인 이유는 컴퓨터가 기본적으로 사용하는 스토리지를 제외한 가용 스토리지를 보여준 것이기 때문이다.

현재 스토리지가 사용되고 있는 부분을 확인하고 싶다면 du(disk usage)명령어를 사용하면 된다.

  • Memory usage : 메모리 사용률을 의미한다.

메모리를 상세하게 확인하고 싶다면 free 명령어로 확인 가능하다.(byte 기준)

free -m 명령어로 메가 바이트 기준으로 메모리를 확인할 수 있다.

여기서 total을 보면 983메가바이트이다.
우리는 1기가바이트의 메모리를 할당받았으니 1,024메가바이트가 있어야겠지만, 컴퓨터가 필수적으로 사용하는 것을 제외한 가용 메모리는 983메가바이트인 것이다.

free -g 명령어로 기가 바이트 기준으로 메모리를 확인할 수 있다.

우리가 흔히 말하는 '서버가 터졌다'는 상황은 보통 저 3요소 중 하나 이상이 문제가 생겼다는 것을 의미한다.
그러니 서버 관리자는 수시로 저 3요소를 확인할 줄 알아야 한다.

현재 우리가 빌려온 서버 컴퓨터는 텅텅 빈 상태이다.
이 서버 컴퓨터를 통해 특정 서비스를 제공하고자 한다면, 우리가 작성한 애플리케이션 코드를 이 서버 컴퓨터에 배포해야 한다.
다음 게시물에서는 '배포'에 대해 작성하고자 한다.

0개의 댓글