Skip to main content

Database 정리

· 20 min read

정보 시스템

필요한 데이터를 수집, 필요시에 처리하는 수단

  • 자료 : 관찰이나 측정을 통해 수집, 가공되지 않은 상태
  • 정보 : 자료를 가공

자료처리시스템

정보시스템의 서브시스템

  • 일괄처리시스템 : 급여, 회계, 세무 등 모아서 처리

  • 온라인실시간처리시스템 : 예약, 은행처리

  • 분산처리시스템

  • 데이터웨어하우스 : 업무 시스템에서 추출 된 데이터 집합체

DB 시스템

개념

  • 통합된데이터 : 중복을 배제한 데이터의 모임 (Integrated)
  • 저장된데이터 : 저장매체에 저장된 자료 (Stored)
  • 운영데이터 : 업무를 수행하는데 반드시 필요한 자료 (Operational), 임시불가
  • 공용데이터 : 공동으로 소유, 유지 하는 자료 (Shared)

특징

  • 실시간접근성 : (Real-Time Accessibility)
  • 계속적인변화 : (Continuous Evolution)
  • 동시공용 : (Concurrent Sharing)
  • 내용에 의한 참조 : 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터로 검색(Content Reference)

구성요소

  • 데이터베이스
  • 스키마
  • DBMS
  • DB언어
  • DB컴퓨터
  • DB사용자

DBMS

  • DB 관리 소프트웨어
  • 모든 응용 프로그램이 DB 공용하도록 관리
  • DB 구성, 접근방법, 유지관리에 책임

DBMS의 기능

  • 정의(조직)기능 : 데이터 타입과 구조 정의, 이용방식, 제약조건 명시 (Definition)
  • 조작기능 : CRUD를 위해 사용자와 DB사이의 인터페이스 수단을 제공 (Manipulation)
  • 제어기능 : 데이터 무결성, 보안, 권한, 병행제어 처리 (Control)

DBMS의 장단점

  • 단점 : 전문가부족, 비용증가, Overhead, Backup과 Recovery의 어려움, 복잡

파일시스템의 문제점

  • 종속성 : 데이터의 접근방법을 변경하면 응용프로그램도 변경
  • 중복성 : 일관성, 보안성, 경제성, 무결성 위반

데이터독립성

  • 논리적 독립성 : 응용프로그램과 DB를 독립, 논리적 구조를 변경해도 응용프로그램 변경하지 않음
  • 물리적 독립성 : 응용프로그램과 물리적장치 독립, DB에 디스크를 추가해도 응용프로그램 변경하지 않음

DB의 구성요소

  • 개체
  • 속성 : 개체의 성질
  • 관계

데이터사전

  • 모든 데이터 개체들에 대한 정보를 유지 관리
  • alias 시스템 카탈로그
  • 데이터에 관한 데이터

스키마

  • 외부스키마
  • 개념스키마
  • 내부스키마

특징

  • 데이터 사전에 저장
  • alias 메타데이터
  • 데이터의 구조적 특성을 의미
  • 인스턴스에 의해 규정

외부스키마

  • 개인이 필요로하는 DB의 논리적 구조
  • VIEW
  • alias 서브스키마
  • 여러 개 존재 가능
  • 사용자는 SQL을 사용해 접근
  • 응용 프로그래머는 COBOL, C를 사용해 접근

개념스키마

  • DB의 전체적인 논리적 구조
  • 하나만 존재
  • DB 파일에 저장되는 데이터의 형태를 나타냄
  • alias 스키마
  • DBA에 의해 구성

내부스키마

  • 물리적 저장장치에서 본 DB 구조
  • DB에 저장될 레코드의 물리적인 구조 정의
  • 내부 레코드의 물리적 순서를 기술
  • alias 저장스키마
  • 시스템 프로그래머나 시스템 설계자가 봄

DB언어

DDL

  • DB를 구축하거나 수정

DML

  • 비절차적 데이터 언어
  • SQL, IMS, DBTG, TOTAL

DCL

  • 무경설, 보안, 권한, 회복

DB 사용자

DBA

  • DDL, DML, DCL 사용

응용 프로그래머

  • DML을 사용해 일반 사용자에게 응용프로그램 제공

일반사용자

  • SQL 사용

데이터 모델

정보를 단순화, 추상화하여 체계적으로 표현한 개념적 모형

개념적 데이터 모델

  • 추상적인 개념으로 표현
  • 개체와 관계를 통해 현실을 표현
  • ER모델
  • 현실 세계의 개체를 인간이 이해하는 구조로 기술

논리적 데이터 모델

  • 데이터 타입과 데이터 타입간의 관계를 통해 현실을 표현
  • DBMS는 논리적 데이터 모델을 하나만 사용
  • 관계모델, 계층모델, 네트워크모델
  • 현실 세계의 개체를 컴퓨터의 데이터구조로 기술

표시요소

표현요소, 구성요소

  • 구조 : 논리적으로 표현된 개체 타입들 간의 관계로 데이터 구조 및 정적 성질을 표현 (Structure)
  • 연산 : DB에 저장된 실제 데이터를 처리하는 작업에 대한 명세로 DB를 조작하는 기본 도구 (Operation)
  • 제약조건 : 실제 데이터의 논리적인 제약조건 (Constraint)

구성요소

  • 개체 : DB에 표현하려는 것, 유무형의 정보, 서로 연관된 속성, fs의 레코드 (Entity)
  • 속성 : 데이터의 가장 작은 논리적 단위, fs의 데이터항목 또는 데이터 필드, 개체를 구성하는 항목 (Attribute)
  • 관계 : 개체 간 또는 속성 간의 관계 (Relationship)

ER모델

Perter Chen, 개념적 표현

ERD

  • 개체 : □
  • 관계 : ◇
  • 속성 : ○
  • 기본키속성 : 밑줄원 또는 ●
  • 연결 : 선, 링크로 개체와 속성을 연결
  • DB의 논리적 구조 표현

관계형 데이터모델

테이블 (Relation)으로 표현

계층형 데이터모델

트리, 노드 = 개체, 부모 자식 관계

특징

  • 연쇄삭제
  • 개체 간 사이클 허용 안됨
  • 개체 = 세그먼트
  • DBMS = IMS

장점

  • 구조 간단, 판독 용이
  • 구현, 수정, 검색 용이
  • 독립성 보장

단점

  • 데이터 상호 유연성 붖고
  • 검색경로 한정
  • 삽입 삭제 연산 매우 복잡
  • 다 대 다 관계 처리 어려움

망형 데이터모델

CODASTYL DBTG 모델, 그래프, Owner-Member, N:M 관계

DB설계

고려사항

  • 무결성
  • 일관성
  • 회복
  • 보안
  • 효율성
  • DB 확장가능

개념적 설계

  • 개념 스키마 모델링과 트랜젝션 모델링
  • ERD 작성
  • alias 정보 모델링
  • 독립적 개념스키마

논리적 설계

현실세계를 물리적저장장치에 저장할 수 있도록 논리적 자료구조로 변환

  • 트랜잭션 인터페이스 설계
  • 테이블 설계
  • alias 데이터 모델링
  • 종속적 논리스키마

물리적 설계

  • DB file의 저장구조 및 액세스 경로 결정
  • 데이터가 컴퓨터에 저장되는 방법 묘사
  • 저장 레코드 양식 설계
  • 데이터타입
  • 데이터 값의 분포
  • 접근 빈도
  • 레코드 집중의 분석 설계
  • 접근 경로 설계
  • 기본 단위는 저장레코드

고려사항

  • 인덱스 구조
  • 반응시간 : (Response Time)
  • 공간활용도 : (Space Utilization)
  • 트랜잭션 처리량 : (Transaction Throughput)

DB 구현

  • DDL 이용해 스키마 기술
  • 응용 프로그램을 위한 트랜잭션 작성
  • DB 접근을 위한 응용 프로그램 작성

설계 순서

구 분석 > 념적 설계 > 리적 설계 > 리적 설계 >

관계형 DB 구조

테이블로 표현

  • 릴레이션 스키마 : 속성명
  • 릴레이션 인스턴스 : 데이터

튜플

  • row
  • 튜플은 릴레이션을 구성하는 각각의
  • 속성의 모임
  • fs의 레코드
  • 튜플의 수 = 카디널리티 (Cardinality) = 기수 = 대응수

속성

  • column
  • DB를 구성하는 가장 작은 논리적 단위,
  • fs의 데이터 또는 데이터 필드
  • 개체의 특성
  • 속성의 수 = 디그리 (Degree) = 차수

도메인

  • 하나의 속성 값들의 집합

관계형 DB 제약조건

후보키

모든 튜플에 대해 유일성과 최소성 만족

  • 유일성 : 하나의 키값으로 하나의 튜플만 식별 가능
  • 최소성 : 모든 레코드를 유일하게 식별하는데 필요한 속성

기본키

특정 튜플을 유일하게 구별할 수 있는 속성으로 후보키 중 선택한 Main key

  • Null 값 불가

대체키

  • 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키
  • alias 보조키

슈퍼키

  • 속성들의 집합으로 구성된 키
  • 유일성은 만족, 최소성은 불만족

외래키

  • 기본키를 포함하면 참조 릴레이션
  • 외래키를 포함하면 참조하는 릴레이션

무결성

  • 개체무결성 : 기본키를 구성하는 속성은 NULL이나 중복 불가
  • 참조무결성 : 외래키 값은 NULL이거나 참조 릴레이션의 기본키와 동일, 도메인과 속성 갯수가 같아야함

관계대수

관계형 DB에서 원하는 정보를 얻기 위해 사용하는 절차적인 언어로 연산자와 연산규칙을 제공한다.

  • 순수 관계 연산자 : Select, Project, Join, Division
  • 일반 집합 연산자 : Union, Intersection, Difference, Cartesian Product

순수 관계 연산자

Select

  • 수평연산
  • 시그마(σ)

Project

  • 속성만 추출하는 연산
  • 수직연산
  • 파이(π)

Join

  • 두 개의 릴레이션을 합쳐서 새로운 릴레이션으로 반환
  • 나비넥타이 (▷◁)
  • 자연조인 : 중복된 속성을 제거하여 같은 속성을 한 번만 표기하는 방법

Division

  • 속성을 제외한 속성만을 구하는 연산
  • 나누기 (÷)

일반 집합 연산자

  • 합집합, 교집합, 차집합은 합병 조건이 가능해야함.
  • 합병조건 : 합병하려는 두 릴레이션 간에 속성 수가 같고 도메인의 범위가 같음

합집합

  • Union
  • A ∪ B ≤ A + B
  • 합집합의 카디널리티는 두 릴레이션의 카디널리티의 합보다 크지 않다.

교집합

  • Intersection
  • A ∩ B ≤ MIN(A, B)
  • 교집합의 카디널리티는 두 릴레이션 중 작은 릴레이션보다 크지 않다.

차집합

  • Difference
  • A-B ≤ A
  • 차집합의 카디널리티는 A의 카디널리티보다 크지 않다.

교차곱

  • Cartesian Product
  • (A×B) = (A)×(B)
  • 교차곱은 두 릴레이션의 카디널리티를 곱한 것과 같다.
  • 디그리(차수)는 더하고, 카디널리티(튜플 수)는 곱하면 된다.

관계해석

  • E.F.Codd가 Predicate Calculus에 기반
  • 연산을 표현하는 방법, 원하는 정보를 정의시 계산 수식 사용
  • 비절차적 특성
  • 튜플 관계해석과 도메인 관계해석
  • 질의어로 표현

정규화

잘못 설계된 관계형 스키마를 작은 스키마로 쪼개서 바람직하게 만드는 과정으로 DB의 논리적 설계 단계에서 수행

목적

  • 안정성 최대화
  • 어떠한 릴레이션이라도 DB에서 표현이 가능
  • 효과적인 검색 알고리즘
  • 중복 배제하여 CRUD 이상의 발생 방지
  • 데이터 삽입시 릴레이션 재구성 필요성 제거

Anomaly

속성 간 종속 또는 튜플의 중복으로 발생

  • 삽입이상 : 원하지 않는 값도 같이 삽입
  • 삭제이상 : 연쇄 삭제
  • 갱신이상 : 일부만 갱신

과정

단계
비정규릴레이션
도메인이 원자값
1NF
부분적 함수 종속 제거
2NF
이행적 함수 종속 제거
3NF
결정자이면서 후보키가 아닌 것 제거
BCNF
다치 종속 제거
4NF
조인 종속성 이용
5NF

1NF

원자값으로만 되어있는 릴레이션

2NF

키가 아닌 모든 속성이 기본키에 대해 완전 함수적 종속

  • 함수적 종속관계 : A에 따라 B가 항상 같은 값이 나올 때 (키->값)
  • 완전 함수적 종속관계 : A,B에 따라 C가 항상 같은 값이 나오지만 A-C, B-C에서는 종속이 사라질 때 (여러 키->값)

3NF

키가아닌 모든 속성이 기본키에 대해 이행적 종속관계를 제거

  • 이행적 종속관계 : A->B, B->C일 때 A->C 인 관계

BCNF

릴레이션에서 결정자가 모두 후보키인 관계 (Boyce-Codd Normal Form)

  • 결정자 : A->B 일 때 A를 결정자, B를 종속자
  • 모든 BCNF가 종속성을 보존하는 것은 아니다.

4NF

릴레이션에서 A->->B가 성립할 때 모든 속성이 A에 함수적 종속인 관계

  • 다치종속 : A,C에 대응하는 B값들이 A에만 종속되고 C에는 무관할 때 A->->B

5NF

조인 종속성이 후보키를 통해서만 만족될 때

  • 조인종속 : 어떤 릴레이션이 자신의 pROJECTION에 대한 조인의 결과가 자신과 같을 때

SQL

  • IBM에서 개발한 SEQUEL에서 진화

  • 관계대수와 관계해석을 기초로한 혼합 데이터 언어

  • 정의, 조작, 제어 기능

  • DDL : Create, Alter, Drop

  • DML : Select, Insert, Delete, Update

  • DCL : Commit, Rollback, Grank, Revoke

DDL

  • CREATE SCHEMA|DOMAIN
  • CREATE TABLE 테이블명 PRIMARY UNIQUE FOREIGN KEY REFERENCES CONSTRAINT CHECK
  • CREATE INDEX ON [CLUSTER]
  • ALTER TABLE ADD|ALTER|DROP [CASCADE]
  • DROP SCHEMA|DOMAIN|TABLE|VIEW|INDEX [CASCADE|RESTRICTED]

DML

  • SELECT FROM [WHERE][group by] [HAVING][order by]

DML

  • INSERT INTO VALUES
  • DELETE FROM WHERE
  • UPDATE SET

내장 SQL

컴퓨터 프로그램에 SQL 명령을 삽입한 것

  • 일반 SQL은 여러 개의 튜플을 반환하지만, 내장 SQL은 단 하나의 튜플을 반환
  • 반환되는 튜플은 일반 변수를 사용하여 저장 가능
  • 호스트 변수와 DB 필드명은 같아도 된다.
  • 내장 SQL 앞에 EXEC SQL 사용
  • 호스트 변수는 변수앞에 콜론(:)을 붙임

커서

  • 내장 SQL문의 수행 결과로 복수의 튜플이 반환될 시 액세스 할 수 있게 해준다.
  • 질의 수행 결과로 반환되는 첫 튜플에 대한 포인터

커서 명령어

  • DECLARE : 선언
  • OPEN : 첫번째 튜플 포인트
  • FETCH : 다음 튜플로 포인터 이동
  • CLOSE : 종료

  • 본 테이블로 유도된 가상 테이블
  • 조인 사용 최소화로 사용상의 편의성을 최대화
  • 외부 스키마
  • 물리적으로 구현되어 있지 않음
  • 뷰가 정의된 테이블이나 뷰를 삭제하면 그걸 참조한 다른 뷰도 삭제됨.

장점

  • 논리적 데이터 독립성 제공
  • 보안

단점

  • 독립적인 인덱스 사용 불가
  • 정의 변경 불가
  • CRUD 제한

시스템 카탈로그

  • 시스템에 관련된 다양한 객체가 담긴 시스템 DB
  • alias 자료사전 = data dictionary = 카탈로그 = 데이터사전
  • 메타데이터 : 카탈로그에 저장된 정보
  • SQL을 이용해 내용 검색 가능
  • 수정 및 삽입 불가
  • DB에 따라 다른 구조
  • DBMS가 스스로 생성하고 유지
  • 시스템, 사용자 접근가능

Data Directory

  • 데이터 사전에 있는 데이터를 실제로 접근하는데 필요한 정보를 관리하는 시스템
  • 시스템만 접근가능

트랜잭션

  • DB 상태를 변환시키는 하나의 논리적 기능의 단위
  • 한꺼번에 모두 수행되어야할 연산들
  • 병행 제어 및 회복 작업시 처리되는 작업의 논리적 단위
  • 시스템이 응답하기 위한 상태 변환 과정의 작업 단위

특성

무결성을 보장

원자성

  • Atomicity
  • 트랜잭션 내의 명령은 반드시 완벽히 수행
  • 모두가 수행되거나 오류시 전부가 취소되어야함

일관성

  • Consistency
  • DB의 전체 요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야함 (질량 보존 법칙처럼)

독립성

  • Isolation = 격리성 = 순차성
  • 둘 이상의 트랜잭션이 병행 실행되는 경우 다른 트랜잭션 연산이 끼어들 수 없음
  • 수행 중인 트랜잭션은 완료될 때 까지 다른 트랜잭션에서 참조 불가.

영속성

  • Durability = 지속성
  • 시스템이 고장나도 영구적으로 반영

Commit

Rollback

  • Active : 트랜잭션 실행 중
  • Failed : 트랜잭션 오류 발생으로 중단
  • Aborted : 트랜잭션 비정상적 종료로 Rollback 연산 실행한 상태
  • Partially Committed : 트랜잭션 마지막 연산까지 실행됬으나 Commit은 안 한 상태
  • Committed : 트랜잭션이 성공적으로 종료되어 Commit 연산 실행한 상태

회복

장애 발생으로 DB가 손상되었을 때 복구하는 작업, Recovery

  • 트랜잭션 장애 : 실행 또는 로직 오류
  • 시스템 장애 : 하드웨어 오동작, 소프트웨어 손상, 교착상태
  • 미디어 장애 : 물리적 데미지

회복기법

연기 갱신 기법

  • Deferred Update
  • 트랜잭션동안 갱신된 내용이 Log에 보관됨
  • Partially Committed 상태에서 Log에 보관한 내용을 실제 DB에 기록
  • Redo 작업만 가능

즉시 갱신 기법

  • Immediate Update
  • 트랜잭션 중이라도 DB에 반영
  • 장애 대비로 갱신 내용을 Log에 보관
  • Redo, Undo 모두 사용 가능

그림자 페이지 대체 기법

  • Shadow Paging
  • 트랜잭션을 Rollback할 때, 갱신된 이후의 실제 페이지 부분에 그림자 페이지를 대체하여 회복
  • 로그, Undo, Redo 필요 없음

검사점 기법

  • Check Point
  • 복구 시점을 로그에 보관하고 그 시점부터 회복작업을 수행

병행제어

다중 실행되는 트랜잭션들이 DB의 일관성을 파괴하지 않도록 트랜잭션 상호작용을 제어하는 것

목적

  • DB 공유 최대화
  • 시스템 활용도 최대화
  • DB 일관성 유지
  • 응답시간 최소화

직렬화 가능성

병행수행된 각각의 트랜잭션 결과는 각 트랜잭션을 독자적으로 실행했을 때의 결과와 같아야한다.

문제점

  • 갱신 분실 : 갱신 결과의 일부가 없어짐 (Lost Update)
  • 비완료 의존성 : 하나의 트랜잭션이 실패 후 회복되기 전에 다른 트랜잭션이 실패한 갱신결과를 참조하는 현상 (Uncommitted Dependency)
  • 모순성 : 두 개의 트랜잭션이 병행될 때 원치 않는 자료를 이용 (Inconsistency)
  • 연쇄 복귀 : 하나를 Rollback시 다른 것도 Rollback 되는 경우 (Cascading Rollback)

병행제어 기법

로킹

  • Lock이 허락되어야만 액세스할 수 있도록 하는 기법
로킹단위Lock 수병행성공유도
작음낮음감소
작음높음증가

2단계 로킹 규약

  • Tow-Phase Locking
  • 직렬성을 보장하지만 교착상태 예방 불가

타임 스탬프 순서

  • 트랜잭션을 실행 하기 전에 Time Stamp를 부여하여 부여된 시간에 따라 처리
  • 교착상태 발생 안함

최적 병행수행

  • 검증 = 확인 = 낙관적 기법
  • Read Only 트랝개션일 경우 충돌률이 낮으므로 병행제어를 안하고 실행

다중 버전 기법

  • 갱신될 때마다 버전을 부여하여 관리

무결성

  • DB 데이터의 정확성, 일관성을 보장하기 위해 부정확한 자료가 DB내에 저장되는 것을 방지하기 위한 제약조건
  • 사용자로부터 DB를 보호
  • 사용자가 정확하게 DB를 사용할 수 있도록 보장
  • 대표적인 방법은 중앙 통제에 의한 데이터 갱신
  • Null 무결성 : 특정 속성이 Null이 될 수 없음
  • 고유 무결성 : 각 튜플의 값이 서로 달라야함
  • 참조 무결성 : 외래키 값은 Null이거나 참조 릴레이션의 기본키 값과 같아야함.
  • 도메인 무결성 : 특정 속성이 그 도메인에 속해야함.
  • 키 무결성 : 하나의 테이블에는 적어도 하나의 키가 존재해야함.
  • 관계 무결성 : 릴레이션에 한 튜플의 삽입 가능 여부 또는 다른 릴레이션 튜플 사이의 관계에 대한 적절성 여부를 지정.
  • 개체 무결성 : 기본 키를 구성하는 어떤 속성도 Null이나 중복값을 가질 수 없음

DB 보안

  • 권한이 없는 사용자로부터 DB를 보호
  • 사용자들이 DB를 사용하고자 할 때 언제든지 사용할 수 있도록 보장

암호화

개인키 암호방식

  • alias 비밀키 암호방식 = 대칭 암호방식 = 단일키 암호화 기법
  • 동일한 키로 데이터를 암복호화
  • 전위, 대체, 대수, 합성기법
  • 암복호화 속도가 빠름
  • 알고리즘 단순
  • 파일 크기가 작음
  • 사용자가 증가하면 키 파일이 많아짐
  • DES : 64Bit의 평문 블록56Bit의 16개의 키를 이용해 암호 계산

공개키 암호방식

  • 서로 다른키로 데이터를 암복호화
  • 암호화키는 공개키로 복호화키는 관리자가 관리
  • alias 비대칭 암호 방식
  • 키 분배가 용이
  • 관리할 키 개수가 적음
  • 암복호화 속도가 느림
  • 알고리즘 복잡
  • 파일 크기가 큼
  • RSA

권한 부여

  • GRANT 사용자 등급 TO
  • REVOKE 사용자 등급 FROM
  • CASCADE 사용시 권한을 부여받았던 사용자가 다른 사용자에게 부여한 권한도 연쇄적으로 삭제됨

사용자 등급

  • DBA : DB 관리 책임자
  • RESOURCE : DB 및 테이블 생성 가능자
  • CONNECT : 단순 사용자

분산 DB

보안, 보호가 어렵다.

구성

  • 분산처리기
  • 분산db
  • 통신네트워크

목표

  • 위치 투명성 : DB의 논리적인 명칭으로 액세스 가능 (Location Transparency)
  • 중복 투명성 : 사용자는 하나의 데이터만 존재하는 것처럼 사용 (Replication Transparency)
  • 병행 투명성 : 다수의 트랜잭션이 실행 가능 (Concurrency Transparency)
  • 장애 투명성 : 장애가 나도 트랜잭션 처리 가능 (Failure Transparency)

미들웨어

  • 분산 환경에서 구성원을 연결하고 구성원 간의 차이를 극복하도록 범용으로 개발된 소프트웨어
  • 클라이언트와 서버 사이에 존재하면서 다중통신, 데이터 액세스 프로토콜과 인터페이스를 지원
  • 통신 미들웨어 : NOS
  • DB 미들웨어 : ODBC
  • 분산 객체 미들웨어 : CORBA, DCOM

자료구조

어떠한 자료구조에서도 필요한 모든 연산을 처리하는 것이 가능하다.

분류

{
"선형":{
"리스트":["선형", "연결"],
"스택",
"큐",
"덱"
},
"비선형":["트리","그래프"]
}

리스트

선형 리스트

  • 연접 리스트 = Dense List = 축차 구조 = Sequential Structure
  • 배 열
  • 간단한 자료 구조
  • 접근 속도 빠름
  • 중간 자료 삽입시 연속된 빈공간이 있어야함
  • 기억장소 효율 가장 좋음
  • 이동횟수 : 삽입시 n+12\frac{n+1}{2} 삭제시 n12\frac{n-1}{2}
  • 삽입 삭제 시 자료의 이동이 필요하기 때문에 번거로움

연결 리스트

  • 노드의 삽입 삭제 작업 용이
  • 기억공간이 연속적이지 않아도 저장 가능
  • 연결을 위한 포인터가 필요하기 때문에 기억공간 효율이 좋지 않음
  • 트리를 표현할 때 가장 적합
  • 희소행렬을 표현하면 기억장소가 절약됨
  • 희소행렬 : 행렬의 요소 중 많은 항이 0으로 되어 있는 형태

종류

  • 단순 연결 리스트
  • 단순 환상 연결 리스트
  • 이중 연결 리스트
  • 이중 환상 연결 리스트

스택

  • 한 쪽에서만 삽입 삭제 가능

  • 후입선출 (LIFO)

  • Top : 마지막으로 삽입된 자료의 위치 = 스택 포인터

  • Bottom : 스택 바닥

  • Overflow

  • Underflow

  • 부 프로그램 호출시 복귀주소 저장

  • 함수 호출의 순서 제어

  • 인터럽트 복귀주소 저장

  • 후위 표기법 연산

  • 0 주소 지정방식 명령어의 자료 저장소

  • 재귀 프로그램

  • 컴파일러를 사용한 언어 번역

  • 선형 리스트의 한쪽에서는 삽입, 다른쪽에서는 삭제만 이루어짐

  • 선입선출 (FIFO)

  • 시작과 끝을 표시하는 두개의 포인터 존재

  • 프런트 포인터

    • 가장 먼저 삽입된 자료의 포인터
    • 삭제 작업시 사용
  • 리어 포인터

    • 가장 마지막에 삽입된 자료의 포인터
    • 삽입 작업시 사용
  • 운영체제 작업 스케줄링

  • spool

  • 삽입과 삭제가 리스트 양쪽에서 일어남
  • Double Ended Queue
  • Stack과 Queue를 합쳐서 만듦
  • Scroll : 입력 제한 데크
  • Shelf : 출력 제한 데크

트리

  • 족보, 연산수식, 구조도, 힙(heap)에 사용
  • 근노드 : Root node
  • 단말노드 : Terminal Node = Leaf Node
  • 차수 : Degree = 가지 수
  • 레벨 : 노드의 레벨
  • 깊이 : 최대 레벨
  • 숲 : Forest 여러 트리의 집합
  • tree의 degree : MAX(degree)

이진트리

  • 차수가 2이하인 노드로 구성된 트리
  • 레벨 i에서의 최대 노드의 수는 $2^{n-1}$
  • 전체의 최대 노드의 수는 $2^n-1$
  • 단말 노드 수가 $N_0$, 차수(가지 수)가 2인 노드의 수가 $N_2$라고 할 때 $N_0=N_2+1$ 성립

정이진 트리

꽉찬 트리

전이진 트리

왼쪽부터 오른쪽으로 하나씩 빠짐없이 채워진 트리

사향트리

한 쪽 자식 노드가 없는 치우친 트리

  • 왼쪽 사향 이진 트리
  • 오른쪽 사향 이진 트리

이진트리 운행법

  • Preorder : Root > Left > Right
  • Inorder : Left > Root > Right
  • Postorder : Left > Right > Root

수식의 표기

  • Prefix : 연산자 > Left > Right

  • Infix : Left > 연산자 > Right

  • Postfix : Left > Right > 연산자

  • Infix to Prefix or Postfix : 연산에 따라 괄호로 묶고 연산자를 괄호 앞뒤로 옮김

  • Prefix or Postfix to Infix : 운행 순서에 따라 괄호로 묶어 연산자를 피연산자 사이로 이동

스레드 이진트리

  • 이진트리에서 발생하는 Null 링크를 트리 운행에 필요한 다른 노드의 포인터로 사용하도록 된 트리
  • Nil로 Null pointer 기록
  • 왼쪽이 Nil이면 운행상 전 노드를 가리킴
  • 오른쪽이 Nil이면 운행상 후 노드를 가리킴
  • Nil이 아닐경우 다음 노드를 가리킴

그래프

  • 정점 (Vertex)와 간선 (Edge)로 이루어짐
  • 차수
    • 무방향 그래프 : 한 정점에 연결된 간선 수
    • 방향 그래프 : 진입(Indegree), 진출(Outdegree)
  • 완전 그래프의 간선 수
    • 무방향 그래프 : $\frac{n(n-1)}{2}$
    • 방향 그래프 : n(n1)n(n-1)
  • 사이클 : 같은 정점으로 시작과 끝이 이루어짐
  • 최대 사이클 : 사이클을 이루는 경로 중 최대 경로의 길이

인접행렬

  • Adjacency Matrix
  • 선이 있으면 1, 없으면 0으로 표기

최소 비용 신장 트리

  • MST = Minimum-Cost Spanning Tree
  • 가중치가 작은 간선들을 사이클을 이루지 않게 연결한 그래프

정렬

{
"내부정렬": {
"선택": ["힙"],
"삽입": ["삽입", "쉘"],
"교환": ["버블", "선택", "퀵"],
"병합": ["2-Way Merge Sort"],
"분배": ["기수"]
},
"외부정렬": [
"밸런스 병합",
"케스케이드 병합",
"폴리파즈 병합",
"오실레이팅 병합"
]
}

고려사항

  • 데이터의 양
  • 초기 데이터의 배열 상태
  • 키 값들의 분포 상태
  • 소요공간 및 작업시간
  • 시스템의 특성

내부정렬

삽입정렬

  • 이미 순서화된 파일에 NN번째 키를 앞의 N1N-1개의 키와 비교
  • 뒤에서 앞으로 비교

쉘정렬

  • 매개변수
  • 입력파일이 부분적으로 정렬되어 있는 경우

선택정렬

  • NN개의 레코드에서 최소값을 찾아 첫 번째 레코드에 놓고 나머지 N1N-1개 중에서 다시 최소값을 찾아 두번째... 를 반복
  • 앞에서 뒤로 비교

버블정렬

  • 주어진 파일에서 인접한 두 개의 레코드를 비교하여 그 크기에 따라 레코드 위치를 서로 교환
  • 계속 정렬 여부를 플래그 비트로 결정

퀵정렬

  • 작은 값은 왼쪽에 큰 값은 오른 쪽에 모이도록해서 분할해서 정렬
  • 가장 바름
  • 스택 필요

힙 정렬

  • 전이진 트리를 이용한 정렬 방식

2-Way 합병 정렬

  • Merge Sort
  • 두 개의 키를 한 쌍으로 하여 각 쌍에 대해 순서를 정함
  • 이미 정렬되어 있는 두 개의 파일을 한 개의 파일로 병합

기수 정렬

  • 큐를 이용하여 자릿수 별로 정렬
  • 레코드의 키를 분석하여 같은 수 또는 문자끼리 그 순사에 맞는 버킷에 분배했다가 버킷 순으로 레코드를 꺼내어 정렬
  • 키워드를 나타내는 레이블 내의 주소로 키워드를 변경

검색

선형 검색

  • 첫 번쨰 레코드 키 값부터 차례로 비교하여 검색
  • 순차 검색

제어 검색

  • 반드시 순서화된 파일이여야 검색 가능
  • 한 번의 비교가 끝난 후 비교 대상이 된 레코드를 다음에 비교할 대상을 선택하는 기준으로 사용
  • 이분 검색 : M = F+L2\frac{F+L}{2}
  • 피보나치 검색
  • 보간 검색 : 있음직한 부분의 키를 택하여 검색, 프로그래밍 불가
  • 블록 검색 : 블록으로 분할해 인덱싱 후 어느 인덱스에 있는지 검색 후 블록 내를 다시 선형 검색

이진 트리 검색

  • 파일을 이진 검색 트리로 구성하여 검색
  • 이진 검색 트리 : 왼쪽 자식노드는 부모보다 작고, 오른쪽 자식노드는 부모보다 크게 구성

해싱

  • 해싱은 DAM 파일을 구성할 때 사용, 접근 속도는 빠르나 기억공간 요구
  • 다른 방식에 비해 검색속도가 가장 빠름
  • 삽입 삭제 작업이 많을 때 유리
  • 키-주소 변환방법

해시테이블

  • 버킷 : 하나의 주소를 갖는 파일의 한 구역
  • 슬롯 : 한 개의 레코드를 저장할 수 있는 공간, N개의 슬롯이 모여 하나의 버킷
  • Collision : 서로 다른 두 개 이상의 레코드가 같은 주소를 갖는 현상
  • Synonym : 충돌로 인해 같은 주소를 같는 레코드들의 집합
  • Overflow : 버킷에 저장할 공간이 없는 상태, Collision은 발생해도 Overflow는 발생하지 않을 수 있음

해싱함수

  • 제산법 : 소수를 사용함 (Division)
  • 제곱법 : 키를 제곱해 중간부분을 추출 (Mid-Square)
  • 폴딩법 : 키를 여러부분으로 나눠 각 부분을 더하거나 XOR한 값을 추출 (Folding)
  • 기수 변환법 : 키 숫자의 진수를 다른 진수로 변환시켜 초과한 자릿수를 절삭
  • 대수적 코딩법 : 키 값의 비트 수를 다항식의 계수로 간주
  • 계수 분석법 : 숫자 분포를 분석하여 비교적 고른자리
  • 무작위법 : 랜덤

Overflow 해결

개방 주소법

  • 선형 방법
  • 순차적으로 그 다음 빈 버킷을 찾아 저장
  • Open Addressing

폐쇄 주소법

  • Overflow된 레코드를 별도의 Overflow영역에 저장하고 체인(Pointer)로 홈버킷과 연결
  • Direct Chaining : Cylinder Overflow Area에 보관 (해시테이블 내)
  • Indirect Chaining : Independent Overflow Area에 보관 (해시테이블 밖)

재해싱

새로운 해싱함수로 새로운 홈 주소

인덱스

  • 데이터 레코드를 빠르게 접근하기 위해 구성하는 것
  • 데이터가 저장된 물리적 구조와 밀접한 관계
  • 레코드가 저장된 물리적 구조에 접근하는 방법을 제공
  • 삽입과 삭제가 빈번하면 인덱스의 갯수를 최소화

m-원 검색 트리

  • m-Way Search Tree
  • 키 값의 일부분이 동일한 문자열이나 숫자로 구성된 자료를 표현하는데 효과적
  • 삽입, 삭제시 트리 균형을 유지하기 위해 복잡한 연산이 필요

B트리

  • 균형된 m원 검색트리
  • 모든 Leaf는 같은 레벨이 있다.
  • 한 노드 안에 있는 키 값들은 오름차순을 유지

B+트리

  • B트리의 변형, 인덱스 세트와 리프 노드로만 구성된 순차 데이터 세트로 구성
  • B트리의 연산과정을 줄일 수 있는 트리구조

트라이 색인

  • Trie
  • 탐색을 위한 키 값을 직접 표현하지 않고 키를 구성하는 문자나 숫자 자체의 순서로 키 값을 구성하는 구조
  • 키 값이 문자 또는 숫자일 경우, 키 값들에 대해 일부분이 같은 문자나 숫자로 구성되어있을 때 적합
  • 삽입, 삭제시 노드의 분열과 병합이 없음
  • 키 값의 분포를 예측할 수 있다면 기억장소를 절약 가능

파일 편성

순차 파일

  • Sequential File = 순서파일
  • 물리적 연속 공간에 순차적으로 기록
  • 급여관리 등 기간별로 일괄처리를 주로 하는 경우에 적합
  • 자기테이프

장점

  • 기록 밀도가 높아 기억공간 효율적 사용
  • 어떠한 매체에도 적용
  • 키 순서대로 편성되어 취급 용이
  • 키 순서대로 레코드 처리시 빠름

단점

  • 새로운 레코드 삽입, 삭제시 재구성을 위해 전체를 복사해야함
  • 검색시 처음부터 순차적으로 하기에 효율이 낮고 응답시간이 느림

색인 순차 파일

  • Indexed Sequential File
  • 순차 처리와 랜덤처리가 모두 가능하도록 레코드를 키 값순으로 정렬시켜 기록
  • 레코드의 키 항목만을 모은 색인 파일을 구성하여 편성
  • 색인을 이용한 순차적인 접근방법을 제공하여 ISAM
  • 레코드를 참조시 색인 탐색 후 색인이 가리키는 포인터를 사용해 직접 참조
  • 자기디스크
  • 자기테이프 불가능

구성

  • 기본 구역 : 실제 레코드를 기록하는 부분, 키 값 순으로 저장
  • 색인 구역
    • 마스터 색인 구역 : 실린더 색인 구역의 정보가 많을 경우, 해당 레코드가 어느 실린더 색인 구역에 기록되어 있는지를 기록
    • 실린더 색인 구역 : 트랙 색인의 최대키 값과 해당 레코드가 기록된 실린더의 정보가 기록, 한 파일당 하나씩 만들어짐
    • 트랙 색인 구역 : 트랙상 기록되어 있는 데이터 레코드 중의 최대 키 값과 주소가 기록, 한 실린더당 하나씩, 처리할 레코드가 실제로 어느 트랙에 기록되어있는지를 판별
  • 오버플로 구역 : 기본구역에 빈공간이 없어서 예비적으로 확보해둔 구역
    • 실린더 오버플로 구역 : 해당 실린더의 기본구역에서 오버플로된 데이터 기록
    • 독립 오버플로 구역 : 실린더 오버플로에 더 이상 기록할 수 없을 때 사용할 수 있는 예비 공간

장점

  • 삽입, 삭제, 갱신 용이
  • 파일 전체를 복사할 필요 없음

단점

  • 색인 및 오버플로 구역을 구성하기 위한 추가 기억공간 필요
  • 오버플로 레코드가 많아지면 파일을 재편성
  • 파일이 정렬되어 있어야함
  • 삽입, 삭제가 많으면 효율이 떨어짐
  • 액세스 시간이 랜덤 편성파일보다 느림

정적 인덱스

  • 인덱스의 구조가 변경되지 않고 내용만 변하는 구조
  • ISAM

동적 인덱스

  • 추가로 삽입될 레코드를 감안하여 빈 공간을 미리 예비해 두는 인덱스
  • VSAM
  • 블록에 레코드가 가득차면 동적으로 분열
  • 일정 수의 레코드가 유지되지 않는 블록은 병합

VSAM

동적 인덱스 방법을 이용한 색인 순차 파일

  • 기본 구역과 오버플로 구역을 구분하지 않음
  • 레코드를 삭제하면 그 공간을 재사용
  • 제어 구간에 가변 길이 레코드를 쉽게 수용

직접 파일

  • Direct File = Random File = DAM (Direct Access Method)
  • 레코드에 특정 기준으로 키가 할당, 해시 함수를 이용해 이 키에 대한 물리적 상대 레코드 주소를 계산 후 레코드 저장
  • 자기 디스크, 자기 드럼

장점

  • 물리적 주소를 통해 각 레코드에 직접 접근
  • 접근시간이 빠름
  • 삽입, 삭제, 갱신 용이
  • 어떤 레코드라도 평균 접근 시간에 검색 가능

단점

  • 레코드 주소 변환 과정 필요
  • 기억 공간 효율 저하
  • 물리적 구조에 대한 지식 필요
  • 프로그래밍 복잡
  • 충돌 발생 염려로 기억공간 확보

역파일

  • Inverted File
  • 여러 개의 색인을 만들어 항목별 특성에 맞게 분배한 파일로 다중 키 파일에 속함
  • 다중 키 파일 : 하나의 데이터에 여러개의 접근 방법을 지원하는 구조
    • 순차 처리와 임의 처리가 모두 가능하도록 편성
    • 검색 속도가 빨라 빠른 시간 내에 정보를 얻고자하는 시스템에 적합
  • 색인 값을 결합하여 레코드 주소를 결정
  • 레코드를 파일 중간에 삽입하기 쉬움
  • 검색 속도 빠름
  • 데이터 파일에 접근하지 않아 응답시간이 줄어듦
  • 처리가 쉬움
  • 색인 항목이 가변적

다중 리스트 파일

  • Multi-List File
  • 다중 키파일의 한 종류
  • 각 키에 대해 색인을 만든 후 각 데이터 레코들 간에 다중 리스트를 구축하여 구성
  • 색인의 각 항목들의 길이가 고정적으로 관리가 용이
  • 수정, 삭제 검색이 효율적

다중 링 파일

  • Multi-Ring File
  • 같은 특성을 가진 레코드들을 포인터로 연결하여 구성
  • 같은 항목값을 가진 레코드를 한꺼번에 처리하는 효과적
  • 기억장소 절약
  • 자료 중복성 배제
  • 레코드 형식이 달라도 처리 가능

로데오 스탬피드 공략 및 동물 포획 (170810)

· 9 min read

기본 공략

  • 티켓수익이 늘어나는 4레벨까지 서식지 업그레이드하기
  • 6시간마다 찾아오는 동물원 크루즈를 광고와 함께 사용하기
  • 에픽동물 3종세트(10,000원)을 구입하고 시작하길 추천 (광고를 봐서 미션을 갱신하고, 부활할 수 있지만 30초씩 소요되는 시간대비 금화벌기가 힘들다)
  • 다른 대륙으로 가기 전에 보스미션 끝내기

Ctrl+F 키로 원하는 동물을 검색하거나 오른쪽 TOC에서 원하는 동물을 클릭하면 이동합니다. 획득경로가 적히지 않은 경우는 랜덤으로 출현하는 동물이거나 입수정보가 없는 동물입니다.

번식 컨텐츠가 추가되었습니다 댓글 남겨주시면 없는 새끼 동물 반영합니다!

사바나

버펄로

총 7마리

이름획득
케이프 버펄로-
포레스트 버펄로얼룩말 한 마리 이상 잡기
워터 버펄로얼룩말 한 마리 이상 잡기
들소얼룩말 한 마리 이상 잡기
컬리펄로8단계 업그레이드
버페라리9단계 업그레이드
디아버펄로한 마리의 버팔로로 750미터를 달리기

얼룩말

총 7마리

이름획득
얼룩말-
말룩얼-
사탕말-
일렉트로 얼룩말3000m 이상 달리기
펑키 얼룩말8단계 업그레이드
전설의 얼룩말9단계 업그레이드
트로잔 얼룩말사바나의 7가지 동물을 한 판에서 다 타기

코끼리

총 8마리

이름획득
아프리카 코끼리-
매머드-
코끼리군주-
히피코끼리-
나팔코끼리8단계 업그레이드
소화전 코끼리9단계 업그레이드
젤레펀트페이스북 이벤트
해골코끼리코끼리 보스미션

타조

총 8마리

이름획득
타조-
셀레버디-
글램 락스타조-
기사타조-
심장부타조8단계 업그레이드
이끼타조9단계 업그레이드
오스튀치할로윈 이벤트
보스타조타조 보스미션

기린

총 7마리

이름획득
기린-
더티기린-
타코기린파-
하이볼러-
은하기린8단계 업그레이드
기린바타9단계 업그레이드
외계기린기린 보스미션

독수리

총 7마리

이름획득
독수리-
이집트 독수리-
화려한 독수리-
자본가 독수리1500m 이상 달리기
팝 독수리8단계 업그레이드
드라코리안9단계 업그레이드
독수리온1000m 이후에 기린으로만 갈 수 있는 언덕 위

사자

총 8마리

이름획득
사자-
단델리온-
검치호1800m 이상 달리기
그리폰길들인 그리폰 미션
울보 사자8단계 업그레이드
마사이 사자9단계 업그레이드
라이언 셰프사자로 30마리 동물 먹기
괴물 니엔설날 이벤트 주괴125개

정글

멧돼지

총 7마리

이름획득
멧돼지-
인디언 돼지-
돼지리-
보크-
아름다운 돼지리8단계 업그레이드
으르렁 코골이9단계 업그레이드
호그 라이더멧돼지 보스미션

고릴라

총 8마리

이름획득
서부 고릴라-
산 고릴라-
쿼터백 고릴라-
궤릴라-
로릴라8단계 업그레이드
소릴라9단계 업그레이드
볼카노릴라고릴라 보스미션
고릴럭설날 이벤트 주괴200개

악어

총 7마리

이름획득
엘리게이터-
프로게이터-
스노커다일-
버니게이터2000m 달리기
브라이드질라8단계 업그레이드
크루코다일9단계 업그레이드
꼬끼오아침 시간에 달리기

하마

총 7마리

이름획득
하마-
피그미 히포-
발레리나 히포-
힙합호타머스-
히피포타머스8단계 업그레이드
타웨레트9단계 업그레이드
플라티모파머스한 마리의 하마로 30초 타기

코뿔소

총 8마리

이름획득
코뿔소-
하와이노-
사과 피에노-
펠린오-
스카이노세로스8단계 업그레이드
마르셀 라이노9단계 업그레이드
슬라임노세루스할로윈 이벤트
다이노세로스7마리 다른 동물 차례대로 타기

호랑이

총 7마리

이름획득
호랑이-
라이거-
웅크린 호랑이-
H.R 호랑이3000m 이상 달리기
흰호랑이8단계 업그레이드
핑크 팬더라9단계 업그레이드
호랑이 릴리호랑이 보스미션

큰부리새

총 7마리

이름획득
큰부리새-
혼빌-
블루칸-
브류칸-
무칸8단계 업그레이드
카주칸9단계 업그레이드
쓰리칸큰부리새로 100m 점프

염소

총 8마리

이름획득
산염소-
바이킹 염소-
아쿠아염소-
미치광이 염소-
스텔스염소 마크28단계 업그레이드
이형접합 염소체9단계 업그레이드
고스트할로윈 이벤트
이각수염소 보스미션

라마

총 8마리

이름획득
라마-
짠물라마-
파냐타라마-
엘리자베스풍 라마-
나비라마8단계 업그레이드
버락 오블라마9단계 업그레이드
하이퍼 광라마라마 보스미션
알파카 폭죽설날 이벤트 주괴250개

총 7마리

이름획득
불곰-
곰추장1000m 이상 달리기
느림보곰-
곰케이크-
비버곰8단계 업그레이드
TIME LOCKER 곰9단계 업그레이드
SU-24 곰비행기산독수리로 2000m 날기

늑대

총 7마리

이름획득
회색늑대-
불늑대-
생존자늑대-
크고 나쁜 늑대-
재버늑대8단계 업그레이드
TIME LOCKER 개9단계 업그레이드
애꾸눈 늑대수염늑대 보스미션

야크

총 7마리

이름획득
야크-
스컹야크-
무서운 설야크-
웅이야크 나무1300m 이상 달리기
배틀 야크8단계 업그레이드
아프로디지 야크9단계 업그레이드
기어펑크 야크야크로 한 판에 10마리 날리기

독수리

총 7마리

이름획득
대머리독수리-
호크 경-
이글워드 가위날개-
배트큘라 백작-
큰독수리 나방8단계 업그레이드
비행기 승무원9단계 업그레이드
로빈수리30~100m 사이의 절벽 밖에 생성

무스

총 7마리

이름획득
알프스무스-
이끼무스-
가문비무스-
고원무스-
괴물무스8단계 업그레이드
초콜릿 무스9단계 업그레이드
다크무스8마리 다른 동물 차례대로 타기

오지

총 7마리

이름획득
메리노 양-
늑대 탈을 쓴 양-
사탕 양-
레이디 매애매애-
양치기 아가씨8단계 업그레이드
양보르기니9단계 업그레이드
코난 더 매애매애리안양 보스미션

캥거루

총 7마리

이름획득
붉은캥거루-
킥복서루-
레인저루-
막대사탕루-
스키비디피두3000m 이상 달리기
캥거푸들9단계 업그레이드
칸구루캥거루 보스미션

드롭베어

총 7마리

이름획득
드롭베어-
드롭베어 던디-
드롭 바이키-
구두쇠 코알라-
러셀 코3000m 이상 달리기
드롭베어 영애9단계 업그레이드, 2000m이상
괴수드롭베어2000m 이상 달리면 불타는 나무 위

웜뱃

총 8마리

이름획득
웜뱃-
전투웜뱃500m 이상 달리기
웜캣1100m 이상 달리기
웜베이비-
웜드리안4000m 이상 달리기
웜바멜론9단계 업그레이드
봄뱃땅 속에서 3마리 날리기
웜배트맨할로윈 이벤트

에뮤

총 8마리

이름획득
에뮤-
비행사 에뮤-
사춘기 에뮤-
에뮤지션-
데임 에뮤엄청 안나옴, 조건이 있는듯.
열대에뮤9단계 업그레이드
불사에뮤에뮤 보스미션
꼬끼오에뮤설날 이벤트 주괴300개

낙타

총 7마리

이름획득
낙타-
신밧드 낙타-
카멜플라주-
화산낙타-
카멜롯8단계 업그레이드
혹등낙타9단계 업그레이드
카멜레온8마리 다른 동물 차례대로 타기

큰박쥐

총 7마리

이름획득
큰박쥐-
비행상자-
큰박쥐여우-
흡혈박쥐-
과일박쥐8단계 업그레이드
비행양말9단계 업그레이드
감시박쥐풍차 또는 지붕있는 집을 부수기

툰드라

펭귄

총 7마리

이름획득
펭귄-
황제펭귄-
의원펭귄-
파일럿펭귄-
펭기스칸-
하키펭귄9단계 업그레이드
요정펭귄다른 맵 동물로 시작 후, 툰드라 동물 7마리 타기

물개

총 7마리

이름획득
평범한 물개-
표범 물개-
바나나 껍질-
경비 물개-
하프 물개-
에스키모 물개9단계 업그레이드
해군 물개물개 보스미션

바다코끼리

총 7마리

이름획득
바다코끼리-
바다소-
무법자 바다코끼리-
바다코끼리-
바이킹 바다코끼리-
무도회 바다코끼리9단계 업그레이드
검치 바다코끼리2000m 이상 달리기

토끼

총 7마리

이름획득
북극토끼-
해적토끼-
초코토끼-
포격토끼-
메뚜기-
개그토끼9단계 업그레이드
눈토끼토끼 연속 5마리 타기

부엉이

총 7마리

이름획득
흰올빼미-
수리부엉이-
호시탐탐부엉이-
외양간올빼미-
로빈부엉이-
부엉부엉9단계 업그레이드
수학부엉이부엉이 보스미션

여우

총 7마리

이름획득
북극여우-
나팔여우-
조로-
키츠네-
골디여우-
주크여우9단계 업그레이드
태엽여우여우로 1500m 달리기

북극곰

총 7마리

이름획득
북극곰-
딸기곰-
폴로곰-
태양곰-
순찰곰-
중산모곰9단계 업그레이드
롤러곰북극곰 보스미션

쥐라기

파라사울로로푸스

총 8마리

이름획득
파라사우롤로푸스-
술로푸스-
쇠지렐로푸스-
파라솔로푸스-
마스카랄로푸스-
탐험갈로푸스-
포잘로푸스-
노롤로푸스파라사울로로푸스 보스미션

랩터

총 8마리

이름획득
벨로시랩터-
깃털 랩터-
치실랩터-
쿨쿨랩터-
미녀 랩터-
철학자 랩터-
쌈 랩터-
사신 랩터-

트리케라톱스

총 8마리

이름획득
트리케라톱스-
트리케라클롭스-
트리케라캅스-
하늘케라톱스-
키메라톱스-
미디움레어톱스-
악몽케라톱스-
게이샤라톱스트리케라톱스 보스미션

티라노사우루스 렉스

총 8마리

이름획득
티라노사우루스 렉스-
T-멕스-
바다 렉스-
G-렉스-
마녀 렉스-
T-헬스-
폭구노사우루스 렉스-
파괴왕 렉스-

브론토사우루스

총 8마리

이름획득
브론토사우루스-
네스 호의 괴물-
광대토사우루스-
힙스터사우루스-
핫도고사우루스-
디플로도쿠스8종의 다른 동물을 순서대로 타기
페가사우루스-
히드라-

안킬로사우루스

총 8마리

이름획득
안킬로사우루스-
천킬로사우루스-
독킬로사우루스-
판사우루스-
탱킬로사우루스-
낚시꾼사우루스안킬로사우루스로 티라노사우르스 렉스와 충돌
식물사우루스-
멋쟁이사우루스-

프테로닥틸

총 8마리

이름획득
프테로닥틸-
소닥틸-
치료닥틸-
파라오닥틸-
스웨어로닥틸-
요정닥틸-
석유로닥틸-
머리털로닥틸프테로닥틸 보스미션

스테고사우루스

총 8마리

이름획득
스테고사우루스-
시드니 오페라사우루스-
시침질사우루스-
나초사우루스-
유의어사우루스-
톱사우루스스테고사우루스로 관목 10개 먹기
크리스탈사우루스-
전기사우루스-

에픽

총 3마리

이름획득
캐시카우구매
미션 노새구매
불사조 까마귀구매

새끼

  • 큰박쥐
    • 새끼 큰박쥐 : 밧줄 작아지는 속도 -6%, 날짐승 급강속도 -3%
    • 새끼 비행상자 : 밧줄 작아지는 속도 -6%, 상자 획득 동전 25%, 날짐승 급강 속도 -4%
    • 새끼 큰박쥐여우 : 밧줄 작아지는 속도 -10%, 점프 높이 6%, 날짐승 급강 속도 -6%
    • 새끼 흡혈박쥐 : 속도 -6%, 길들이는 속도 15%, 밧줄 작아지는 속도 -1%
  • 낙타
    • 새끼 낙타 : 불타는 속도 -15%
    • 새끼 카멜플라주 : 밧줄 작아지는 속도 -10%, 불타는 속도 -20%
    • 새끼 신밧드 낙타 : 화나는 속도 -8%, 불타는 속도 -15%, 상자 획득 동전 3%
    • 새끼 화산낙타 : 속도 5%, 불 타는 속도 -50%
    • 새끼 카멜레온 : 밧줄 크기 9%, 점프 높이 9%, 사냥 효과 9%
    • 새끼 혹등낙타 : 점프 속도 5%, 수중 이동속도 20%, 불 타는 속도 -20%
  • 에뮤
    • 새끼 에뮤 : 속도 4%, 점프 높이 4%
    • 새끼 비행사 에뮤 : 속도 6%, 날짐승 급강 속도 -8%, 시작 밧줄 크기 1%
    • 새끼 사춘기 에뮤 : 화나는 속도 -6%, 속도 -4%, 길들이는 속도 14%
    • 새끼 에뮤지션 : 속도 5%, 희귀 동물 출현 8%, 짝짓기 동물 출현 12%
  • 웜뱃
    • 새끼 웜뱃 : 점프 속도 6%
    • 새끼 전투웜뱃 : 점프 속도 12%, 상자 획득 동전 20%
    • 새끼 웜캣 : 화나는 속도 -5%, 점프 속도 7%, 점프 높이 7%
    • 새끼 봄뱃 : 점프 속도 7%, 길들이는 속도 14%, 불타는 속도 -25%
    • 새끼 웜배트맨 : 밧줄 작아지는 속도 -8%, 점프 속도 10%, 점프 높이 4%
  • 드롭베어
    • 새끼 드롭베어 : 희귀 동물 출현 4%, 불 타는 속도 -8%
  • 캥거루
    • 새끼 킥복서루 : 밧줄 크기 5%, 점프 높이 10%, 몸부림 -5%
    • 새끼 막대사탕루 : 사냥 효과 10%, 몸부림 -10%, 짝짓기 동물 길들이는 속도 2%
    • 새끼 캥거푸들 : 점프 높이 5%, 미션 획득 동전 15%, 몸부림 -15%
    • 새끼 메리노 양 : 길들이는 속도 12%
    • 새끼 늑대 탈을 쓴 양 : 속도 6%, 점프 속도 3%, 길들이는 속도 15%
    • 새끼 사탕양 : 희귀 동물 출현 7%, 길들이는 속도 12%, 사냥 효과 9%
    • 새끼 레이디 매애매애 : 짝짓기 동물 출현 20%, 길들이는 속도 20%, 짝짓기 동물 길들이는 속도 5%
    • 새끼 양치기 아가씨 : 화나는 속도 -8%, 짝짓기 속도 20%, 길들이는 속도 2%
  • 무스
    • 새끼 가문비무스 : 밧줄 크기 6%, 화나는 속도 -8%, 미션 획득 동전 5%
  • 코뿔소
    • 새끼 코뿔소 : 상자 획득 동전 20%
    • 새끼 하와이노 : 화나는 속도 -2%, 상자 획득 동전 20%, 수중 이동 속도 10%
  • 큰부리새
    • 새끼 블루칸 : 희귀 동물 출현 3%, 짝짓기 동물 출현 7%, 날짐승 급강 속도 -6%
  • 고릴라
    • 새끼 산 고릴라 : 밧줄 크기 3%, 점프 높이 3%, 짝짓기 동물 출현 6%
  • 타조
    • 새끼 셀레버디 : 타고있는 동물 속도 8%, 희귀 동물 출현 4%
  • 독수리
    • 새끼 독수리 : 밧줄 크기 4%
  • 버펄로
    • 새끼 케이프 버펄로 : 화나는 속도 -3%
    • 새끼 포레스트 버펄로 : 화나는 속도 -4%
    • 새끼 워터 버펄로 : 화나는 속도 -4%, 수중 이동 속도 10%
    • 새끼 들소 : 밧줄 작아지는 속도 -5%, 화나는 속도 -5%
    • 새끼 컬리펄로 : 동물 화나는 속도 -5%, 짝짓기 동물 출현 8%, 짝짓기 동물 길들이는 속도 5%
    • 새끼 디아 버펄로 : 동물 화나는 속도 -4%, 점프 높이 8%
    • 새끼 버페라리 : 화나는 속도 -4%, 속도 14%, 점프 속도 5%

버그

  • 정글 맵에서 간혹 맵 밖으로 나가져서 출발
  • 정글 맵에서 기린으로 맵 밖으로 나갈 수 있음
  • 오지 맵에서 양이 벽 속에서 나옴
  • 동물을 타면서 드롭베어에게 잡아먹히면 거리가 음수로 변하면서 땅 밑으로 계속 들어감

동물출처

검색등록 - sitemap 생성

· One min read

sitemap 생성

모든 검색 엔진 크롤러는 sitemap.xml 을 참조해 데이터를 인덱싱하는 기능이 있다.

hexo 사용자는 hexo-generator-seo-friendly-sitemap 또는 hexo-generator-sitemap 플러그인을 설치하면 바로 생성이 되지만, 다른 경우라면 직접 sitemap 을 생성해줘야한다.

직접 생성하기

xml-sitemaps에서 무료로 생성할 수 있다.

image from hexo

내 사이트 URL 과 업데이트 빈도를 설정한 뒤 Start 버튼을 클릭하면 잠시 후 sitemap.xml을 다운 받을 수 있다. 이 후 서버로 업로드해 검색등록을 마무리하면 된다.

검색등록 - 5. Naver

· One min read

네이버에 내 사이트를 등록해보자. 네이버 웹마스터로 이동한다.

웹 마스터

등록

사이트 추가 + 버튼을 누른 뒤 내 사이트를 추가한다. image from hexo

인증

HTML 태그 방식으로 인증을 진행하자. image from hexo 페이지에 태그를 추가하고 확인 버튼을 누르면 페이지 소유권이 확인되어 웹마스터 도구를 이용할 수 있다.

sitemap 등록

요청 > 사이트맵 제출 메뉴에서 sitemap 을 제출한다. image from hexo

robots.txt 설정

robots.txt에 sitemap 위치를 알려주는 라인을 추가한다.

robots.txt
User-agent: *
Sitemap: https://gracefullight.github.io/sitemap.xml

RSS 등록

요청 > RSS 제출 메뉴에서 RSS Feed 를 제출한다.

수집주기 설정

사이트의 최신상태를 검색에 반영하기 위해 설정 > 수집 설정 메뉴의 수집주기 설정 옵션을 빠르게로 바꿔준다.

강제 수집 요청

요청 > 웹 페이지 수집 메뉴에서 해당 페이지를 수집시킬 수 있다. image from hexo

최적화 확인

현황 > 사이트 최적화 메뉴에서 내 사이트가 검색에 노출이 잘 될 수 있는 구조인지 확인해본다. image from hexo 최적화 되어있지 않다면 og 태그 및 meta 태그를 적절히 수정해 맞춰주자.

검색등록 - 4. Google

· One min read

Google 검색 등록

구글에 내 사이트를 등록해보자. 구글 웹마스터로 이동한다.

웹 마스터

등록

속성 추가 버튼을 누른 뒤 내 사이트를 추가한다. image from hexo

인증

대체 방법을 눌러 HTML 태그 방식으로 인증을 진행하자. image from hexo

페이지에 태그를 추가하고 확인 버튼을 누르면 페이지 소유권이 확인되어 웹마스터 도구를 이용할 수 있다.

sitemap 등록

크롤링 > Sitemaps 메뉴에서 SITEMAP 추가/테스트 버튼으로 추가한다. image from hexo

Analytics 연동

설정 > Google 애널리틱스 속성 메뉴에서 Google Analytics 와 Search Console 을 연동한다. image from hexo

구글의 연동 도움말을 참조한다.

강제 색인 생성

크롤링 > Fetch As Google 메뉴로 이동해 페이지 색인 생성을 요청할 수 있다. image from hexo

검색등록 - 3. Yandex

· One min read

Yandex 검색 등록

전세계 4 위, 러시아 1 위 검색 서비스인 얀덱스에도 내 사이트를 추가해보자. Yandex Webmaster로 이동해 가입 후 로그인한다. 영어라 부담없이 가입할 수 있고, 핸드폰 인증도 간단하다.

웹 마스터

등록

+ 버튼을 눌러 사이트를 등록한다. image from hexo

인증

파일업로드 방식과 meta 태그 추가방식, CNAME 추가방식이 있는데 meta 태그 추가 방식을 사용한다. image from hexo

페이지에 태그를 추가하고 Check 버튼을 누르면 페이지 소유권이 확인되어 웹마스터 도구를 이용할 수 있다.

sitemap 등록

Indexing > Sitemap files 메뉴에서 sitemap 을 제출한다. image from hexo

여담

Processing queue 가 처리됨으로 어떻게 바뀌는지 확인해봐야될 듯.

검색등록 - 2. Bing (Yahoo)

· One min read

Bing, Yahoo 검색 등록

Microsoft 검색인 Bing 과 Yahoo 는 한 곳에서 관리할 수 있다.

웹 마스터

Bing 웹 마스터 도구에 로그인한다. Microsoft 계정이 있으면 바로 로그인할 수 있다.

등록

사이트를 등록한다. image from hexo

인증

파일업로드 방식과 meta 태그 추가방식, CNAME 추가방식이 있는데 meta 태그 추가 방식을 사용한다. image from hexo 페이지에 태그를 추가하고 확인을 누르면 페이지 소유권이 확인되어 웹마스터 도구를 이용할 수 있다.

sitemap 등록

내 사이트 구성 > Sitemaps 메뉴에서 sitemap 을 제출한다. image from hexo 2-3 일 정도 지나야 요청이 처리되는 것 같다.

크롤링 시간대 설정

내 사이트 구성 > 크롤링 제어 메뉴로 이동해 크롤링 횟수를 제한하지말고 기본값으로 설정한다. image from hexo

여담

기능적으로 베타인 게 많아서 시간을 두고 인덱싱 되는 페이지를 확인해봐야 될 듯. 구글 다음으로 사용량이 많은게 Bing 과 Yahoo 검색이니 꼭 추가해주자.

바이두 검색등록 및 전화인증 없이 회원가입하기

· 2 min read

Baidu 검색 등록

중국 1 위 검색사이트인 바이두에 내 사이트를 추가해보자. 바이두 사이트에서 회원가입을 하는 경우 인증번호를 입력해야하는데 국외번호 인증이 안된다.

회원가입

바이두 클라우드로 이동하여 회원가입 버튼을 클릭한다. image from hexo

국제번호를 변경 후 휴대번호로 인증한다. image from hexo

  • 전화번호
  • 아이디
  • 인증번호
  • 비밀번호

순으로 입력하면 된다.

인증하고 아래 큰 버튼을 누르면 가입과정이 완료된다.

웹 마스터

등록

바이두 웹마스터로 들어가 사이트 등록 버튼을 클릭한다. image from hexo

URL 을 입력하고 아래 버튼을 클릭한다. image from hexo

인증

파일업로드 방식과 meta 태그 추가 방식 중 후자를 선택했다. image from hexo 메타 태그를 헤더에 추가해주자.

단순한 링크 등록

블로그 등 파일을 올릴 수 없는 사이트의 링크만 등록하고 싶다면 여기서 URL 을 입력해준다. (Baidu 에서는 site 인증을 통한 방법을 권장하고 있다.)

sitemap 등록

sitemap 등록 메뉴로 이동합니다. image from hexo

경로 입력

textarea 에 사이트맵 경로를 라인마다 입력한다.

인증문자 입력

간체자는 한자키로 입력할 수 없는 문자가 많기에 네이버 중국어사전의 필기 인식기 기능을 사용한다. image from hexo 한글자씩 복사해 입력해준다.

제출

제출하면 아래 부분에 등록된 sitemap 이 보인다. image from hexo

Automatic Push

스크립트를 추가해 자동으로 페이지를 인덱싱할 수 있다.

소스

<script>
(function () {
var bp = document.createElement("script");
var curProtocol = window.location.protocol.split(":")[0];
if (curProtocol === "https") {
bp.src = "https://zz.bdstatic.com/linksubmit/push.js";
} else {
bp.src = "http://push.zhanzhang.baidu.com/push.js";
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>

sitemap 이 읽혀지지 않는다면 head 에 위 스크립트를 추가해주자.

여담

사이트 등록 중 추가 정보를 입력이 필요하면 여기서 webmaster 관리자정보를 수정하면 된다. image from hexo

이메일의 경우만 인증이 들어감으로 QQ 와 Wechat 의 경우는 대충 써주면 된다.

curl을 사용하지 않는 http 통신

· 2 min read

curl 기능이 확장되어있지 않아 http 통신을 할 수 없는 경우가 있다. fsockopen 메소드를 사용해 같은 기능을 할 수 있다.

소스

GET

<?php
/**
* [getData 외부파일을 GET 방식으로 읽기]
* @param [string] $str [url]
* @param [array] $data [parameters]
* @return [string] [내용]
*/
function getData($str, $data) {
$url = parse_url($str);

switch(strtoupper($url['scheme'])) {
case 'HTTP':
if (!isset($url['port'])) {
$url['port'] = 80;
}
break;
case 'HTTPS':
$url['ssl'] = 'ssl://';
if (!isset($url['port'])) {
$url['port'] = 443;
}
break;
}

$fp = @fsockopen($url['ssl'].$url['host'], $url['port'], $errno, $errstr, 10);
if ($fp) {
fwrite($fp, "GET $url[path]?".http_build_query($data)." HTTP/1.0\r\nHost: $url[host]\r\n");
while (!feof($fp)) {
$out .= fread($fp, 1024);
}

fclose($fp);
$out = explode("\r\n\r\n",$out);
array_shift($out);
$out = implode("",$out);
}

return $out;
}

POST

<?php
<?
/**
* [postData 외부파일을 POST 방식으로 읽기]
* @param [string] $str [url]
* @param [array] $data [parameters]
* @param [int] $sleepMs [연결지연ms]
* @return [string] [내용]
*/
function postData($str, $data, $sleepMs=0) {
$url = parse_url($str);

switch(strtoupper($url['scheme'])) {
case 'HTTP':
if (!isset($url['port'])) {
$url['port'] = 80;
}
break;
case 'HTTPS':
$url['ssl'] = 'ssl://';
if (!isset($url['port'])) {
$url['port'] = 443;
}
break;
}

$data_string = http_build_query($data);
$referrer = $_SERVER['SCRIPT_URL'];

$request = "POST {$url[path]} HTTP/1.1\r\nHost: {$url[host]}\r\nReferer: {$referrer}\r\n";
$request .= "Content-type: application/x-www-form-urlencoded\r\n";
$request .= "Content-length: " . strlen($data_string) . "\r\n";
$request .= "Connection: close\r\n\r\n";
$request .= "{$data_string}\r\n";

$fp = @fsockopen($url['ssl'].$url[host], $url[port], $errno, $errstr, 10);
if ($fp) {
fwrite($fp, $request);
usleep(($sleepMs * 1000));

do {
$header .= fread($fp, 1);
} while (!preg_match('/\\r\\n\\r\\n$/', $header));

if (preg_match('/Transfer\\-Encoding:\\s+chunked\\r\\n/', $header, $matches)) {
// check encoding
do {
$byte = $chunk_size = "";
do {
$chunk_size .= $byte; $byte = fread($fp, 1);
} while ($byte != "\r");
fread($fp, 1);
$chunk_size = hexdec($chunk_size);
if ($chunk_size){
$out .= @fread($fp, $chunk_size);
}
fread($fp, 2);
} while ($chunk_size);

} else if (preg_match('/Content\\-Length:\\s+([0-9]*)\\r\\n/', $header, $matches)) {
$out = fread($fp,$matches[1]);

} else {
while (!feof($fp)) {
$out .= fread($fp, 4096);
}
}

fclose($fp);
}

return $out;
}

예제

<?php
$param = array(
'data1' => '1',
'data2' => '2'
);

// get 요청
$get_data = getData('http://your.apiurl.com', $param);
// post 요청
$post_data = postData('http://your.apiurl.com', $param);
?>

설명

fsockopen 으로 소켓을 연 뒤 해당 host 로 request 만들어 전송한다.

stream 을 사용해 통신하는 방법도 있다.