⏰ Today's Schedule
10:00 ~ 12:30 프로그래머스 알고리즘, SQL 문제 풀이
13:30 ~ 16:30 데이터베이스 이론 강의 수강
16:30 ~ 17:00 TIL 회고 블로그 작성
17:00 ~ 17:50 개인 프로젝트 git hub 업로드
17:50 ~ 18:00 팀 구성원과 하루 회고
19:30 ~ 22:00 파이썬 강의 수강
22:00 ~ 24:40 JAVA 강의 수강
🖍️ Today I Learned
8일차 Java, Database, Python 강의 수강
스파르타코딩클럽에서 제공받은 Java 웹사이트로는 도저히 이해가 안가는 돌머리였기에.. 학교 강의로 대체해봤다. 그래도 오늘은 가망이 보이기 시작한다. 그리고 정보처리기사와 SQL개발자 시험을 앞두고 있어서 오늘은 데이터베이스에 대해 복습을 했다. 스파르타코딩클럽에서 제공되는 데이터베이스, SQL에 대한 기본 지식은 간단 명료하면서도 실생활용에 가까웠기에 이론을 탄탄하게 다지기에는 약간의 무리가 있었다. (나만 그런걸 수도 있음) 그래서 오늘은 강의를 열심히 듣고 문제를 풀어보는데에 집중을 했다.
📌 데이터베이스의 역사
컴퓨터 발전의 역사 = 데이터 처리의 발전사
💡 EDPS (Electronic Data Processing System)
컴퓨터와 데이터 처리의 밀접한 관계를 보여줌
💡 제1세대 컴퓨터 시스템
소프트웨어나 저장장치 등의 개발이 부족하고 주로 기술 분야의 계산, 자료 분류 등에 사용함 (70~80년대)
💡 제2세대 컴퓨터 시스템
운영체제의 도입, FORTRANm COBOL 등의 고급 언어 개발, 파일 시스템(File System)의 도입
💡 파일시스템의 문제점
하나의 응용프로그램이 하나의 파일에 종속되고 있어서 문제가 발생하게 됨
(프로그램이 하나의 파일, 특정 파일에만 너무 종속되어 문제가 발생할 수 있음)
- 데이터의 일치성 X
- 데이터 불일치
- 데이터 무결성의 침해
- 틀린데이터가 입력될 수 있는 업데이트의 문제
- 서로 다른 프로그램이 각자의 종속적인 파일에만 사용할 수 있기 때문 (상호운영 측면에서 비효율적임)
💡 데이터의 종속성
데이터를 사용하는 프로그램의 구조가 데이터구조(파일 구조)의 영향을 받는 것으로, 프로그램의 개발과 유지·보수를 어렵게 할 수 있음
💡 데이터의 무결성(data intergrity)의 침해
저장된 데이터의 내용이 본래 의도했던 데이터의 형식·범위를 준수해야한다는 성질
- 같은 내용의 데이터가 여러 곳에 중복하여 저장되는 것
- 과거 정보 시스템에서는 개별 부서나 응용 프로그램에서 필요로 하는 데이터 파일을 각각 만들어 사용하는 일이 많았음
💡 데이터 불일치
- 중복 저장된 데이터들이 서로 일치하지 않는 것
📌 데이터베이스의 등장
파일 시스템의 단점을 극복하면서도 다수의 사용자들이 정보를 공유할 수 있어야 한다는 요구에 따라 제안됨
💡 데이터베이스의 철학
- 파일 형태로 여기저기에 흩어져 있는 데이터, 정보들을 하나로 모아 관리함
- 모아놓은 데이터들을 관리하고 사용자(응용 프로그램)와 데이터 사이에 인터페이스 역할을 할 수 있는 소프트 웨어를 제공함
초기 | 현재 |
---|
계층형(hierarchical) 데이터베이스 | 관계형(relational) 데이터베이스 |
네트워크형(network) 데이터베이스 | |
📌 데이터베이스
특정 조직의 업무를 수행하는 데 필요한 상호 관련된 데이터들의 모임
💡 데이터베이스의 정의
구분 | 내용 |
---|
통합된 데이터(intergrated data) | 자료의 중복을 배제한 데이터의 모임 |
저장된 데이터(stored data) | 컴퓨터가 접근할 수 있는 저장 매체에 저장된 자료 |
운영 데이터(operational data) | 조직의 고유한 업무를 수행하는 데 존재가치가 확실하고 없어서는 안 될 반드시 필요한 자료 |
공영 데이터(shared data) | 여러 응용 시스템들이 공동으로 소유·유지하는 자료 |
💡 데이터베이스의 특징
- 실시간 접근성
수시적·비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 함
- 계속적인 변화
새로운 데이터의 삽입, 삭제, 갱신으로 항상 최신의 데이터를 유지해야 함
- 동시 공용
여러 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 함
- 내용에 의한 참조
데이터베이스에 있는 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아니라, 사용자가 요구하는 데이터 내용으로 데이터를 찾아야 함
📌 데이터베이스 시스템
데이터베이스를 이용하여 자료를 저장하고 관리하여 정보를 얻어내는 데 필요한 컴퓨터 중심의 시스템
💡 데이터베이스 시스템의 구성
Database > DBMS > 응용프로그램 1~n
📌 DBMS(Data Base Management System)
- 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 데이터베이스를 관리해주는 소프트웨어
- 기존의 파일 시스템이 갖는 데이터의 종속성과 중복성의 문제를 해결하기 위해 제안된 시스템
- 모든 응용 프로그램들이 데이터베이스를 공용할 수 있도록 관리해줌
- 데이터베이스의 구성, 접근 방법, 유지관리에 대한 모든 책임을 짐
💡 sequel기반의 DBMS의 종류
- Amzon Aurora
- PostgreSQL
- MariaDB
- ORACLE
- Microsoft SQLserver
- MySQL
📌 DBMS의 발전배경
💡 기존 파일 처리 방식에서의 데이터 구성
- 처리 업무 하나 하나마다 데이터 파일을 독립적으로 구성함
- 같은 내용의 데이터가 서로 다른 업무의 파일에서 중복 저장되어 관리됨 (데이터의 중복성)
- 응용 프로그램과 데이터 간의 상호 의존 관계에 따른 데이터 종속성을 초래하는 단점이 있음
💡 파일 처리 방식에서의 데이터 구성
- 종속성으로 인한 문제점
응용 프로그램과 데이터 파일이 상호 의존적인 관계에서는 데이터 파일이 보조기억장치에 저장되는 방법이나 저장된 데이터의 접근방법을 변경할 때 응용 프로그램도 같이 변경해야 함
- 중복성으로 인한 문제점
구분 | 내용 |
---|
일관성 | 중복된 데이터 간에 내용이 일치하지 않는 상황이 발생하여 일관성이 없어짐 |
보안성 | 중복되어 있는 모든 데이터에 동등한 보안수준을 유지하기가 어려움 |
경제성 | 저장 공간의 낭비와 동일한 데이터의 반복 작업으로 비용이 증가함 |
무결성 | 제어의 분산으로 데이터의 정확성을 유지할 수 없음 |
💡 데이터베이스 도입에서의 데이터 구성
- 데이터베이스를 이용하는 방식에서는 각 업무 처리에 필요한 자료들의 중복을 최소화하여 한 곳에 모아 구성함
📌 DBMS의 필수 기능
- 정의(definition) : 데이터(Type)과 구조, 데이터가 DB에 저장될 때의 제약조건 등을 명시하는 기능
- 조작(manipulation) : 데이터 검색(요청), 갱신(변경), 삽입, 삭제 등을 처리하기 위해 사용자와 데이터 베이스 수단을 제공하는 기능
- 제어(control) : 데이터베이스를 접근하는 갱신, 삽입, 삭제 작업이 정확하게 수행되어 데이터의 무결성이 유지되도록 제어해야 함,
정당한 사용자가 허가된 데이터만 접근할 수 있도록 보안(security)을 유지하고 권한(authority)을 검사할 수 있도록 해야 함,
여러 사용자가 데이터베이스를 동시에 접근하여 데이터를 처리할 때 처리 결과가 항상 정확성을 유지하도록 병행 제어(concurrency control)를 할 수 있어야 함
💡 DBMS 기능
DDL(정의어) : 데이터베이스 생성 및 제거 : CREATE, ALTER, DROP
DML(조작어) : 데이터베이스 검색 및 사용 : SELECT, INSERT, DELETE, UPDATE
DCL(제어어) : 데이터베이스 관리 및 제어 : COMMIT, ROLLBACK, GRANT, REVOKE
📌 데이터베이스의 트랜잭션(transaction)
데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위
- 데이터베이스의 상태를 변경시킨다는 이야기는 SELECT, UPDATE, INSERT, DELETE와 같은 행동을 뜻함
- 그 하나의 트랜잭션은 Commit(완료)되거나 Rollback(철회)될 수 있음
💡 트랜잭션의 특징 (ACID)
안전하게 수행된다는 것을 보장하기 위한 성질
원자성(Atomicity) > 회복
일관성(Consistency) > 동시성 제어 > 무결성 제약조건
격리성·고립성(Isolation) > 동시성 제어
영속성·지속성(Durability) > 회복
💡 원자성(Atomicity)
- 트랜잭션의 연산은 데이터베이스에 모두 반영되던지, 아니면 전혀 반영되지 않아야 함
- 트랜잭션 내의 모든 명령은 반드시 완벽하게 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 함
💡 일관성(Consistency)
- 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환함
💡 고립성(Isolation)
- 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없음
💡 영속성(Durability)
- 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 함
💡 NoSQL(BASE)
Basically Available : 기본적이고 Available하고
Soft-state : 사용자가 관리(refresh, modify)하지 않으면 Data가 expire될 수도 있으며
Eventually consistency : 지금 당장은 아니지만 언젠가는 Data가 일관성을 가진다.
📌 NoSQL의 개념
데이터를 저장하는 방법에는 여러가지가 있으며 NoSQL은 SQL만 사용하여 저장하지 않는다는 의미를 담고 있음 (즉, SQL로도 저장할 수 있지만 다양한 방법으로 저장을 지원한다는 의미이며, NoSQL은 일반적으로 API를 호출하여 저장을 한다)
- 최적화된 공간 : 단순 검색 및 추가 작업을 위한 최적화된 키 값 저장공간
- 분산 저장 : 트래픽 증가에 따른 비용에 효율적인 Scale-out 지원
- Schemaless : RDBMS와 같은 스키마 구조를 가지고 있지 않기 때문에 개발 진척에 따른 스키마 변화에 Flexible함
💡 NoSQL의 종류
- MongoDB
- membase
- riak
- couchDB
- Redis
- Cassandra
📌 논리데이터베이스 설계 / 데이터베이스 설계
사용자의 요구를 분석하여 그것들을 컴퓨터에 저장할 수 있는 데이터베이스 구조에 맞게 변형한 후 특정 DBMS로 데이터베이스를 구현하여 일반 사용자들이 사용하게 하는 것
💡 설계 시 고려사항
- 무결성
삽입, 삭제, 갱신 등의 연산 후에도 데이터베이스에 저장된 데이터가 정해진 제약 조건을 항상 만족해야 함
- 일관성
데이터베이스에 저장된 데이터가 정해진 제약 조건을 항상 만족해야 함
- 회복
시스템에 장애가 발생했을 때 장애 발생 직전의 상태로 복구할 수 있어야 함
- 보안
불법적인 데이터의 노출 또는 변경이나 손실로부터 보호할 수 있어야 함
- 효율성
응답시간의 단축, 시스템의 생산성, 저장 공간의 최적화 등이 가능해야 함
- 데이터베이스의 확장
데이터베이스 운영에 영향을 주지 않으면서 지속적으로 데이터를 추가할 수 있어야 함
💡 데이터베이스 설계 과정
- 요구조건 분석
- 요구조건 명세
- 개념적 설계(E-R 모델)
- 개념적 스키마(E-R 도형)
- 논리적 설계 (DBMS의 특성 고려 / 관계 DBMS에서 E-R도형을 릴레이션들로 사상(mapping))
-- ⬆️ DBMS 독립적 / ⬇️DBMS 의존적 --
- 논리적 스키마(관계 데이터베이스 스키마)
- 정규화
- 정규화된 릴레이션들
- 물리적 설계
- 물리적 스키마
- 데이터베이스 구현 (DDL로 데이터베이스 생성)
<간단 정리>
- 요구조건 분석
- 개논물 설계 (개념, 논리, 물리))
- 데이터베이스 구현
💡 요구조건 분석
- 데이터베이스를 사용할 사람들로부터 필요한 용도를 파악하는 것
- 데이터베이스 사용자에 따른 수행업무와 필요한 데이터의 종류, 용도, 처리형태, 흐름, 제약 조건 등을 수집함
- 수집괸 정보를 바탕으로 요구조건 명세를 작성함
💡 개념적 설계 (정보 모델링, 개념화)
- 정보의 구조를 얻기 위하여 현실 세계의 무한성과 계속성을 이해하고 다른 사람과 통신하기 위해 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정
- 개념적 설계 단계에서는 개념 스키마(schema) 모델링과 트랜잭션 모델링을 병행 수행함
- 현실 세계에 존재하는 개체를 인간이 이해할 수 있는 정보 구조로 표현함 (=정보 모델)
- 요구분석 단계에서 나온 결과인 요구조건 명세를 DBMS에 독립적인 E-R다이어그램으로 작성함
- DBMS에 독립적인 개념 스키마를 설계함
💡 논리적 설계 (데이터 모델링) = 효율적인 DB화
- 현실 세계에서 발생하는 자료를 컴퓨터가 이해하고 처리할 수 있는 물리적 저장장치에 저장할 수 있도록 변환하기 위해 특정 DBMS가 지원하는 논리적 자료 구조로 변환(mapping)시키는 과정
- 개념 세계의 데이터를 필드로 기술된 데이터 타입과 이 데이터 타입들 간의 관계로 표현되는 논리적 구조의 데이터로 모델화함
- 개념 설계가 개념 스키마를 설계하는 단계라면 논리적 설계에서는 개념 스키마를 평가 및 정제하고 DBMS에 따라 서로 다른 논리적 스키마를 설계하는 단계임
- 관계형 데이터베이스라면 테이블을 설계하는 단계임
💡 물리적 설계
- 논리적 설계 단계에서 논리적 구조로 표현된 데이터를 디스크 등의 물리적 저장장치에 저장할 수 있는 물리적 구조의 데이터로 변환하는 과정
- 물리적 설계 단계에서는 다양한 데이터베이스 응용에 대해 처리 성능을 얻기 위해 데이터베이스 파일의 저장 구조 및 인덱스 경로를 결정함
- 저장 레코드의 형식, 순서, 접근 경로, 조회가 집중되는 레코드와 같은 정보를 사용하여 데이터가 컴퓨터에 저장되는 방법을 묘사함
💡 데이터베이스 구현
- 논리적 설계 단계와 물리적 설계 단계에서 도출된 데이터베이스 스키마를 파일로 생성하는 과정
- 사용하려는 특정 DBMS의 DDL을 이용하여 데이터베이스 스키마를 기술한 후 컴파일하여 빈 데이터베이스 파일을 생성함
- 생성된 빈 데이터베이스 파일에 데이터를 입력함
- 응용 프로그램을 위한 트랜잭션을 작성함
- 데이터베이스 접근을 위한 응용 프로그램을 작성함
📌 DBMS 정의 (영어ver)
간혹가다 영어로 출제되는 경향이 있다는 교수님의 말씀에 따라 영어 버전도 적어보았다.
- A collection of storage and retrieval programs used to manage the database.
- It can organize, process, and present selected data elements from the database in response to queries from users.
📌 데이터베이스 문제 풀이
Q. 데이터베이스의 등장 이유로 보기 어려운 것은?
- 여러 사용자가 데이터를 공유해야 할 필요가 생겼다.
- 데이터의 수시적인 구조 변경에 대해 응용 프로그램을 매번 수정하는 번거로움을 줄여보고 싶었다.
- 데이터의 가용성 증가를 위해 중복을 허용하고 싶었다.
- 물리적인 주소가 아닌 데이터 값에 의한 검색을 수행하고 싶었다.
Q. 데이터베이스 구성의 장점이 아닌 것은?
- 데이터 중복 최소화
- 여러 사용자에 의한 데이터 공유
- 데이터 간의 종속성 유지
- 데이터 내용의 일관성 유지
Q. 데이터베이스 관리시스템(DBMS)의 주요 필수 기능과 거리가 먼 것은?
- 데이터베이스 구조를 정의할 수 있는 정의 기능
- 데이터 사용자의 통제 및 보안 기능
- 데이터베이스 내용의 정확성과 안정성을 유지할 수 있는 제어 기능
- 데이터 조작어로 데이터베이스를 조작할 수 있는 조작 기능
(주요 필수 기능 : 정의, 조작, 제어 암기)
👀 회고
개인적으로 실습에 들어가기 전에
- 내가 왜 이 언어를 배워야하는지
- 이 언어 또는 프로그램이 왜 생기게 되었는지
- 이 언어는 어떤 개발용도에 적합한지
이와 같이 Why? 가 중요한 나였다. 이 항목 말고도 많지만, 이런 유사한 부분들이 머리에서 충족되지 않으면 내가 이걸 왜 배워야하는지, 왜 해야하는지 무의식에 잠기게 된다. 그것을 방지하면서도 단순하진 않지만, 단순히 개발자가 되고 싶다는 생각만으로 다가가기엔 상당히 전문적인 분야이기에 더욱 기초부터 탄탄하게 다져야한다고 생각하는 편이다.
물론 이 속도로 언제 실습하고 언제 활용하냐 라고 물을 수 있지만, 나만의 속도가 있다고 생각한다. (적어도 아직까지는 그렇게 생각한다) 그렇다고 내가 게으르게 쉬는 시간을 많이 갖는 것도 아니고 하루의 14시간 정도를 개발공부에 집중을 하고 있는데 남들보다 늦게 이해할지언정 도태되진 않으리라 생각한다. 교만하고 오만하고 싶진 않다. 그저 많이 알고 싶고 모르지 않고 싶다. 내가 직업으로 선택했다면 남들이 하찮게 보지 않을 만큼 미친듯이 열정을 담아 임하고 싶다. 언젠가 내 노력이 빛을 보길 바란다.
웅장한 내 몇마디와 달리 오늘 2문제 틀렸다. 😆 그래도 틀리면 다음에 틀릴 확률은 50% 떨어지니까 그걸로 만족해보려 한다. 다음번에는 암기해야할 부분만 따로 정리해보는 것도 좋을 것 같다는 생각이 들었다.