프로그램 언어

종류

고급언어

인간이 이해하고 접근하기 쉬운 언어.

하드웨어와 관련 지식 없어도 프로그램 작성가능

고급언어로 작성된 원시프로그램은 기계어로 변역해야하는 번거로움있음

저급언어보다 작성 및 수정이 편리, 호환성 우수

저급언어

기계중심적 언어. 기계어와 1:1 대응됨. 그래서 자연어보다 수준이 낮음

컴퓨터 아키텍쳐마다 사용하는 기계어가 다름 → 기계어에 대응되어 만들어지는 어셈블리어도 각각 다름

회사별 cpu에 맞도록 코드를 작성해야함

기계어

컴퓨터가 직접 이해할 수 있는 0과1로 작성된 언어.

효율 높지만 언어자체가 복잡하여 많은 시간과 노력 필요

목적프로그램(오브젝트 프로그램)

어셈블리, 고급언어로 쓰인 프로그램을 기계어로 번역한 프로그램.

 

  1. 링커 : 모듈이 여러개인데, 이걸 하나로 묶어주는 역할을 함 → 이 동작을 링크라고 함
  2. 로더로 주기억장치에 로딩을 한다

시스템소프트웨어의 계층구조

어셈블러

초기엔 몇개의 명령어만 해독할수있는 단순한 형태라 프로그래머들이 이진수로 작성함

이게 너무 어렵고 복잡하고 노가다라 인간이 이해하기 쉽도록 어셈블리어 개발

링커

일반적인 프로그램은 여러개의 원시모듈로 나눠작성

원시모듈은 각각의 어셈블러에 의해 어셈블되어 목적모듈로 만들어져 보조기억장치에 저장

모듈들을 실행할때는 링커가 이것들을 연결하여 적재모듈을 만듦

로더

운영체제의 일부분으로, 컴퓨터에 프로그램을 적재하기 위한 프로그램.

목적프로그램을 주기억장치에 적재하는 역할

로더는 어셈블러에 비해 매우작고 기억장치를 조금만 차지

절대적 적재방법 , 재배치 적재방법

매크로프로세서

매크로정의 : 약어로 정의

매크로호출 :필요한 부분에서 호출

매크로확장:매크로가 발견되는 모든곳에 실제코드를 치환하여 확장

프로그램이 간단해지고 반복적인 코딩을 처리.

언어처리기 또는 전처리기(preprocessor)라고 함.

  • 매크로프로세서의 기능
    1. 매크로정의 인식
    2. 매크로정의 저장
    3. 매크로호출의 인식
    4. 매크로호출 확장
    5. 인수치환의 기능

인터프리터

컴파일러

운영체제(Operating System)

주기억장치내에 상주하면서 컴퓨터의 효율적 운영을 담당하는 소프트웨어 인간과 컴퓨터간의 인터페이스

운영체제의 목표

  1. 하드웨어와 소프트웨어 자원들을 관리하고 제어
  2. 사용자에게 편리한 인터페이스 제공
  3. 수행중인 프로그램들의 효율적인 운영 제공
  4. 작업처리과정중에 데이터 공유
  5. 입출력에서 보조적인 기능 수행
  6. 오류가 발생하면 오류를 원활하게 처리

운영체제의 자원관리

  • 프로세스 관리
  • 작업관리
  • 주기억 장치 관리 - 메모리 할당, 헤제
  • 보조기억 장치 관리 - 디스크 스케줄링
  • 입출력장치 관리
  • 파일관리
  • 보안관리

최근운영체제의 주요특징

  • 멀티미디어 자원 관리
  • 윈도우 및 그래픽 사용자 인터페이스의 일반화 → 메뉴와 클릭만으로 컴퓨터와의 편리한 상호작용
  • 보안기술 강화
  • 객체지향기술 → GUI, OLE에서 객체지향 기술 일부 적용
  • UNIX기능 확장
  • 윈도우의 대중화
  • 리눅스사용의 확대 PC용 UNIX라고 할수있는 리눅스의 확대

유닉스

초기에 어셈블리어로 되었으나 C언어로 다시 작성하고 소스코드를 공개함

리눅스


요점정리

  • 컴퓨터 시스템은 하드웨어와 소프트웨어로 구성
  • 하드웨어는 시스템을 구성하고 데이터를 처리하는 물리적인 기기로 중앙처리장치, 기억장치, 입출력장치로 구성
  • 컴퓨터 하드웨어의 기능
    • 입력장치는 자료를 읽는다.
    • 기억장치는 자료를 기억하며 주기억장치와 보조기억장치로 구분된다.
    • 제어장치는 자료의 처리 순서를 지시한다.
    • 연산장치는 자료의 처리를 수행한다.
    • 출력장치는 처리된 결과를 출력한다.
  • 컴퓨터 소프트웨어
    • 시스템소프트웨어 : 컴퓨터를 작동시키고 컴퓨터의 활동을 조정, 통제, 관리하는 모든 종류의 프로그램
    • 응용 소프트웨어 : 프로그램 중에서 특정한 업무를 해결하기 위한 목적으로 가지고 만든 프로그램
  • 사용자 프로그램
    • 저급언어 : 기계어와 비슷한 언어이며 프로세서에 따라서 사용법이 다르다. 기계어, 어셈블리어
    • 고급언어 : 자연어와 비슷한 언어. COBOL, FORTRAN, PASSCAL, C++, BASIC, C, JAVA.
  • 시스템소프트웨어의 계층구조
    • 어셈블러
    • 링커
    • 로더
    • 매크로프로세서
    • 인터프리더
    • 컴파일러
    • 운영체제

컴퓨터란, 근본적으로 전류를/ 특수하게 만든 회로 위에 흐르게 하여 스위치를 껐다켰다 하는 간단한 금속체.

시스템(컴퓨터시스템)의 범위

하드웨어+운영체제

시스템프로그래밍

  • 컴퓨터 시스템을 활용하는 소프트웨어 개발
  • 윈도우 운영체제 자체의기능을 활용

컴퓨터 시스템의 주요 구성요소

  1. CPU, 캐쉬 컴퓨터 하드웨어 구조
  2. 운영체제 메인메모리 : 메모리 관리 기법 하드디스크 : 파일I/O, 다양한I/O포함

 

컴퓨터 시스템의 발전

  • 파스칼이 최초로 덧셈뺄셈이 가능한 기계식 수동계산기 발명 초기의 컴퓨터는 수치계산용도로 개발되었다
  • 현대 과학기술이 급속히 발전하면서 컴퓨터 시스템 등장. 프로세서 및 메모리가 마이크로 프로세서로 대체되어 크기는 작아지고 성능은 향상

컴퓨터 시스템의 구성

1. 하드웨어

하드웨어 도식

CPU (central processing unit, 중앙처리장치)

제어장치 + 연산장치 + 레지스터로 구성

  • ALU (산술논리연산장치, 연산장치)
  • 레지스터 cpu의 작은 기억장치. 영구적으로 저장하는것이 아닌 연산에 필요한 자료나 컨트롤 유닛이 해석하기 위한 명령어 등을 임시로 보관
  • 컨트롤유닛(제어장치) 명령어가 어떤일을 하는건지 해독 어떠한 자료를 어떻게 처리할지 순서들을 지시할 수 있는 장치
  • 버스인터페이스 : 입출력버스와 중앙처리장치의 입출력을 도움
  • 입출력버스 : 장치들과 자료를 주고받는 통료. 전기적인 신호에 의해 데이터를 저장

2. 기억장치

ROM (read only memory) : 읽기만 가능한 기억장치. 비휘발성(꺼져도 지워지지않음)

- mask rom : 제조사에서 미리 기억을 시키고 사용자가 변경불가

- prom : 제조된 후 사용자가 딱 한번 기록가능

- eprom : 자외선을 이용하여 기록된 지우고 다시 기록한다

- eeprom : 전기적인 방법으로 내용을 지우고 다시 기록한다

RAM : 데이터 읽기쓰기 가능. 휘발성(끄면 사라짐)

- DRAM (Dynamic ram, 동적램) : 전원이 연결되어도 일정주기마다 재충전해야 유지 전력소모가 경제적이여서 대량생산 가능 (일반적으로 생각하는 램이 Dram으로 구성)

- SRAM(Static ram, 정적램) : 캐시메모리(cpu에 가까운 메모리). 빠르고 원하는 내용에 즉시접근가능. 고속처리가 요구되는 장치에 사용. 비싸다

3. 보조기억장치

영구히 저장 가능한 보관장치. 디스켓, 씨디, 플래시메모리, 하드,ssd 등..

4. 입출력장치

입력 : 키보드, 마우스, 마이크, 스캐너 등

출력 : 모니터, 스피커, 프로젝터, 프린터 등등

시스템소프트웨어 : 어셈블러, 마이크로프로세서,컴파일러, 로더, 유틸리티(압축, 백신 등)

응용소프트웨어 : 업무용 OA, 게임 등 특수목적으로 만들어진 프로그램


시스템 소프트웨어

정의

컴퓨터를 작동시키고 활동을 조정, 통제, 관리하는 모든 종류의 프로그램 사람과 컴퓨터간의 대화를 가능하게 함

운영체제

하드웨어와 소프트웨어를 관리하는 컴퓨터 시스템의 한 부분

하드웨어를 제어하고 컴퓨터의 자원을 관리하며 컴퓨터 사용을 편리하게 도와줌

언여번역프로그램

원시언어로 작성된 사용자 프로그램을 컴퓨터가 이해할 수 있는 형태로 변환하는 소프트웨어

어셈블러, 컴파일러, 인터프리터

로더

기계어 프로그램을 수행할 수 있도록 준비하는 시스템소프트웨어

목적프로그램이 보조기억장치에서 주기억장치로 이동시키는 역할

매크로프로세서

프로그래머가 약어를 사용할 수 있게 함


응용소프트웨어

(=응용프로그램)

시스템소프트웨어의 도움을 받아 사용자가 실제 원하는 일을 해주는 프로그램


요점정리

  • 컴퓨터 시스템은 하드웨어와 소프트웨어로 구성된다.
  • 하드웨어는 중앙처리장치, 기억장치, 입출력장치로 구성된다.
  • 처리장치는 주기억장치, 제어장치, 연산장치로 구성되며 제어장치와 연산장치를 합쳐 중앙처리장치라고 한다.
  • 소프트웨어는 시스템 소프트웨어와 응용 소프트웨어로 구분된다.
  • 시스템소프트웨어 : 컴퓨터를 작동시키고 컴퓨터의 활동을 조정, 통제, 관리하는 모든 종류의 프로그램
  • 응용 소프트웨어 : 프로그램 중에서 특정한 업무를 해결하기 위한 목적으로 가지고 만든 프로그램
class Solution {
    public int solution(int a, int b, int c) {
        if (a != b && a != c && b != c) {
            return a + b + c;
        } else if (a == b && a == c) {
            return (a + b + c) * (a * a + b * b + c * c) * (a * a * a + b * b * b + c * c * c);
        } else {
            return (a + b + c) * (a * a + b * b + c * c);
        }
    }
}

 

 

SYSDATE

시스템의 현재 날짜와 시간을 반환한다

결과는 'YY/MM/DD HH24:MI:SS'로 표시한다

 

SYSTIMESTAMP

시스템의 현재 날짜와 시간,분,초,밀리초를 등을 반환한다.

결과는 'YY/MM/DD HH24:MI:SS.FF TZR TZD'로 표시한다

 

EXTRACT

SELECT
    EXTRACT(추출할요소 FROM 날짜컬럼)
FROM
    테이블;

 

함수 사용 설명
EXTRACT(YEAR FROM 날짜데이터 ) 연도
EXTRACT( MONTH FROM 날짜데이터 )
EXTRACT( DAY FROM 날짜데이터 )
EXTRACT( HOUR FROM 날짜데이터) 시간
EXTRACT( MINUTE FROM 날짜데이터 )
EXTRACT( SECOND FROM 날짜데이터 )

 

DATE 타입의 데이터를 지정한 요소만 추출해 NUMBER 타입으로 표시해준다.

 

현재시간에서 추출 할 때 시간부터는 SYSTIMESTAMP만 사용하도록 한다.

만약 계속 SYSDATE를 사용한다면

[ORA-30076: 발췌 소스에 발췌 필트가 부적당합니다] 라는 메세지가 표시된다.

 

TO_CHAR

SELECT
    TO_CHAR(날짜데이터,'포맷')
FROM
	테이블;

 

함수사용 설명 SYSDATE 추출결과
TO_CHAR( 날짜데이터, 'YYYY' ) 연도를 4자로 표시 2023
TO_CHAR( 날짜데이터, 'YY' ) 연도를 2자로 표시  
     
TO_CHAR( 날짜데이터, 'MM' ) 월을 2자로 표시 09
TO_CHAR( 날짜데이터, 'MON' ) 월을 X월, XX월로 표시 9월
     
TO_CHAR( 날짜데이터, 'DD' ) 일자를 2자로 표시  27 (1일인경우 '01'로 표시)
TO_CHAR( 날짜데이터, 'DDD' ) 1년중 몇 번째날인지 3자로 표시 270 (1월1일인경우 '001'로 표시)
     
TO_CHAR( 날짜데이터, 'D' ) 한 주중 몇 번째 날인지 표시 (1은 일요일 ) 4
TO_CHAR( 날짜데이터, 'DAY' ) 요일 3자로 표시 수요일
TO_CHAR( 날짜데이터, 'DY' ) 요일을 1자로 표시
     
TO_CHAR( 날짜데이터, 'WW' ) 1년중 몇 번째 주인지 표시 39
TO_CHAR( 날짜데이터, 'W' ) 1달중 몇 번째 주인지 표시 4
     
TO_CHAR( 날짜데이터, 'AM' ) 오전인지 오후인지 표시(PM과 동일) 오후
TO_CHAR( 날짜데이터, 'PM' ) 오전인지 오후인지 표시(AM과 동일) 오후
     
TO_CHAR( 날짜데이터, 'HH' ) 시간을 01~12시로 표시 07
TO_CHAR( 날짜데이터, 'HH24' ) 시간을 01~24시로 표시 19
     
TO_CHAR( 날짜데이터, 'MI' ) 분을 0~59분으로 표시 16
     
TO_CHAR( 날짜데이터, 'SS' ) 초를 01~ 5초로 표시 05

 

DATE데이터를 CHAR타입으로 변환시켜주는 TO_CHAR()을 이용하여

날짜데이터를 원하는 포맷으로 표시할 수 있다.

 

고정문자열이기때문에 1월, 1일도 '01'로 표시된다.

0을 없애고 싶을 땐 포맷앞에 FM을 같이 넣어주거나 NUMBER타입으로 변환한다.

 

EXTRACT와의 차이점은 타입 차이도 있지만 TO_CHAR()가 포맷이 더 많은편이다. 

 

포맷 출력결과
TO_CHAR( 날짜데이터, 'YYYYMMDD' ) 20230927
TO_CHAR( 날짜데이터, 'YYYY-MM-DD' ) 2023-09-27
TO_CHAR( 날짜데이터, 'YYYY/MM/DD' ) 2023/09/27
TO_CHAR( 날짜데이터, 'YY/MM/DD' ) 23/09/27
TO_CHAR( 날짜데이터, 'DL' ) 2023년 9월 27일 수요일
TO_CHAR( 날짜데이터, 'HH:MI:SS' ) 08:20:23
TO_CHAR( 날짜데이터, 'HH24:MI:SS' ) 20:20:23

 

정해진 포맷 외에 원하는 표시형식이 있다면 SUBSTR, ||로 조합하여 붙여줄 수 있다.

 

SELECT
	TO_CHAR(SYSDATE,'YYYY')||'년의 '||TO_CHAR(SYSDATE,'DDD')||'번째 날입니다.'
FROM
	DUAL;

 

 

오라클 공식문서 

SYSDATE (oracle.com)

SYSTIMESTAMP (oracle.com)

EXTRACT (datetime) (oracle.com)

TO_CHAR (datetime) (oracle.com)

'DB' 카테고리의 다른 글

서브쿼리 종류  (0) 2023.09.25

서브쿼리란

쿼리 안의 쿼리


서브쿼리의 종류

 

* WHERE절에서 사용

- 단일행 서브쿼리

서브쿼리의 결과가 1건인 서브쿼리
비교연산자(=,<,>등)는 단일행만 사용가능

 

 

- 다중 행 서브쿼리

서브쿼리의 결과가 여러건인 서브쿼리
다중행 비교연산자(IN, ALL, ANY, SOME) 사용

 

 

- 다중 칼럼 서브쿼리

여러컬럼을 한번에 비교한다

 

 

- 연관 서브쿼리

서브쿼리 안에서 메인쿼리의 컬럼을 사용한다

 

 

* 스칼라 서브쿼리 (SELECT절에서 사용)

서브쿼리 결과가 1셀만 반환

 

 

* 인라인 뷰 (FROM절에서 사용)

서브쿼리 결과를 테이블처럼 사용

 

 

* HAVING절에서 사용

그룹핑된 결과에 조건을 주기 위해 사용

 

 

* VALUES(INSERT문에서 사용)

서브쿼리의 결과를 삽입하기 위해 사용

 

 

* SET(UPDATE문에서 사용)

서브쿼리 결과로 수정하기 위해 사용

 


서브쿼리 사용시 고려할것

서브쿼리와 조인의 성능에 대한 부분을 고려해보아야 한다.

 

데이터의 양이 적은경우엔 큰 차이가 없지만

데이터가 많을수록 서브쿼리를 사용할 때 성능이 저하될 수 있다.

(무조건 서브쿼리가 성능을 저하시킨다는것은 아니고, 서브쿼리가 더 빠른 상황도 있다.)

 

* 서브쿼리가 메인쿼리보다 먼저 실행된 후 메인쿼리가 실행됨

* 몇몇 DBMS에서는 서브쿼리 최적화가 제한적이여서 가능한 사용하지 않는게 좋을수도 있음

* 서브쿼리가 어디에 어떻게 있느냐에 따라 인덱스를 제대로 활용하지 못하여

풀스캔같이 비효율적인 작업이 발생할 수 있음

 

-> 조인이 가능한경우 서브쿼리보다 최적화 된 조인을 사용한다

-> CTE (WITH)를 사용한다.

 

인라인뷰냐 스칼라냐

DMBS를 어떤것을 사용하냐, 어떤쿼리냐에 따라 달라지므로
꼭 ㅇㅇ가 좋다 라는 법은 없다.

 

복잡한 쿼리의 경우 인라인뷰를 사용하여 쿼리를 여러 단계로 분할하는것이 좋은 경우가 많고

단순한 추가정보를 가져오는데에는 스칼라 서브쿼리가 적합한 경우가 많다

'DB' 카테고리의 다른 글

[SQL/Oracle] 날짜 함수 정리  (0) 2023.09.27

+ Recent posts