xdebug 개발 환경 구축하기

수동으로 wamp기반의 개발환경을 구축하는 과정을 정리

wamp = Windows, Apache2, Mariadb, Php

요구조건

윈도우7 또는 10에서 개발환경을 구성한다.
아파치는 mod_rewrite가 활성화되어야 한다.
php는 5.5.17버전이고 디버깅은 xdebug를 사용한다.
db는 mariadb를 사용한다.

순서

  1. apache 설치
  2. php 설치
  3. php에 xdebug 적용
  4. db설치

apache 설치

아파치 웹 서버를 설치하고 mod_rewrite를 테스트하는 순서로 진행.
apache는 '아파치'라고 읽는다.

아파치 다운로드](https://tinyurl.com/p4rblsm))

운영체제가 64비트인 경우 64비트용으로 다운로드 => httpd-2.4.41-win64-VS16.zip

파일 압축풀기

원하는 위치에 httpd-2.4.41-win64-VS16.zip 파일의 압축을 푼다.

압축을 풀면 Apache24 디렉토리가 생긴다.

apache 설정

apache 설정은 Apache24 디렉토리 아래 conf 폴더에 httpd.conf 텍스트 파일로 구성

서버 설치 경로 지정

Define SRVROOT "D:/Apache24"  

포트 설정

Listen *:80  

mod-rewrite 활성화

LoadModule rewrite_module modules/[mod_rewrite.so](mod_rewrite.so)  

주석처리된 '#'를 삭제하면 된다.

서버도메인 지정

ServerName localhost:80  

.htacces의 재정의 허용

AllowOverride All  

페이지에서 모두 찾아 All로 변경한다.

설정 결과 테스트

bin 폴더에 httpd에 '-t'옵션을 주어 테스트

httpd -t  

설정이 잘 되었다면 'Syntax OK'가 나타난다.

윈도우 서비스에 등록

아래 명령어를 이용해 윈도우 서비스에 등록한다.

httpd -k install  

참고

  • httpd -k start
  • httpd -k stop

웹드라우저에서 확인

웹브라우저를 열고 아래 주소로 이동한다.

http://localhost/

rewrite 모드 테스트

mod_rewrite가 잘 적용되었는지 테스트를 진행한다.

먼저, 두개의 파일을 만들고 웹드라우저에서 http://localhost를 다시 호출해 보자.
모든 요청을 hello.php로 연결하는 코드이다.

.htaccess

RewriteEngine On  
RewriteRule ^.*$ [hello.php](hello.php)  

hello.php

적용이 잘 되었다면 아래 결과가 나타난다.

Hello : 1
Hello : 2
Hello : 3
Hello : 4
Hello : 5

php 설치

아래 링크에서 원하는 버전(5.5.17, vc)를 찾아 다운로드 한다.
다운로드 링크](https://windows.php.net/downloads/releases/archives/))

64비트 php-5.5.17-Win32-VC11-x64.zip를 다운로드 함.

파일 압축풀기

원하는 위치에 다운로드 받은 파일의 압축을 푼다.

이제 Apache2.4가 있는 경로에 php-5.5.17가 함께 위치한다.

D:Apache2.4
D:php-5.5.17

php 설정

php-5.5.17에서 php.ini-development 찾아 사본을 만들고
새로 만든 사본의 이름을 php.ini로 변경.

이제 텍스트에디터로 열고 아래 내용을 수정.

extention 경로 지정

extension_dir = "D:/php-5.5.17/ext"  

필요한 extension을 활성화

[extension=php_bz2.dll](extension=php_bz2.dll)  
[extension=php_curl.dll](extension=php_curl.dll)  
[extension=php_fileinfo.dll](extension=php_fileinfo.dll)  
[extension=php_gd2.dll](extension=php_gd2.dll)  
[extension=php_gettext.dll](extension=php_gettext.dll)  
[extension=php_mbstring.dll](extension=php_mbstring.dll)  
[extension=php_exif.dll](extension=php_exif.dll)  
[extension=php_mysql.dll](extension=php_mysql.dll)  
[extension=php_mysqli.dll](extension=php_mysqli.dll)  
[extension=php_oci8.dll](extension=php_oci8.dll)  
[extension=php_openssl.dll](extension=php_openssl.dll)  
[extension=php_pdo_mysql.dll](extension=php_pdo_mysql.dll)  
[extension=php_pdo_sqlite.dll](extension=php_pdo_sqlite.dll)  
[extension=php_pgsql.dll](extension=php_pgsql.dll)  
[extension=php_snmp.dll](extension=php_snmp.dll)  
[extension=php_soap.dll](extension=php_soap.dll)  
[extension=php_sockets.dll](extension=php_sockets.dll)  
[extension=php_sqlite3.dll](extension=php_sqlite3.dll)  
[extension=php_sqlite3.dll](extension=php_sqlite3.dll)  
[extension=php_xmlrpc.dll](extension=php_xmlrpc.dll)  
[extension=php_xsl.dll](extension=php_xsl.dll)  

사용하기 원하는 라이브러리를 선택하면 된다.

타임존 설정

아래 경고를 피하기 위해 타임존을 설정한다.

Warning: phpinfo(): It is not safe to rely on the system's timezone settings.

date.timezone = Asia/Seoul  

apache 모듈에 php 설정

Apache2.4/conf/httpd.conf 파일에 아래 내용을 추가한다.

기본 파일에 index.php 추가

DirectoryIndex [index.php](index.php) [index.html](index.html)  

파일 맨 끝에 아래 내용을 추가


# PHP5 module

LoadModule php5_module "D:/php-5.5.17/[php5apache2_4.dll](php5apache2_4.dll)"  
AddType application/x-httpd-php .php .html .htm .html .htm  
PHPIniDir "D:/php-5.5.17"  

php의 경로는 자신의 경로로 변경한다.

httpd - t 명령어로 테스트

루트 디렉토리에 아래 내용의 index.php 파일을 만든다.

이제 웹브라우저로 http://localhost/를 호출하여 'PHP 버전' 페이지를 확인한다.

php에 xdebug 적용

xdebug 다운로드

먼저 php 버전을 찾고 TS 버전으로 다운로드 한다.

xdebug 다운로드](https://xdebug.org/download))

php에 적용

다운로드 받은 dll 파일을 php 폴더로 이동한다.

아래 내용을 php.ini 아래에 추가한다. 필요하다면 php경로는 자신이 지정한 경로를 사용한다.

[XDebug]
zend_extension=D:/php-5.5.17/php_xdebug-2.5.0-5.5-vc11-x86_64.dll
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_enable = 1
xdebug.remote_autostart = 1

phpinfo()에서 확인

변경 내용을 반영하기 위해 아파치를 다시시작하고 index.php를 호출한다.

로고와 함께 아래 내용이 phpinfo 페이지에 추가된 것을 확인 할 수 있다.

Zend logoThis program makes use of the Zend Scripting Language Engine:
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies with Xdebug v2.5.0, Copyright (c) 2002-2016, by Derick Rethans

visual studio code에서 디버깅

vs code에 확장기능 설치

  • PHP Debug

VS Code 설정 (Ctrl + ,)의 User SETTINGS 에서 "php.validate.executablePath" 경로 추가

위에 내용  
"php.validate.executablePath": "D:/php-5.5.17/[php.exe](php.exe)"

index.php에 테스트용 코드를 작성

VS Code에서 디버그 설정
상단 메뉴에서 Debug / Open Configurations를 열고 launch.json 파일에 아래 내용을 추가

{  
"name": "Listen for XDebug",  
"type": "php",  
"request": "launch",  
"port": 9000  
}  

브레이크 포인트 설정
print가 있는 줄에 브레이크 포인트를 걸려면
index.php 페이지로 이동하고, print가 있는 줄에 브레이크 포인트를 잡는다.

  • 방법1. 행번호 앞에 커서를 옮기면 붉은 색 점이 나타는데 클릭!
  • 방법2. 커서를 브레이크 포인트를 걸고자 하는 줄로 이동하고 F9

상단 Debug / Start Debugging를 선택하거나 F5키를 눌러 xDebug 연동을 시작

services.msc에서 아파치 서비스를 다시 시작(위 내용 참고)

웹브라우저에서 http://localhost를 호출하면 index.php의 print가 있는 줄에서 실행이 멈추게 되고 디버깅이 시작된다.

  • 지역변수의 값이나 watch를 통해 필요한 변수를 확인할 수 있다.

mariadb 설치

생략

기타

'php' 카테고리의 다른 글

xdebug 개발 환경 구축하기  (0) 2019.11.20
php 하위 버전에 맞는 xdebug 사용  (0) 2019.11.16

xdebug 컴파일

사용환경

linux mint 19.2
php 5.5.17

특정버전의 php에 호환성을 맞추려면

아래 사이트에서 사용중인 php에 맞는 버전을 다운로드 받아는다.
https://xdebug.org/download

만약 php 5.5.17을 사용한다면 위 페이지로 이동해 ctrl+f를 누르고 5.5를 검색한다.

Xdebug 2.5.5
Release date: 2017-06-21
source (SHA256: 72108bf2bc514ee7198e10466a0fedcac3df9bbc5bd26ce2ec2dafab990bf1a4)
Windows binaries:
PHP 5.5 VC11 (64 bit) (SHA256: 44e5f00131f94e7e057b421f7a987e3feb6cdd612a0b2fdd6ddbf7236d458860)
PHP 5.5 VC11 (32 bit) (SHA256: 9f5f7613de935b0f3b2793940c0c9e629eb879dec9d6b8dd2adc9e48c923aa32)
이하 생략

리눅스의 경우 source를 다운로드한다.
https://xdebug.org/files/xdebug-2.5.5.tgz

컴파일

아래 링크에서 Installation From Source를 참고한다.

https://xdebug.org/docs/install

압출을 풀고 README.rst를 확인

Once you have access to ``phpize`` and ``php-config``, do the following:

1. Unpack the tarball: ``tar -xzf xdebug-2.4.x.tgz``.  Note that you do
   not need to unpack the tarball inside the PHP source code tree. Xdebug is
   compiled separately, all by itself, as stated above.

2. ``cd xdebug-2.4.x``

3. Run phpize: ``phpize``
   (or ``/path/to/phpize`` if phpize is not in your path).

4. ``./configure --enable-xdebug`` (or: ``../configure --enable-xdebug
   --with-php-config=/path/to/php-config`` if ``php-config`` is not in your
   path)

5. Run: ``make``

6. ``cp modules/xdebug.so /to/wherever/you/want/it``

7. add the following line to ``php.ini``:
   ``zend_extension="/wherever/you/put/it/xdebug.so"``

8. Restart your webserver.

9. Write a PHP page that calls ``phpinfo();``. Load it in a browser and
   look for the info on the xdebug module.  If you see it, you have been
   successful!

'php' 카테고리의 다른 글

xdebug 개발 환경 구축하기  (0) 2019.11.20
php 하위 버전에 맞는 xdebug 사용  (0) 2019.11.16

# php 5.5.17 설치(이전 버전 php 컴파일하여 설치하기)

xe로 운영중인 서비스를 개선할 일이 있어 php 5.5.17을 컴파일하고 설치하게 됨.

## 사용환경
linux mint 19.2(ubuntu 18.04 기반)

## 컴파일에 필요한 툴 설치

```
# apt-get update
# apt-get install build-essential gcc make cmake libssl-dev libxml2-dev libpng-dev libjpeg-dev libcurl4-openssl-dev libbz2-dev libncurses5 libncurses5-dev libaio1 libmcrypt-dev
```

> 프롬프트가  #이면 root계정입니다.

## 소스코드 다운로드

php 공식사이트에서 필요한 버전을 다운로드 받는다.

5.5.17 버전을 다운로드
https://www.php.net/distributions/php-5.5.17.tar.gz

## 컴파일
```
# ./configure
```
모듈 만들기
```
# make
```
모듈 테스트
```
# make test
```
설치
```
# make install
```

'linux' 카테고리의 다른 글

php 5 컴파일  (0) 2019.11.16
엘리멘트리 OS 5.0 Juno 설치하기  (0) 2019.10.15
우분투에서 런처 만들기  (0) 2019.05.31
프로세스 확인  (0) 2014.10.28

컴퓨터의 구조 및 프로그램 실행 과정

CPU <=> Main Memory <=> Hard Disk

  • 두뇌에 해당하는 중앙처리장치(CPU)
  • 중앙처리장치가 처리할 프로그램과 데이터를 임시로 저장하는 주기억장치(Main Memory)
  • 프로그램과 데이터 등을 반영구적으로 저장할 수 있는 하드디스크
  • 키보드, 모니터, 프린터 등의 주변장치로 구성

CPU

ALU(Arithmetic and Logic Unit)

덧셈, 뺄셈과 같은 산술연산과 논리합, 논리곱과 같은 논리연산을 수행하는 ALU(Arithmetic and Logic Unit)
레지스터로부터 데이터를 가져와서 연산하고 그 결과 값 역시 다시 레지스터에 저장

레지스터(register)

ALU가 연산을 수행할 때 그 대상이 되는 데이터를 임시로 저장하는 CPU내의 저장 공
간인 레지스터(register)
보통 CPU내에는 이런 레지스터들이 다수 존재하게 되는데 CPU가 명령을 수행하는 데 필요한 _시스템 레지스터_와 프로그래머에 의해서 사용 가능한 _범용 레지스터_들이 있다.

컨트롤 로직(control logic)

CPU내에는 ALU와 레지스터 파일 외에 명령을 해석한 후에 실행을 위해 ALU와 레지스터
파일을 제어하는 회로가 존재하게 되는데 이를 컨트롤 로직(control logic)이라고 한다

프로그램의 실행

보통 프로그래머가 작성한 프로그램은

  1. CPU가 바로 해석할 수 있는 기계어의 형태로 번역되어 하드디스크에 저장되었다가
  2. 운영체제에 의해서 실행될 때 주기억장치에 올려지고
  3. CPU의 컨트롤 로직에 의해서 하나씩 실행되게 된다.

프로그램이 실행될 때 필요한 데이터 역시

  1. 하드디스크에 저장되었다가
  2. 메모리를 통하여 레지스터에 저장된 후 연산에 사용된다.

연산의 결과 값은 반대로

  1. 레지스터에 저장된 후에
  2. 메모리를 거쳐 하드디스크에 저장하게 된다.

물론 입력데이터는 하드디스크가 아닌 키보드나 다른 입력장치를 통해 입력 될 수도 있
으며 출력 역시 모니터나 프린터 등의 장치가 될 수 있다.

참고

자바 메모리 구조

자바의 메모리 관리는 확장 가능한 방식의 응용 프로그램을 조정하기 위해 필요한 기술이다.

JVM

JVM은 컴퓨터가 자바 프로그램을 실행할 수 있도록하는 추상 컴퓨팅 시스템이다.
JVM은 코드를 로드, 검사, 실행하고 런타임 환경을 제공한다.

이런 특징으로

  • 자바 프로그램은 오류가 발행해도 JVM만 다운될 뿐 전체 시스템에 데미지를 주지 않는다.
  • 플랫폼에 의존적이지 않아 모든 자바 프로그램의 구동이 가능하다.
  • 동적할당을 프로그래머가 담당하는 C언어와 달리 JVM에서 관리한다.

구조

JVM 구조

자바 실행 과정

1.실행 될 클래스를 메모리에 로드 후 초기화 작업을 수행
2. 메소드와 클래스 변수들을 해당 메모리 영역에 배치
3. 클래스 로드가 끝난 후 JVM은 main 메소드를 찾아 지역변수, 객체변수, 참조변수를 스택에 쌓음.
4. 코드를 따라 진행하면서 함수 호출, 객체 할당 등의 작업 수행

Runtime Data Area

Class Loader

프로그램 동작시 바이트 코드(.class파일) - 클래스를 메모리(아래 Runtime Data Area)로 적재한다.

Execution Engine

Class Loader에 의해 클래스들이 메모리에 적재되면, 클래스들을 기계어로 변경해 명령어 단위로 실행한다.
Interpreter 방식과 Just-In-time 컴파일러를 이용하는 방식이 있다.

Just-In-Time 컴파일러는 전체 바이트 코드를 네이티브 코드로 컴파일하여 실행할 수 있게 함으로서 성능을 높이는 방식이다.

Garbage Collector

Heap 메모리 영역에 생성된 객체들 중에 참조되지 않는 객체들을 탐색 후 메모리에서 제가한다.
참조가 없어질 때 바로 해제되는 것은 아니다.
GC가 수행되는 동안 GC를 수행하는 쓰레드가 아닌 다른 모든 쓰레드는 일시정지된다.

Runtime Data Area

자바 프로그램이 실행될 때 JVM이 운영체제로 부터 할당받는 메모리 영역이다.
자바 어플리케이션을 실행할 때 사용되는 데이터들이 적재된다.

용도에 따라 5개로 구성

  1. Mathod Area
  2. Heap Area
  3. Stack Area
  4. PC Register
  5. Native Method Stack

1, 2번 영역은 모든 쓰레드가 공유하고
3, 4, 5번 영역은 쓰레드 별로 생성되며 공유되지 않는다.

Method (Static) Area

클래스와 인터페이스의 런타임 상수(Constant Pool) 풀이다.

  • static 변수(클래스 멤버 변수, 정적 변수)
  • 메소드
  • 생성자
  • final class 변수 ... 등

Heap Area

자바 프로그램이 실행되어 JRE 클래스 및 동적으로 생성된 Java 오브젝트가 저장되는 공간이다.
새로운 객체는 항상 힙 공간에 생성되며이 객체에 대한 참조는 스택 메모리에 저장된다.
메소드 영역에 로드된 클래스만 생성이 가능하다.
이러한 개체는 전역 액세스 권한이 있으며 응용 프로그램의 어느 곳에서나 액세스 할 수 있고,
다른 객체의 필드 또는 스택에 존재하는 다른 메소드에 의해 참조되며,
참조하는 변수가 없으면 필요없는 것으로 간주되어 Gabage Collector에 의해 해제된다.

  • new 키워드로 생성된 객체
  • 배열 ... 등

Stack Area

정적 메모리 할당 및 스레드 실행에 사용된다.
여기에는 메소드에 고유 한 (1)기본 값과 메소드에서 (2)참조되는 힙에있는 오브젝트에 대한 참조가 포함한다.
Last-In-First-Out (LIFO)의 구조이다.
메소드가 호출되면 이 영역에 할당되고, 사용이 종료되는 해제된다.
각 스레드는 스레드마다 하나의 스택을 할당받게 된다.
힙 영역의 객체를 참조할 수 있다.

  • 지역변수, 파라미터, 리턴 값
  • 연산에 사용되는 임시 값

int a = 10; // 스택에 int 크기의 메모리 공간을 확보하고 이름이 a라고 붙여준다. 값은 10.
Person p = new Person(); // Person p를 스택에 생성하고, new로 생성된 Person의 인스텀스를 힙에 생성한다. 스택에 p는 힙 영역의 주소값을 가지고 있게 된단. 이를 참조라고 표현한다.

PC Register

수행중인 JVM 명령 주소(Program Counter)를 저장한다.
Thread가 생성될 때마다 생성된다.

Program Counter : Thread가 실행되는 부분의 주소와 명령

Native Methos Stack

자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역이다.
보통 C나 C++ 등의 코드로 작성된 코드를 수행하기 위한 스택이다.

예제

class Person {
    int pid;
    String name;

    // constructor, setters/getters
}

public class Driver {
    public static void main(String[] args) {
        int id = 23;
        String pName = "Jon";
        Person p = null;
        p = new Person(id, pName);
    }
}

스택과 힙

엘리멘트리 OS 5.0 Juno 설치하기

엘리멘트리 OS

개요

맥과 비슷한 디자인을 추구하는 리눅스로 '엘리멘트리 OS'가 있습니다.
지금 사용하고 있는 '민트 19.2'보다 무겁다고 하는데, 일단 사용해 보려구 합니다.

OS 설치는 문제없이 되었는데 (1)업데이트나 그래픽 드라이버 설치과정에 자꾸 시스템이 멈추는 문제가 발생했고, (2)지역을 한국으로 하면 한글 입력이 잘 되는데 영문으로 하면 한글입력이 되지 않는 문제가 발생했습니다.
해결 방법을 찾아 설치를 마치고, 설치 방법을 정리합니다.

주의. 초보자의 경우 리눅스 자체를 권하지 않습니다. 대부분 후회하고 윈도우를 다시 설치하게 됩니다.

설치내용

  • elementary OS 5.0 Juno 1.48 GB | 64-bit 설치
  • 영문으로 설치하고 한글입력기는 nimf를 사용

설치 전에 참고할 만한 사항을 구글링하고, 물론 박정규님의 elementary OS 5.0 Juno 살펴보기은 따로 찾아 읽어 봤네요.

설치환경

  • LG R590-urawk 노트북
  • 하드는 SSD로 교체하였고, 메모리는 8GB로 업그레이드 한 상태. 그리고 몇 달 전에 LG 서비스 센터에 들려 그래픽카드와 CPU 서멀구리스를 새로 발라주었습니다.
  • 그래픽 카드가 nvidia gt335m입니다.
  • 자세한 스펙은 여기를 참고해 주세요.

엘리멘터리 OS는?

빠르고, 개방적이며, 사생활을 존중하는 Windows와 macOS의 대안

  • 데비안, 우분투 기반의 리눅스이다.
  • 맥 비슷한 디자인을 표방한다.
  • https://distrowatch.com/에서 2019년 10월 현재 6위이다. 5위가 우분투^^

설치과정

  1. 설치 USB 만들기
  2. 설치하기
  3. 그래픽카드 설정
  4. 한글입력기 설치
  5. 기타 유용한 어플리케이션

공식 설치 안내서 보기

설치 USB 만들기

  1. iso 이미지 파일이 없으면 먼저 다운로드 합니다.
    다운로드를 위해 구매가격을 자유롭게 책정하고 구매를 하면 다운로드가 가능합니다.
    0원으로 책정하면 먼저 사용할 수 있습니다. 사용해 보고 만족스러우면 구매를 고려해야겠죠.

다운로드는 지역서버나 마그넷 링크로 토렌트로 다운로드 할 수 있습니다.
처음에는 지역서버에서 받으려고 했는데 하세월이라 마그넷(magnet) 링크를 이용했습니다.
리눅스 민트에서 다운로드 받을때 transmission을 사용했습니다.
윈도우의 경우 유토렌트 - uTorrent를 사용한다고 합니다. 직접 해 보지는 않았습니다.

  1. 설치 드라이브 만들기
    아래 공식 문서를 보시면 설명이 잘 되어 있습니다.

공식 설치 안내서 보기

설치하기

설치과정은 USB로 부팅해서 엘리멘트리 OS를 설치하고
설치가 끝나면 재부팅합니다.

USB로 부팅

그래픽 카드 문제를 해결하기 위해 아래 그래픽카드 설정이 필요함.

그래픽카드 설정

설치 후 패키지 관리자에서 업그레이드를 해도 가능하지만 설치 중 충돌이 발생하여 시스템이 멈추는 경우가 발생한다면 텍스트 모드에서 OS 업데이트 및 그래픽 드라이버를 설치할 필요가 있음.

사용하고 있는 장비는 노트북 엘지 R590
GeForce GT 335M (GPU 0)

텍스트 모드에서 그래픽 드라이버 설치

설치 후 로그인 화면에서 텍스트 모드로 로그인하기
CRTL + ALT + F1

다시 그래픽 모드로 전환하려면 CRTL + ALT + F1 한 번 더 입력

먼저, 패키지 업그레이드

sudo apt update
sudo apt upgrade

그래픽 드라이버를 설치하기 위해 PPA가 필요한데 엘리멘터리 OS는 막혀있음.
PPA를 사용할 수 있도록 설정하고, 그래픽 소스가 있는 ppa를 등록

sudo apt install software-properties-common
sudo add-apt-repository ppa:graphics-drivers/ppa

PPA 등록 후 다시 업데이트 진행

sudo apt update
sudo apt upgrade

마지막으로 드라이버 설치
이 작업을 위해서는 어떤 nvidia 드라이버를 설치해야 하는지 알아야 함.
현재(2019년 10월) nvidia-370, nvidia-340, nvidia-304가 있음.
PPA에서 자신에게 맞는 그래픽 빌드를 설치합니다.
아래 명령의 xxx에 3개의 숫자를 사용한다.

sudo apt install nvidia-xxx

nvidia optimus를 사용하는 경우 위 코드 대신 아래 bumblebee를 사용함.

sudo apt install bumblebee linux-headers-generic

한글입력기 설치

PPA가 필요한데 엘리멘터리 OS는 막혀있어 이를 허용해 주어야 합니다.
sudo apt install software-properties-common

이제 PPA를 등록하겠습니다.
sudo apt-add-repository ppa:hodong/nimf
apt update

nimf를 설치하고 입력기를 nimf로 설정합니다.
apt install nimf nimf-libhangul
im-config -n nimf

재부팅

'linux' 카테고리의 다른 글

php 5 컴파일  (0) 2019.11.16
엘리멘트리 OS 5.0 Juno 설치하기  (0) 2019.10.15
우분투에서 런처 만들기  (0) 2019.05.31
프로세스 확인  (0) 2014.10.28

관계 대수

기본 연산자

단항 연산자(unary operator)

  • 셀렉트
  • 프로젝트
  • 리네임

이항 연산자(binary operator)

  • 합집합
  • 차집합
  • 카티션 프로덕트

<참고. 그리스 소문자>

이름 소문자
시그마 σ (대문자는 Σ)
파이 π
ρ
세타 θ

단항 연산자

셀렉트

릴레이션에서 조건을 만족하는 레코드를 선택하는 것으로 시그마 기호로 표시한다.

σ조건(R)

σ번지=231(회원)

프로젝트 연산자

한 릴레이션의 여러 속성 중 특정 속성만 선택하는 것으로 파이 기호로 표시한다.

수학적인 관점에서 릴레이션은 집합이므로 프로젝트된 릴레이션에서 중복되는 레코드는 제거된다.

πA1,A2,...,An(R)

π주소,전화번호,소속(회원)

리네임 연산자

관계 대수식에서 결과로 생성된 릴레이션은 이름이 없어, 참조할 수 있는 이름을 부여해야 한다.

리네임 연산으로 그리스 소문자 로(ρ)를 사용한다.

<R을 x로 이름을 부여>

ρx(R)

ρcs번지=231(회원))

<R을 x로 이름을 부여하고 n개의 속성 이름까지 부여>

ρx(A1,A2,...,An)(R)

이항 연산자

집합 연산자

집합론을 이론적 배경으로 하는 릴레이션은 동일한 스키마를 만족하는 레코드의 집합이라고 할 수 있기 때문에 릴레이션에서 합집합, 교집합, 차집합 연산자를 동일하게 적용할 수 있다.

릴레이션은 호환 가능한 릴레이션간에 사용할 수 있으므로 집합 연산자를 사용하기 위해서는 아래 두 조건을 만족해야 한다.

집합 연산자를 사용하기 위한 두 릴레이션을 R과 S라 할때

  1. R과 S는 가지고 있는 속성의 수가 같아야 한다.
  2. 모든 i에 대해 릴레이션 R의 i번째 속성의 모데인과 릴레이션 S의 i번째 속성의 도메인이 서로 같아야 한다.
합집합 연산자

두 개의 릴레이션을 입력으로 받는 이항 연산자로, 두 릴레이션이 포함된 모든 레코드를 갖는 릴레이션을 결과값으로 가지며, 합집합 연산자 '∪'를 나타낸다.

π회원명(σ주소='서울'∧'성별='남')(회원) ∪ π회원명(σ주소='경기'∧'성별='남')(회원)

논리 접속자: ∨, ∧, ¬, ⊃, ≡

차집합 연산자

차집합 연산자는 한 릴레이션에는 포함되고 다른 릴레이션에는 포함되지 않는 레코드를 가지는 릴레이션을 결과값으로 가지며, '-'로 나타낸다.

π회원명(σ집주소='서울'∧'성별='남')(회원) - π회원명(σ근무지='서울'∧'성별='남')(회원)

교집합 연산자

입력 받은 두 릴레이션에 동시에 포함되는 레코드들의 집합을 결과값으로 가지며, 교집합 연산자 '∩'로 나타낸다.

π회원명(σ집주소='서울'∧'성별='남')(회원) ∩ π회원명(σ근무지='서울'∧'성별='남')(회원)

기본 연산자의 조합

R∩S=R-(R-S)

벤다이어그램으로 생각해 보면 쉽게 이해할 수 있다.

카티션 프로덕트 연산자

앞서 언급된 단항 연산자나 서로 양립 가능한 서로 다른 두 개의 릴레이션과 다르게

서로 다른 릴레이션 간의 관계성을 이용하는 연산자로 'x'로 표시된다.

카티션 프로덕트 연산자는 두 릴레이션의 레코드 간에 모든 조합을 취하는 연산이다.

RxS={(rs) | r∈R∧s∈S}

R릴레이션의 레코드가 4개이고 S릴레이션의 레코드가 4개이면 44=16개가 된다.*

조인 연산

카티션 프로덕트 연산과 다르게 두 릴레이션에서 서로 관련된 레코드만 결합하여 결과 집합에 포함시킨다.

σ회원.주소=사원.주소(회원x사원)

세타 조인

조인 연산 가운데 하나로 관계 연산자 'θ'로 정의되는 조인조건을 가진다.

A라는 속성을 갖는 릴레이션 R과 B라는 속성을 갖는 릴레이션 S에 대한 세타 조인(⋈AθB) 정의

R⋈AθBS=σAθB(RXS)

정의에서 θ는 관계연산자 {=,<,<=,>,>=,!=} 중에 하나가 된다.

θ가 '='이면 동등 조인 또는 이쿼 조인(equi join)이라 하며, 다음과 같이 표현할 수 있다.

회원⋈회원.주소=사원.주소사원

'database' 카테고리의 다른 글

관계 대수의 기본 연산자  (0) 2019.06.02
MariaDB(MySQL) 외부 접근 허용|금지하기  (0) 2019.05.09

우분투에서 런처 만들기

우분투에서 패키지 관리자에서 설치하지 않고, 다운로드 받아 사용하려면 터미널에서 실행하거나 런처를 만들어 이클립스를 실행한다.

작업환경

  • 우분투 18.04

요구사항

  • vim 또는 텍스트 에디터
  • 이클립스 다운로드 후 압축해제
  • 이클립스 실행파일의 위치와 아이콘의 위치 확인

런처(launcher) 만들기

쉘을 실행(Ctrl+Alt+T)

$ sudo vim /usr/share/applications/eclipse.desktop

아래 내용을 참고해 작성합니다.

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=2019-03 # 이클립스의 버전
Type=Application 
Terminal=false
Exec=/home/shin/Downloads/eclipse/eclipse # 이클립스 실행파일을 지정
Name=Eclipse JEE # 표시되는 이름
Comment=Eclipse # 설명
Icon=/home/shin/Downloads/eclipse/icon.xpm # 아이콘 파일을 지정

이제 Show Application에서 등록된 이클립스를 확인할 수 있다.

'linux' 카테고리의 다른 글

엘리멘트리 OS 5.0 Juno 설치하기  (0) 2019.10.15
우분투에서 런처 만들기  (0) 2019.05.31
프로세스 확인  (0) 2014.10.28
ssh 설치  (0) 2014.10.27

+ Recent posts