데브코스 TIL - CS 파트3
1. 데이터베이스
여러 사용자와 응용 시스템들이 사용 목적은 다르지만, 공통의 데이터를 서로 공유하여 사용할 수 있도록 통합하여 저장/관리하는 모임
✅ 데이터베이스 성질
- 통합 데이터 (연관성이 있는 데이터를 모음, 중복 최소화)
- 저장 데이터 (컴퓨터로 접근 가능한 매체에 기록, 영구적/반영구적)
- 운영 데이터 (존재 목적이나 기능을 수행하는데 필수인 데이터)
- 공용 데이터 (여러 사용자와 여러 응용 시스템으로부터 공유 접근 가능)
✅ 데이터베이스 특징
- 실시간 접근성 (real-time accessibility) - 빠른 데이터 처리
- 동시 공유 (concurrent sharing)
- 지속적인 변화 (continuous evolution)
- 내용에 의한 참조 (content reference)
✅ 데이터베이스 구성요소
개체(entity), 속성(attribute), 개체 사이의 관계(relation)
✅ 데이터베이스 장점
- 데이터 중복 최소화
- 데이터 무결성 (정확한 정보)
- 데이터 일관성
- 데이터 독립성 (물리적: DB 이중화했을 때, 논리적: DB 사이의 관계)
- 데이터 표준화
- 데이터 보안 유지
✅ 관계형 데이터베이스 (relational DB)
데이터가 하나 이상의 열과 행의 테이블(또는 ‘관계’)에 저장되어 서로 다른 데이터 구조가 어떻게 관련되어 있는지 쉽게 파악하고 이해할 수 있도록 사전 정의된 관계로 데이터를 구성하는 정보 모음
💡 구성
- 릴레이션 (Relation): 데이터들을 표(Table)의 형태로 표현한 것
- 속성 (Attributes): 행 (칼럼)
- 튜플 (Tuple): 열 (로우)
- 값 (value): 속성에 대한 값
- 차수 (Degree): 속성의 개수
- 카디널리티 (Cardinality): 튜플의 개수
💡 키 (Keys)
한 튜플을 다른 튜플과 구별하는 하나 이상의 속성의 집합
#키의 무결성 제약
- 참조 무결성 - 참조할 수 없는 외래키(외부키) 값을 가질 수 없음
- 개체 무결성 - 기본키에 속사는 속성은 비어있을 수 없음
✅ 관계형 대수 연산 (Relational Algebra)
관계형 데이터베이스에서 릴레이션을 대상으로 하여 릴레이션을 만들어내는 수학적 연산의 집합
관계형 대수 연산을 사용하면 데이터베이스 내의 데이터 조작 가능 (합집합, 교집합, 차집합, 곱집합, 프로젝션, 셀렉션, 조인)
✅ SQL
데이터베이스에서 데이터를 추출하고 조작하는 데에 사용하는 데이터 처리 언어
💡 명령어
- 테이블에 데이터 삽입
INSERT
- 데이터 삭제
DELETE
- 데이터 갱신
UPDATE
- 데이터 검색
SELECT
💡 분류
- DML (data manipulation language) - 데이터 실제 조작
- DDL (data definition language) - 테이블 스키마 지정/데이터 속성 지정
- DCL (data control language) - 데이터 제어
- TCL (transaction control language) - 데이터를 트랜잭션 단위로 관리
💡 트랜잭션 (transaction)
데이터베이스 관리 시스템(DBMS)에서 상호작용의 단위
데이터 무결성을 위해 사용
- 원자성 (atomicity) - 하나의 트랜잭션을 모두 실행되거나 전혀 실행되지 않아야 함
- 일관성 (consistency) - 트랜잭션 실행 전후에 데이터베이스 상태가 일관되어야 함
- 독립성 (isolation) - 여러 트랜잭션이 병렬로 실행되는 경우, 서로 간섭하지 않도록 격리되어야 함
- 영구성 (durability) - 완료된 트랜잭션의 실행 결과는 데이터베이스에 영구 보존되어야 함
✅ ORM (object-relational mapper)
관계형 데이터베이스의 테이블과 객체지향 프로그램의 클래스를 연결
💡 ORM 장점
- SQL 문장이 아닌 클래스의 메서드를 이용하여 데이터베이스 접근/조작 가능
- 코드의 재사용성, 유지보수 가능성, 리팩토링 용이성 향상
- DBMS에 대한 종속성 감소
💡 ORM 한계
- 대량의 데이터를 처리할 때 성능 문제가 발생할 수 있음
- 복잡성과 제약사항
✅ One-to-One relationship (일대일 관계)
두 테이블의 정보 간의 링크이며, 참조하는 테이블의 row와 참조되는 테이블의 row가 단 하나의 관계를 가지는 것을 의미한다.
비즈니스를 운영하는 데 필요한 데이터를 얻을 수 있도록 중요한 관계를 나타내는 데 자주 사용된다.
✅ Many-to-Many relationship (다대다 관계)
관계를 가진 양쪽 테이블 모두에서 1:N 관계를 가지는 것을 의미한다.
✅ 비정형 데이터 (Unstructured Data)
설계된 모델이나 구조로 구성되지 않은 데이터를 의미하며, 질적인 것으로 분류된다. 인간 또는 기계에 의해 생성된 데이터이다.
💡 비정형 데이터 예
- 리치 미디어: 오디오 또는 비디오 데이터, 보안 감시 데이터, 지리 공간 데이터, 날씨 데이터
- 사물 인터넷(IoT) 데이터: 장치의 티커 또는 센서 데이터
- 텍스트 데이터: 이메일, 문자 메세지, 인보이스
- 과학적 데이터: 기계가 생성한 우주 탐사 또는 지진 보고서
- 의료 데이터: MRI, X선 및 CI 스캔 등의 의료 데이터와 영상 정보
💡 비정형 데이터 처리가 어려운 이유
- 방대한 양: 지속적으로 많은 데이터가 계속 생성되고 있기 때문
- 다양성: 다양한 데이터 유형으로 구성되어 있어 저장과 참조가 어려움
- 품질: 일관성이 보장되지 않아 오류와 불일치가 항상 발생
- 보안 및 개인정보 보호: 중요하거나 민감한 데이터가 포함되어있을 수 있고 보안성을 유지하는 것이 어려움
- 통합: 사전에 정의된 데이터 모델이 없기 때문에 정형 데이터와 통합하는 것이 복잡함
✅ 벡터 데이터베이스 (Vector DB)
데이터를 벡터 형태로 변환하여 저장하는 특별한 데이터베이스
💡벡터
데이터 객체를 수치화하여 표현한 것
💡 벡터 임베딩 (Vector Embedding)
- 주제, 단어, 이미지 또는 기타 데이터를 숫자로 표현한 것
- LLM 또는 AI 모델에 의하여 생성
💡벡터데이터베이스 활용
- 유사도 기반 추천 시스템
- AI/ML 응용 (의미 정보 검색 및 장기 기억을 통해 AI 기능을 향상)
- NLP (Natural Language Processing; 자연어처리) 응용
- 이미지 인식 및 검색 응용
✅ LSH (locality-sensitive hashing)
유사도가 높은 입력값들이 “높은 확률”로 같은 버킷에 해시되도록하여 낮은 시간 복잡도로 유사한 벡터를 찾을 수 있도록 하는 기법 (높은 원소들을 같은 버킷에 넣는 해쉬 알고리즘)
✅ ANNOY (Approximate Nearest Neighbors Oh Yeah)
최근접 이웃의 정확도를 포기하고, 시간 비용을 크게 절감하는 근사 검색 기법
💡 ANNOY 과정
- 벡터 공간에서 임의의 두 점을 선택하고, 이 두 점사이의 초평면으로 벡터 공간 분할
- 분할된 공간에 포함된 점들의 개수를 노드로 하는 이진 트리를 생성
- 각 노드에 포함된 점들의 개수가 K개 미만이 될 때까지 위 과정을 반복하여 최종 검색 트리 완성
- 쿼리 입력을 검색 트리에서 검색한 뒤 해당 부분 공간에서 최근 이웃을 검색
✅ No SQL
Not Only SQL
RDBMS와는 다른 방식으로 데이터를 저장하고 색인
💡 No SQL 장점
- 유연성 (자유로운 형식으로 데이터 저장)
- 확장성 (일관성의 양보를 통한 확장 가능성 향상)
- 고성능 (느슨한 제약에 의하여 높은 입출력 성능)
💡 No SQL 종류
- Key-Value (Memcached, redis, amazon dynamoDB)
- Document (MongoDB, couchDB)
- Column-Family
- Graph
💡 No SQL 활용
- ACID 트랜잭션의 지원이 필수가 아닌 시스템에서는 응용이 확대될 예정 (페이스북, 트위터 등)
- 분산 데이터베이스로 고성능 서비스를 구축하는데 적합
- 빅데이터 및 인공지능 응용의 확대에 따라 새로운 형태의 데이터베이스 관리 기법에 대한 기대
2. 컴퓨터 네트워크
✅ 아날로그 통신과 디지털 통신
💡 아날로그 통신
- 자연상태에서 나타나는 연속적인 값을 정보로 표현
- 전화, FM 라디오
💡 디지털 통신
- 0과 1의 조합으로 부호화된 신호를 정보로 표현
- 휴대폰, IPTV
💡 디지털 통신의 장점
- 정보 손실이 적음 (손실에 강함)
- 매체를 다중화하여 대역폭 활용을 높일 수 있음
- 정보의 암호화가 용이
✅ 데이터 전송 방식 분류
💡 동기식 전송
- 타이밍 제어 신호와 데이터 신호를 동기화
- 고속 통신에 유리
💡 비동기식 전송
- 하나의 통신선을 이용하여 제어 비트와 데이터 비트 전송
- 하드웨어 비용이 낮은편
✅ 데이터 전송 방식 분류 - 전송 방향
💡 단방향 전송
- 한 방향으로만 데이터 전송이 가능
- 방송, 키보드 입력, 화면 출력
💡 반이중 전송
- 양방향 전송이 가능하지만, 동시에는 전송할 수 없음
- 팩스, 무전기
💡 전이중 전송
- 동시에 양방향 데이터 전송 가능
- 전화, 데이터 네트워크
✅ 데이터 전송 방식 분류 - 회선 접속 방식
💡 점대점 방식
- 서로 다른 두 장치가 전용 회선을 이용하여 연결
- 블루투스
💡 다지점 방식
- 하나의 통신 회선에 여러 개의 장치가 연결
- 이더넷(Ethernet)
✅ 데이터 전송 방식 분류 - 망 구성 범위
💡 LAN (근거리 통신망)
집, 사무실, PC 방 등 주로 단일한 네트워크로 구성
💡 MAN (도시 지역 통신망)
여러 LAN을 연결한 도시 하나 정도의 네트워크 단위
💡 WAN (광역 통신망)
근거리 통신망을 벗어나는 경우
LAN이 모여 이루어진 경우
✅ OSI 7계층 모델
표존 프로토콜을 사용하여 다양한 시스템이 통신할 수 있도록 국제표준화기구에서 제정한 개념 모델
💡 Physical Layer
실제 장치들을 연결하기 위해 필요한 전기적, 물리적 세부 사항들을 정의하는 계층
통신 채널을 통해 전송되는 사용자 장치의 디지털 데이터를 신호들로 변환
- OSI 계층을 타고 전달된 데이터를 전기적인 신호(Bit)로 변환시켜 통신을 수행
- 매체: radio, utp, coaxial, fibre optic
- 리피터 (repeater): 동일한 LAN 상에서 거리를 연장하거나 접속 시스템의 수를 증가시키기 위해 사용, 원래 신호가 훼손되는 것을 막기 위해도 사용
💡 Data Link Layer
데이터 링크 계층은 링크의 설정과 유지 및 종료를 담당하며 오류제어, 흐름제어, 회선제어 기능을 수행하는 계층
- 시스템 간에 오류 없는 데이터 전송을 위해 상위 계층에서 받은 패킷을 프레임으로 변환하여 물리계층으로 전송
- 스위치: 연결 장치간 스위칭 역할
- 브리지: 복수의 LAN을 연결하기 위함
💡 Network Layer
네트워크 계층은 다양한 길이의 패킷을 네트워크들을 통해 전달하고, 그 과정에서 전송 계층이 요구하는 서비스 품질(QoS)을 위한 수단을 제공하는 계층
- 패킷을 네트워크를 통해 발신지에서 목적지까지 전달하기 위해, 라우팅 프로토콜을 사용하여 최적의 경로 선택
- 라우터
✅ 오류 검출
💡 패리티 비트 (Parity Bit)
가장 간단한 형태의 오류 검출 코드
전송하고자 하는 단위 안에서 한개의 비트까지의 오류를 검출할 수 있음
이미지 출처: https://m.blog.naver.com/ansdbtls4067/220886661657
💡 체크섬 (Checksum)
송신 측에서 전송한 모든 데이터를 16비트 워드 단위로 구분하고, 1의 보수를 취함
그리고 그 합에 대한 결과를 전송하면 수신측에서 같은 합을 해보아서 오류를 검출하는 방식
한 비트의 오류 검출뿐만 아니라 수정도 가능
이미지 출처: http://www.ktword.co.kr/test/view/view.php?no=1477
✅ 프로토콜
서로 다른 컴퓨터 사이에서 데이터를 주고 받기 위한 약속
- 서로 다른 컴퓨터들은 이용하는 하드웨어, 데이터 표현이 다를 수가 있으므로 표준 프로토콜을 정하고, 대화할 때 표준 프로토콜의 규약을 따름
- 주소 지정, 데이터 흐름 제어, 연결 제어, 캡슐화, 다중화 등의 방식을 규정
✅ 인터넷 주소 체계
IP 주소는 네 바이트로 이루어져 있고, 각 바이트에 표현된 수 사이에 점을 찍어 구분
- 클래스 A 주소는 NetId를 1바이트, HostId를 3바이트 이용
- 클래스 B 주소는 NetId를 2바이트, HostId를 2바이트 이용
- 클래스 C 주소는 NetId를 3바이트, HostId를 1바이트 이용
클래스 | 첫 자리의 범위 | 기본 서브넷 마스크 |
---|---|---|
A | 1-126 | 255.0.0.0 |
B | 128-191 | 255.255.0.0 |
C | 192-223 | 255.255.255.0 |
D | 244-239 | |
E | 240-254 |
✅ CIDR (Classless Inter-Domain Routing)
주소지정 방법의 제한을 완화하면서도 효과적인 도메인간 라우팅이 가능하도록 하기 위하여 고안된 기법
- 네 부분으로 구성된 십진수 IP 주소, 슬래시 문자, 0이상 32이하의 정수로 구성
3. 소프트웨어 공학
소프트웨어를 제품화함에 있어서 적용할 수 있는 품질 보증 및 개선 활동을 규정하는 프로세스
✅ 소프트웨어 품질
소프트웨어의 결함은 비즈니스에 큰 타격을 주거나, 인명 손실이나 재해 등 큰 위험을 야기할 수 있음
✅ 소프트웨어 품질 보증의 어려움
- 검증을 위한 프로토타입의 제작과 양산 단계를 구별하기 어려움 (소프트웨어는 개발이 곧 생산활동)
- 코드 변경과 개선이 끊임없이 일어남
- 통제된 공정을 적용하기 어려움 (많은 대발자들이 코드에 접근, 잦은 릴리스)
✅ 소프트웨어 개발 프로세스 성숙 모델
개발/서비스/배포 등을 하는 모델이며, 소프트웨어 개발 조직의 역량을 평가하는 모델
- CMMI, SPICE
✅ 소프트웨어 개발 및 유지관리 프로세스
💡 개발 방법론
구조적, 정보공학적, 객체지향적, 컴포넌트 위주
💡 소스코드 형상관리
변경관리 대상인 형상항목을 식별하고 변경을 통제/기록
💡 산출물 관리
프로세스에 따른 필수 산출물의 제작과 검수, 유지관리
💡 요구사항 관리
고객의 요구사항을 이해(매우 중요)하고 목표와 제약사항을 확립, 납품 프로세스를 관리
💡 테스트 및 검증
단위, 통합, 인수 테스트 등의 과정과 결과를 정의, 품질 보증을 위한 조직을 구성
✅ 소프트웨어 개발의 중요성
도구의 선택과 절차의 고도화의 중요성 보다는 설계/개발/테스트/배포/운영에 참여하는 조직원들의 마음가짐이 더 중요
- 규정된 절차와 지침을 준수
- 점진적 개선을 위한 활동에 적극 참여
- 제품의 신뢰성과 경제성을 확보하려는 노력
✅ 폭포수 모델 (Waterfall)
requirements
→ Design
→ Implementation
→ Verification
→ Maintenance
소프트웨어 시스템 개발에서 이루어지는 활동을 단계별로 서술하고 있지만,
이전 단계로 돌아가는 loopback
을 사용하고 있음
지속적으로 소프트웨어 시스템을 개선
✅ 애자일 모델
일정한 주기를 가지고 빠르게 제품을 출시하여 고객의 요구사항, 변화된 환경에 맞게 요구를 더 하고 수정해나가는 탄력적인 방법론
💡 스크럼
팀이 애자일 방식을 최대한 활용할 수 있게 하는 프로세스이며 프로젝트 관리의 가치와 목표로 ‘유연성’과 ‘효율성’을 선택
장점:
- 반복 주기마다 생산되는 실행 가능한 제품을 통해 사용자와 충분히 의견 교환 가능
- 데일리 미팅을 통해 팀원들 사이에 빠른 협조와 조율 가능
- 스프린트 단위의 제품 개발을 통한 업무 집중 환경 조성
- 프로젝트 진행 현황을 모니터링하고 신속하게 목표와 결과 추정, 변화 시도가 가능
단점:
- 스프린트가 끝날 때마다 실행 가능 또는 테스트 가능한 제품을 만들어야 함 (패키징 작업해서 릴리즈해야 함)
- 데일리 스크럼 미팅에 매우 짧은 시간 제한이 설정되어 있음
- 프로세스 품질 평가가 어려움
✅ 코드 리뷰
작성된 코드를 다른 개발자가 정해진 방법을 통하여 검토하는 일
소프트웨어의 품질을 향상, 보장하기 위한 중요한 활동 (버그 방지)
- 상급자 검토, 집단검토,코드 규칙 검사, 실패 검출, 워크 스루
✅ 좋은 코드?
컴퓨터에게 좋은 코드와 사람에게 좋은 코드는 다름
코드는 기능적 역할도 중요하지만 외관도 중요하기 때문에 클린 코드를 작성하는 습관이
- 코드 규약 준수 여부
- 올바르고 명확한 문법의 구사 여부
- 생각의 흐름을 명확하게 표현하는 코드
참고 사이트