반응형

    ① DB에서 인덱스를 사용하는 이유

    -

DB에 저장한 데이터는 HDD와 같은 저장매체에 저장되고, 각 데이터는 HDD의 주소와 매핑된다.

    - DB에서 어떠한 데이터를 SELECT 하는 경우, DB(HDD)에서 전체 내용을 검색한다(Full Scan).

    - 경우에 따라, 데이터 1건을 찾기 위해 HDD 전체 내용을 뒤져야 하는 경우 시간 소모가 많이 발생한다.

    - 하지만, 찾고자 하는 데이터와 그 데이터가 저장된 주소값이 매핑 테이블로 관리되고 있다면, 찾고자 하는 데이터의 주소값에 직접 접근할 수 있으므로 Full Scan 보다 시간을 획기적으로 단축시킬 수 있다.

    - 이러한 원리로 이용하는 것이 DB index이며, index는 데이터와 그 데이터가 저장된 주소값(row id)으로 관리 된다.

    - 인덱스 생성시 원래 테이블에 있던 데이터는 그대로 두고, 다른 메모리 영역(pga라는 sort area, temporary table space)로 데이터를 가져와서, Indexing 정의에 따라 HDD 블록에 기록된다.

 

    ②  rowid를 구성하는 18자리 의미
    - 6자리 : data object 번호
    - 3자리 : 파일 번호
    - 6자리 : 파일의 block 번호

    - 3자리 : row 번호 (테이블 내에서 몇번째 위치)

scott 계정 접속하여 DEPT 테이블의 rowid 확인

 

    ③ 인덱스 생성 방법

    - Unique Index

    - 명령어) create unique index  인덱스명 on 테이블명(컬럼명);

테스트를 위한 테이블 생성 : DEPT_TEST

 

 

DEPT_TEST 테이블을 unique index로 설정 및 index에 중복 데이터 추가

 

    - Non-Unique Index

    - 명령어) create index  인덱스명 on 테이블명(컬럼명);

테스트를 위한 테이블 생성 : EMP_TEST

 

EMP_TEST 테이블에 Non-Unique Index 설정 및 index에 동일 데이터 추가

 

 

    ④ 인덱스 확인 및 삭제

    - 테이블에 설정된 Index 정보 확인

    - 명령어) SELECT  *  FROM  USER_INDEXES  WHERE  TABLE_NAME='[테이블명]';

    - 명령어) SELECT  *  FROM  USER_IND_COLUMNS  WHERE  TABLE_NAME='[테이블명]';

DEPT_TEST 테이블에 생성된 index 정보 확인

 

EMP_TEST 테이블에 생성된 index 정보 확인

 

    - 인덱스 삭제 명령어) DROP INDEX [인덱스명];

DEPT_TEST, EMP_TEST 테이블에 생성된 index 삭제

 

    ⑤ 인덱스 종류

    - B-Tree 인덱스 : 데이터 종류(colum 수)가 많으면서, 데이터(row 수)가 적은 경우 사용. 

    - FBI(Function Based Index, 함수 기반 인덱스) : WHERE절에서 index로 설정한 컬럼이 함수와 엮이게 되면, index 효과가 나타나지 않음.

    - Decending Index (내림차순 인덱스) : 설정한 컬럼을 기준으로 내림차순 정렬

    - Composit Index (결합 인덱스) : 두개 이상의 컬럼들을 합쳐서 하나의 index로 생성
    - Bitmap 인덱스 : 데이터가 있는 자리만 1로 표시하고, 그렇지 않은 행은 0으로 표시해서 map을 구성해서 관리하는 방식으로 새로운 데이터가 추가되거나 수정되면 bitmap을 다시 생성해야 하는 단점이 있지만 성능은 좋다.

 

 

    ⑥ Index와 성능의 관계

    - 인덱스를 생성하면 성능이 좋아진다? 경우에 따라서 full-scan보다 늦어질 수 있다.
    - INSERT 경우,
       인덱스가 없는 테이블) 그냥 넣으면 된다.
        인덱스가 있는 테이블) 정렬순서대로 insert해야 하므로 테이블이 갈라지면서 여러번에 걸쳐 작업해야 한다.

                                                   (index split 현상)
    - DELETE 경우,
       인덱스가 없는 테이블) 그냥 지워진다.
        인덱스가 있는 테이블) 테이블에서는 데이터가 지워졌지만, 인덱스에서는 지워지지 않고 사용하지 않는 표시
.

                                                  이러한 경우가 누적되면 쿼리 속도가 늦어질 수 있다.
    - UPDATE 경우,
       인덱스가 있는 테이블) DELETE 후 INSERT 작업을 하므로 부하가 발생한다.

 

    ⑦ Index Rebuild

    - index 작업 후 취약점 또는 개선사항 발견 후, index를 새롭게 구성하는 것.

    - index를 한번 생성해 놓았다고해서 영구적으로 좋은 성능을 유지할 수 없기 때문에 꾸준한 관리가 필요.

    - 명령어) analyze  index  [ 이블명]  validate  structure;

    - 명령어) alter  index  [테이블명]  rebuild;

 

    ⑧ Invisible Index

    - index 삭제 전 사용안함 상태로 만들어 테스트할 수 있는 기능.

    - 명령어) alter  index  [인덱스명]  invisible;

    - 관련 명령어) alter  index  [인덱스명]  visible;

 

반응형
반응형

1. 시험환경

    · 리눅스

 

2. 목적

    · lsof, nslookup, telnet, netstat 등 리눅스 네트워크 명령어 사용법을 알아보자.

 

3. 적용

    ① man : CLI 명령어에 대한 사용법(usage) 문서를 볼 수 있다.

        - $ man  grep

 

    ② lsof : 특정 포트 또는 포트 범위에 대한 정보 조회

        - $ lsof  -i:8080

        - $ lsof  -i:8080-8090

 

    ③ nslookup : 입력한 DNS에 대한 IP 조회

        - $ nslookup  naver.com

        - $ nslookup  google.com

 

    ④ telnet : 입력한 IP와 Port로 통신 가능한지 확인

        - $ telnet  10.20.10.1  8080

 

    ⑤ netstat : 네트워크 상태 확인 명령어

        - $ netstat  -nalt

        - LISTEN : 클라이언트의 요청 대기 상태

        - ESTABLISHED : 클라이언트와 통신중인 상태

반응형
반응형

1. 시험환경

    · 리눅스/윈도우

    · SCP

 

2. 목적

    · SCP  명령어를 이용하여 서버간 파일 전송 방법을 알아보자.

 

3. 적용

    ① scp  [옵션]  [전송할 파일]  [전송할 서버]

 

    ② example.txt 파일을 1.1.1.1 서버의 특정 폴더로 전송

        - $ scp  file.txt  tester@1.1.1.1:/directory

 

    ③ example.txt 파일의 1.1.1.1 서버의 특정 폴더 example2.txt 이름으로 저장

        - $ scp  file.txt  tester@1.1.1.1:/directory/example2.txt

 

    ④ 포트를 지정하여 전송

        - $ scp  -P 3000 file.txt  tester@1.1.1.1:/directory

 

    ⑤ example 디렉토리 복사

        - $ scp  -r  ./example  tester@1.1.1.1:/directory

반응형
반응형

1. 시험환경

    ˙ docker

    ˙ docker-compose

    ˙ mariaDB

 

2. 목적

    ˙ docker 및 docker-compose를 이용하여 MariaDB를 기동한다.

    ˙ volumes를 이용하여 MariaDB 생성시 설정 및 데이터 Import 방법을 알아보자.

 

3. 적용

    ① MariaDB를 기동하기 위한 compose.yml을 작성하며 DB 설정 및 초기 데이터 구축을 테스트한다.

        - /etc/mysql/conf.d : MariaDB 설정 사항이 저장되면 버전, OS 등에 따라 경로는 달라질 수 있다.

        - /docker-entrypoint-initdb.d :  컨테이너 최초 실행 시 스크립트 파일(sql)에 저장된 내용이 반영된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: "3.8"
services:
  test-mariadb:
    container_name: test-mariadb
    build:
      dockerfile: Dockerfile
      context: ./mariadb
    image: mariadb
    environment:
     - MARIADB_DATABASE=world
      - MARIADB_ROOT_PASSWORD=1q2w3e
    volumes:
      - ./mariadb/config:/etc/mysql/conf.d
      - ./mariadb/init:/docker-entrypoint-initdb.d
    ports:
      - "3400:3306"
cs

 

 

    ② character-set 등 MariaDB 설정 정보 파일을 Host 경로에 저장한다.

        - 파일명 : ./mariadb/config/mariadb.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
[client]
default-character-set=utf8mb4
 
[mysql]
default-character-set=utf8mb4
 
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
 
[mysqldump]
default-character-set=utf8mb4
cs

 

    ③ MariaDB 컨테이너가 최초 기동되면서 실행할 스크립트 파일을 Host 경로에 저장한다.

        - 파일명 : ./mariadb/init/world.sql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-- world 데이터베이스 구조 내보내기
CREATE DATABASE IF NOT EXISTS `world` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin */;
USE `world`;
 
-- 테이블 world.nation 구조 내보내기
CREATE TABLE IF NOT EXISTS `nation` (
  `id` bigint(20NOT NULL AUTO_INCREMENT,
  `currency` varchar(255DEFAULT NULL,
  `lang` varchar(255DEFAULT NULL,
  `nation` varchar(255DEFAULT NULL,
  `population` int(11NOT NULL,
  PRIMARY KEY (`id`)
ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
 
-- 테이블 데이터 world.nation:~4 rows (대략적) 내보내기
DELETE FROM `nation`;
/*!40000 ALTER TABLE `nation` DISABLE KEYS */;
INSERT INTO `nation` (`id``currency``lang``nation``population`VALUES
    (1'Dollar''English''America'50000),
    (2'Frank''Swiss''Swizerland'2000),
    (3'Found''English''England'60000),
    (4'Euro''Italian''Italiy'4000);
/*!40000 ALTER TABLE `nation` ENABLE KEYS */;
cs

 

    ④ docker-compose를 실행하여 MariaDB를 기동한다.

        - > docker-compose -f compose.yml up -d

 

    ⑤ Container 실행 후 Client 도구를 이용하여 접속한다.

        - 접속 정보는 compose.yml 파일에 설정한 환경변수 등을 참고한다.

 

4. 결과

    ˙ sql 스키마 및 데이터가 Import된 것을 확인할 수 있다.

반응형
반응형

1. 시험환경

    ˙ 가비아

    ˙ AWS EC2

 

2. 목적

    ˙ 가비아에서 도메인을 구입한 것을 네임서버 변경없이 AWS EC2의 Public IP로 연결하는 방법

 

3. 조건

    ① 가비아에서 구매한 도메인을 AWS Route53에 호스팅 등록하지 않는다.

    ② 가비아 DNS 서버를 그대로 사용한다.

    ③ 가비아 DNS 관리 페이에서 AWS EC2의 Public IP를 A 레코드 등록한다.

 

4. 결과

    ˙ 결론은 안된다는 것이다. 왜 안되는지 모르겠다.

    ˙ 위와 같은 조건으로 성공하신 분은 답글 요청 부탁드립니다.

 

반응형
반응형

1. 시험환경

    ˙ docker-compose 

 

2. 목적

    ˙ docker-compose 주요 명령어를 알아보자.

 

3. 적용

    ① 프로젝트 목록 관련

        - 실행중인 프로젝트 목록 확인 : $ docker-compose ls

        - 전체 프로젝트 목록 확인 : $ docker-compose ls -a

 

    ② 프로젝트 실행 및 종료하기

        - 프로젝트 실행(Foreground) : $ docker-compose up

        - 프로젝트 실행(Background) : $ docker-compose up -d

        - 프로젝트 이름 지정 : $ docker-compose  -p [project-name] up -d

        - 프로젝트 종료(컨테이너, 네트워크) : $ docker-compose down

        - 프로젝트 종료(컨테이너, 네트워크, 볼륨) : $ docker-compose down -v

 

    ③ 컨테이너 서비스 Scale Up

        - 서비스명 확장 : $ docker-compose up --scale [service-name]=3

 

    ④ 기타

        - 서비스 로그 : $ docker-compose logs

        - 이벤트 로그 : $ docker-compose events

        - 이미지 목록 : $ docker-compose images

        - 실행중인 컨테이너 목록 : $ docker-compose ps

        - 실행중인 프로세스 목록 : $ docker-compose top

 

반응형
반응형

1. 시험환경

    ˙ 윈도우

    ˙ puttygen, putty

 

2. 목적

    ˙ puttygen을 사용하여 pem(privacy enhanced mail)을 ppk(PuTTY private key)로 변환한다.

    ˙ putty에서 ppk 파일을 Auth에 등록한다.

 

3. 적용

    ① puttygen.exe 프로그램에서 pem 확장자를 갖는 key 파일을 Import 한다.

        - Conversions → Import key : pem 확장자를 갖는  key 파일을 import 한다.

        - Save private key : Imported key를 ppk 확장자로 저장한다.

 

    ② putty 설정창에서 변환된 ppk 파일을 등록한다.

        - 위치 : Connection → SSH → Auth →Browse...

ppk 등록

 

4. 결과

    ˙ pem(privacy enhanced mail)

          - Base64 로 인코딩한 텍스트 형식의 파일

          - AWS 에서 EC2 Instance 를 만들때 접속용으로 생성하는 개인키의 형식

 

    ˙ ppk(PuTTY private key)

           - putty에서는 지원되는 개인키 형식이므로 pem 파일을 변환해서 사용

반응형
반응형

1. 시험환경

    ˙ AWS EC2 Ubuntu v20.04

    ˙ Nginx   

    ˙ React

 

2. 목적

    ˙ Nginx 웹서버를 이용하여 React 빌드 파일을 배포하는 방법을 알아보자.

    ˙ Nginx 설정을 최소화하여 단일 App을 빠르게 배포하는 경우의 해결책을 제시한다.

 

3. 적용

    ① Nginx 설치를 설치한다.

        - 참고 : https://languagestory.tistory.com/189

 

Ubuntu 20.04에서 Nginx 설치

1. 시험환경 ˙ Ubuntu v20.04 ˙ nginx 2. 목적 ˙ 리눅스(Ubuntu v20.04) 환경에서 nginx를 설치한다. ˙ nginx 서비스 시작/종료 명령어를 실행하고 서비스를 확인한다. ˙ 설치한 nginx 패키지를 삭제하는 명령어

languagestory.tistory.com

 

    ② React 프로젝트를 빌드하면 "build" 폴더에 배포 패키지가 생성된다.

        - build 명령어 : $ npm run build

React 빌드 폴더 생성

 

    ③ Nginx 기본경로에 있는 기본 파일(html)을 삭제 후 react 빌드 파일(build 하위 모든 파일)을 옮긴다.

        - Nginx 배포 기본 파일 삭제 : $sudo  rm  -rf  /var/www/html/

        - Nginx 배포 기본 경로 이동 : $sudo  cp  -R  [프로젝트]/build/*  /var/www/html/

 

    ④ Nginx를 재시작한다.

        - $sudo systemctl restart nginx

 

4. 결과

    ˙ 브라우저에 접속하여 Nginx를 이용하여 배포된 프로그램이 실행되는지 확인한다.

 

반응형

+ Recent posts