반응형

1. 시험환경

    · node.js

    · pnpm

 

2. 목적

    · pnpm 주요 개념 및 설치 방법에 대하여 알아보자.

    · pnpm 주요 명령어를 알아보자.

 

3. 적용

    ① pnpm 이란?

        - next.js, react.js 등 애플리케이션을 개발하기 위한 프레임워크이며, 패키지 매니저는 프로젝트의 의존성을 관리하는 도구.

        - pnpm은 npm이나 yarn보다 디스크 공간을 효율적으로 사용하고 설치 속도가 빠름.

        - 프로젝트를 생성하고 관리할 때 사용자는 npm, yarn, pnpm 중 원하는 패키지 매니저를 자유롭게 선택할 수 있음.

 

    ② 사용하려는 패키지 매니저에 따라 프로젝트 초기화(Next.js 프로젝트)

        - npm> npx create-next-app@latest
        - yarn> yarn create next-app
        - pnpm> pnpm create next-app

 

    ③ package.json 파일에 정의된 모든 의존성 설치

        - pnpm install

 

    ④ 프로젝트에 새로운 패키지를 추가하고 dependencies에 저장

        - pnpm add [패키지명]

 

    ⑤ 개발용 패키지를 추가하고 devDependencies에 저장

        - pnpm add [패키지명] -D

 

    ⑥ 프로젝트에서 특정 패키지를 제거

        - pnpm rm [패키지명]

 

    ⑦ 모든 패키지를 최신 버전으로 업데이트

        - pnpm up

 

    ⑧ 업데이트가 필요한 패키지 목록

        - pnpm outdated

 

    ⑨ 프로젝트 다운로드 후 pnpm 설치  및 개발환경에서 프로젝트 시작

        - npm install -g pnpm
        - pnpm install
        - pnpm dev

반응형
반응형

1. 시험환경

    · Node.js

    · Express

 

2. 목적

    · Node.js 환경에서 Express 서버를 초기화하는 방법을 알아보자.

    · API를 호출하여 동작 여부를 확인한다.

 

3. 적용

    ① 새 디렉토리 생성 후 터미널에서 아래 명령어를 실행하여 package.json을 생성한다.

        - 명령어: npm  init  -y

 

    ② 아래 명령어를 실행하여 node_modules 디렉토리에 패키지를 다운받고, package.json에 추가한다.

        - 명령어: npm  install  express

 

    ③ 서버 파일을 생성한다.

        - 파일명: server.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 필요한 모듈을 가져옵니다.
const express = require('express');
 
// Express 애플리케이션을 생성합니다.
const app = express();
 
// 서버가 수신할 포트 번호를 정의합니다.
const port = 3000;
 
// 기본적인 라우트를 설정합니다.
app.get('/', (req, res) => {
  res.send('Hello World!');
});
 
// 서버를 시작하고 특정 포트에서 요청을 수신 대기합니다.
app.listen(port, () => {
  console.log(`Server is running at http://localhost:${port}`);
});
cs

 

    ④ 터미널에서 아래 명령어 사용하여 서버를 실행한다.

        - 명령어: node   [server.js]

 

4. 결과

    · Server API를 호출하영 응답 결과를 확인한다.

반응형
반응형

1. 시험환경

    · Unreal Engine

 

2. 목적

    · 언리얼 엔진(Unreal Engine) 신규 프로젝트 생성 후 화면 조작법을 알아보자.

 

3. 적용

 

    ① Mouse 오른쪽 버튼 클릭 상태 + Mouse 이동

        - 뷰포트 카메라의 시점 변경 (주의  둘러보기)

 

    ② Mouse 오른쪽 버튼 클릭 상태 + WASD(전후좌우) / QE(위아래)

        - 키보드 W : 앞으로 이동

        - 키보드 A : 왼쪽 이동

        - 키보드 S : 뒤로 이동

        - 키보드 D : 오른쪽 이동

        - 키보드 E : 위로 이동

        - 키보드 S : 아래로 이동

 

    ③ Mouse 오른쪽 버튼 클릭 상태 + Mouse 휠 스크롤

        - 휠 위로 스크롤 : 움직임 빨라짐

        - 휠 아래로 스크롤 : 움직임 느려짐

반응형
반응형

    ① 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. 결과

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

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

 

반응형

+ Recent posts