자료구조의 개념
- 컴퓨터 시스템
- 시스템의 정의
- 컴퓨터
= Electronic Data Processing System(EDPS)
= 전기 신호에 의해 자료가 처리되는 시스템 - 자료의 효율적인 처리 위해 자료형(data type) 개념 사용
- 문자, 정수, 실수, 복소수, 레코드, 구조체 등
- 시스템의 구성 요소
- 입력(input)
- 처리할 자료
- 처리 방법
- 처리(processing) → 자료 가공
- 출력(output) → 처리 결과 출력
- 제어(control)
- 귀환(feed back) → 처리 결과를 다시 입력 자료로 사용
- 자료와 정보
- 정의
- 데이터(D) → 처리기(P) → 정보(I)
I = P(D)[I(Information), P(Process), D(Data)] - 정보가 유용성을 갖기 위해서는 다음 두 가지를 갖춰야 함
- 정확성
- 현재성
- 자료
- 개념
- 현실 세계로부터 단순 관찰 또는 측정 통해서 수집된 사실이나 값
- 인식 및 처리에 알맞는 형태로 존재하며 평가되지 않음
- 데이터의 성격
- 데이터의 성격에 따라 다르게 분류하고 관리
- 이름, 소유자, 날짜, 생성자 → 음악
- 색깔, 길이, 범주 등 → 상품
- 자료구조
- 목적
- 정렬(배열)
- 관리
- 목적 달성 위해 특정 구조체의 형태로 관리 → search, sort 등 가능
- 데이터를 컴퓨터 메모리 상에 체계적으로 형성하는 방법을 배운다
- 종류
- array
- stack
- queue
- list
- heap
- tree
- graph
- 정보
- 자료가 프로그램에 의해 처리된 원하는 결과
- 어떤 상황에 대해
적절한 의사결정 할 수 있게 하는
데이터의 유효한 해석 또는 상호관계 - 발전단계
Data → Information → Knowledge → Intelligence - 알고리즘? 자료를 이용하여 정보를 구하기 위한 논리를 기술한 것
프로그램? 알고리즘을 프로그래밍 언어를 이용하여 실행논리로 구현한 것 - 자료의 단위
- 개요
- 자료 단위
bit → byte → word → record → block → file → db → data bank
bit → byte → field(item) → record → file → db → data bank - 용량 단위
bit → byte → KB → MB → GB → TB - 연산속도 단위
ms → us → ns → ps → fs → as - 기본 자료
- 수치(정수, 실수)
- 문자
- 논리
- 포인터
- 파일
- 순차 파일 구조
- 직접 파일 구조
- 인덱스된 순차 파일 구조
- DB
- 계층 구조
- 네트워크 구조
- 관계 구조
- 객체 지향 구조
- 비트(binary digit)
- 자료의 최소단위로 0 또는 1로 표현되는 2진수 한 자리를 기억시킬 수 있는 공간
- 컴퓨터는 내부적으로 2진수로 데이터 처리
- 니블
- 4비트 의미. 10진수 한 자리 표현하는 단위로 사용 가능
- 바이트
- 8비트 의미. 1문자 나타냄.
- 하나의 문자를 나타낼 수 있는 단위로 일반적으로 8개 비트가 연속된 것
0 = 0000 0000, 17 = 0001 0001, 3 = 0000 0011 - 워드
- CPU에서 처리되는 명령의 단위
- half word = 2바이트
- full word = 4바이트
- double word = 8바이트
- 컴퓨터에서 자료가 연산되는 단위. 컴퓨터가 한꺼번에 처리할 수 있는 자료의 양
- 컴퓨터의 모든 명령은 기본적으로 워드 단위로 수행.
→ 워드 길이 = CPU 구성하는 레지스터 크기
ex. 64비트 컴퓨터 = CPU가 한꺼번에 64비트씩 처리할 수 있음 의미 - 필드 또는 항목
- 레코드를 구성하는 항목으로 파일을 구성하는 단위 중 최소의 논리적 단위.
- 같은 종류의 data가 기록되는 항목으로 최소한의 문자집합
- 레코드
- 서로 관련된 필드 또는 항목의 집합. 프로그램 상에서 자료의 처리 및 기록의 단위
→ 논리적 단위, 내부에서 처리되는 단위 - 필드의 집합으로 DB에서 실제로 정보를 처리할 때 기본이 되는 단위
- 배열 → 데이터 원소의 크기와 데이터 타입이 동일
레코드 → 데이터 원소의 크기와 데이터 타입이 서로 다름 - 파일
- 물리적인 구조가 같은 레코드의 집합
- 기억매체에 저장되는 단위
- 데이터베이스
- 여러 응용분야에서 여러 사람들이 공동으로 사용할 수 있도록 조직 및 관리되고 있는 자료의 모임
- 데이터 구조
- 정의
- 데이터 객체에 적용될 연산의 종류와 기능 결정 → 실제로 어떻게 이뤄지는가 기술 → 데이터 구조가 정의된다
- 수학적인 모델 또는 논리적 모델을 컴퓨터 내부에 표현
- 컴퓨터 기억공간에서 자료처리를 위한 데이터 표현법, 자료간의 상호관계를 파악하여 작업을 수행하기 위한 알고리즘을 연구
- 분류
- 선형구조
- 배열
- 물리적 연속성 있음
- 검색 연산, 기록밀도, 수정연산 높다
- 삽입, 삭제 연산 낮다
- 정적구조
- 외부단편화 발생
- 연결
- 논리적 연속성 있음
- 검색연산, 기록밀도, 수정연산 낮다
- 삽입, 삭제 연산 높다
- 동적구조
- 외부단편화 미발생
- 비선형구조
- 트리
- 그래프의 특수한 구조.
- 사이클 허용하지 않음
- 그래프
- 사이클 허용
- 자료구조 선택시 고려사항
- 데이터 양, 접근빈도, 접근시간
- 데이터의 성격
- 잦은 변경?
- 일정 형태 유지?
- 사용되는 컴퓨터의 메모리 허용도
- 프로그램 작성의 용이성
- 데이터의 사용 빈도 및 저장 방식
- 데이터 객체
- 자료형의 실체를 구성하는 원소의 집합 ex. 자연수 N의 데이터 객체 = {1, 2, 3, 4, … } ex. 정수형 D의 데이터 객체 = { … , -3, -2, -1, 0, 1, 2, 3, … }
1. 자료 구조의 개념
1. 리눅스 개념
- 리눅스 개념
- 리눅스
- 개념
- 컴퓨터 운영체제
- 애플리케이션이 실행되는 환경
- 기능
- 하드웨어 감지 및 준비
- 프로세스 관리
- 메모리 관리
- 요청된 메모리의 처리 방식을 결정.
- 사용자 인터페이스 제공
- 사용자 계정 생성 및 사용자 간 경계 설정
- 사용자 간 및 그룹 간 계정 분리
→ 사용자가 자신의 파일과 프로세스 제어할 수 있는 토대 - 파일시스템 제어
- 파일시스템 구조는 리눅스 운영체제와 한 몸(모듈로 로드되기도 함)
- 각종 파일과 디렉터리에 대해 그 소유권과 접근 권한 제어
- 사용자 접근 권한 및 인증 방식 제공
- 관리용 유틸리티 제공
- 서비스 시작
- 웹 페이지를 볼 수 있는 웹 브라우저가 포함됨과 동시에 리눅스 자체가 웹 페이지를 다른 시스템에 제공하기 위한 서버 컴퓨터가 되기도 함
- 프로그래밍 도구 제공
- 대기업에서 주로 사용하는 리눅스의 고급 기능
- 클러스터링
- 다수의 시스템이 외부에서 하나의 시스템처럼 보이도록 클러스터 구성
- 서비스는 클러스터 노드들이 주고받을 수 있도록 구성
- 클러스터 노드에서는 서비스가 방해받지 않고 지속적으로 실행되는 것처럼 보임
- 가상화
- 가상화 호스트에서는 다른 리눅스 시스템을 비롯하야 마이크로소프트 윈도우, BSD 등 다른 운영체제까지도 가상 게스트로 실행 가능
- 외부에서는 가상 게스트가 개별 컴퓨터로 보임
- KVM과 젠(Xen)
- 클라우드 컴퓨팅
- 대규모 가상화 환경 관리
- 오픈 스택(OpenStack) 또는 레드햇 엔터프라이즈 가상화
- 다수의 가상화 호스트
- 가상 네트워크
- 사용자 및 시스템 인증
- 가상 게스트
- 네트워크 기반 스토리지
- 실시간 컴퓨팅
- 우선순위 높은 프로세스들을 빠르고 예측 가능하도록 실행하기 위해
- 전문 저장소
- 전문화된 로컬 및 네트워크 스토리지 인터페이스 사용 가능
- 공유 스토리지 장치
ex. Ceph와 GusterFS - 차이점
- 운영체제를 만들 때 사용했던 코드 볼 수 있다
- 사용 목적에 부합하지 않을 경우 가장 기본적인 수준에서 변경할 수 있고 운영체제를 직접 빌드하여 사용할 수 있다.
- 코드를 통해 버그를 찾는다거나 보안 취약점을 찾아서 확인하고 무슨 일을 하는지 알 수 있다.
- 필요한 소프트웨어를 운영체제에 직접 끼워넣을 수 있다.
- OSI(Open Source Initiative) 오픈 소스 정의
- 기본 목적: 소스 코드를 함께 사용
- 규칙 for 오픈 소스 코드의 자유와 무결성 보호
- 자유 배포
- 소스 코드
- 파생 작업
- 저작자의 소스 코드 무결성
- 개인 또는 단체에 대한 차별 금지
- 연구 분야에 대한 차별 금지
- 라이선스 배포
- 라이선스는 특정 제품으로만 국한되어서는 안 된다
- 라이선스는 다른 소프트웨어를 제한해서는 안 된다
- 라이선스는 기술 중립적이어야 한다
- 리눅스 배포판
- 슬랙웨어
- 디스크 포맷
- 스왑 공간 활성화
- 사용자 계정 만들기
- 크노픽스
- 젠투
- 맨드레이크 → 맨드리바
- 레드햇 → 기업용(레드햇 엔터프라이즈 리눅스, RHEL) 및 개인용(페도라)
- 초기 배포판 특징
- RPM 패키지 관리
- 소프트웨어 패키지에 파일 및 패키지 정보 함께 넣음
ex. 누가 만들었는지, 문서화 파일인지 설정파일인지 등 - 소프트웨어 패키지 정보가 로컬 RPM 데이터베이스에 저장
- 설치, 검색, 업데이트, 제거 편리
- 단순 설치
- 그래픽 기반 시스템 관리
- RHEL
- 빠른 트랜잭션 처리
- 클러스터나 가상호스트로 배치될 수 있는 시스템
- JBoss → 자바 기반 애플리케이션을 인터넷이나 기업 인트라넷에 배포하기 위한 미들웨어 제품
- 레드햇 엔터프라이즈 가상화
→ 가상화 호스트 + 각종 관리자 + 게스트 컴퓨터
→ 사용자가 직접 거대한 가상 컴퓨팅 환경을 설치, 실행, 관리, 마이그레이션, 서비스 해제 등 가능 - 레드햇 클라우드폼 → 클라우드 관리 플랫폼
- 도커(Docker) 형태의 리눅스 컨테이너와 RHEL 아토믹
→ 클라우드용 애플리케이션 컨테이너화 방법 제공 - 페도라
- 데비안 GNU/리눅스 배포판
- 리눅스 민트
- elemetary OS
- 조린(Zorin)
- LXLE
- 칼리(Kali)
- 우분투
- 단순하고 사용하기 쉬운 그래픽 기반 인스톨러와 도구 채용
- 서버 패키지 제공
- 완전한 데스크톱 시스템
- 레드햇 공인 전문가
- RHCSA → 기본적인 시스템 관리 기술
- 기본적인 도구 이해
- 셸(bash)에 대한 실무 지식
- 설명에 대한 올바른 명령 문법 사용하고 입출력 리디렉션(<, >, >>) 수행
- 원격 및 로컬 시스템 로그인
- 파일의 권한이나 소유권 생성, 이동, 복사, 링크, 삭제, 변경
- man 페이지와 /usr/share/doc에서 원하는 정보 찾을 수 있어야 함
- 실행 시스템 운영
- 리눅스 부팅 프로세스 이해
- 단일 사용자 모드 진입
- 시스템 종료
- 재부팅
- 타깃(=런레벨, runlevel에 해당하는 새로운 용어) 변경 수행
- 프로세스 식별하고 값을 변경하거나 요청을 받으면 프로세스 죽일 수 있어야 함
- 가상 머신 및 네트워크 서비스 시작 및 중지
- 로그 파일 찾아 해석 가능
- 로컬 저장소 구성
- 디스크 파티션 설정에서 물리적 볼륨의 생성
- LVM(논리적 볼륨 관리)구성
- 암호화(LUKS)
- 파티션을 파일시스템이나 스왑 공간으로 설정하여 마운트하거나 부팅 시 활성화할 수 있어야 함
- 파일시스템 생성 및 구성
- 여러 파일시스템을 만들고 자동으로 마운트 할 수 있어야 함
- 정규 리눅스 파일시스템(ext2, ext3, ext4 등),
LUKS 암호화 파일시스템,
네트워크 파일시스템(NFS 및 CIFS) 등을 다룰 수 있어야 함 - set group ID 비트 기능과 ACL(Access Control List) 사용하여 협업 디렉터리 만들 수 있어야 함
- LVM 사용하여 논리 볼륨 크기 늘릴 수 있어야 함
- 시스템 배포 및 구성, 유지 관리
- 네트워크 구성, cron 작업 생성, 기본 런레벨 설정, RHEL 시스템 설치 등
- 간단한 HTTP 및 FTP 서버 구성 능력
- 레드햇 네트워크 / 원격 보관소(repository )/ 로컬 파일시스템에서 소프트웨어 패키지를 가져다 설치할 수 있는 능력
- 새로운 커널을 올바로 설치할 수 있어야 함
- 시스템 시작 시 여러 커널 중 하나를 선택하여 부팅시키는 능력
- 사용자 및 그룹 관리
- 사용자 및 그룹 계정을 추가, 삭제, 변경
- change 명령을 사용한 암호 기간 설정 반드시 숙지
- LDAP 디렉터리 서버로 연결하여 시스템 인증할 수 있도록 구성하는 능력
- 보안 관리
- 기본적인 방화벽(firewalld 또는 system-config-firewall, iptables) 설정 방법과 SELinux 사용 방법 이해
- 키 입력 기반 인증 위한 SSH 설정 능력
- RHCE
- 시스템 구성과 관리에 필요한 넓은 범위의 주제
- 본딩(bonding)
- 네트워크 링크 종합 능력
- IP 트래픽 라우팅
- 특정 네트워크 주소의 정적 라우트 설정 능력
- 방화벽
- 웹, FTP, NFS 등의 서비스를 제공하는 시스템에서 특정 포트의 트래픽을 차단하거나 허용할 수 있어야 함
- 접속자의 IP 주소에 따라 특정 서비스를 차단하거나 허용할 수 있어야 함
- 커널 turnable 파라미터
- /etc/sysctl.conf파일과 sysctl 명령으로 커널 turnable 파라미터 설정할 수 있어야 함
- /etc/sysctl.conf 파일을 활용하여 /proc/sys에서 IP 포워딩 설정 변경할 수 있어야 함
- 커버로스(Kerberos) 인증
- 커버로스 방식을 사용하여 RHEL 시스템 사용자를 인증할 수 있어야 함
- iSCSI(internet Small Computer System Interface)
- iSCSI는 컴퓨팅 환경에서 데이터 스토리지 시설을 이어주는 IP 기반의 스토리지 네트워킹 표준
- 부팅 시 iSCSI 타깃을 마운트하는 iSCSI 타깃 및 이니시에이터로 시스템을 설정할 수 있어야 함
- 시스템 보고
- sar 등의 기능을 사용하여 시스템의 메모리, 디스크 액세스, 네트워크 트래픽, 프로세서 활용 등에 관한 보고서 작성 능력
- 셸 스크립팅
- 입력을 받고 이를 다양한 방법으로 출력하는 셸 스크립트를 만들 수 있어야 함
- 원격 로그 처리
- 로그 메시지를 수집하여 이를 원경 로깅 서버에 분배할 수 있도록 rsyslogd 기능을 구성할 수 있어야 함
- 로깅 클라이언트에서 로그 메시지를 수집할 수 있도록 원격 로깅 서버 기능을 구성할 수 있어야 함
- SELinux
- 모든 서버 구성의 보안이 SELinux로 올바르게 유지되고 있는지 강제(Enforcing) 모드의 보안 강화 리눅스(Security Enhanced Linux)를 사용하여 확인할 수 있어야 함
- 네트워크 서비스 설치하기와 구성하기
- 목표
- 모든 네트워크 서비스에 대해 정해진 단계를 밟아 각 서비스에 필요한 패키지를 설치하고 액세스를 허용할 수 있도록 SELinux를 설정할 수 있어야 함
- 부팅 시 서비스가 시작하도록 설정하고, 호스트나 사용자가 제공하는 서비스의 보안을 유지할 수 있어야 함
- 구체적인 서비스
- 웹 서버
- 아파치 서버(HTTP/HTTPS) 구성 능력
- 가상 호스트를 설정하고 CGI 스크립트를 배포할 수 있어야 함
- 사설 디렉터리를 사용하고 특정 리눅스 그룹에서 콘텐츠를 관리할 수 있도록 해야 함
- DNS 서버
- DNS 쿼리를 다른 DNS 서버로 전달할 수 있는 캐시 전용 이름 서버로 동작할 수 있도록 DNS 서버(bind 패키지)를 설정할 수 있어야 함.
- 마스터나 슬레이브 영역까지 구성할 필요 없음
- NFS 서버
- 특정 디렉터리를 특정 클라이언트 시스템과 공유하여 그룹 간 협업에 사용될 수 있도록 NFS 서버를 구성할 수 있어야 함
- Windows 파일 공유 서버
- 특정 호스트 및 사용자에게 SMB 공유 기능을 제공할 수 있도록 리눅스(삼바, samba)를 설정할 수 있어야 함
- 이를 통해 그룹 간 협업을 구현
- 메일 서버
- 로컬 호스트 외부에서 보낸 메일을 수신할 수 있도록 postfix와 sendmail을 구성할 수 있어야 함
- 스마트 호스트(smart host)로 메일을 전달(릴레이)할 수 있어야 함
- 보안 셸 서버
- 로컬 시스템에 대한 원격 로그인
- 키 입력 기반 인증을 허용할 수 있도록 SSH 서비스(sshd)를 설정할 수 있어야 함
- sshd.conf 파일을 필요에 따라 구성하는 능력
- 네트워크 시간 서버
- NTP(Network Time Protocol) 피어들과 시간을 동기화할 수 있도록 NTP 서버(ntpd)를 구성할 수 있어야 함
- 데이터베이스 서버
- 마리아DB 데이터베이스를 구성하고 다양한 관리방법을 이해하여 MariaDB.org 사이트로부터 마리아DB를 구성할 수 있어야 함
피드 구독하기:
글 (Atom)
-
자료 종류와 표현 자료의 표현 수치 자료 정수 표현(고정소수점 수의 표현) 10진 연산 팩(packed) 연산 언팩(unpacked) 연산 2진 연산 부호화 크기 1의 보수 2의 보...
-
자료구조의 개념 컴퓨터 시스템 시스템의 정의 컴퓨터 = Electronic Data Processing System(EDPS) = 전기 신호에 의해 자료가 처리되는 시스템 자료의 효율적인 처리 위해 자료형(data typ...