728x90
반응형
SMALL

*이기적 영진닷컴 Youtube Link - https://www.youtube.com/watch?v=YWz5YsgFyxg&list=PL6i7rGeEmTvp_MYm0zuiFe7COrM3endfu

 

특징

소스코드 특정 프로그래밍 언어 자바, C와 같은 언어로 작성된 프로그램이다. 

소스코드로 작성된 프로그램은 저작권 등의 이유로 열람이 불가능 하거나, 열람이 가능하더라도 개발자의 허가없이 수정이 불가능하고 배포를 금지하고 있다.

마이크로소프사의 윈도우는 소수 고객들(정부, 다국적 기업)에게 소스코드를 공개하고 보안유지를 위해서 소스코드 수정을 가능케 하고 있습니다만 해당 수정본을 재배포하는 것은 금지하고 있기 때문에 윈도우 운영체제를 오픈소스라고 하지는 않는다.

이에 반해 리눅스는 개발자의 저작권을 지키면서도 소스코드를 열람하고 수정하고 재배포를 허용하고 있기 때문에 오픈소스 운영체제라고 할 수 있다.

 

멀티 유저란 여러 사용자가 동일한 시스템에 동시에 접근하는 것이 가능한 것을 의미하는 것인데 예를 들어 한대의 컴퓨터에 다수의 사용자가 자신의 입출력 장치를 이용해서 해당 시스템을 사용하는 것을 의미하는 것이다.

멀티 태스킹은 하나의 작업이 컴퓨터 자원을 항상 사용하는 것이 아니기 때문에 하나의 작업이 작업을 안 하고 있는 상태에 다른 작업이 공유 자원인 CPU 등을 점유함으로써 여러 작업이 동시에 진행되도록 하는 것이다.

멀티유저와 멀티 태스킹은 CPU와 메모리와 같은 컴퓨터 자원을 효율적으로 사용해서 시스템의 성능을 최대한 활용하는 것이 주 목적이라고 볼 수 있다.

 

다중 스레드를 지원하는 네트워크 운영체제이다.

먼저 스레드를 언급하기 이전에 프로그램과 프로세서를 구분해야 한다.

프로그램은 특정 언어로 작성된 개발 코드 아직 실행되지 않은 정적인 상태를 말한다.

프로세스는 실행중인 프로그램을 의미한다.

즉 프로그램이 cpu를 할당받아 특정 업무를 처리중인 동적인 상태를 일반적으로 프로세스라고 이야기 한다.

스레드는 프로세스 내에서 실행되는 작업으로 일반적으로 하나의 프로세스에서는 하나의 스레드를 처리한다.

다중 스레드는 하나의 프로세스에서 2개 이상의 풀 스레드를 동시에 실행하는 것으로 멀티 유저와 멀티 태스킹 같은 시스템 사용의 효율성을 높이는 작업을 지원하게 된다.

다중 스레드를 지원하는 네트워크 환경인 경우 네트워크 기반의 멀티유저나 멀티 태스킹 지원도 가능하게 하기 때문에 좀 더 강력한 한 네트워크 지원을 가능케 한다.

 

여러 종류의 파일 시스템을 지원한다.

파일 시스템 파일 관리자라고도 이야기 하기도 하는데 기본적인 리눅스 파일 시스템인 ext계열과 dos의 펫 윈도우의 ntfs 또는 네트워크 파일 시스템인 nfs 등 다양한 파일 시스템을 지원하고 있다.

 

장단점

리눅스는 유닉스 기반 운영체제 인터페이스인 포직스 규격을 따르고 있기 때문에 유닉스용 프로그램을 수정없이 리눅스에서 작동시킬 수 있다.

다른 운영체제들보다 안정적이다. 시스템이 안정적이다라는 말은 가용성, 즉 시스템이 다운되지 않고 얼마나 오랫동안 해당 시스템을 사용할 수 있는지를 정하는 것인데 리눅스는 특별한 상황을 제외하고 항상 켜놓아도 시스템이 다운이 되지 않기 때문에 안정성이 뛰어나다고 말할 수 있다.

다른 운영체제들보다는 적은 양의 메모리를 사용함으로써 하드웨어 기능을 효과적으로 사용한다는 것이다. 수학 방식을 통해서 램이 부족할 경우 스왑 영역을 늘려서 메모리의 효율성을 높일 수 있다.

리눅스의 단점 중 하나는 오픈소스이기 때문에 문제점이 일어나면 기술지원을 받는데 한계가 있다는 것이다. 예상치 못한 오류가 발생을 하면 기술지원을 즉각적이거나 직접적으로 받는 것이 불가능해서 장애 처리시 어려움을 겪을 수가 있다. 초창기에는 그랬고 현재는 많이 나아졌다. 

한글 지원이 미흡하다. 한글을 배포본 마다 다 지원을 하고 있긴 하다만 별도로 설치를 해서 사용을 해야 되기 때문에 이게 처음 리눅스를 접한 사람들한테는 처음부터 무언가를 설치해서 진행을 해야 된다는 부담감 때문에 좀 어렵다라고 리눅스가 어렵게 다가올 수 있다.

 

디렉터리는 파일이 저장되는 공간이다.

운영체제는 파일 저장 공간을 계층적 트리 형태로 구성해서 저장하고 있다.

상위 디렉토리와 하위 디렉토리로 계층 구조를 이루고 있고, 하위 디렉토리가 다른 하위 디렉토리의 상위 디렉토리가 될 수 있다.

리눅스의 매우 중요한 특징 중 하나다.

/는 최상위 디렉토리이다. 모든 디렉토리의 출발점인 동시에 또 다른 시스템과의 연결되는 아주 중요한 디렉토리이다.

/ 최상위 디렉토리 바로 아래에 있는 디렉토리들을 우리가 보통 상위 디렉토리라고 한다. 14개의 디렉토리로 구성되어 있다.

각 디렉토리마다 동일한 특성을 가진 파일들을 한 곳에 모아 놓기 때문에 디렉토리 명 만으로도 그 해당 디렉토리에 어떤 파일들이 저장되어 있는지 확인할 수 있다.

/boot 디렉토리는 부팅시 필요한 커널 이미지 파일들이나 부트 로더인 그럽 파일 같은 것들이 저장되어 있다.

/proc 디렉토리는 프로세스 디렉토리라고 한다. 가상화의 시스템으로 운영되고 있는 다양한 프로세스들과 프로그램에 대한 정보를 포함하고 있다. 시스템 정보 디렉토리이기 때문에 커널 기능도 제어할 수 있다.

/lib 디렉토리는 동적 공유 라이브러리를 저장하고 있다. 라이브러리라 하면 소프트웨어를 개발을 할 때 미리 필요한 코드를 작성한다. 서브루틴 함수 이러한 것들을 라이브러리라고 이야기 한다. 라이브러리는 동적 라이브러리와 정적 라이브러리로 분류할 수 있다. 정적 라이브러리란 공유 라이브러리 루틴을 사용하지 않고 프로그램 내 라이브러리 루틴을 복사해서 자기 고유한 라이브러리를 사용하는 것을 말하는 것이다. 공유 라이브러리는 실행 내부에 라이브러리를 두지 않고 프로그램을 실행할 때 마다 해당 라이브러리를 가져와서 실행을 하는 형태를 말한다. 쉐어 라이브러리를 쓰는 것이다. 리눅스는 주로 동적 라이브러리를 사용하기 때문에 메모리의 효율성을 높인다.

/bin 바이너리 디렉토리이다. 리눅스를 운영하기 위해서는 기본적인 명령어들이 저장이 되어야 하는데 clear, cd, ls 명령어들이 루트 사용자 뿐만 아니라 일반 사용자도 사용할 수 있는 일반적인 명령어들이다. 이러한 명령어들을 저장하는 공간이다. 보통 실행하는 파일들이기 때문에 바이너리 디렉토리에 저장을 한다.

/dev 디바이스 디렉토리이다. 시스템 디바이스 파일들을 저장한다. 장치 파일 특수 파일을 디바이스 드라이브 또는 장치 드라이브라고 이야기를 하는데 장치 파일에는 블럭 장치하고 문자 장치 파일로 구분을 하고 있다. 블럭 장치 파일은 하드디스크나 cd dvd나 플로피 디스크같은 저장장치를 말한다. 문자 장치 캐릭터 디바이스는 키보드나 마우스 같은 입출력 장치들을 말한다. 작업을 하려다 보면 하드디스크나 키보드 같은 장치들이 이를 운영하는 파일 프로그램 디바이스 파일들이 필요한데 이러한 디바이스 파일들을 저장하는 디렉토리를 디바이스 디렉토리라고 한다.

/etc 디렉토리이다. 시스템 환경 설정 파일들이 저장되는 디렉토리이다. 사용자 계정 정보 뿐만 아니라 특정 애플리케이션 메일이나 ssh같은 파일들을 설치한 후에 관련된 환경설정을 해야 하는데 그와 같은 특정 애플리케이션의 환경설정을 모아놓은 디렉토리를 보통 etc 디렉토리라고 한다. 

/root 디렉토리이다. 시스템 관리자들을 보통 루트라고 이야기를 한다. 루트 관리자의 홈 디렉토리를 루트 디렉토리라고 이야기를 한다. 여기는 관리자 운영을 하기에 필요한 다양한 파일들이 저장되는 공간이다.

/sbin 디렉토리이다. 시스템 바이너리 디렉토리라고 하는 것은 시스템을 셧다운시켜야 되거나 계정을 생성해야 되거나 이런 시스템 관리나 운영에 대한 명령어들이 저장된다. 이 디렉토리에 저장되는 파일들은 관리자만 해당 명령어들이나 파일들을 관리할 수 있다.

/usr 디렉토리이다. 일반 주로 시스템 관리자가 루트 디렉토리를 이용한다면 그 일반 사용자들이 주로 사용하는 디렉토리를 유저 디렉토리라고 한다. 사용자 데이터나 애플리케이션이 설치되는 디렉토리이다. 공유 가능한 프로그램이 설치될 수 있고, 네트워크를 이용해서 여러 시스템을 연결할 경우에 이 디렉토리를 공유해서 설치된 파일들을 활용할 수 있다. 활용도가 조금 높은 디렉토리 중 하나가 바로 유저 디렉토리라고 할 수 있다.

/home 디렉토리이다. 사용자 계정 디렉토리이다. 일반 사용자들이 처음 텔넷이나 ftp 접속했을 때 처음 위치하게 하는 디렉토리이다. 사용자들의 환경설정 정보들이나 내용들이 저장이 되는 디렉토리이다. 

/var 디렉토리이다. 가변 저장 디렉토리이다. 파일 크기가 고정되지 않고 가변적인 파일들 예를 들어서 로그 파일이나 메일을 통해서 송수신 되는 데이터들을 저장할 때 활용하는 디렉토리이다.

/tmp 디렉토리이다. temporary 디렉토리라고 하는데 이제 프로그램이나 프로세스 작업을 할 때 임시로 생성되었다가 삭제되는 파일들이 저장되는 공간이다. 모든 사용자에 대해서 읽게 하고 쓰게 하기가 허용되고 있다.

/mnt 디렉토리이다. 마운트 디렉토리는 파일 시스템을 일시적으로 마운트할 때 사용을 한다. 마운트라는 용어는 시스템마다 다르게 정의되고 있다. 리눅스 환경에서는 마운트란 논리적인 시스템과 디렉토리를 연결해서 해당 논리 시스템을 사용할 수 있게 조정하는 작업을 마운트한다고 정의를 한다.

/lost+found 디렉토리이다. 결함이 있는 파일에 대한 정보가 저장되는 공간이다. 손상된 파일이나 디렉토리들은 /lost+found 디렉토리에 연결한 뒤에 오류가 수정이 되면 평상시에는 널 링크로 비어있는 상태가 된다. 시스템에 문제가 발생하면 문제가 발생한 파일들의 정보가 저장되고 해결이 되면 비어지게 되는 오류 수정이 가능하게 하는 결함 정보들이 저장되는 디렉토리이다.

 

 리눅스 배포판은 리눅스 시스템을 구성하는 소프트웨어를 패키지 형태로 만들어 놓은 것이다.

배포판의 가장 핵심은 커널이다.

커널은 커널.org 사이트에 들어가서 다운을 받으면 되고 그 커널의 중심에 여러 가지 GNU 소프트웨어를 다양하게 설치함으로써 배포판을 구성할 수 있다.

전세계 약 300여가지 배포판이 있는데 그 중 대표적인 배포판으로는 슬랙웨어, 데비안, 레드햇 등이 있다. 

슬랙웨어 배포판은 리눅스 패포판에서 가장 대중적인 것으로 알려져있다. 최근 패키지 관리 문제점으로 인해서 인기가 다소 떨어진 상태이긴 하지만 구조가 간결하고 파악하기 쉽다. 유닉스 학습을 목적으로 사용하기에 아주 적합한 배포판이다.

데비안 배포판은 데비안 프로젝트에서 만들어 공개된 운영체제. GNU에 공식적인 후원을 받는 배포판이라고 좀 유명한 배포판이라고 할 수 있다. 

우분투는 초창기에는 데비안 프로젝트 팀에서 후원을 받다가 영국의 기반을 둔 캐노니칼의 지원을 받으면서 우분투로 이름이 바뀌면서 여러가지 성격이 바뀌어졌다. 우분투는 사용자의 편의성에 초점을 둔 배포판이다.

레드햇은 미국의 레드햇사가 개발하던 리눅스 배포판이다. 현재 레드햇사가 유료로 기술지원을 전향하면서 그 두개의 버전으로 나뉘어진다. 레드햇 엔터프라이즈 에디션으로 발헬이라는 것과 하나는 페도라 프로젝트에서 개발된 페도라로 나뉘어져 있다. 그래서 지금 레드햇은 일반적으로 기업용 유료 유닉스 배포판 알헬에 지원을 하고 있는 상태이다. 알헬(RHEL)은 상용 리눅스 배포판으로 알려져있는 레드햇 엔터프라이스 리눅스의 약자이다. 18-24개월 사이에 새로운 버전을 공개하고 있고 라이센스는 별도로 판매하지 않고 있다. 산업용 패키지니까 구입은 해야 하지만 소스코드 같은 경우 레드햇의 ftp사이트를 통해서 공유받을 수 있다. 

페도라는 초창기에는 레드햇사에서 개발하다가 최근에도 레드햇의 후원과 개발 공동체의 지원을 받고 있긴 하지만 무료 배포판으로 유명하다. RHEL은 상업용, 페도라는 무료 배포판으로 이해하면 된다. rpm 기반의 소프트웨어로 이제 결합된 운영체제이다. 6개월 간격으로 새로운 버전이 배포가 되어 있다. 지원 간격은 설치후에 13개월까지이다. 

centos는 레드햇 엔터프라이즈 리눅스와 완벽하게 호환되는 무료 기업용 컴퓨팅 운영체제이다. 플랫폼을 제공할 목적으로 만들어진 리눅스 운영체제이다. 자체 커뮤니티에서 관리하고 있다.

수세는 독일에서 출시된 배포판으로 현재 유럽에서 인기가 많은 배포판. 안정성이나 보안 기능이 높다라고 볼 수 있다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=OFqWRsoSsy8&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=21

 

41. INTERSECT

1. UNION ALL

2. UNION

3. MINUS (sql server EXCEPT)

4. INTERSECT

42. Window Function

보기 1번은 내가 데이터를 보고 싶은데 이런 데이터를 줘

이것 저것 비교 출력해주는 최적의 방안을 구한다.

보기 2번은 RANGE BETWEEN / ROWS BETWEEN이 된다.

보기 3번은 GROUP BY는 행이 줄어들지만, WINDOW FUNCTION은 행이 줄어들지 않는다.

보기 4번은 같이 실행은 되지만 의미가 있는 데이터가 나오지는 않는다.

43. GROUP BY

COUNT(GRADE)를 하면 NULL은 제외하고 출력을 한다.

WHERE GRADE IN ('차장', '부장', '널'); 은 이 '널'은 의미가 없는 데이터이기 때문에 NULL을 제외하고 샌다.

그리고 COUNT(*) FROM EMP GROUP BY GRADE;를 하면 이렇게 사원, 대리, 과장, 차장, 부장 그리고 NULL 까지 수가 같이 조회가 된다. GRADE가 NULL인 값까지 같이 조회가 된다.

44. LAG() 함수

LAG(컬럼, 오프셋, 디폴트) 로 구성되어 있다.

컬럼의 오프셋 만큼의 이전 행의 값을 출력한다. 만일 없으면 NULL을 입력하는데 디폴트 값이 있으면 디폴트 값을 입력한다.

45. 중복 테이블 추가

A 시스템과 B시스템이 있는데 서로 동일한 테이블의 구조를 갖은 테이블 A,C가 있다.

이렇게 GRANT 권한을 주어서 A시스템의 C테이블에 접속을 한다.

그래서 B시스템의 A테이블과 A시스템의 C테이블을 원격 조인을 하려고 한다.

그런데 B시스템에서 그냥 C테이블을 갖고 와서 중복 테이블을 만드는 것이다.

이러한 기법을 중복 테이블 추가라고 한다.

46. UPPER

문자열을 대문자로 바꿔준다.

전부 바꿔준다.

'12#3가나abc' -> '12#3가나ABC'

47. LEAD()

LEAD(SAL) -> LEAD(SAL,1)

기본 디폴트 값은 1이다.

48. UNION

UNION은 중복을 제거한다.

UNION ALL은 중복을 제거하지 않는다.

답은 2번이다.

49. NULL

날짜 더하기 NULL을 하면

NULL은 산술/비교 자체가 아얘 안 되므로

NULL이 출력된다.

50. CUBE

GROUP BY를 진행하고

전체 1건 

DNAME별 소계 3건

JOB별 소계 5건

그리고 DNAME, JOB을 GROUP BY한 결과 9건

더해서 총 18건이 나온다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=1XYh_WGmTTU&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=20

 

31. FULL OUTER JOIN

예시 데이터를 만들어서 확인하는 것이 좋다.

A테이블에는 1,2,3 그리고 B테이블에는 2,3,4 이렇게

2,3 겹치는 데이터를 포함해서 만들어주는 것이 좋다.

답은 4번이다.

32. 그룹 함수

33. LIKE

문자열은 대소문자를 구분한다.

34. 물리적 테이블 명

숫자로 시작하면 안된다.

_,$,#만 가능하다.

숫자도 사용 가능하다.

문자로 시작해야 한다.

대소문자 구별된다.

35. 내장 함수

ROUND(숫자, m) - 반올림 함수, 소수점 m자리까지 반올림한다. m의 기본값은 0이다.

CEIL - 올림 함수

TRUNC - 테이블 내용 삭제 함수

NULLIF - A,B가 같으면 NULL 아니면 A를 반환한다.

36. 오류

1번이 답이다.

1. INSERT INTO T_ORDER VALUES (2, SYSDATE-1, 'ABC');

이면 컬럼명을 적어주지 않으면 오류가 발생한다.

DEFAULT 값이 있더라도 오류가 발생한다.

SYSDATE - 1을 하면 어제 날짜가 이렇게 들어가 있다.

그리고 C4에 DEFAULT값인 1000이 들어가 있다.

DELETE T_ORDER; 이렇게 FROM을 생략해도 된다. 하지만 관례상 써주는 것이 좋다.

37. ORDER BY

ORDER BY에서 명칭도 사용이 가능합니다.

숫자와 컬럼을 혼용하여 사용할 수 있다.

SELECT 절에서 사용하지 않은 컬럼도 ORDER BY 절에서 사용할 수 있다.

오라클은 ORDER BY를 할 때 NULL은 가장 뒤로 밀린다.

그래서 DESC를 하면 NULL이 가장 위로 올라온다.

SQL SERVER는 ORDER BY를 하면 가장 작다고 판단된 NULL이 가장 먼저 나온다.

ORDER BY의 DEFAULT는 오름차순(ASC)이다.

답은 4번이다.

38. 비동등 조인

먼저 크로스 조인을 하고

그 상태에서 조인의 조건과 동일한 값을 조회하면 된다.

그러면 이렇게 T_ORDER를 JUMUN별로 SUM한 값이 어떤 등급에 속하는지를

조회하는 결과를 얻을 수 있다.

40. 실행순서

1. NULL은 연산이 안 되므로 AVG를 할 때 빼고 계산을 한다. 그래서 10이다.

2. SELECT 하기 전에 WHERE가 먼저 실행된다. 그래서 COL1>0 인 것들 중에서 AVG(COL3)를 한다. 그래서 20이다.

3. WHERE COL1 IS NOT NULL 이므로 COL1이 NULL인 행은 뺀다. 그리고 COL3의 평균값을 조회를 한다. 이 때 NULL은 연산이 불가능하므로 뺀다. 20이다.

그래서 정답은 3번이다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=gZ42zHGUFdQ&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=19

 

21. CUBE 문제

정답은 1번이다.

 

22. CUBE

정답은 1번이다.

ROLLUP은 전체와 소계를 구한다.

ROLLUP, CUBE, GROUPING SETS는 여러 컬럼에 대해서도 사용할 수 있다.

ROLLUP 보다 CUBE가 더 시스템 부하를 많이 시킨다.

23. COUNT()

정답은 3번이다.

24. 트랜잭션

원자성은 모두 성공하거나 전혀 실행되지 않아야 한다. 성공하면 커밋 실패하면 롤백이 되는 것이다.

일관성은 트랜잭션 실행 전 DB 내용이 정상이라면 트랜잭션 이후에도 DB 내용이 정상이어야 한다. 제약 조건을 통해서 db 내용이 정상일 수 있도록 지킬 수 있다.

고립성/격리성은 트랜잭셩 실행 도중 다른 트랜잭션이 영향을 주면 안된다.

지속성은 트랜잭션이 성공적으로 수행되면 영구적으로 DB에 저장되어야 한다. 커밋을 했으면 db에 영구반영이 되어야 한다는 의미이다.

고립성/격리성의 예이다.

sqldeveloper 창을 두개를 열었다.

두 명의 사용자가 사용을 하는 것이다.

한 명은 데이터를 update하고 아직 commit은 하지 않았다.

다른 한명은 똑같은 데이터를 update를 하고 있다. 그러면 계속 기다리고 있다.

왼쪽 사용자가 롤백을 하면

오른쪽에서 바로 처리가 되는 것을 볼 수 있다.

고립성/격리성이 지켜져야 동시에 데이터를 바꿀 때 이상해지지 않는다.

25. COUNT() 및 DISTINCT

정답은 4번이다.

26. LEFT OUTER JOIN

정답은 1번이다.

27. 윈도우 함수 - 순위

정답은 2번이다.

파티션에 대해서 순위를 계산한다.

파티션에는 ORDER BY가 들어간다.

또한 WINDOWING 절이 들어간다.

WINDOWING 절의 DEFAULT는 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW가 들어간다.

-> 정렬된 결과의 처음부터 현재 행까지 

- WINDOWING 절의 구조

[블로그 참고]https://lee1535.tistory.com/19

RANK() 함수는 동일한 순위는 동일한 값이 부여된다.

DENSE_RANK() 함수는 동일한 순위를 하나의 건수로 보아 다음 순위는 +1이 온다.

ROW_NUMBER() 함수는 고유한 순위가 부여된다.

29. 트랜잭션

똑같은 이름으로 T1이라는 SAVEPOINT에 저장을 했기 때문에

T1이 두번째 T1으로 변경된다.

답은 2번이 된다.

30. AUTO COMMIT

오라클의 경우 DEFAULT로 AUTO COMMIT = FALSE 이고 DML은 직접 커밋 그리고 DDL은 자동 커밋이 된다.

그러나 SQL SERVER의 경우 DEFAULT로 AUTO COMMIT = TRUE이다. 그래서 DML도 자동 커밋 그리고 DDL도 자동 커밋이다.

SQL SERVER를 AUTO COMMIT = FALSE로 바꾸면 DML 직접 커밋 그리고 DDL도 직접 커밋이 된다.

1. SQL SERVER의 경우 AUTO COMMIT이 FALSE인데 ROLLBACK을 하면 UPDATE구 뿐만 아니라 그 위의 CREATE구도 롤백된다.

2. 오라클의 경우 ROLLBACK을 하면 UPDATE구가 취소된다.

3. 오라클에서 ROLLBACK을 하면 테이블 생성은 롤백되지 않고 UPDATE구만 롤백된다. 마지막 커밋 시점은 CREATE 구까지가 된다.

4. AUTO COMMIT이 FALSE인 경우에 해당한다. 

답은 3번이다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=7bzILN8y5K0&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=18

 

11. TRUNCATE 문제

답은 1번이다.

DDL -> 자동 커밋

CREATE, ALTER, DROP, TRUNCATE는 자동 커밋된다.

테이블 용량이 줄어든다.

테이블 구조는 남아있다.

ROLLBACK할 수 없다.

TRUNCATE는 테이블을 초기 상태로 되돌린다.

12. 서브쿼리 (인라인뷰)

GROUP BY C1의 경우 C1을 SELECT에 사용할 수 있다.

그러나 다른 컬럼을 SELECT할 경우 크기가 맞지 않아 SELECT가 안 된다.

서브쿼리의 인라인뷰는 가상의 테이블처럼 사용한다.

그래서 애스터리크로 출력을 했으므로 N2를 ORDER BY 절에서 사용할 수 있다.

답은 4번이다.

ORDER BY 그리고 숫자가 나오면 

해당 숫자의 컬럼을 SELECT에서 찾아본다.

13. 프로시저와 트리거

프로시저는 우리가 만들면서 COMMIT과 ROLLBACK을 할 수 있다.

하지만 트리거는 자동실행되므로 COMMIT과 ROLLBACK이 불가능하다.

프로시저와 트리거도 생성하면 소스코드가 저장된다.

저장되는 공간이 이렇게 따로 있다.

프로시저와 트리거도 CREATE구로 만든다.

프로시저는 EXECUTE, EXEC 명령어로 실행한다. 그러나 트리거는 자동실행된다.

14. 계층형 쿼리

정답은 3번이다.

빈칸은 NULL값이다.

CONNECT_BY_ISLEAF는 자식이 있으면 0을 단말이면 1을 반환한다.

LEVEL이 1이면 최상위 계층이다.

15. ORDER BY

정답은 1번이다.

SELECT * FROM 야구선수 

애스터리크를 사용했으므로 모든 컬럼이 조회된다. 이 컬럼들을 ORDER BY에서 사용할 수 있다.

17. NULL 연산

SELECT SUM(C1 + C2 + C3 + C4) FROM Mytext17;

을 수행하면 컬럼에 하나라도 NULL이 들어가 있으면

연산이 제대로 수행될 수 없어 NULL을 반환한다.

집계 함수는 NULL을 무시한다.

정답은 3번이다.

18. NULL 함수

19. 계층형 쿼리

- 보기1

계층형 쿼리는 먼저 테이블을 구하고 WHERE절이 사용된다.

다음 오른쪽 그림과 같이 계층형으로 쿼리가 조회된다.

- 보기2

이렇게 더이상 계층 조건에 맞지 않으면

계층을 중단하고 테이블을 반환한다.

- 보기3

먼저 START WITH 행을 써주고

조건에 부합하지 않다면

그대로 이 한 줄만 출력된다.

결과값과 동일하므로 답은 3번이다.

19. ROLLUP

GROUP BY ROLLUP은 계층적으로 구한다.

ROLLUP은 GROUP BY EMPNO, DEPTNO 그리고 GROUP BY EMPNO 그리고 GROUP BY 전체 

이렇게 해서 각 그룹별 연봉 합계와, 직원번호별 연봉 합계와, 전체 연봉 합계를 구할 수 있게 된다.

정답은 1번이다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=x_SSdptNWGo&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=17

 

1. 도메인 문제

예를 들어 CREATE TABLE COL1 NUMBER(10) NOT NULL이면

NOT NULL을 보고 도메인이라고 한다.

입력받을 수 있는 값의 범위를 셋팅을 한 것이다.

엔터티(개념적 모델링) : 테이블(물리적 모델링) : 릴레이션(논리적 모델링)

속성 : 컬럼

도메인 : 제약조건

릴레이션에서 모든 속성의 도메인은 원자적(Atomic)이어야 한다.

2. IE 표기법

고객 엔터티의 고객번호가 내부 식별자라면

계좌마스터 엔터티에서 고객번호(FK)는 외부 식별자이다.

답은 2번이다.

주식별자는 고객번호(PK)를 말하고 보조식별자는 주민등록번호와 같은 것을 말한다.

단일 식별자는 고객 엔터티의 고객번호 즉 하나의 식별자만 존재하는 것을 말하며

계좌마스터 엔터티는 계좌번호와 고객번호 이 두개를 식별자로 두므로 복합 식별자라고 부른다.

본질 식별자는 회원 ID 등을 말하며 인조 식별자는 0001, 0002, 0003과 같은 편의, 임의의 일련번호를 말한다.

3. 주식별자 도출기준과 특징

주민등록번호를 왜 주식별자로 두지 않느냐

왜 고객번호를 주식별자로 두느냐의 문제이다.

업무에서 자주 쓰이는 속성이어야 한다.

명칭, 이름 등은 피해야 한다.

속성의 수가 많아서는 안된다. 복합 식별자는 최소여야 한다.

인스턴스를 유일하게 식별해야 한다.

주식별자 속성이 많아선 안 된다.

주식별자는 가급적 변하면 안 된다.

주식별자는 값이 꼭 입력되어야 한다.

4. 엔터티

엔터티는 2개 이상의 속성과 2개 이상의 인스턴스가 있어야 한다.

이름은 속성이다.

회원은 엔터티에 부합하다.

A 쇼핑몰의 경우 A 쇼핑몰이라고 한정이 되어 있다. 그냥 쇼핑몰이었다면 엔터티었겠지만 A 쇼핑몰 하나는 엔터티가 될 수 없다. 인스턴스이다.

배송지 주소는 속성이다.

5. 주식별자

주 식별자는 NULL 값을 가질 수 없다.

6. 반정규화

논리적 모델링 때는 정규화를 진행합니다.

그리고 물리적 모델링 때 테이블을 설계하다가 성능을 고려하면 반정규화를 진행하게 됩니다.

주로 파티셔닝 또는 인덱스로 성능을 해결을 한다.

테이블을 나눈다.

그러나 그 외에도 방법이 없다면 데이터 보안성을 위해서 반정규화를 한다.

답은 2번이다. 

7. ERD

고객의 고객번호가 주문의 주식별자의 조합으로 사용되고 있다.

값이 필수이며 NULL값이 입력되서는 안 된다.

이를 강한 식별자 관계라고 한다.

하나의 배송지정보에는 여러개의 주문이 들어갈 수 있다.

그리고 하나의 제품은 여러 주문에 포함될 수 있다. 하나의 드라이기를 여러명이 주문할 수 있다.

8. 테이블에 대한 관계

다대다 M:N 관계이다.

답은 3번이다.

9. 테이블에 대한 이상현상

답은 2번이다.

갱신을 할 경우 유비의 스마트폰 뿐만 아니라 다른 사람들의 스마트폰의 정보도 같이 변경해주어야 데이터의 무결성을 지킬 수 있다.

10. 엔터티 속성

답은 2번이다.

하나의 속성은 하나의 속성만 들어가야 한다.

속성명은 명사를 사용하여야 한다.

오늘 배송된 상품 이렇게 서술식으로 속성명을 사용해선 안 된다.

다 나누어 주어야 한다. 시간, 상품명, 배송 여부 등

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=P4gwjC0F9OM&list=PLVsNizTWUw7FzFgU1qe-n7_M7eMFA9d-f&index=36

 

PHP와 Oracle의 기본 연동

실습 13-01.php

db_user 이름

db_password 비밀번호

db_sid 오라클 sid 명

db_charset 인코딩, AL32UTF8로 지정을 하면 한글이 잘 안 깨짐

만일 정보가 틀리면

다음과 같이 에러가 발생한다.

오라클 접속이 실패한다.

SQL문을 실행하는 방법

sql developer에서 하던 것을 php파일에서 하려고 한다.

$stat = oci_parse($con, SQL문);

$ret = oci_execute($stat);

statment를 만들고 return값을 받는다.

$ret = oci_execute(oci_parse($con, SQL문); 이렇게 한 줄로 만들어주어도 괜찮다.

실습 13-02.php

SYSTEM 계정에 접속을 해서

sqlDB를 DROP하고 다시 CREATE 하였다.

BEGIN END 프로시저로 묶어주고

EXECUTE IMMEDIATE를 해주었다.

sqlDB가 성공적으로 생성되었다.

$ret 에 true가 나온 것이다.

실습 13.03.php

실습 13.04.php

실습 13.05.php

 

회원 관리 시스템

실습 main.html (회원 관리 시스템 초기 화면)

실습 insert.php

실습 insert_result.php

실습 update.php

GET 방식으로 넘어온 회원의 ID로 

데이터베이스에서 데이터를 가져와서

HTML 태그에 PHP코드를 섞어서

데이터를 뿌려주는 장면이다.

실습 update_result.php

데이터를 수정하기 위해 FORM으로 전송을 하면

데이터를 일련의 방식으로 보내서

이 데이터들을 그대로 변수에 저장하고

이 변수들을 SQL문을 통해서

DB에 INSERT하고 

자원들을 풀어주고

만약 성공했다면 성공했음을 알리고

실패했다면 실패했음을 알리는 문구와

초기화면으로 돌아가도록 HREF 주소를 남겨야 한다.

실습 delete.php

실습 delete_result.php

데이터를 조회하고 

그 결과가 실패하면

실패하였음을 문구로 알리고

초기화면으로 보내는 href 주소를 남긴다.

만일 성공했다면

다음 작업을 진행한다.

작업 진행이 성공하면 성공 페이지로 이동하고, 초기화면으로 돌아갈 수 있는 href 주소를 남긴다.

만일 작업 중 또 다시 데이터 조회가 실패했다면 실패를 알리는 문구와

초기화면으로 돌아갈 수 있는 href 주소를 남긴다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

*Youtube Link - https://www.youtube.com/watch?v=M74URwbsUAU&list=PLVsNizTWUw7FzFgU1qe-n7_M7eMFA9d-f&index=35

 

서버 스크립트와 클라이언트 스크립트

클라이언트 스크립트: 서버에서 파일을 갖고 있다가 클라이언트에서 필요하면 전송을 해준다. 그러면 클라이언트에서 실행이 된다.

서버 스크립트: 서버에서 작동을 한다. 서버에서 HTML 코드를 만들어 준다. 자바 스크립트 코드로도 만들어질 수도 있다. 그리고 얘를 보내준다. 그래서 클라이언트에서 확인이 불가능하다.

동적으로 실행할 수 있다.

php, jsp, asp.net 등이 서버 스크립트이다.

서버 스크립트는 주로 데이터베이스와 연동되는 것을 주 목적으로 한다.

HTML 태그

*.htm, *.html로 된다.

HTML은 텍스트 파일이다. 그래서 메모장에서 작성하면 된다.

웹 브라우저에서 한글이 깨져 보일 수 있으므로 인코딩 방식은 UTF-8로 저장한다.

HTML은 대소문자를 구분하지 않는다.

HTML 파일은 <HTML>로 시작해서 </HTML>로 끝난다.

HEAD 부분에는 화면에 표시되지 않는 정보 (타이틀, 인코딩 정보 등)

BODY 부분에는 화면에 보이는 본체 (주로 태그들을 표현)

meta 태그는 주로 utf-8로 인코딩하기 위해 사용한다.

PHP 기본 문법

실습 12-01

 

실습 12-02

 

실습 12-03

변수는 앞에 $를 붙여준다.

print는 출력하는 것이다.

echo도 출력하는 것이다.

$변수에 문자열도 넣을 수 있다.

<head><meta content="text/html; charset=utf-8"></head>는 php코드 앞에 써줘서 문자가 한글이 깨지지 않도록 방지한다.

무조건 넣어준다.

실습 12-04

변수에 다양한 타입들을 넣을 수 있다.

"<br>" 을 해서 줄바꿈을 해주었다.

실습 12-05

문자열은 ""로 묶는다.

''로도 묶는다.

큰 따옴표로 먼저 묶고 안에 작은 따옴표로 묶는다.

실습 12-06

실습 12-07

실습 12-08

intval 함수로 실수를 정수로 변환한다.

실습 12-09

 

실습 12-10

 

배열

기존의 그릇을 하나의 종이박스에 담는 것

한줄로 붙인후 박스 전체의 이름을 붙인다.

그리고 첨자를 붙여서 사용한다.

실습 12-12

실습 12-13

 

실습 12-14

range: 초기값부터 나중값까지 정해진 값으로 값을 더해서 입력한다.

shuffle: 섞는다

sort: 오름차순 정렬

rsort: 내림차순 정렬

array_reverse: 배열을 거꾸로

PHP 내장 함수

1000개가 넘는다.

모두 다 외울 수는 없다.

책에서 쓰이거나 자주 쓰이는 것이다.

실습 12-15

오라클 관련 내장함수 oci

HTML과 PHP 관계

회원가입 페이지는 HTML 파일로 만든다.

그리고 전송을 하면

PHP 파일이 열린다.

데이터베이스와 연결되는 각종 코드들을 해 놓으면

여기에 실제 데이터가 오라클 서버에 INSERT 된다.

실습 send.html

데이터를 전송하기 위해서는 FORM 안에 넣어서 전송을 해야 한다.

METHOD는 GET/POST로 하고

ACTION="receive.php" 이면 receive.php 파일이 전송된 데이터를 받아서 데이터베이스와 연동한다.

INPUT TYPE="text" NAME="userID" 를 통해서 userID라는 데이터를 입력받으면 text 데이터로 전송된다.

INPUT TYPE="submit" VALUE="전송" 을 하면 submit으로 폼 데이터를 action에 기록된 파일로 전송한다.

실습 receive.php

send.html에서 전송한 데이터를

receive.php 파일에서 출력한다.

echo를 통해서 전송받은 데이터를 그대로 출력해준다.

GET 방식으로 보냈기 때문에 URL에 전송한 데이터가 쭉 눈에 보인다.

그래서 GET방식으로 보내면 보안은 지키기 어렵다.

안 보이려면 POST 방식으로 해야 한다.

전송 방식을 POST로 변경하였더니 

이번에는 전송한 데이터가 url에 보이지 않는다.

실습 12-18

php 파일에 php 코드가 없어도

html 태그만 있으면

잘 보인다.

실습 12-19

php 코드와 html 태그를 섞은 php 파일이다.

php 코드를 먼저 써도 되고

html 태그 중간에 써도 되고

그래서 섞어서 쓸 수가 있다.

 

감사합니다.

728x90
반응형
LIST

+ Recent posts