전체 글 (166)

09
07

콘솔에 출력

텍스트 에디터를 이용해 소스를 입력하고 main.js로 저장한다.

 

Node.js가 설치되어 있지 않다면 설치

 

Node.js 설치 과정

 

콘솔에서 Node.js 버전 확인

 

콘솔에서 main.js 실행

 

Visual Studio Code에서 작성했던 파일 있는 폴더를 열고 index.html를 생성하여 다음과 같은 소스를 넣어준다.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="main.js"></script>
</head>
<body>

</body>
</html>

 

예제 실행 화면(Ctrl + Shift + i)

 

자바스크립트 공식 사이트 : ecma-international.org, developer.mozilla.org

 

 

script async와 defer의 차이점

html은 한 줄 한 줄 읽어가며 파싱한뒤 화면을 출력하게 된다.

 

헤더 안에 JavaScript가 있는 경우

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="main.js"></script>
</head>
<body>

</body>
</html>
  • 브라우저가 한 줄 한 줄 분석하며 이해한다.
  • CSS와 병합하여 DOM요소로 변환한다.
  • Scrpit가 보이면 html을 파싱 하는 것을 잠시 멈춘 뒤 필요한 JavaScript를 서버에서 받아와 실행한다.
  • JS 파일이 엄청 크고 인터넷이 느리다면 웹사이트를 보는데 많은 시간이 소요된다.

바디 끝부분에 JS를 추가하는 경우

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div></div>
    <script src = "main.js"></script>
</body>
</html>
  • 웹페이지가 준비된 다음 JS 파일을 받아오고 실행한다.
  • 사용자가 JS를 받기 전에 웹페이지를 볼 수 있다.
  • 웹사이트가 JS에 의존적이라면, 의미 있는 콘텐츠를 보기 위해선 JS 파일을 받아오고 실행하는 시간을 기다려야 한다.

헤더 안에 JS가 있으며 async 속성 값을 주는 경우

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script asyn src="main.js"></script>
</head>
<body>
    <div></div>
</body>
</html>
  • HTML을 다운로드하여 파싱 하다 script 태그가 나올 경우 병렬로 JS파일을 받자고 명령만 한 후 파싱을 하다가 파일 다운로드 완료된 경우 파싱을 잠시 멈추고 실행을 하고 실행이 되면 파싱을 재개한다.
  • 다운로드가 병렬적으로 되어 시간을 아낄 수 있는 장점이 있지만 JS가 실행되었지만 그와 연관된 HTML이 파싱이 안되어 위험할 수 있고 파싱 하는 동안 언제든지 JS파일을 실행하기 위해 멈출 수 있기 때문에 웹페이지를 보기 위해서 기다려야 한다.
  • 다운 순서가 아니라 다운로드된 JS파일을 먼저 실행하기 때문에 순서가 상관있다면 문제가 생길 수 있다. 

헤더 안에 JS가 있으며 async 속성 값을 주는 경우

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script defer src="main.js"></script>
</head>
<body>
    <div></div>
</body>
</html>
  • HTML을 다운로드하여 파싱 하다가 script 태그가 나올 경우 병렬로 JS파일을 받자고 명령한 후 계속해서 HTML을 파싱 한다. 그 뒤 파싱이 끝나면 JS파일을 실행한다.
  • 사용자에게 웹페이지를 보여준 다음 JS를 실행한다.
  • JS 파일을 순서대로 실행하기 때문에 정의한 순서, 원하는 순서를 지킬 수 있다.
  • 가장 안전한 방법이다.

 

자바스크립트 공부 방향

  • 바닐라 자바스크립트 파일을 작성할 때는 'use strict';를 작성하는 것이 좋다. 비상식적인 문법 사용을 막는다.(ex. 선언되지 않은 변수를 사용 등)
  • 효율적으로 자바스크립트를 분석하여 성능개선에 도움이 된다.
COMMENT
 
09
07

1993

  • Mosaic Web Browser

1994

  • Netscape Navigator(80%의 점유율) : 하이퍼링크 사용, 정적인 웹사이트

1994.09

  • 동적인 웹사이트를 위해 LiveScript Interpreter 추가

1995

  • Java의 인기에 편승하기 위해 이름을 JavaScript로 변경
  • Netscape의 Netscape Navigator를 Microsoft가 Reverse engineering 해 JScript라고 명명
  • Microsoft에서 Internet Explorer를 내놓음.

1996

  • ECMA International에 표준안 제안

1997.7

  • ECMAScript1 Language Specification

1998

  • ECMAScript2

1999

  • ECMAScript3(error handling)

2000

  • ECMAScript4(optional type annotation, class, Enterprise scale)
  • Internet Explorer 점유율이 올라감

2004

  • Firefox 출시
  • AJAX 도입
  • JQuery, dojo, mootools 라이브러리 등장

2008

  • Chrome 출시
  • JIT(just-in-time compilation)

2009

  • ECMAScript5

2015

  • ECMAScript6(default parameter, class, arrow function, const, let)

2016

  • ECMAScript7

2017

  • ECMAScript8

2018

  • ECMAScript9

2019

  • ECMAScript10

 

JavaScript Engines

  • Chrome : V8(node js, ELECTRON에서 많이 사용)
  • Firefox : SpiderMonkey
  • Safari : JSCore
  • MS Edge : Chakra
  • Opera : Carakan
  • Adobe Flash : Tamarin

현재 가고 있는 방향

  • SPA(Single Page Application)

이용할 수 있는 분야

back-end, mobile app, desktop

 

뜨고 있는 다른 기술

WA

 

 

COMMENT
 
09
05

TableSpace

  • 데이터를 어딘가 저장해놓고 사용하는 시스템
  • 데이터 저장 단위 중 가장 상위에 있는 단위
  • 논리적 단위 : 데이터 블록 → 익스텐트 → 세그먼트 → 테이블스페이스
  • 데이터 블록 여러 개가 모여 익스텐트 하나를 만들고, 익스텐트 여러 개가 모여 하나의 세그먼트를 구성

TableSpace 생성

create tablespace [테이블 스페이스명]
datafile 'D:\dev\oradata' -- 파일경로
size 10M -- 초기 데이터 크기 설정
autoextend on next 10M -- 초기 크기 공간을 모두 사용하는 경우 자동으로 파일의 크기가 커지는 기능
maxsize 100M -- 데이터파일이 최대로 커질 수 있는 크기 지정 기본값 = unlimited
uniform size 1M -- EXTENT 한개의 크기를 설정

 

전체 TableSpace 조회

select * from dba_tablespaces;

 

전체 TableSpace 경로 및 용량

SELECT A.TABLESPACE_NAME "테이블스페이스명"
       A.FILE_NAME "파일경로",
       (A.BYTES - B.FREE) "사용공간",
       B.FREE "여유공간",
       A.BYTES "총크기",
       TO_CHAR((B.FREE/A.BYTES * 100),'999.99')||'%' "여유공간"
  FROM (
         SELECT FILE_ID,
                TABLESPACE NAME,
                FILE_NAME,
                SUBSTR(FILE_NAME,1,200) FILE_NM,
                SUM(BYTES) BYTES
           FROM DBA_DATA_FILES
       GROUP BY FILE_ID, TABLESPACE_NAME, FILE_NAME, SUBSTR(FILE_NAME,1,200)
       ) A,
       (
         SELECT TABLESPACE_NAME,
                FILE_ID,
                SUM(NVL(BYTES,0)) FREE
           FROM DBA_FREE_SPACE
       GROUP BY TABLESPACE_NAME,FILE_ID
       ) B
 WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME
   AND A.FILE_ID = B.FILE_ID;

 

테이블의 TableSpace 변경

alter table [테이블명] move tablespace [테이블 스페이스명]

 

TableSpace 속성 변경

-- 해당 테이블스페이스의 물리적인 파일의 이름 또는 위치변경
alter tablespace rename [A] to [B];

-- 해당 테이블 스페이스의 용량을 1024메가로 변경
alter tablespace [테이블스페이스명] add datafile [추가할데이터파일명] size 1024M;

-- 해당 데이터파일경로에 해당하는 테이블스페이스의 크기가 FULL이 되면 자동으로 100메가씩 증가
alter database datafile [데이터파일경로] autoextend on next 100m maxsize unlmited;

 

TableSpace 삭제

-- 테이블스페이스 내의 객체(테이블, 인덱스 등)를 전체 삭제
drop tablespace [테이블 스페이스명] include contents;

-- 테이블스페이스의 모든 세그먼트를 삭제(데이터가 있는 테이블 스페이스 제외)
drop tablespace [테이블 스페이스명] including contents;

-- 삭제된 테이블스페이스를 참조하는 다른 테이블스페이스 테이블로부터 참조무결성 제약조건을 삭제
drop tablespace [테이블 스페이스명] cascade constraints;

-- 테이블 스페이스의 물리적파일까지 삭제
dropo tablespace [테이블 스페이스명] including contents and datafiles;

 

TableSpace 작동방식

오라클에서는 테이블스페이스라 불리는 테이블이 저장될 공간을 먼저 만들고 난 뒤 테이블을 생성한다. 테이블이 실질적으로 저장되는 장소라고 생각하면 된다. 이러한 작동방식은 각각의 테이블을 테이블스페이스 별로 나누어 관리하므로 퍼포먼스의 향상을 가져온다. 테이블스페이스를 생성하면 정의된 용량만큼 미리 확보한 테이블스페이스가 생성되고 생성된 테이블스페이스에 테이블의 데이터가 저장된다. 이렇게 설정된 테이블스페이스에 용량이 가득 차면 오라클 서버가 죽는다. 그러므로 관리를 잘해주어야 한다. 하지만 테이블스페이스마다 용량을 너무나 크게 잡아버리면 실질적으로 저장된 용량이 적더라도 가변적으로 max 용량이 줄지 않는다. 그러므로 용량 낭비로 이어질 수 있다.

테이블스페이스는 자동으로 할당해주는 부분이 많아 DBA가 아니면 건드릴 일이 거의 없다.

'스마트팩토리 > 오라클' 카테고리의 다른 글

프로시저(PROCEDURE)  (0) 2020.09.15
계정과 스키마  (0) 2020.09.10
오라클 SQL 문법  (0) 2020.08.27
오라클 데이터 타입  (0) 2020.08.27
C#과 오라클 연동해보기  (0) 2020.08.26
COMMENT
 
09
03

JavaScript Class

자바스크립트에서 클래스란 생성자 함수다. 함수가 특정 기능을 하는 구문(알고리즘, 로직)을 묶을 때 사용하는 문법이라면, 클래스는 이렇게 만들어진 수많은 변수와 함수 중 연관 있는 변수와 함수만을 선별해 포장하는 기술이다. 이렇게 클래스로 포장하는 이유는 객체 단위로 코드를 그룹화할 수 있으며 코드를 재사용하기 때문이다.

 

클래스로 포장하는 이유

객체 단위로 코드 그룹화 및 코드 재사용성을 사용하기 위함이다. 함수와 비교해서 설명하면 다음과 같이 비교할 수 있다.

 

1) 함수기반 단위

특정 기능을 하는 변수, 구문(알고리즘) 등을 감싸는 것이다.

기능 : 기능 단위의 코드 그룹화, 기능 단위의 중복 코드 제거 및 코드 재사용성

 

2) 클래스기반 단위

연관 있는 변수와 함수를 감싸는 것이다.

기능 : 객체 단위의 변수와 함수, 객체 단위의 중복 코드 제거 및 코드 재사용성

 

다시 말해 UI로 슬라이더가 있는 경우 로직을 짤 때 슬라이더의 경우 indicate 기능, next, prev 버튼 등의 여러 기능들이 있을 경우 대개는 함수 기반 단위의 코딩은 슬라이더의 필요한 기능들을 각각 로직으로 구현하는데 이런 방식으로 구현하게 되면 전역 스코프도 오염될뿐더러 소스 가독성도 떨어지며 그로 인한 유지보수도 힘들어진다.

하지만 클래스 단위로 코딩을 하게 되면 슬라이더에 대한 기능들을 모두 그룹화하여 관리할 수 있게 된다. 그래서 클래스의 대표적인 기능으로 연관 있는 변수와 함수를 그룹화할 수 있다.

 

함수를 그룹화한다는 것이 중요하다. 이렇게 클래스를 사용함으로써 얻는 이점은 객체 단위의 중복 코드를 제거할 수 있으며 코드 재사용성이 좋아진다.

 

클래스(생성자)와 일반함수 비교

  클래스(생성자함수) 일반 함수
포장 내용 연관있는 변수와 함수 특정기능을 하는 변수 + 구문
기능 객체 단위의 코드를 그룹화
객체 단위의 중복 코드 제거 및 코드의 재사용성
기능 단위의 코드를 그룹화
기능 단위의 중복 코드 제거 및 코드의 재사용성

 

자바스크립트에서 클래스를 만드는 방법

사실 자바스크립트는 객체지향 프로그래밍 언어에서 기본적으로 제공하는 클래스라는 개념을 제공하지 않는다. 생성자 함수가 다른 언어에서의 클래스(class)와 유사한 개념이기 때문에 클래스를 사용할 수 있는 방법이 있다. 그렇기 때문에 자바스크립트에서 클래스는 없지만 OOP와 같이 비슷하게 사용할 수 있는 문법이 존재한다.

 

자바스크립트에서 클래스를 만드는 방법

  1. 리터럴 방식
  2. 함수 방식
  3. 프로토타입 방식

리터럴 방식의 클래스

var 인스턴스 = {
	프로퍼티1 : 초기값,
	프로퍼티2 : 초기값,
	메서드1 : function() {
	},
	메서드2 : function() {
	}
}

 

함수 방식의 클래스

function 클래스이름(){
	this.프로퍼티1 = 초기값1;
	this.프로퍼티2 = 초기값2;
	
	this.메서드1 = function(){
	}
	this.메서드2 = function(){
	}
}

var 인스턴스 = new 클래스이름();

 

프로토타입 방식의 클래스

function 클래스이름(){
	this.프로퍼티1 = 초기값;
	this.프로퍼티2 = 초기값;
}

클래스이름.prototype.메서드1 = function(){
}

클래스이름.prototype.메서드2 = function(){
}

 

세 가지 패턴마다 장,단점이 존재하기 때문에 상항에 맞게 선택적으로 사용해야 한다. 예를 들면 함수 방식의 클래스는 인스턴스를 생성할 때마다 내부의 모든 메서드가 독립적으로 만들어진다. 즉, 인스턴스마다 중복 변수와 중복 메서드들이 생성된다.

 

인스턴스(instance)

일반적인 함수의 경우는 함수를 선언한 후 함수를 호출해줘야 동작하듯 클래스의 경우는 클래스 인스턴스를 생성해야만 클래스에 들어 있는 함수들의 내부 기능들을 사용할 수 있다. 클래스는 설계도, 인스턴스는 실체다.

 

인스턴스 생성방법

var 인스턴스 = new 클래스이름(); //new 키워드를 사용

 

객체(Object)

객체는 인스턴스의 또 다른 이름이고, 상황에 따라 인스턴스 또는 객체로 부른다. 인스턴스는 주로 new 연산자를 이용하여 클래스의 실체를 생성할 때 사용하고 이외에 클래스에서 제공하는 프로퍼티와 메서드를 사용한다고 했을 때의 경우를 객체라고 말한다.

그리고 프로퍼티는 클래스 내부에 만드는 변수를 프로퍼티라고 부르며 멤버 변수라고도 한다. 메서드는 클래스에 만드는 함수들을 메서드라고 부르며 멤버 함수라고도 부른다. 메서드는 주로 객체의 프로퍼티 값을 변경하거나 알아내는 기능과 클래스를 대표하는 기능이 담기게 된다.

'스마트팩토리 > JS' 카테고리의 다른 글

프로토타입 기반 프로그래밍  (0) 2020.09.03
자바 스크립트 객체지향 프로그래밍  (0) 2020.09.03
COMMENT