[구름 k8s] TIL 2-2-4

Peppie·2022년 9월 16일
0

1. Database 활용

RDS 서비스를 통해 생성된 DB instance 활용

DB instance 제어를 수행하기 위해서는 DB instance의 RDBMS client tool을 통해 제어 수행

MySQL 기본 포트

3306 포트

MySQL client tool

  • GUI : MySQL Workbench
  • CLI (Linux) : mysql package

MySQL Workbench를 이용한 DB instance 관리

MySQL Connections 생성

MySQL 기반 DB instance에 접속하는 정보

  • connection name : 임의 설정
  • hostname : DB instance 엔드포인트 기입
  • username : DB instance 생성시 작성한 사용자 ID
  • password : DB instance 생성시 부여한 패스워드

Test connection 버튼을 클릭하여 DB instance와 연결 test 수행

MySQL Connection을 이용하여 DB instance 접속

  • Database 생성 : 마우스 오른쪽 버튼 클릭 -> create schemas 메뉴 선택
  • Table 생성 : Database -> Table -> 오른쪽 버튼 클릭 -> create table
    • table name : person_tb
    • Charset/Collation (한글 사용 encoding) : utf8 , utf8_general_ci
    • Field 구성

      id : int, PK ,NN, AI
      name : varchar(20), NN
      age : int, NN, default = 0

    • Apply 버튼 선택시 Table 생성

생성된 table에 대한 SQL 명령 중 DML 명령(CRUD 동작 제어)으로 제어

SQL 명령은 대소문자 구별 X

레코드 삽입

INSERT INTO 명령 : INSERT INTO <DB명.테이블명>(필드 목록) VALUES (값 목록)

insert into dbtest.person_tb (name, age) values ('홍길동',25); -> 레코드 삽입(추가)
insert into dbtest.person_tb (name, age) values ('김길동',35);
insert into dbtest.person_tb (name, age) values ('이길동',15);

레코드 검색

SELECT 명령 : SELECT <필드 목록> FROM <DB명.테이블명> WHERE <조건식>

SELECT * FROM dbtest.person_tb; -> 전체 레코드 검색
=
select id, name, age from dbtest.person_tb;

select name, age from dbtest.person_tb;
select * from dbtest.person_tb where age > 20; -> 나이가 20 이상인 레코드 검색

select count(id) from dbtest.person_tb; -> 레코드 개수

select avg(age) from dbtest.person_tb; -> age 필드의 평균 값

EC2 instance에서 MySQK client 프로그램을 이용한 DB instance 관리

Linux용 MySQL client 패키지 설치

sudo yum -y install mariadb.x86_64

Linux용 MySQL client 명령을 이용한 DB instance 접속

mysql -h<호스트네임> -u<사용자ID> -p<패스워드>

  • -h : 연결할 MySQL 엔드포인트
  • -u : 사용자 ID
  • -p : 패스워드

보안 그룹 포트 번호와 연결 소스는 0.0.0.0/0으로 설정

mysql 명령

  • show databases; : Database 목록 출력
  • use <DB명>; : DB명으로 전환
  • show tables; : Table 목록 출력
  • desc <table명>; : table 명의 table 구조 출력

Web service 제공을 위한 Back-end

Web Service

HTTP 프로토콜 기반으로 서비스 제공

  • HTTP 프로토콜 사용한 웹서비스는 client 요청에 대해 항상 HTML을 결과로서 제공
  • 웹서비스의 프론트엔드는 항상 웹브라우저를 사용하는 것을 전제
    -> 통상 HTML/css/JavaScript를 이용하여 프로그래밍
  • 웹서비스의 백엔드는 client 요청에 대해 수행(처리)하고 결과를 항상 HTML로 제공

백엔드 구성

  • client의 요청을 수신하고(request) 결과를 전송하는(response) 부분 -> Web Server
  • Business Login을 처리하는 부분 -> Application Server
    • JSP/ASP/php
    • Node.js : Javascript를 서버에서 동작할 수 있도록 하는 runtime
    • python 등
  • Database 부분 -> DB Server

Node.js를 이용한 백엔드 처리

Node.js 설치

  • nvm (node version manager) 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
  • nvm 활성화
. ~/.nvm/nvm.sh
  • nvm 명령
    • nvm ls : 현재 설치된 Node.js 목록 확인
    • nvm install --lts : 최신 LTS 버전 Node.js 설치
  • nvm을 이용한 Node.js 설치
    • node --version

Node.js 사용 유형

  • REPL (Read Eval Print Loop) 방식으로 Node.js 사용

    • Node.js는 Server에서 Javascript를 실행시킬 수 있는 run-time 역할 수행
    • REPL 방식 (interpreter)으로 Javascript 명령 실행 및 결과 확인
    • node : REPL 방식으로 node.js 실행
    • .exit : REPL 환경 종료
  • Node.js script 파일(.js)을 작성하여 일괄 실행
    editori 프로그램을 이용하여 Javascript 코드를 작성하고 일괄 실행하는 방식

    • script 파일 확장자는 .js
    • Node.js 프로그램은 script 단위로 작성 및 관리
    • 프로젝트 성격의 디렉토리 생성
    • 해당 디렉토리에서 다음 명령을 수행하여 프로젝트 초기화

      npm init : package.json 파일 생성, 프로젝트에 대한 정보 및 의존성 정보 포함

      • npm (node package manager) : node.js에서 사용하는 package
    • npm install : node project에서 필요한 패키지를 package.json 파일 내용을 참조하여 설치

Linux 환경에서 80 포트는 관리자 권한을 가지고 있어야 사용가능

사용자가 작성한 server program은 관리자 권한을 가지지 않으므로 직접 사용 불가

Node.js로 작성한 프로그램은 직접 80 포트 사용 불가능
=> 웹서버와 Node.js로 구성한 application 서버를 포워딩 시켜서 웹서비스 제공 프로그램이 80 포트를 사용할 수 있도록 시스템 구성

2. AWS 활용 인프라 구축

Web Server

사용자로부터 요청 수신 및 응답

NginX 설치

  • sudo yum update
  • sudo yum install -y gcc gcc-c++ : C/C++ 컴파일러 설치
  • sudo amazon-linux-extras install nginx1 : NginX 설치
  • systemctl status nginx : NginX 설치 확인
  • sudo systemctl start nginx : NginX daemon 시작
  • sudo systemctl enable nginx : NginX booting 시 자동실행 결정

Web Server EC2와 Application EC2 연결

80 포트로 들어오는 내용을 Application Server로 포워딩 시켜서 처리

  • NginX 환경 설정에 Application Server로 포워딩되게 설정
  • /etc/nginx/nginx.conf : NginX 환경 설정 파일
    sudo nano /etc/nginx/nginx.conf : NginX 환경 설정 파일 수정
    • proxy_pass http://<application server ip:포트>/;
    • 환경 설정 파일 변경 후 NginX 재시작
location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-NginX-Proxy true;

                proxy_pass http://13.209.26.179:8080/;
                proxy_redirect off;
        }

Application Server

Business Logic 처리
Node.js 환경구성 및 server program

DB Server

Data 저장

번외) 참고

Cloud Design Pattern : 문제 해결을 위한 infra 구성에 대한 검증된 구성 방법

3. TIF

초반 단순 데이터베이스만 다룰 때만 해도 이미 여러번 배운 익숙한 것에 제대로 방심했다가 후반부에 제대로 된통 당했다. 설상가상으로 한창 실습이 가장 빡쎌 때 내 집의 모든 네트워크가 버벅거리면서 그거 수습하느라 진도를 못따라가서 말그대로 핵망폭망. 늘 그렇듯 겨우겨우 따라잡긴 했지만 결국 마지막 nginx 어플리케이션 서버 DB 연결은 끝끝내 원인을 못찾은 채 에러만 난 상태로 끝나고 말았다.

놀라운건 오늘이 AWS 챕터의 마지막 날이었다는거. 어쩐지 오늘 진도가 막판에 엄청 쭉쭉 나가더라. 다음주부턴 IaaC를 나간댔는데 부디 오늘의 망한 인스턴스들 말고 새 인스턴스로 진행했으면 하는 바램이다.

0개의 댓글