요즘 다시 팀원들과의 프로젝트를 위해 서버를 구축하여 사용하고 있습니다.

 

AWS EC2 프리티어를 이용하여 서버를 구축해서 사용하고 있는데,

 

프리티어 이고 아이디가 아직 1년도 지나지 않았는데, 0.27 달러 정도 아주 조금씩이라도 과금이 쌓이고 있더라고요.....!

 

그래서 Billing을 들어가서 상세 내역을 보았는데, 일단 대부분이 Elastic IP (탄력적 IP허용) 에 과금이 조금씩 되고 있더라구요...!

 

탄력적 IP기능이란, AWS EC2의 경우 IP를 동적할당 함으로써 인스턴스를 중지 하고 다시 실행할 경우

 

IP주소가 바뀌게 되는데, 이럴때 인스턴스를 껐다 켜도 IP주소를 고정으로 사용하고 싶을 때 사용하는 기능입니다.

 

프리티어는 한달에 750시간까지 무료인 것으로 알고 있고, 인스턴스 하나만 돌릴경우 한달 내내 켜놓아도 과금이 되지 않는 시간입니다.

 

인스턴스를 여러 개 사용하거나 한다면, 과금을 조금 하거나, 인스턴스 사용량을 조절을 해주어야 겠지요....?

 

사용량을 조절하는 과정에서 탄력적IP는 꽤나 편리할 것으로 보이지만, 저는 일단 그쪽에서 과금이 조금 되길래

 

인스턴스가 아직 한개이고, 중지 시킬일도 별로 없어서 일단 탄력적 IP를 릴리스 했습니다.

 

RDS 쪽에서도 아주 조금 과금이 되던데 백업스토리지 쪽에서 빠져나가고 있네요..!

 

사실 지금까지 합쳐도 300원 수준이라... 하지만 찝찝하고 약간은 불안한 마음...ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

 

1. JSON이란?

 

 

- 이름에서도 알 수 있지만 JavaScript의 객체를 정의하는 문법과 매우 유사한 형식을 따릅니다..

 

 

- 하지만 문법,프로토콜 등은 아니고 그저 텍스트 일 뿐......(데이터를 표시하는 방법)

 

 

- 일단 형식 자체가 이해하기가 매우 쉽다는 장점이 있습니다.

 

 

- 데이터를 전송하거나 저장을 할 때 많이 사용하는 형식 정도 라고 생각하면 될 것 같습니다.

 

 

 

 

 

2. JSON 특징

 

 

- JavaScript 함수를 통해 JSON형식의 파일을 JavaScript의 객체로 변환 할 수 있습니다.

  (JSON.parse("json텍스트") --> json을 자바스크립트 객체로)

  (JSON.stringify("자바스크립트 객체") --> 자바스크립트 객체를 json으로)

 

 

- 다양한 언어에서 json 데이터를 다룰 수 있는 라이브러리를 제공하고 있습니다.

 

 

- 서버와 클라이언트의 데이터 교류에 json형식이 많이 사용됩니다

 

 

- 용량이 적다.

 

 

 

 

 

3. JSON 형식

 

 

- javascript의 객체의 형식과 같이 {}(중괄호)로 묶어줍니다.

 

 

- "name" : "value"의 쌍으로 이루어져 있습니다. 

 

 

- "name" : "value" 쌍 사이는 ,(쉼표)로 구분하여 줍니다.

 

 

- key는 ""(쌍따옴표)로 묶어주며 문자열의 경우도 ""로 묶어줍니다.

 

 

- 객체안에 문자열, 정수, 배열[], 객체{} 등이 포함 될 수 있습니다

 

 

 

 

4. 예시형식

 

 

 

1. Git 이란 ?

 

- 처음 간단하게 알고 있던 Git은 나의 소스 코드를 저장해놓는 저장소 정도 였다.

- 뭐 저 용도로만 사용할 수도 있긴 하겠지만 Git에 대해 제대로 알아보자.

 

- 사실, Git 이란 Version Control System의 한 종류 이다 (VCS)

 

- 버전 관리 시스템이라고 하는데, 버전을 관리한다는 것은 말그대로

- 프로젝트 소스의 초창기 버전, 수정 버전(V2), 재수정 버전(V2), 최종 버전(FINAL)

- 이런식으로 여러파일들을 하나의 버전으로 묶어 관리하는 것.

 

 

1 - 1 그래서 Version Control System(버전 관리 시스템) 이 무엇이냐?

- 위의 예시처럼 파일을 관리하는 것( 관리가 어려움, 명칭에 따른 혼동 등... 여러가지 문제점 내포 )을

   전문적으로 관리하는 시스템이 버전 관리 시스템 이다.

 

    -(1) 클라이언트-서버 모델

         - 중앙서버가 존재, 자신의 파트만 가져와서 작업후 다시 중앙서버로 통합.

 

    -(2) 분산 모델

         - 중앙서버가 존재, 그러나 여러 클라이언트들은 각자의 로컬 저장소에 중앙서버의 전체 사본을 가지고 작업 후

           통합하는 것

         - Git이 이에 해당 한다.

 

 

 

 

2. Git의 사용

 

- 사실 혼자 작업한다면 사본을 만들어 놓고 개인이 관리 하면서 작업을 수행한다면 굳이 필요가 없을 수도 있다.

   (수정이나 작업을 하는 사람이 본인 뿐이므로 시간적인 충돌등이 발생할 일도 없다.)

 

- 그러나 만약 다수의 클라이언트들이 작업을 수행하고 그것을 원본에 업데이트를 해야 하는데

   동시에 수정과 다운로드 작업이 일어나거나 한다면 문제가 생긴다.

   (예를 들면 내가 수정을 업로드 하는 동시에 다른 클라이언트가 작업을 위해 그 페이지를 건드린다면

    나의 수정사항이 제대로 반영되지 않을 수 있는 등의 문제가 발생 할 수 있다.)

 

- 이러한 문제점을 방지해주는 것이 버전관리 시스템이다(git,....)

 

- 그리고 깃은 모든 변동사항의 스냅샷을 저장하므로 코드의 손실이 일어나지 않고 문제시

   그 이전의 시점으로 되돌릴 수도 있다.(병렬 개발이 가능해 진다.)

 

- 그러므로 다수와 함께하는 프로젝트를 진행할 때 Git은 거의 필수적이다.

 

- 물론 개인프로젝트의 경우도 git으로 버전관리를 진행하면서 수행하면하면 체계적인 개발이 가능하다.

  (프로그램 을 배포하고나 패치를 배포하는 것도 간단해진다.)

 

 

 

 

 

3. Git의 웹 기반 솔루션 

 

- Git의 원격 저장소를 편하고 효율적으로 관리할 수 있게 하는 것이 웹기반 Git 솔루션을 사용하는 것.

 

- 요즘은 원격 저장소를 관리하는 기능 뿐 아니라 프로젝트에 도움이 되는 다양한 기능을 제공 하고 있다.

 

- Git Hub, Git Lab 등 이 있는데 깃허브는 오픈소스 프로젝트를 할 때 주로 많이 사용하고,

   깃 랩은 기업체등에서 폐쇄성을 필요로 할 때 인트라넷에서 많이 사용한다.

 

 

 

 

4. Git 사용을 위한 주요용어 정리

 

- 저장소(Repository)

   : 소스코드가 저장되어 있는 물리적인 공간

     깃 에서는 위에서 말씀드렸다 싶이 로컬저장소와 원격저장소 두개로 나누어져 있습니다.

     그러므로 작업을 시작하기 전에 원격저장소에서 로컬저장소로 소스코드를 복사해오고

     그 로컬저장소에서 소스를 가지고와서 소스수정이나 작업이 이루어 집니다.

     수정 후 커밋(commit)을 하면 로컬저장소에 저장(수정) 되며, 푸시(push)를 해야 비로소

     원격저장소에 반영이 되는 것입니다.

     저장소는 브랜치(branch),태그, 커밋에 따라서 버전을 저장한다.

 

 

 

- 스테이지(stage)

     작업한 내용을 올리는 임시 저장영역

      커밋 시에 로컬저장소에 반영이 된다.

 

 

- 커밋(commit)

     스테이지의 내용을 로컬저장소로 저장하는 작업

     커밋 한번,한번이 의미있는 히스토리(history) 이며, 커밋 로그로 설명을 남긴다.

     커밋의 단위는 팀에서 정하며, 대부분 포멧도 정한다.

 

 

- 체크아웃(checkout)

     커밋 단위로 남긴 히스토리 단위의 소스코드 버전으로 이동하거나, 브랜치의

     소스코드로 이동하는 것.

 

 

- 태그(tag)

     커밋의 위치를 알아보기쉽게 태그를 달아 놓는다.

     태그를 달아놓은 커밋은 태그명으로 쉽게 체크아웃이 가능해진다.

 

 

- 푸시(push)

     로컬 저장소에서의 변동(수정) 소스코드를 원격저장소에 반영시키는 것.

 

 

- 풀(pull)

     푸시와 반대되는 작업으로서 원격저장소의 내용을 로컬저장소에 반영시키는 것

 

 

로그인을 구현하기 위한 방법 중 

 

 

session기반(서버)의 인증 방식

-> 클라이언트와 서버 간의 상태를 유지하기 위해 사용하는 방식

-> 단점으로 유저의 수가 늘어난다면 무리가 갈 수 있고, 데이터베이스의 성능에 저하를 줄 수 있다.

-> 확장성에 있어서 문제가 생길 수 있다. (비용이 많이 듬 , 쉽지 않음)

-> 확장을 위해 분산된 시스템을 설계할 경우 과정이 매우 복잡해 질 수 있다.

 

 

 

토큰(token) 기반 시스템의 방식

-> 오늘 주요하게 살펴볼 토큰 기반 방식 입낟.

-> stateless 

     - 토큰 방식에서는 유저의 인증 정보를 서버(세션) 에 담아놓지 않는다.

     - 이를 통해 서버를 이용할 때의 문제점을 많은 부분 해소가 가능하다.

 -> 1. 사용자가 id와 pw 로 로그인을 한다.

 -> 2. 서버는 이 정보를 검증한다.

 -> 3. 가지고 있는 계정정보와 입력된 정보가 정확하다면 유저에게 signed된 토큰을 발급해준다.(정상발급)

 -> 4. 유저측은 전달받은 토큰을 저장해두고, 로그인된 상태에서 접근가능 한 정보에대해 서버에 요청을 할 떄

        해당 토큰을 함께 서버에 전달을 한다. (헤더)

 -> 5. 서버는 토큰의 검증 과정을 포함하여, 주어진 요청을 처리하여 준다.

-> 로그인 정보가 여러 곳에서 사용가능 하다 . 발급 받은 토큰을 가지고 다른 시스템에 접근이 가능하도록

    설계할 수 있으며, 토큰에 선택적인 권한을 주어 발급을 할 수도 있다.

-> JWT의 경우 웹 표준 RFC 7519에 등록되어 있으므로 여러 환경에서 지원이 되며, 다방면으로 사용되고 있다.

-> 권한유효성을 검사 할 때 데이터베이스에 접근하지 않아도 된다는 장점이 있다.

    로그인한 사용자인지 확인을 할 때, 토큰의 유효 여부만 확인을 하면 된다. (데이터베이스 접근을 줄임)

-> 보안의 문제는 IP주소에대한 추가 검증등 을 통해 보완할 수는 있으나 여전히 보안 문제는 JWT를 사용시 일어날 수      있는 문제이다.

 

간단하게

 

장점 

-> 데이터베이스 접근을 최소화 할 수 있다.

-> 간편하다.

 

단점

-> 다른 글에서도 언급했듯 보안문제는 보완, 해결해 나가야할 과제이다.

-> 프론트엔드 측에서 토큰을 관리 해야 한다는 것

윈도우 환경인 제 로컬 컴퓨터에서 aws ec2 서버로 파일을 보내야 해서 한번 보내 봅시다.

 

특정 툴 들을 사용해서 보내는 방법도 있지만..

 

뭐 자주,, 이러한 작업을 수행하는 것은 아니므로 간단하게 보낼 수 도 있습니다.

 

먼저 cmd 창을 열고 

 

간단합니다..

 

scp -i [키페어의 위치와 키페어] -r [보내는 파일] [우분투서버에서 저장할 위치]

 

이렇게만 입력해 주시면 됩니다.

 

예시 : scp -i Desktop/ppp/ ~~~~~.pem -r Desktop/mmmmm.zip ubuntu@~~~~~compute.amazonaws.com:home/ubuntu

 

이와 같이 해주시면 간단하게 옮길 수 있습니다

 

간단하죠?

APM(아파치 + PHP + MYSQL)을 설치하기도 했었는데

 

이번엔 AWS EC2 서버에 NGINX-PHP-MYSQL을 설치하고 연동시켜봅시다.

 

최근에는 패키지 설치를 통해서 매우 간단하게 설치 할 수 있습니다.

 

예전에 APM을 패키지 말고 수동 소스설치로 한번 설치 한다고 헀다가 정말

 

정신적인 고통을 많이 느꼈던 적이.... 하지만 패키지 설치는 매우 간단하여 쉽게 할 수 있습니다.

 

서버에 접속 하여 root 사용자로 접근후 apt-get update를 해줍니다. (필요없는 분도 있겠죠? 뭐 그냥 치시면 됩니다.)

그 후 apt-get install nginx 를 통해서 nginx를 패키지 설치를 해줍니다.

 

servcie nginx restart

service nginx status 

명령어를 통해서 현재 nginx 설치 상태를 확인 할 수 있습니다.

 

본인의 aws 서버의 ip주소를 입력하면 아래와 같이 nginx가 설치 되었음을 확인할 수 있습니다.

 

이제 mysql 을 설치 해봅시다.

 

똑같이 명령어 창에

 

#apt-get install mysql-server mysql-client

 

를 입력하여 줍니다. 

 

그 후 #mysql - u root -p 를 통하여 mysql 서비스 콘솔에 액세스 할 수 있다.

 

처음에는 아무 패스워드를 치거나 그냥 엔터만 쳐도 접근 할 수 있습니다.

 

mysql 비밀번호 를 설정 하는 것은 다음에 한번 다루도록 하겠습니다. 

 

구글링 하시면 어렵지 않게 하실 수 있긴 합니다.

 

그렇다면 이제 php7.2를 설치하여 봅시다.

 

#apt-get install php7.2-fpm

 

을 입력해 줍니다.

 

그 후 자신이 필요한 사항에 따라 php 모듈을 설치하시면 됩니다.

 

저 같은 경우,

 

# apt-get install php7.2-mysql php7.2-mbstring php7.2-xml php7.2-gd php7.2-curl php7.2-bz2 php7.2-zip 

php7.2-json php7.2-readline

 

을 설치해 주었습니다.

 

이 작업이 끝났다면 이제 Nginx 기본 웹사이트 구성 파일을 설정 하여 주어야합니다.

 

/etc/nginx/sites-available 로 들어가

 

vi default 

 

하시면 아래와 같은 소스가 나옵니다.

 

기존의 원본 파일을 아래와 같이 수정하여 주시면 됩니다. (주석해제 및 수정)

 

저는 나중에 쿼리스트리 사용을 위하여 $uri/ /index.php?$query_string 도 추가하여 주었습니다.

(try_files에)

 

server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
}

 

이후 #nginx -t 를 입력하여 구성파일에 문제가 없는지를 확인하여 줍니다

 

입력시 

 

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

 

이 나온다면 오류가 없는 것입니다.

 

이제 제대로 설정이 되었는지 확인을 위해

/var/www/html에 들어가서 

test.php를 만들어 줍시다.

 

vi test.php 를 하여 <?php phpinfo(); ?>를 입력한 후 저장하여 줍니다.

 

확인을 위하여 ip주소/test.php를 주소창에 입력하여 봅시다.

 

위와 같이 php 정보 페이지가 나와야지 정상적으로 설정 된 것입니다..~!

ec2 인스턴스 서버를 생성하였으면 

 

접속하여 설치도 하고 ~ 원하는 작업도 하여야 겠죠??

 

옛날에는 putty를 이용하여 접근을 해야 하지만 요즘은 윈도우에서 제공 을 많이 해주므로

 

다양한 방법을 이용하여 접근 가능 합니다.

 

저 같은 경우에는 cmd 를 통하여 접근 하여 보겠습니다.

 

체크된 부분을 선택하여 연결 버튼을 누르면 위와 같은 창이 나옵니다.

 

일단 위의 빨간색 부분을 복사 합니다.

 

그 후 cmd 창을 열고 (관리자권한 실행) 자신이 저장해놓은 키페어가 있는 폴더로 이동하여 줍니다.

 

그 후 복사한 부분을 붙여넣기 해줍니다.

 

첫 진입일 시 위와같은 화면이 나옵니다 yes를 입력하여 줍니다..

 

aws 우분투 서버에 접속 하였습니다.

 

여기서 부터 서버에서 원하는 작업을 수행하면 됩니다.

로컬 컴퓨터(내 컴퓨터)에서 서버를 구축 하여 사용하여도 되지만

 

클라이언트와 서버의 측면에서

 

서버는 항시 요청대기를 하고 있는 상태이어야 한다.

 

로컬컴퓨터를 이용시 항상 컴퓨터를 켜두어야 한다. 

 

이런 불편함을 극복하기 위해 아마존에서 제공 하는 AWS 인스턴스 서버를 임대하여 사용하면 

 

이 불편함을 해소 할 수 있고 실제 서버를 운용할 때도 메인 서버에서 바로 작업을 하기 보다는 테스트용

 

서버에서 작업을 한 후 메인 서버에 적용을 한다고 한다.

 

일단 아마존 aws 에 접속하여 회원가입을 해줍시다. ~ 

 

회원가입을 한 후 아이디의 지역을 서울로 바꿔줍시다 (아마 처음에는 미국 ~ 로 설정되어 있는 것으로 기억합니다.)

 

접속 하셨다면 위의 화면에서 EC2에 접근을 해줍니다.

 

 

저 인스턴스는 현재 제가 종료를 방금 눌러서 저런 상태입니다. 위의 빨간색의 인스턴스 시작을

 

눌러줍시다.

 

저 같은 경우 우분투 서버 18.04 버전을 사용하기 위한 인스턴스를 생성하기위하여 빨간색을 선택하였습니다.

 

 

제가 사용할 것은 프리티어로 제공해주는 인스턴스를 사용할 것이므로 프리티어 사용가능 표시가된 유형을 선택하여

 

줍니다.

 

다음 화면에서는 저같은 경우 특별히 변동시켜 적용해줄만한 사항이 없어서 다음:스토리지 추가를 눌러줍니다.

 

스토리지 설정입니다. 8기가로 기본입력 되어 있으나 혹시 모르는 마음에... 밑에 말 처럼 프리티어로 제공 가능한

 

최대 용량으로 설정해 주었습니다.

그 다음 보안 그룹 설정입니다. 자신이 사용할 프로토콜에 따른 포트 번호와 접근성에 대한 제한을 주는 

 

부분입니다. 각자가 원하시는 설정에 맞춰서 설정해 주시면 되겠습니다.

 

이 부분은 인스턴스 생성 이후에도 보안그룹 수정을 통해서 설정을 수정 하실 수 있습니다.

그 후 서버에 접근할 수 있드로고 키페어를 선택 혹은 생성해 주어야 합니다.

 

저는 기존 키페어를 발급 받은 것이 있었으므로 그대로 사용하였으나 없으 시다면 새 키 페어 생성을 하시면 됩니다.

 

이 키페어는 외부에 공개 되어서는 안되며 발급 받은 본인이 매우 잘 관리를 해주셔야 합니다

위와 같이 인스턴스가 생성 되었습니다 !!!!

 

퍼블릭IP를 통하여 접근 가능 하나 현재는 서버 내부에 아무 것도 설치하지 않았으므로 특정한 것이 뜨지는 않습니다..

 

보안그룹이나 키페어 관리에 관련된 부분은 체크된 부분을 통하여 접근하여 수정해주시면 됩니다.

 

+ Recent posts