🐯
경민민 IT 핸드북
  • Orientation
    • 전달사항
    • 복습방법
    • 수료한 선배의 한마디
    • 간단 자기소개
    • 스터디
  • 백엔드
    • Java
      • 1장 프로그래밍 기초
      • 2장 자바 메모리구조
        • 1. Stack
        • 2. Heap
      • 6장 객체
      • 8장 상속
      • 9장 다형성
      • 10장 추상클래스와 인터페이스
      • 13장 Generic
      • 14장 Thread
      • 15장 Network
      • 16장 Lamda
        • 1. 내부 클래스 (Inner Class)
          • DTO , VO, Builder Pattern
        • 2. 람다 표현식 (Lambda Expression)
        • 3. 스트림 API (Stream API)
          • Optional
      • 17장 Enum
  • 프론트
    • Node.js
    • Java Script
      • ES6+
        • Node.js로 자바스크립트 실행
        • let , const , var
        • Destructuring문법
          • Rest(...) 문법
        • Arrow Function
        • 모듈
        • ETC
    • Type Script
      • 개요
      • TS설치 및 환경설정
      • 타입스크립트 기본
        • 기본 자료형들과 타입추론
        • Object, Array , Tuple
        • Any, Unknown, Union Type
        • Function Type
          • Type Assertion && Narrowing
          • Never type
        • Type Aliases와 Interface
        • 리터럴 타입
        • 함수 추가 문법
        • Class문법
        • 객체 타입 추가 문법
        • 실습문제 1차
        • 실습문제 2차
        • 실습문제 3차
    • React
      • 개요
      • SPA 와 MPA
        • SEO(작성예정)
      • 리액트 프로젝트 생성(18.3.1.ver)
        • HTML + react 샘플
        • CRA 와 Vite 비교
      • 리액트 개념들
        • Component
          • 클래스 컴포넌트(작성예정)
          • 함수형 컴포넌트(작성예정)
        • JSX
        • React Virtual Dom
          • Reconciliation
        • hook
          • useState
        • 리액트 데이터 전달
          • FLUX
      • 백엔드 서버 연동
        • 비동기요청
        • 웹소켓
        • Promise(작성예정)
      • 실습문제 1
      • 실습문제 2
      • 실습문제3
      • 실습문제4
  • 프레임워크
    • Spring
      • Spring 개발환경 구축
        • 프로젝트 환경설정
        • 프로젝트 생성
          • MVC Project 생성이슈
        • Maven 설정
        • web.xml 설정
        • Spring Bean Configuration.xml 설정
      • Spring Legacy Project
        • Spring 요청 및 응답 흐름
        • Spring 주요 Annotation
          • 의존성 주입방식의 차이점
          • @ModelAttribute와 유효성검사
          • 비동기처리
          • 스프링 예외처리
        • Logging
        • Pagination
        • Spring File 업로드 및 다운로드
        • Spring WebSocket
        • Spring AOP
      • Spring 라이브러리들(작성예정)
        • Lombok
        • Maven
        • MyBatis
      • Spring 구성 모듈(작성예정)
      • 스프링 과제
    • Spring Boot
      • Spring Boot 개발환경 구축
      • 스프링 부트 프로젝트 생성방법들
        • 프로젝트에서 사용하는 의존성들
      • 스프링 프로젝트 구조
        • SpringBootApplication
      • application.properties
      • Cross Origin
        • CORS
      • WebSocket
        • Stomp(작성중)
      • 로그인(작성중)
      • Spring Security(작성중)
      • 실습문제 Select
      • 실습문제 Update
      • 실습문제 Delete
  • 형상관리(Git)
    • GitHub설정
    • SourceTree를 활용한 깃허브 연동
      • 소스트리 설치
      • Clone
      • Branch
        • Branch Protection rules
          • Branch Protection Rules 상세규칙
        • Rebase 와 Squash (작성예정)
      • Team Project 설정
        • 팀장 프로젝트 셋팅
          • Collaborator
          • .gitignore 설정
        • 팀원 프로젝트 셋팅
        • 공통 프로젝트 진행
  • 프로젝트
    • 진행순서
      • 요구사항 분석 단계
        • 유용한 사이트
      • 프로그램 설계 단계
        • 유용한 사이트
      • 프로그램 구현단계
        • SourceTree를 활용한 Team Project설정
      • 테스트 단계
  • 배포
    • AWS-EC2 배포 연습
    • DevOps
      • IT시스템의 변화와 DevOps
      • DevOps 라이프사이클
    • 젠킨스
      • 도커
        • 도커 설치 방법
        • 도커 기본 명령어들
      • 젠킨스 설치
      • 젠킨스 프로젝트 생성
      • 젠킨스 소스코드 통합 - Github
      • 젠킨스 빌드 설정 - Maven
      • 배포 서버 구축하기
      • 파이프라인 구축
      • AWS 서버 생성
        • AWS 인스턴스 생성
        • AWS - Zenkins 연동
        • AWS - 배포서버 연동
        • AWS - Jenkins CI/CD파이프라인 구축
  • 유용한 사이트 모음
  • SQL
    • SQLD
      • 데이터 모델링의 이해 - 스키마
      • 데이터 모델링의 이해 - ERD
      • 데이터 모델링의 이해 - 정규화
      • 데이터 모델링의 이해 - NULL
      • SQL 기본 및 활용 - WINDOW FUNCTION
    • Oracle
      • 1장 개요
      • 2장 SQL
  • LLM 서비스
    • 1장 LLM에 대한 이해
    • 2장 프롬프트 엔지니어링
      • 프롬프트와 프롬프트 엔지니어링
      • GPT PlayGround
      • 프롬프트 작문 유형
      • 기본 프롬프트 엔지니어링 태크닉
      • 고급 프롬프트 엔지니어링 태크닉
        • ReAct Prompting
        • Active-Prompt
        • Reflexion
        • Graph Prompt
      • OpenAI API설정
      • OpenAI를 활용한 프롬프트 엔지니어링 실습
        • 실습 프롬프트
    • 3장 Lang Chain 프레임워크
      • LangSmith 프레임워크
        • LangSmith를 활용한 LangChain 모니터링 설정
      • LangChain 실습 1 - Prompt
        • 실습 코드
      • LangChain 실습 2 - LLM 캐시와 메모리
    • 4장 RAG
      • Document Loader - 문서 로더
      • Text Splitter - 텍스트 분할
      • Embedding - 임베딩
      • Vector Store - 벡터 저장소
      • Retriever - 검색기
      • ReRanker - 재평가자
      • RAG
Powered by GitBook
On this page
  • 1. Database
  • Database 예시
  • Database정의
  • Database의 특징
  • Database 구조
  • 2. DBMS(Database Management System)
  • DBMS정의
  • DBMS의 기능
  • DBMS의 종류
  • 2. Oracle
  • Oracle의 특징
  • Oracle 버전종류
  • Oracle 다운로드 경로
  1. SQL
  2. Oracle

1장 개요

1. Database

  • Data란 관찰의 결과로 나오는 실제 값을 의미하며, Database는 이러한 Data를 정해진 규칙에 따라 데이터를 체계적으로 저장하고 관리하는 시스템을 의미한다.

Database 예시

  • 학원을 예로 들면, 학원이라는 조직이 운영되기 위해서는 학생과 관련된 다양한 데이터가 필요하다.

  • 이름,전화번호 등 학생과 관련된 학생 기본 정보, 수업별 성적 정보, 각 과목 담당 교사 정보 등

  • 필요한 데이터들을 업무목적에 맞춰 여러 파일에 나눠서 다음과 같이 저장하게 된다. (엑셀이라고 생각할 것)

학생 기본 정보

이름
전화번호
생년월일
주소

김민수

010-1111-2222

2004-05-12

서울시 강남구

이지은

010-2222-3333

2003-11-20

서울시 송파구

수업별 성적 정보

이름
과목
성적

김민수

자바

85

김민수

SQL

90

이지은

자바

88

과목별 담당 교사

과목
교사명

자바

박정우

SQL

김지현

  • 이렇게 여러 파일에 나눠서 저장되면 데이터의 중복이 생겨 필요한 정보를 찾기 어려워 질 수 있다. 따라서 서로 관련있는 데이터는 데이터베이스에 구조화해서 저장하는게 편하다.

학생(Student) 테이블

student_id
이름
전화번호
생년월일
주소

1001

김민수

010-1111-2222

2004-05-12

서울시 강남구

1002

이지은

010-2222-3333

2003-11-20

서울시 송파구

과목(Subject) 테이블

subject_id
과목명
담당교사

101

자바

박정우

102

SQL

김지현

성적(Score) 테이블

student_id
subject_id
점수

1001

101

85

1001

102

90

1002

101

88

  • 이렇게 구조화된 데이터는 중복된 데이터(학생이름,과목명 등) 없이, 업무목적에 맞춰 다양한 부서 (강사,행정팀,취업팀등 )에서 공통으로 데이터를 꺼내 사용할 수 있다.

  • 즉. 데이터베이스란 한 조직에서 여러 시스템이 함께 사용할 수 있도록, 관련 있는 데이터를 구조적으로 통합하여 저장한 정보의 집합

Database정의

  1. 공용 데이터(Shared Data)

    1. 여러 사용자나 여러 시스템이 공동으로 사용할 수 있는 데이터

    2. 위 예시에서 강사,행정팀,취업팀등 다양한 시스템에서 이용한다.

  2. 통합 데이터(Integrated Data)

    1. 다양한정보를 통합하여 중복을 최소화 하고 중복으로 인해 발생할 수 있는 데이터 불일치 문제를 방지한 구조를 가진다.

    2. 만약 학생데이터가 통합되지 않았다면, 학생 기본정보에 들어간 데이터가, 학생별 성적데이터에도 그대로 중복되어 들어가 있을 것.

  3. 저장 데이터(Stored Data)

    1. 데이터는 컴퓨터의 저장장치에 물리적으로 저장되어 관리된다.

  4. 운영 데이터(Operational Data)

    1. 조직의 운영 목적을 위해 실시간으로 사용되는 데이터

Database의 특징

  • 실시간 접근성(real time accessibility)

    • 사용자가 데이터를 요청하면 즉시 응답이 제공된다.

    • ex) 즉, 실시간 데이터 조회, 추가, 수정, 삭제가 가능

  • 계속적인 변화(continuous change)

    • 데이터는 시간의 흐름에 따라 지속적으로 변경된다.

    • ex)학생의 상태는 첫 강의 시작시 수강생, 종료시 수료생으로 변경

  • 동시 공유(concurrent sharing)

    • 여러 사용자가 동시에 같은 데이터를 조회하거나 수정할 수 있다. 단, 수정시에는 동기화와 같은 동시성 제어 기능이 필요하다.

  • 내용에 의한 참조(Content Reference)

    • 데이터를 위치나, 순서가 아닌 "내용"을 기준으로 검색한다.

    • ex)데이터베이스에서 이름이 민경민인 강사를 검색

Database 구조

  1. 스키마(Schema)

    1. 데이터베이스를 구성하는 객체(테이블, 뷰, 인덱스, 제약조건 등)들의 논리적인 집합

    2. 위 테이블들의 전체 집합을 스키마 라고 부름.

  2. 테이블(Table) / 엔티티(Entity)

    1. 데이터를 행과 열로 구성하여 저장하는 데이터베이스의 기본 단위(엑셀과 비슷함)

  3. 컬럼(Column) / 속성(Attribute)

    1. 테이블을 구성하는 열(속성)

    2. 각 칼럼은 저장하는 데이터의 타입과 제약조건을 가진다.

  4. 행(Row) / 튜플(Tuple)

    1. 테이블에 저장된 실제 데이터

    2. 하나의 행에는 여러 개의 컬럼이 포함된다

  5. 기본키(Primary key)

    1. 테이블의 각 행을 식별할 수 있는 고유한 컬럼

    2. 값이 비어있거나 중복되면 안된다.

  6. 외래키(Foreigin Key)

    1. 다른 테이블의 기본키를 참조하여 현재 테이블 간의 관계를 나타내는 값

  7. 제약조건(Constraints)

    1. 데이터의 정확성과 무경성을 보장하기 위한 조건 및 규칙들

    2. 무결성 ? 데이터베이스에 저장된 값과 현실 세계의 실제값이 일치하도록 보장하는 규칙의집합

    3. 외래키를 사용하는 SAL_LEVEL같은 경우, 반드시 외래키에 존재하는 값을 사용하도록 보장하기 위해서는 제약조건을 추가해야한다.


2. DBMS(Database Management System)

DBMS정의

  • Database를 효율적으로 다루기 위한 소프트웨어로 데이터를 정의(Definition)하고 조작(Manipulation)하고 제어(Control)할 수 있는 다양한 기능을 제공한다.

  • 즉, Database와 사용자의 중간관리 역할의 소프트웨어.

DBMS의 기능

  1. 데이터 정의(DDL)

    1. 데이터의 구조를 정의하는 기능

    2. 테이블, 인덱스, 뷰등을 생성(Create)/삭제/변경

  2. 데이터 조작

    1. 데이터베이스에 데이터를 삽입(Insert), 수정(Update), 삭제(Delete), 조회(Selet) 하는 기능

  3. 데이터 제어

    1. 사용자 권한 설정 및 접근 통제 기능(GRANT, REVOKE)

  4. 동시성 제어

    1. 여러 사용자가 동시에 데이터베이스에 접근해도 데이터의 일관성을 유지하는 기능

    2. Lock매커니즘, 트랜잭션 관리 등을 통해 제어

  5. 백업 및 복구

    1. 시스템 장애에 대비해 백업을 하고, 복구하는 기능

  6. 무결성 제약

    1. 데이터의 정확성을 지키기 위해 설정하는 기능.

    2. DDL문으로 테이블을 정의할 때 함께 설정한다.

  7. 데이터 저장 및 검색 최적화

    1. Index, Partitioning등을 통해 고속검색을 지원.

      1. index : 컬럼에 index를 부여하여 index기준으로 빠르게 테이블의 행데이터를 찾을 때 사용

      2. partitioning : 하나의 서버 안에서 테이블의 데이터를 행/열단위로 나누어 분할 저장하는 방식으로 자주 사용되는 행과 열을 분리하여 관리하면 조회성능이 향상됨.

파티션단위 데이터 분할 코드 예시)

CREATE TABLE sales (
  sale_id NUMBER,
  sale_date DATE,
  amount NUMBER
)
// 테이블을 날짜별로 4개의 파티션으로 분할
ALTER TABLE sales ADD PARTITION BY RANGE (sale_date) (
  PARTITION sales_2023_q1 VALUES LESS THAN (TO_DATE('2023-04-01', 'YYYY-MM-DD')),
  PARTITION sales_2023_q2 VALUES LESS THAN (TO_DATE('2023-07-01', 'YYYY-MM-DD')),
  PARTITION sales_2023_q3 VALUES LESS THAN (TO_DATE('2023-10-01', 'YYYY-MM-DD')),
  PARTITION sales_2023_q4 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD'))
);

// 테이블을  sale_id의 해쉬값을 기준으로 4개의 파티션으로 분할.
ALTER TABLE sales ADD PARTITION BY HASH (sale_id)
PARTITIONS 4;
  • 이후 사용자가 sales에서 sale_date기준으로 검색할 떄 해당 범위의 파티션만 스캔하여 검색하므로 속도가 향상됨.

  • 파티셔닝은 값의 범위(RANGE), 명시된 값들(LIST), 해시함수(HASH), 범위와 다른조건을 합친 복합기준(COMPOSITE)도 존재함

  • 파티셔닝은 오라클기준 유료버전에서만 사용가능하므로 수업때는 진행하지 않음.

DBMS의 종류

1. 파일시스템(File System)

  • 파일형태로 데이터를 관리하는 방식

  • 데이터 중복, 무결성 및 보안기능 부재, 다중사용자 기능 부재 등 문제점이 많았던 방식

  • 엑셀파일이 대표적인 파일 시스템

2. 계층 데이터 모델(Hierarchical Model)

  • 데이터를 트리형태의 상속 관계로 정의하여 관리하는 방법

  • 유연성이 부족하며 관계를 표현하는데 한계가 있음.

  • 쇼핑몰의 데이터를 관리한다면 다음과 같이 관리한다.

3. 네트워크 데이터 모델(Network Model)

  • 데이터를 그래프 형태로 구성하여 관리하는 방법

  • 하나의 자식 노드가 여러 부모를 가질 수 있음

  • 계층형 모델보단 유연하지만, 복잡하며 설계난이도가 높음.

4. 관계 데이터 모델(Relational Model)

  • 데이터를 테이블(표) 형태로 표현하여 관리하는 방법으로, 현재 가장 많이 사용되는 데이터 관리모델

  • Oracle, MySql, SqlLite, MsSQL등 다양한 DBMS가 관계 데이터 모델

  • SQL문법을 사용하는 DBMS이다.

5. 객체 데이터 모델(Object-Oriented Model)

  • 객체지향개념을 반영한 모델. 객체단위(데이터+메서드)로 데이터를저장한다.

  • 객체형태의 비정형 데이터를 관리할 수 있다는 장점이 존재.

  • 성능이 좋지 않아 보편적으로 사용되는 모델은 아니다.

    • 인덱스 생성 및 정렬이 힘드며, 객체안에 객체가 여러개 들어가는 중첩구조에서는 특히 성능이 나빠짐.(각 객체가 저장된 레코드가 다르므로)

6. 객체-관계 데이터 모델(Object-Relational Model)

  • 관계형 모델에 객체지향 개념을 일부 도입한 모델

  • 관계데이터모델과 호환되며 객체데이터모델의 장점을 일부 차용했다.

  • 단, 설계의 복잡성이 크며 마찬가지로 성능 이슈로 인해 자주 사용되는 모델이 아님.

7. 클라우드 DB(Cloud-based Database)

  • 기존 DBMS모델들은 직접 서버에 설치하고 유지보수하는 온프레미스 방식이었음

  • 2000년대에서 부터는 로컬환경에 db서버를 직접 설치하는 방식보다는 클라우드환경에서 DB를 구매하여 사용하는 방식이 유행이 되었음.

  • 자동화 백업, 고가용성, 확장성, 초기비용문제 등 다양한 이점이 존재

  • GoogleCloud, Amazon RDS, Oracle Cloud Database등 다양한 클라우드 db가 존재

8. NoSql(Not Only SQL)

  • 관계형 모델은 테이블 형태의 정형화된 데이터를 저장하는데 적합하지만, 관계형 모델로 다루기 힘든 비정형 데이터(JSON, 그래프 형태 등 )를 관리하는 모델

  • 관계형 모델의 단점인 구조의 변화에 대한 유연성부족과 수평확장(Horizontal Scaling)을 극복하기 위해 탄생한 모델

    • 수평확장 : 서버의 개수를 늘려 시스템성능을 향샹시키는 방식.

    • 오라클을 수평확장 한다는 것은 테이블을 여러개 쪼개어(Sharding) 저장한다는 의미로, 테이블간의 관계가 중요한 오라클에서는 적절하지 못한방식으로 오라클은 수직확장(Vertical Scaling)에 강하다

    • 수직확장 : 서버의 성능을 향상시켜 시스템 성능을 향상시키는 방식

  • NoSql은 데이터를 정의하는 스키마가 없으며 자유롭게 대규모 데이터를 저장 및 관리할 수 있다.

  • NoSql 서버를 추가하면 즉각적으로 성능이 향상되며(수평확장) , JOIN 및 트랜잭션을 최소화 하기 때문에 빠른 성능을 가짐

  • 저장하고자 하는 비정형 데이터의 종류에 따라 다양한 모델이 존재

    • JSON형태의 데이터 : MongoDB

    • Key-Value데이터 : Redis 등

    • 그래프 형태 데이터 : Neo4j

  • 단, NoSql은 SQL표준을 지원하지 않고, 일반적인 쿼리보다 복잡하며 트랜잭션 및 정합성 관리에 약하므로 정확한 데이터 관리가 필요한경우 RDBMS를, 속도와 성능이 중요한 경우 NoSql을 사용


2. Oracle

  • 세계에서 가장 많이 사용되는 RDBMS(관계형데이터베이스 시스템). 안정성, 확장성, 보안성 면에서 업계 최고의 평가를 받으며, 금융권, 공공기관등 다양한 분야에서 널리 사용한다.(단, 비쌈)

Oracle의 특징

  1. 대용량 처리에 특화

    1. 테라바이트~페타바이트급 데이터도 안정적으로 처리 가능

  2. 강력한 보안기능

    1. 유저별 권한설정을 통해 보안설정 가능

  3. 트랜젝션 제어 성능 우수

    1. 트랜젝션 제어 문법을 통해 데이터 무결성 보장

  4. 다중 사용자 동시 처리 가능

    1. 고성능의 실시간 트랙젝션 관리를 통해 다중 사용자 환경에서 데이터 무결성보장

  5. 고가용성(High Availability)

    1. 서비스중 시스템 장애가 발생하더라도, 서비스가 중단되지 않고 계속 상태를 유지하는 능력

    2. RAC(Real Application Cluster)등을 통해 하나의 서버에서 장애가 발생하더라도 다른 서버로 즉시 대체하는 방식으로 무중단 운영이 가능하도록 지원

  6. PL/SQL

    1. 절차형 프로그래밍 지원

    2. if,for문 등 제어문, 조건문을 사용할 수 있음.

Oracle 버전종류

  1. Oracle DB Enterprise Edition

    1. 대기업용 오라클버전

    2. 오라클의 모든 기능이 포함된 모델로 매우 비싸다.

  2. Oracle DB Standard Edition

    1. 주소기업용 오라클버전

    2. EE에서 고성능 기능(고급보안기능, RAC 등)이 포함되지 않은 모델.

    3. 적당한 가성비를 가진다.

  3. Oracle DB Express Edition(XE)

    1. 학습용 오라클 버전으로 무료버전이다.

    2. 고성능 기능이 포함되지 않았으며, 실제 서비스로는 사용이 불가능하다.

Oracle 다운로드 경로

  • 오라클 21c_xe버전 다운로드 경로 https://www.oracle.com/database/technologies/xe-downloads.html

  • SQL-Developer 다운로드 경로 https://www.oracle.com/database/sqldeveloper/technologies/download/

PreviousOracleNext2장 SQL

Last updated 6 hours ago

데이터 중복복잡성 증가
복잡도증가
ㅋ