ATLASSIAN JIRA, CONFLUNCE를 DOCKER를 이용하여 설치

atlassian jira, conflunce를 docker를 이용하여 설치

Ubuntu 16.04.01(Xenial) LTS에 docker를 이용하여 atlassian jira, confluence 설치하기

Docker Install

Pre-requisite

$ uname -r
4.4.0-45-generic
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv \
               --keyserver hkp://ha.pool.sks-keyservers.net:80 \
               --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
$ sudo echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main"  | sudo tee /etc/apt/sources.list.d/docker.list
$ sudo apt-get update
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual

Install docker

$ sudo apt-get update
$ sudo apt-get install docker-engine
$ sudo service docker start
$ sudo docker run hello-world

Install atlassian software

Make directory

$ mkdir -p /data/docker/postgresql /data/docker/confluence /data/docker/jira

Postgres

$ docker run --name postgresql -itd --restart always \
  --env 'DB_USER=user' --env 'DB_PASS=password' \
  --env 'DB_NAME=jira,confluence' \
  --publish 15432:5432 \
  --volume /data/docker/postgresql:/var/lib/postgresql \
  sameersbn/postgresql:latest

Atlassian-Jira-Software

docker run --name jira-soft -itd --restart always \
  --env 'JVM_MAXIMUM_MEMORY=1G' \
  --publish 18080:8080 \
  --volume /data/docker/jira-soft:/var/atlassian/jira \
  --link postgresql:db \
  cptactionhank/atlassian-jira-software


Atlassian-Confluence

docker run --name confluence -itd --restart always \
  --env 'JVM_MAXIMUM_MEMORY=1G' \
  --publish 18090:8090 \
  --volume /data/docker/confluence:/var/atlassian/confluence \
  --link postgresql:db \
  cptactionhank/atlassian-confluence

기타

  • License issue로 인해 prebuilt docker image가 openjdk:8 을 base image로 사용
    • atlassian software에서는 openjdk가 검증되지 않았다고 warning 메시지를 출력
    • Oracle Java installer로 변경하는게 나을 수도 – sudo apt-get -y install oracle-java8-installer
  • 데이타 백업이 필요할 때 /data/docker directory만 복사하면 됨
  • Jira, Confluence database 설정
    • PostgreSQL
    • jdbc:postgresql://<hostip>:15432/<confluence, jira>
  • docker shell 접속
    • docker exec -it jira /bin/bash

jira, confluence 이전

  • rsync 로 데이타 이전 – root 권한으로 이전
  • ubuntu 계정을 docker group에 추가
  • confluence/confluence.cfg.xml에서 db 주소 변경
  • jira/dbconfig.xml에서 db 주소 변경
  • 메일 설정
    • /etc/mail/sendmail.mc에서 DAEMON_OPTIONS... 설정. local 이외에도 접속 가능하게 변경
    • docker network inspect bridge docker ip addr 확인
      • 172.17.0.1 25로 주소 설정
    • /etc/mail/relay-domains에 172.17.0. 추가
    • nemustech 메일 서버에 jira쪽 메일 허용 Option 추가
      • postfix/sender_access ip-172…..internal OK

PC와 임베디드 시스템 환경의 개발 차이

PC와 임베디드 시스템 환경의 개발 차이
PC와 임베디드 시스템의 개발 환경은 소프트웨어 개발 환경과 소프트웨어 개발 범위에서 차이가 있다.

현재까지 대부분의 소프트웨어 개발자들은 PC에서 작업을 수행해 왔다. <그림 1>과 같이 기존의 소프트웨어 개발과정은 소스 코딩을 하고 컴파일하고 실행하는 형태가 모두 PC 환경에서 이루어졌다. 하지만 임베디드 시스템 소프트웨어 개발 과정은 소스 코딩을 하고 컴파일을 수행한 후 이를 타겟 시스템으로 전송한다. 그리고 전송된 실행 코드를 타겟에서 실행한다.

PC와

이처럼 기존의 소프트웨어 개발자가 가장 먼저 어려움을 겪고 있는 것은 개발 환경이 다르다는 것이다. 임베디드 시스템에서 프로그램의 대상이 PC가 아닌 타겟 보드이기 때문이다. PC 소프트웨어 개발은 별도의 보드가 필요 없이 PC상에서 모든 것이 이루어지기 때문에 보드가 없어도 개발이 진행된다. 그러나 임베디드 시스템의 소프트웨어 개발은 타겟 보드가 필요하다. 그러므로 개발 보드가 없이는 임베디드 환경에서 소프트웨어 개발이 불가능하다.

또한 소프트웨어 개발자라 할지라도 타겟 보드에 대한 지식이 필요하다. 타겟 보드의 CPU 구조에 대한 이해와 어셈블러, 개발 보드의 주변장치의 이해 등이 필요하다. 이러한 것이 순수 소프트웨어만을 하던 개발자들이 겪는 어려움이라고 할 수 있다. 현재의 소프트웨어 개발 환경은 임베디드 환경으로 급속히 변해가고 있기 때문에 이러한 개발 환경의 이해 없이는 개발에 매우 큰 어려움을 겪을 수 있다.

이처럼 임베디드 시스템 소프트웨어 개발자가 되기 위해서는 개발 환경을 이해하고 이러한 시스템을 PC 사용하듯 능숙히 조작하는 것이 첫 번째 과제라고 할 수 있다.

소프트웨어 개발 범위의 차이
PC에서 소프트웨어 작업은 커널이나 디바이스 드라이버가 이미 준비된 상태에서 애플리케이션 작업만을 수행하는 것이었다. 물론 하드웨어도 거의 비슷한 형태로 제공된다. 그러나 임베디드 시스템에서는 사용되는 CPU가 다르고 이를 위한 개발 환경을 구축해야 하며, 직접 커널을 포팅해야 한다. 또한 디바이스 드라이버도 해당 시스템에 맞게 제작하여야 하며 그 이후에야 애플리케이션 프로그램을 작성한다.

임베디드 시스템이란 무엇인가?
임베디드 시스템은 우리 생활에서 쓰이는 각종 전자기기, 가전제품, 제어장치 등을 말한다. 이러한 장비의 특징은 단순히 전기, 전자회로로만 구성된 것이 아니라 마이크로프로세서가 내장되어 있다는 것이다. 이렇게 내장된 마이크로프로세서는 시스템을 구동해 그 장비가 해야 하는 특정 기능을 수행하도록 프로그램이 내장돼 있다.

이와 같은 임베디드 시스템은 산업, 가전, 사무, 군사 등의 다양한 응용 분야를 가지고 있으며 적용 사례도 휴대폰, PDA, 사이버 아파트의 홈 관리 시스템, 홈 네트워크 게이트웨이 장치, 교통관리 시스템, 주차 관리시스템, 홈 관리 시스템, 엘리베이터 시스템, 현금지급기(ATM), 항공 관제 시스템, 우주선 제어 장치, 군사용 제어 장치 등 다양한 곳에 응용이 된다.

임베디드 시스템을 좀더 쉽게 이해하기 위해서 생활가전 제품인 밥솥을 예를 살펴 보자. 다음은 밥솥의 발전 단계를 나타낸 것이다.

① 전기 회로로만 구성된 전기밥솥(초기)
② 간단한 4비트 또는 8비트 마이콤이 내장된 전자밥솥(현재)
③ 일반 PC 같은 기능을 가진 32비트급 프로세서가 내장된 전자밥솥(미래)

①은 단순히 히터라는 전기회로를 통해서 열을 가하여 밥을 짓는 장치이다. ①은 사람이 모든 제어를 수행하며, 독립적인 기능을 수행할 수 없기 때문에 임베디드 시스템이라 할 수 없다. ②와 ③은 독립적으로 기능을 수행할 수 있기 때문에 임베디드 시스템이라 말할 수 있다. 이렇듯이 임베디드 시스템은 CPU가 내장되어 있어서 시스템의 기능을 제어하는 시스템이라 할 수 있다.

②와 같은 경우는 사람이 하던 제어 기능을 4비트 또는 8비트의 마이콤이 펌웨어를 통해 수행한다. 이때 펌웨어란 OS 없이 동작되는 프로그램을 말하며, 4비트 8비트 마이콤에서 사용된다. 즉 프로세스가 하나라는 의미이다. ③은 밥을 하는 고유 기능 이외에 외부와 네트워크로 연결되어서 밥을 짓는 정보를 영상이나 음성 정보를 통해서 전달받으며 이를 사용자가 쉽게 사용할 수 있도록 GUI 환경을 제공하는 기능이 추가된 시스템을 말한다.

<그림 2>와 같이 32비트를 사용하며 여러 개의 프로세스가 존재하기 때문에 펌웨어를 사용할 수 없고, OS 환경 하에 동작하는 애플리케이션이 동작되는 시스템이다. 그리고 통신 기능을 구현하여야 하기 때문에 TCP/IP와 같은 프로토콜을 구현해야 하며 그래픽 LCD 기반의 GUI 환경이 기본적인 시스템이기 때문에 시스템 규모가 ②와는 매우 다르다. 마치 PC 하나가 밥솥에 들어가 있는 형태라고 할 수 있다.

임베디드

③과 같이 임베디드 시스템은 2000년대로 들어서면서 트렌드의 변화가 오기 시작했다. ②와 같이 마이콤에 펌웨어 기반의 고유 기능을 가지고 있는 것이 기존의 임베디드 시스템이었다면 ③은 고유 기능 이외에 부가 기능을 가지고 있고 이러한 부가 기능은 많은 정보량을 요구하기 때문에 단순한 8비트의 구조를 가지고 사용할 수 없다. 그 대안으로 사용된 32비트 프로세서 기반은 여러 개의 애플리케이션을 실행하기 위한 운영체제를 필요로 했으며 이에 따라 임베디드 시스템의 수요는 날로 커져가고 있다.

현재 임베디드 시스템의 특징은 PC가 가지고 있는 기능이 임베디드 시스템에 적용된다는 것이다. 그래서 이를 포스트 PC라고도 하고, 가전에 정보 전달 기능이 강화된 형태를 유지하기 때문에 이를 정보가전이라고도 일컫는다.

임베디드 시스템 개발 과정
임베디드 개발 과정은 크게 3가지로 나눌 수 있다.

① 임베디드 시스템 하드웨어 개발 과정
② 임베디드 시스템 교차 개발환경 구축 과정
③ 임베디드 시스템 소프트웨어 개발 과정

여기서는 일반 PC 같은 기능의 32비트급 프로세서를 내장한 전자밥솥을 통해 임베디드 시스템의 개발 과정을 설명한다. 개발 순서는 먼저 밥솥의 기능을 정하고 그에 맞는 하드웨어와 소프트웨어 기능을 협의한 후 각 기능을 구현하는 것이다. 개략적으로 하드웨어의 32비트 CPU는 X스케일 기반 PXA255이고, 운영체제는 임베디드 리눅스를 사용한다.
임베디드 시스템 HW 개발 과정
<그림 3>은 밥솥의 하드웨어 구성을 나타낸 것이다. CPU는 ARM 기반의 인텔에서 제공하는 PXA 255를, 메모리는 SDRAM 32MB, 플래시 16MB를 사용했으며 밥솥의 기능을 수행하기 위해 히터 로직(Heater Logic)이 있으며 외부에 TCP/IP 기반으로 통신하기 위해서 이더넷 컨트롤러를 달았다.

또한 사용자 인터페이스 역할을 하는 3.5인치 TFT LCD를 달았고, 터치스크린을 통해 사용자로부터 입력을 받을 수 있도록 했다. 그리고 사운드 로직을 통하여 음향 및 음성 정보를 사용자에 전달할 수 있도록 하드웨어를 설계했다.

임베디드

여기서 사용되는 PXA 255는 400MHz의 속도를 가진 고성능 CPU이다. 이는 몇 년 전 PC의 CPU 속도와 같은 수준의 CPU인 것이다. 그리고 메모리 또한 PC의 메모리와 비교해도 손색이 없을 정도의 용량이다. 일반 PC는 파일 시스템을 하드디스크에 구현하지만 여기서는 플래시 메모리에 구축한다.

크로스 개발 환경 구축과정
하드웨어 제작이 끝나면 교차(cross) 개발 환경을 구축하여야 한다. 크로스 개발 환경이란 호스트에 타겟 디바이스용 리눅스를 개발하기 위한 모든 환경을 말한다. 그리고 부트로더를 컴파일하여 해당 코드를 플래시 메모리에 넣은 후 부트로더를 수정해 원하는 기능을 구현한다. 임베디드 시스템의 개발 환경은 크게 3개 사항을 고려하여야 한다.

① 컴파일 환경인 XScale용 크로스 툴 체인(tool chain)
② 부트로더를 플래시에 올리기 위한 JTAG fusing 시스템
③ 부트로더 제작

개발 환경을 설명하기에 앞서 먼저 <그림 1>의 임베디드 시스템 환경에서 나오는 용어를 살펴 보자.

◆ 타겟 디바이스 : 개발하고자 하는 임베디드 시스템 보드, 여기서는 전자밥솥이 하드웨어이며, 사양은 <그림 3>과 같다.
◆ 호스트 시스템 : 타겟을 개발하기 위한 환경을 제공하는 시스템으로서 교차 컴파일러, 모니터, 디버거 등을 제공하며, 일반적으로 PC가 호스트가 된다.
◆ 백엔드(backend) : 호스트와 타겟이 통신을 하기 위한 매개체로, <그림 1>에서와 같이 시리얼은 통신 에뮬레이터를 통해 타겟과 통신할 수 있는 통신 채널을 제공한다. 패러럴은 JTAG을 통해서 플래시에 fusing할 수 있는 통신 채널을 제공한다. 이더넷은 zImage, root filesystem image를 호스트에서 타겟으로 다운로드할 수 있는 통신 채널을 제공한다.
◆ 타겟 터미널 : 타겟의 상황을 호스트에 표시해 주는 프로그램, 즉 통신 에뮬레이터를 말한다.

컴파일 환경 – X스케일용 크로스 툴 체인
먼저 해당 CPU에 맞는 툴 체인 환경을 구축한다. 툴 체인이란 타겟 디바이스의 소프트웨어 개발을 진행하기 위해 필요한 호스트 시스템의 크로스 컴파일 환경을 말한다. 툴 체인은 각종 소스들을 컴파일하고 빌드해 실행 바이너리를 생성하는 데 필요한 각종 유틸리티 및 라이브러리의 모음이다. 기본적으로 어셈블리, 링커, C 컴파일러, C 라이브러리 등으로 구성돼 있다. 여기서 사용하는 툴 체인은 GNU에서 제공하는 것으로 다음과 같다.

– GNU gcc compilers for C, C++
– GNU 바이너리 유틸리티(어셈블러, linker various object file utilities)
– GNU C 라이브러리

X스케일에 사용하기 위한 ARM 툴 체인은 다음과 같은 사항으로 구성되어 있다.

– binutils-arm-2.11.2 : 유틸리티
– gcc-arm-2.95.3 : 컴파일러
– glibc-arm-2.2.3 : 라이브러리

부트로더를 플래시에 올리기 위한 fusing 시스템
일반적으로 JTAG(Joint Test Access Group)란 말보다 Boundary-Scan이란 말이 더 많이 사용된다. 그럼 Boundary-Scan이라는 ‘주변을 훑어보다’라고 할 수 있다. 먼저 Boundary-Scan의 역사를 살펴보자.

◆ 1980년대 후반의 JTAG라는 곳에서 연구 중이던 Boundary-scan 설계를 IEEE에서 1990년에 표준화하였고 IEEE std 1149.1가 제정되었다.

<그림 4>와 같이 호스트 시스템으로부터 타겟 보드에 있는 스트라타(strata) 플래시에 부트로더를 쓰기 위해서는 그림과 같은 구성이 필요하다. 먼저 호스트 시스템의 구성부터 살펴보면 호스트 시스템에서 동작하는 jflash라는 프로그램이 필요하다. 이 jflash는 패러럴 포트를 이용하여 타겟 보드에서 필요로 하는 JTAG 신호를 생성한다. 호스트 시스템에서 생성된 JTAG 신호는 패러럴 케이블을 통해 동글(dongle)에 전달된다. 동글은 TTL 74HCT541을 사용해 구현했으며, 이 기능은 단지 호스트 시스템의 패러럴 포트에서 발생한 5V 전압을 PXA255에 적합한 3.3V 전압 레벨로 변환하는 기능이다.

JTAG을

동글을 통해서 전달된 JTAG 신호 중 TMS와 TCLK는 TAP에 전달되어 JTAG의 state 머신을 결정하고, TDO와 TDI는 JTAG의 명령의 상태에 따라 bypass register, boundary scan cell, ID 레지스터 등의 입력과 출력 부분에 연결된다. PXA255의 JTAG을 통해서 플래시 메모리가 필요로 하는 버스 타이밍(bus timing)을 발생해 플래시에 전달한다.

호스트 시스템의 셸(shell)에서 jflash blob을 입력하면 x-boot250의 바이너리 코드가 플래시 메모리의 0번지부터 퓨징(fusing)을 한다. 메모리에 쓰기 전에 기본적으로 쓰고자 하는 0번 블럭을 지우고, blob을 퓨징한 후, 에러 없이 퓨징이 되었는지를 검사하기 위해 검증한 후에 이상이 없으면 x-boot250이 정상적으로 로딩을 완료하게 된다. 이 상태에서 시리얼 통신 환경의 설정에 이상이 없다면 정상적으로 x-boot250이 동작하는 것을 볼 수 있을 것이다.

부트로더 제작 
<그림 5>와 같이 일반적으로 부트로더라 하면 일반 x86 리눅스에서는 LILO를 많이 사용할 것이다. LILO란 Linux Loader로서 DOS나 윈도우 NT, 리눅스 등 다른 OS를 선택적으로 부팅할 수 있도록 하는 기능을 제공한다. LILO는 하드디스크의 MBR에서 동작하는 프로그램으로 OS가 실행할 수 있도록 점프하는 기능을 수행한다.

LILO와

그럼 우리가 사용하는 x-boot250이란 부트로더는 플래시 0블럭에서 실행되고 여러 가지 다양한 기능들을 수행한다. 먼저 커널이나 램디스크(ramdisk) 등의 데이터를 호스트로부터 SDRAM 영역으로 다운로드할 수 있는 기능이 있고 SDRAM에 있는 데이터를 플래시 영역으로 라이팅할 수도 있다. 그리고 커널이 이미 올라가 있다면 부팅할 수 있는 기능도 같이 제공한다. 부트로더는 다음과 같은 기능을 갖고 있다.

① 하드웨어의 초기화 : 부트로더에서 제일 먼저 실행, CPU, 속도, 메모리, 인터럽트, UART 등을 초기화해 준다.
② 리눅스 부팅 : 부트로더 상에서 리눅스를 부팅하는 기능이 있다.
③ 커널 또는 램디스크 다운로드 : 부트로더의 가장 중요한 기능인 커널이나 램디스크 이미지를 다운로드하는 기능이 있다. 호스트 상에서 컴파일된 이미지를 시리얼이나 tftp를 이용해 이더넷을 통해 SDRAM 상으로 다운로드가 가능하다.
④ 다운로드한 커널 및 램디스크를 플래시에 라이트 : 다운로드한 커널과 램디스크 이미지는 SDRAM 상에 있기 때문에 전원이 꺼지면 다운로드한 이미지는 날라가 버린다. 그러므로 플래시 기능을 통하여 SDRAM 상의 커널과 램디스크를 지정된 플래시 주소 영역에 라이팅하는 기능이다.
⑤ tftp를 통한 SDRAM에 다운로드 : 시리얼을 통해 커널 등을 다운로드하기에는 속도가 너무 느리다. 그러나 tftp를 이용한 이더넷으로 다운로드할 수 있는 기능을 추가하여 고속으로 커널이나 램디스크를 다운로드할 수 있다.


임베디드 시스템 소프트웨어 개발과정
하드웨어가 제작되고 개발 환경이 구축되면, 다음으로 진행되는 과정은 <그림 6>과 같이 소프트웨어를 개발하는 일이다.

① OS 포팅(임베디드 리눅스 포팅)
② 디바이스 드라이버 제작
③ TCP/IP 등 미들웨어 제작
④ GUI 등 애플리케이션 제작

OS 포팅(임베디드 리눅스 포팅)
타겟 보드에 부트로더가 올라가 있으면 이제는 커널을 이식하는 순서이다. 현재 전자밥솥에는 임베디드 리눅스를 포팅을 한다. 포팅을 위해 우선 리눅스의 정식 버전을 어느 것으로 사용할 것인가 결정한다. 현재 포팅하려고 하는 리눅스 정식 버전은 2.4.18이다.

여기에 ARM 패치와 PXA255용 패치를 인가한다. 이 두 가지 패치는 일반적으로 공개되어 있다. 나머지 밥솥용 패치는 개발자가 개발해 패치 처리를 해야 한다. 여기에는 밥솥용 타겟 보드의 특성에 맞는 리눅스 초기화 코드와 하드웨어에 있는 디바이스 드라이버가 추가된다. 이렇게 해서 개발된 리눅스 커널은 밥솥을 위한 전용 커널이 된다.

디바이스 드라이버 제작
다양한 하드웨어 장치를 구동시키기 위해서 운영체제는 장치 드라이버를 필요로 한다. 임베디드 리눅스는 디바이스 드라이버를 캐릭터, 블럭, 네트워크 디바이스 드라이버로 구분한다. <그림 3>의 임베디드 시스템 하드웨어 구조를 참조하여 디바이스 드라이버를 분리해 보면 다음과 같다.

◆ 캐릭터 디바이스 드라이버 : 히터 디바이스 드라이버 제작, 사운드 디바이스 드라이버 제작, LCD 디바이스 드라이버 제작, 터치 디바이스 드라이버 제작
◆ 블럭 디바이스 드라이버 : 여기서 블럭 디바이스 드라이버는 파일 시스템과 밀접한 관계를 가지고 있다. 밥솥용 임베디드 시스템에서는 파일 시스템을 플래시에 구현하였기 때문에 여기서 필요한 블럭 디바이스 드라이버는 플래시를 제어하는 디바이스 드라이버이다. 이를 흔히 MTD(Memoty Technology Device)라고 하며 임베디드 시스템에서는 매우 중요한 개념이다.
◆ 네트워크 디바이스 드라이버 : TCP/IP 제어를 받는 이더넷 디바이스 드라이버를 구현한다.

TCP/IP 등 미들웨어 제작
또한 앞으로의 임베디드 시스템에서는 통신이 기본으로 자리를 잡게 될 것이다. TCP/IP를 기반으로 하는 프로토콜을 사용하여 임베디드 시스템이 다른 기기와 정보를 공유할 수 있다면 다양한 네트워크 서비스를 사용자에게 제공할 수 있다.

GUI 등 애플리케이션 제작
애플리케이션은 크게 다음과 같이 3가지로 볼 수 있다.

① 기본 기능 : 밥솥의 본 기능
② 부가 기능 1 : TCP/IP를 이용한 통신 기능
③ 부가 기능 2 : LCD를 이용한 GUI 기능

이 시스템의 가장 기본 기능은 밥솥의 기능이다. 이를 하나의 프로세스에 할당하여 애플리케이션을 제작한다. 그리고 TCP/IP를 통해서 각종 네트워크 기능을 구현한다. 마지막으로 GUI 기능을 제공한다. 임베디드 시스템에서는 대부분 제한된 크기의 디스플레이를 사용하고 있으며 이러한 장치에서 텍스트, 그래픽 및 영상을 표시하기 위해서는 특별한 GUI 기술이 필요하다. 현재 널리 사용되고 있는 내장형 시스템 GUI 기술들(타이니 X, 피코구이, Qt, 마이크로윈도우)이 적용되어 텍스트, 그래픽, 영상 등을 사용자에게 제공한다.

무엇을 준비해야 할까? 

앞서 살펴봤던 것과 같이 우리가 이제껏 알고 있던 그리고 흔히 접해왔던 일반적인 컴퓨터 기반의 하드웨어, 소프트웨어 개발과는 달리 임베디드 시스템의 경우엔 그 개발 환경 구축부터 개발에 이르기까지 여러 가지 상이한 점들이 존재하기 때문에 처음 이를 접하는 개발자들은 다소 혼란스럽고 적응에 실패하기도 한다.

그러나 임베디드 시스템 역시 CPU(프로세서)와 메모리로 되어 있는(어느 특정 목적을 위해 개발된) 조그만 컴퓨터라 생각하고 개발에 임한다면 그리 어렵지만은 않을 거라고 필자는 확신한다. 즉, 임베디드 시스템 개발시 다음의 기본 기술 요소들만 확실하게 닦아 놓는다면 나름대로 쉽게 적응할 수 있지 않을까 싶다.

소프트웨어와 하드웨어의 기본 동작 원리
처음 컴퓨터 전원 버튼을 누른 순간 컴퓨터 보드 안에 이미 내장되어 있던 BIOS 프로그램이 실행되어 부팅 순서를 결정하고 부팅 가능한 운영체제가 선택됨과 동시에 해당 운영체제가 부팅하기 시작한다.

부팅이 끝난 운영체제 상에서 원하는 애플리케이션을 실행시키기 위해 마우스로 더블 클릭하는 순간 운영체제는 해당 애플리케이션을 메모리에 상주시킨 뒤 이를 실행시키게 되며 이때 만약 USB 같은 외부 디바이스들을 제어할 필요가 있을 경우 이를 제어하게 된다.

임베디드 시스템 역시 이와 마찬가지다. 전원이 들어감과 동시에 이미 내장되어 있던 부트로더가 실행되고, 이후 해당 임베디드 리눅스나 윈도우 CE 같은 운영체제가 실행되는, 이와 같은 소프트웨어와 하드웨어의 동작 원리에 대해 개발자는 이들이 실행되는 구조를 그려가며 반드시 이해해야만 할 것이다.

하드웨어 개발 
필자의 생각에 이는 모든 개발자들에게 해당되는 사항은 아니라고 본다. 자신의 전공 분야에 따라 전문적으로 개발하는 분야가 다른 만큼 소프트웨어 개발자들은 하드웨어 개발 방법에 관해 사실 몰라도 된다. 그러나 하드웨어를 개발하는 방법을 몰라도 된다는 얘기가 하드웨어를 몰라도 된다는 얘기는 아니다. 아무리 컴퓨터상에서 소프트웨어를 전문적으로 개발하는 사람이라 할지라도 해당 컴퓨터의 하드웨어 사양(스펙)을 모른다면 어찌 원하는 성능을 얻을 수 있겠는가?

따라서 어떤 개발자라도 하드웨어에 대해 기본적으로 알아야 하며 임베디드 개발자의 경우엔 소프트웨어 전문 개발자들보다 조금 더 깊이 알아둘 필요가 있다. 그래야 개발자가 원하는 대로 하드웨어를 제어할 수 있을 테니까.

프로그래밍 언어
이는 사실 언급할 필요도 없는 사항일지 모른다. 전쟁에 참여하는 군인이 총을 놓고 간다면 어찌 되겠는가? 그러나 필자가 겪어 본 바에 따르면 총을 놓고 가는 군인들이 더러 눈에 보여 굳이 언급을 하고자 한다. 요즘에 가끔 TV를 보면 정말 화려한 가수나 연예인들이 많이 보이는 데 이는 눈에 보이는 것만을 쫓고 있는 요즘 세태가 반영되어 그런 듯 싶어 썩 반갑지가 않다. 이는 개발에서도 그대로 적용되는 데, 요즘 보면 결과가 바로 눈에 보이는 언어들에 사람들이 몰리며 이에 대한 책들도 많이 나오고 있다. 그러나 이들 중 C 언어부터 차근차근 밟아 나가는 사람들은 그리 흔하지 않은 건 왜일까?

어떤 프로그래밍 언어이든 하나는 확실하게 알고 있어야 한다. 그래야 확장이 가능하기 때문이다. 그러나 이런 언어들은 공부에 대한 결과가 바로 눈에 띄지 않기 때문에 중도에 포기하는 개발자들이 많다. 이는 영어를 공부하는 것으로 생각해보면 알 수 있다. 영어에는 왕도가 없다지 않은가. 그저 묵묵히 최선을 다해 습득하는 것 그 길뿐이다. 프로그래밍 언어 역시 마찬가지라고 생각된다. 조급해 하지 말고 묵묵히 습득하다 보면 어느새 늘어 있는 자신의 실력에 놀랄 때가 반드시 있을 것이다.

임베디드에 거는 기대감과 희망
이 글에서는 임베디드 시스템을 32비트 CPU 기반 임베디드 하드웨어 시스템, OS, 미들웨어, 애플리케이션의 계층 구조를 가지는 임베디드 시스템에 대하여 살펴보고 이들을 개발하기 위해서는 어떤 식으로 접근해야 할지 살펴보았다.

‘무어의 법칙’에서 말해주듯 하드웨어 사양들은 하루가 다르게 변화하고 있고, 이보다 더 빠른 속도로 소프트웨어 환경은 급변하고 있다. 그리고 이러한 환경에서 다양한 분야가 생겨나고 또 사라져 가고 있다. 이런 광속의 시대를 살면서 과연 우리의 개발자들은 어디에 서야 할 것인가에 대해 오랜 기간 개발자의 길을 걸어온 사람들은 누구나 고민하고 있으리라 생각된다. 과연 이 땅의 개발자들은 어디로 가야 하는가?

필자는 임베디드라는 분야에 우리가 서야 할 길이 있다고 확신하고 있으며, 이를 다양한 개발 경험과 강의 현장에서 몸소 느끼고 있다. 그러나 아직 인식이 많이 되어 있지 않기에 어찌하면 이 분야에 쉽게 접근할 수 있을지를 생각해봤다.

앞서도 언급하였지만 임베디드는 우리가 이제껏 접해왔던 컴퓨터 환경과는 그 운용 방법이나 개발 방법 등 모든 면에서 다르다 할 수 있다. 하지만 그 속내를 들여다보면 우리가 이제까지 등한시했던 기본적인 내용들을 다시금 돌아보고 숙지한다면 결국 개발이라는 방법 자체가 아닌 개발 과정의 흐름은 동일하다는 사실을 이해하리라 생각한다.

CPU, 프로그래밍 언어, 컴파일러와 같은 기본 개발 분야에 있어서 이미 선진 유럽과 미국을 우리가 뛰어 넘기란 사실상 불가능해 보인다. 그러나 이제 막 꽃을 피우기 시작한 임베디드라면 기대해도 좋을 희망이 있지 않을까? 뛰어난 임베디드 개발자들이 무수히 쏟아져 나오길 간절히 바란다. @

프로세스 설명 2017.09.13, 14

  • 회의실 10:30 황인찬 이사님 20170913
  • 회의실 14:45 황인찬 이사님 20170914
  • 회의실 16:30 황인찬 이사님 20170918
  • 회의실 16:00 황인찬 이사님 20170922

물순환 시스템의 설계관련 교육 2주 예상

e-Matrix (environment Matrix – 환경 분야의 IT (체계적으로 그물처럼 엮여져 있는 도로 등의) 망(網))
(컴퓨터) 매트릭스, 행렬

– 물의 흐름을 연구, 개선하는 시스템 일을 한다.

수리 수문학을 기초로, 컴퓨터 공학과 융합하여 개발된(특허있음) 프로그램을 판매, 운영, 관리 한다.

– 즉 수리 수문학을 이해하기 위한 물리학을 습득한다.

  • 수리 수문학
    • 수리 : 물의 흐름에 관한 역학을 연구하는 학문이다.
    • 수문 : 지구상의 물의 순환을 대상으로 하는 지구과학의 한 분야로 주로 육지에 있는 물의 순환 과정보다 지역적인 물의 방향·분포·이동·물균형 등에 주목적을 두고 연구하는 과학이다.

상하수도 물순환 개념

관망해석의기초요약

상수도보호구역(강물 등) => 취수장 => 도수(관) => 정수장 => 송수(관) => 배수지 => 배수(관) => 수용가 => 하수관로 => 하수처리장(STP) => (강 하류 등)

상수관은 만관으로 압력을 이용해서 (동수두) 물의 흐름이 발생한다.

하수관은 비만관으로 위치에서는 이용해서 물의 흐름이 발생한다.

각 단계에서 사용가능한 시스템이(제품) 있다

  • Uni-EM-Water (상수관망 유지관리 시스템) : 깨끗한 물을 수용가 까지 안정적으로 보내기위한 관리, 모니터를 지원하는 시스템이다. – 향후 주력상품
  • Uni-EM-Plant (공정관리 시스템) : 정수장 또는 하수처리장 내부 프로세스를 관리하는 프로그램 – 판매 저조
  • Uni-EM-I2 (하수관로 모니터링 시스템 – 기존의 ISem 이라는 명칭으로 사용) : 하수관로의 침입수 / 유입수 를 파악하여 누수량 및 누수위치 등을 관리 하는 시스템
  • Uni-EM-Safe (도시침수방지시스템) : 물의 흐름을 모니터링 하여 침수 예상 및 예방에 활용하는 시스템 – 개발중 (하수관로 모니터링 시스템의 확장버전)

<지방상수도 현대화 사업>

  • 안전하고 깨끗한 수돗물을 안정적으로 공급해 물 복지를 실현하고 수도사업 선순환 구조 구축
  • ICT 기술을 활용하여 상수관망을 스마트하게 유지관리 할 수 있는 시스템 구축
    • 누수여부, 누수지점, 수질변화, 수압변화를 실시간으로 원격관리(TM/TC)할수 있 어 문제 발생 시 신속히 대응 가능
  • 유수율을 높이는게 핵심이다 

용어

  • 동수두 : 물이 흐르고 있는 관수로의 어느 한 점에서 그때의 동수경사선까지의 높이를 말한다. (대수층내 한 점에 연결된 위압수두계내에 수위의 상승표고. 높이 단위로 표현되는 위치수두와 압력수두의 합.)
  • 관수로관수로란 수로 내의 액체가 공기와 맞닿는 면이 없는, 즉 자유 수면이 없는 수로를 말한다
  • 개수로개수로는 수리학에서 관수로와 대비되는 개념으로써, 관로 내 액체가 공기와 접하는 부분, 즉 자유수면이 존재하는 흐름을 말한다. 개수로 흐름은 중력에 의해 발생한다.
  • 상수도용어참고

 

전체개념 정리 (13일)

[입력값]

  1. 모델링 (Modeling)
    • GIS, 기상정보
    • 하수관로 속성정보
    • 제공되는 결과를 DB로 가져오기위한 설계를 말한다
  2. 계측값
    • 유량, 수압, 수질, 수위
    • 센서(계측기)
    • 현장제어반
      • 변환기 – 유량 , 수압 측정값을 제어반내의 변환기를 통하여 전송
    • RTU (원격단말장치) / PLC (전력선 통신 프로그래머블 로직 컨트롤러)
    • HMI : 인간-기계 인터페이스(Human-Machine Interface) – 스카다라는 용어는 특정 산업현장 전체, 또는 지리적으로 넓게 퍼져있는 산업 단지를 전반적으로 감시하고 제어하는 집중화된 시스템을 주로 일컫는다.
  3. 수용가정보(검침데이터)
    • 요금정보 DB를 가져오기위한 설계를 말한다
  4. 로직분석
    • 관망해석(모의분석) 을 위한 Uni-EM-Water 기능설계를 말한다.

결론적으로 위 단계를 거쳐 ideal 한 상태를 예측 및 모니터링 할수 있는 시스템을 말한다.

 

[14일]

상수관망유지관리시스템 = Uni-EM-Water

입력 – 분석 -출력

모델, 계측정보 등을 입력하여 유수율, 누수율을 측정하여 의사결정 자료로 사용한다.

그럼 유수율 , 누수율, 현실화율 이라는걸 알아야 한다. (필수)

환경부 포털 사이트에서 총괄수량수지분석 자료를 확인해라 (필수)

유수율 : 정수장에서 생산된 양 및 정수수입량의 총 수량에 대한 요금으로 징수되는 수량의 비율을 의미합니다. (사용량을 공급량으로 나눈값)

현실화율 : 요금현실화율 생산원가를 징수요금으로 나눈값 대부분이 100%가 안됨.

 

입력값에는 유량, 수압, 수질, 수위 가있다.

  • 유량
    • 유출유량 과 유입유량 있는데 유입유량을 사용한다.
  • 수압
    • 감압밸브
    • 가압장
  • 수질 은 정수장에 설치하여 수질을 측정한다.
  • 수위
    • 정수장 – 배수지에서 가져온다.

그럼 어디서 계측정보를 가져오는것인가

블록시스템 , 정수장 등에서 계측정보가 모여서 외부(전문가등)에서 정해서 제공된다.

결과적으로 시스템에서 어떻게 정보가 생성되고 취합되는것인가

관로 중간에 센서를 설치하고 현장제어반으로 모아 전송한다.

  • 현장제어반 (맨홀 근처에 분전반 모양의 판넬제작)
    • 전원
    • 차단기, 스위치
    • 변환기
    • PLC / RTU
    • 통신 : DSU / 무선모뎀 등으로 구성

위 모든 구성은 국가정보원 보안지침에 따른 보안성 검토를 수용하기 위하여 폐쇄망(상수도망)으로 구성하여 사용한다.

폐쇄망 유선 구성은 통신사의 국가정보통신회선(서비스)를 임대하여 사용하면 추가 보안 장비 구축이 포함된다. 무선(LTE) 구성의 경우 상용회선을 사용하기 때문에 별도의 보안 장비(방화벽, 암호화 장비 등)가 필요하다.

GIS / 요금정보는 행정망에 구성되어 있어서 한달에 한번씩 오프라인(엑셀 등) 에서 받아온다. 해당 구성을 연동하기 위해서 망간자료전송장치가 필요하다.

TM/TC

telemetering(원격계측, 원격검침, 관망감시)

tele-control

TM-Master : 상황실에 있는 모든 모니터링 환경을 말한다.

TM-Slave : 현장제어반에 구성하여 제어반에서 모니터 가능한 환경을 말한다.

TC : 상황실 또는 현장제어반에서 각각 기능을 물리적 조정이 가능한 환경을 말한다.

 

종합상황실 같은 사무실 내부 구성 설계도 진행한다.

 

[18일]

상수관망유지관리시스템

Water-Net (수자원공사 프로젝트에서 사용) – 판매 시시권 취득 하여 Uni-EM-Water로 납품 하게됨

  • Architecture :
    • Client – Server 시스템
    • .NET 기반 C# , ArcGIS 로 개발
    • OS : Windows 기반
    • DBMS : ORACLE

####  Water-Net을 WEB으로 전환 하는 사업을 현재 진행하고 있음. (수자원공사)

 

스카다(SCADA) = (TM/TC) 시스템  = 감시 제어 및 데이터 취득(영어Supervisory Control And Data Acquisition, SCADA)은 일반적으로 산업 제어 시스템(영어Industrial Control Systems, ICS), 즉 다음과 같은 산업 공정/기반 시설/설비를 바탕으로 한 작업공정을 감시하고 제어하는 컴퓨터 시스템을 말한다.

  • [산업 공정]은 제조생산발전가공제련과정 등에 필요한 작업 절차를 의미하며, 연속/집단/반복/분산 방식으로 운용될 수 있다.
  • 기반 시설 공정은 공공기관이나 사기업에 의해 이루어지는 물 처리 와 분배, 폐수 수거/처리, 기름/가스 파이프라인, 송전 및 배전, 풍력발전소방공 및 민방위 시스템, 대규모 통신 시스템 등에 필요한 공정을 의미한다.
  • 설비 공정은 역시 공공기관이나 사기업에 의해 이루어지는 건축공항조선우주정거장 사업 등에 사용되는 작업공정을 의미한다. 여기서는 공조 설비, 진입로, 에너지 소모 등을 감시하고 제어한다.

 

——————–서버 구성도 별도 작성 해야함. ———-

 

[22일]

사업 진행에 관한 구성

<지방상수도 현대화 사업>

  • 국토교통부 => 한국수자원공사 에 위탁하여 (8개) 진행 (광역상수도)
  • 환경부 => 한국환경공단에 위탁하여(12개) 진행 (지방상수도)
    • 시공사 평가 방식 (4개)
    • 기타공사 방식 (8개)

 

  • 수도정비 기본 계획 (지자체 10년마다 수행)

상수도 설계 과정

— 이미지 —

2016 (현대화사업 정책 결정 | 20개 지자체 선정) => 2017 (설계) => 2018 (시공) => 2021 (성과보증)

<기본계획설계>

  • 정부 =>(예산지원)=> 지자체 =>(위탁협약)=> 수자원공사 (설계, 입찰, 시공, 성과보증 수행)
  • 수자원 공사가 위탁을 받아서 수행을 하는것인데 설계부터 발주를 낸다

기본계획 => 기본설계 를 발주하여 수행사들은 합사를 형성하여 제안준비를 한다. 우리는 사업의 계측제어분야에 하도급으로 참여를 한다.

 

  • 실시 설계서 구성내역
    1. 산출내역서 – excel (금액, 수량 등 산출)
    2. 시방서 – hwp (규격, 요구사항 기술) [ 시방서 , 과업지시서, RFP]
      • 메일로 보내는 시방서를 참고하여 서버 , 제품 의 규격을 산출해 봐라 예) HP HP ProLiant DL380 Gen9 E5-2683v4 2.1GHz 2P32Core/64B/300GBx2
    3. 실시 설계 보고서
    4. 도면

 

 

제4화 하수처리장 20170911

하수처리 개요

하수처리란?

하수처리용어

하수처리 원리

하수처리 공정

하수처리 단위공정

왜 하수가 깨끗해 지는지 확인해 보자

미생물에세 먹이를 주고 키워서 크면 버리고 일련의 과정을 순환시켜서 하수를 정제 한다. 보통 대수성장기를 이용한다. 포기조 체류시간을 기본적으로 6-8시간정도 준다.

미생물이 먹고자는 상황을 공식으로 표현하자면

유기물과 산소를 얼마만큼 주어야 한다.. 등 스스로 분해하는 내생호흡등 .. 하수처리시설을 설계할때 사용한다.

미생물 반응영향인자

  1. 온도
  2. Ph
  3. 영향물질(Nutrients)
  4. 미량원소(Trace elements)
  5. 증식억제물질(Toxic Meterial)

(더 보기…)

제1화 Spin Selling Fieldbook_20170906

교육목표

  • 교육을 마치면 앞으로의 삶을 어떻게 살것인가에 대한 고민을 하고 교재 또는 강의에 관심을 갖는 계기가 될것으로 기대함.

강의교재 : spin selling field-book

원교재 : spin selling 이론적내용의 원 교재

성공한 세일즈맨의 관찰 결과 설명보다는 질문을 많이하고 설득하는것 보다는 이해하는것이 더 중요하다.

여러분은 결코 어떤것에 대해서도 고객을 설득하지 못합니다. 고객을 설득하는 것은 바로 고객 자신입니다. 여러분의 역할은 고객의 중요한 관심사를 이해하는 것입니다. 여러분은 고객이 느끼는 방식으로 그들의 문제를 느껴야 합니다. 여러분은 고객의 입장에 서야 하고 ㅇ고객의 관점에서 문제를 바라보아야 합니다.

— 출처 spin selling field-book p99

세일즈 상담의 4단계

  1. 상담시작
  2. 탐색
  3. 능력논증
  4. 구매약속

1. 상담시작

2. 탐색

$$ 현실적으로 우리는 고객을 설득했다고 생각하는 경우가 많다.

사고를 2가지 측면에서 전환하는것이 필요하다.

1. 설득하는 것에서 이해하는 것으로 전환하라.

그렇다면 설득하지 않고 이해하려면 어떻게 해야 하나

— 현재 needs(요구사항)과 잠재 needs(요구사항)을 구분해야 한다.

질문을 통해서 잠재 needs를 현재 needs로 전환하는것이 필요하다.

욕구 요구로 바뀌어야 한다. 그러기 위해서는 질문을 해야 한다.

  1. 상황질문을 한다. (사전조사)
    • 제품에 관련된 상황질문을 한다. (water NET)
    • 객관적사실에 대한 질문을 한다. (형제, 주소)
  2. 문제질문을 한다. (잠재needs를 확인하는 과정   — 탐색이다)
    • 기술적 질문
      • 민원은 많이 발생하지 않으십니까?
      • 누수지역 파악은 어렵지 않으십니까?
      • 관망관리에 어려움은 없으십니까?
    • 문제질문에 깔려있는 잠재needs를 개발할수 있는 질문을 해야한다.
    • 못이 없어서 편자를 잃었네 / 편자가 없어서 말을 잃었네 / 말이 없어서 기사를 잃었네 / 기사가 없어서 전투에 졌네 / 전투에 져서 왕국을 잃었네 / 그리고 이모든 것은 말편자 못이 없었기 때문이라네   — 미국의 정치가  벤저민 프랭클린의 시

      — 출처 spin selling field-book p164

  3. 시사질문을 한다. (존재할가능성이 있고 해결가능한 질문)
    • 시사질문은needs를 개발하는 강력한 tool이다.
    • 시사질문은 고객의 가치 인식을 확대한다.
    • 상황질문이나 문제질문보다 더 어렵다.
  4. 해결질문을 한다.
    • 현재needs를 확인한다.
    • 현재needs를 명확하게 한다
    • 현재needs를 확대한다.

2. 상품중심에서 고객중심으로 전환하라.

상담을 계획하라

  1. 먼저 진전을 계획하라
    • 진전은 실패 와 수주의 사이에 있다. [실패] [계속][진전][수주]
    • 상담에서 얻어낼수 있는 최소한 5개의 진전을 생각해낸다.
    • 생각해낸 진전이 현실적이면서 상담을 전진시키는 행동인지 진단한다.
    • 이러한 진전 중 최선의 것을 상담 목표로 정하라. 최선의 진전은 현실적이고 성취 가능하면서 세일즈를 가장 많이 전진시키는 것이다.
  2. 설명할 것이 아니라 질문할 것을 계획하라
    • 계획 tool 을 사용하라

3. 능력논증

  • 특성 장점 이점 를 구분한다
    • 특성 : 워터넷은 모델링을 통한 사전 누수징후 예측 모의가 가능하다. 에너지 관리기능이 있다. 수량관리기능이 있다
    • 장점 : 워터넷은 사전 누수징후 지역을 모의함으로써 누수지역 파악에 도움을 줄수있다.
    • 이점 : 누수지역탐사가 가장 어려운데 워터넷은 사전 누수지역 파악 기능이 있다.
  • 이점 = 장점 + 고객needs
  • 나의 입장에서 말하면 장점이고 상대방의 입장에서 표현해야 이점이 된다.

신제품의 초기실적이 저조한 이유?
– 이점이 동반되지 않았기 때문에 고객의 저항이 발생한다.

저항

  1. 가치저항
  2. 능력저항
    • 능력 불가능 저항 – 고객의 needs를 충족시킬 능력을 실제로 가지고 있지 않을때 발생
      1. 없다는것을 인정하라.
      2. 해결질문과 이점 언급을 사용해 충족시킬수 있는 needs의 중요성을 강조하라.
    • 능력 가능 저항능력을 가지고 있지만 고객이 그사실을 인식하지 못할때 발생
      1. 고객의 우려가 타당하다는것을 인정하라.
      2. 능력을 논증하라. 어떻게 제공할 수 있는지 설명하라.
      3. 증거를 제시하라. 실질적 증거의 소스를 제공하라.

 

 

 

[SQL] Oracle 구분자 행, 열, 분리, 자르기(REGEXP_SUBSTR, REGEXP_COUNT)

보통 타 시스템과 연계해서 데이터를 받으면 파이프 라인(|), 콤마(,) 등등 특수 문자를 활용해서 받게 되는 경우가 많을 것입니다. 그럴 때 각 항목을 파싱 하고, 적절한 패턴으로 조회하는 방법을 해보겠습니다. 구분자는 파이프 라인(|)을 기준으로 설명 할 예정이며, 아래 쿼리에서 적절하게 변경하면 다른 특수 문자도 충분히 가능합니다. 1. 데이터 정보 IN_DATA – TYPE : VARCHAR2 – VALUE : ‘|A||C| DEF | G|||’ 2. 파이..

소스: [SQL] Oracle 구분자 행, 열, 분리, 자르기(REGEXP_SUBSTR, REGEXP_COUNT)

PL/SQL

PL/SQL, Procedure Language / Structured Query Language

PL/SQL은 오라클 DBMS에서 SQL 언어를 확장하기 위해 사용하는 컴퓨터 프로그래밍 언어. 주로 자료 내부에서 SQL 명령문만으로 처리하기에는 복잡한 자료의 저장이나 프로시저와 트리거 등을 작성하는 데 쓰인다. SQL보다 속도가 미세하게 빠르며 SQL에서는 불가능한 제어문, 반복문 사용이 가능하다.

※ SET SERVEROUTPUT 변수설정

DBMS_OUTPUT.PUT_LINE에 의한 출력여부를 지정하며, DBMS_OUT할 수 있는 줄의 길이값은 32767바이트이다.

Anonymous PL/SQL

Stored Procedure 또는 Function

오라클에서 생성된 Stored Procedure는 다른 aplication(JAVA, .NET, VC++)에서 호출하는게 가능하다.

* 주의: 프로시저에서 2개이상 INSERT 문을 추가하는 경우 하나의 INSERT문에서 에러가 발생하면 자동으로 모두 ROLLBACK 처리 된다. 그리고 프로시저는 자동 커밋되지 않으므로 반드시 INSERT, UPDATE, DELETE 에서 COMMIT 해야함

Stored Procedure와 Function의 차이점

Stored Procedure는 리턴값이 있을 수도 있고 없을 수도 있다. (IN MODE, OUT MODE, IN OUT MODE)
Function은 반드시 그 결과값을 리턴한다.

Stored Procedure

Function

프로시저 호출

CURSOR를 활용한 저장 프로시저

하나의 레코드가 아닌 여러행으로 구성된 작업영역에서 SQL 결과를 저장하기 위해 커서를 사용

SYS_REFCURSOR

쿼리실행 결과를 저장하기 위한 자료형이며 테이블의 여러행을 반복적으로 조회하기 위해 사용한다.

제어문

IF, 조건문

 

LOOP, 반복문

example

Varchar2(8) VS Date 어느 것이 우월한가?

일자 데이터 타입이란 YYYYMMDD 형(시/분/초 제외)을 이야기 하는 것이다. 이때 DATE 타입을 선택할 것인가 아니면 VRACHR2(8)을 선택할 것인가의 문제이다. 이것은 성능 문제이기도 하지만 물리 모델링, 개발효율성, 데이터 품질 등을 같이 생각 해야 한다. 물리모델링 시에 많은 모델러들이 일자 데이터 타입과 관련하여 이구동성으로 이야기 하는 것이 아래의 SQL 이다. <?xml:namespace prefix = o ns = “urn:schemas-micros..

소스: Science of Database :: Varchar2(8) VS Date 어느 것이 우월한가?

COUNT(Distinct 컬럼)의 성능

집계함수 내부에 Distinct를 사용할 수 있다는 것은 많은 사람들이 알고 있다. 하지만 실제로 그렇게 사용했을 때 내부적으로 무슨 일이 일어나는지 아는 사람은 드물다. 한걸음 더 나아가서 COUUNT(COL) 대신에 COUNT(Distinct COL)를 사용했다면 분명히 추가적인 부하가 존재할 것인데, 그 부하를 어떻게 해결할 것인가를 아는 사람은 거의 없을 것이다. 만약 그렇다면 SQL을 실행할 때 마다 성능이 느려질 것이고 문제를 해결..

소스: Science of Database :: COUNT(Distinct 컬럼)의 성능