조인의 원리를 기반으로 조인 작업이 이루어집니다. 조인 알고리즘으로 중첩 루프 조인, 정렬 병합 조인, 해시 조인이 있습니다.

1. 중첩 루프 조인(NLJ, Nested Loop Join)

중첩 for 문과 같은 원리로 외부 테이블의 각 행에 대해 내부 테이블을 전체 스캔하며 조인 조건을 만족하는 행을 찾는 방법입니다. 데이터의 양이 적을 때는 효율적이지만 많을 경우엔 성능이 떨어집니다.

2. 정렬 병합 조인(Sort-Merge Join)

두 테이블을 조인할 키를 기준으로 정렬하고 조인 작업을 수행하는 방법입니다.

3. 해시 조인(Hash Join)

한 테이블을 해시 테이블로 만들고 다른 테이블을 해시 테이블에 조인하는 방법입니다.

해시 조인은 Build 단계와 Probe 단계로 진행됩니다.

 

1. Build 단계

한 테이블(일반적으로 작은 테이블)을 해시 테이블로 만드는 단계입니다. 조인에 사용되는 필드(attribute)가 해시 테이블의 키로 사용됩니다.

 

2. Probe 단계

다른 테이블(큰 쪽 테이블)을 읽어 해시 테이블을 탐색하면서 조인하는 과정입니다. 각 테이블을 한 번씩만 읽게 되어 중첩 루프 조인보다 보통은 성능이 좋습니다.

 

728x90

1. 조인이란?

두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 연산입니다. 퍼즐 조각을 맞추듯이, 공통된 열을 기준으로 테이블을 합쳐서 원하는 정보를 얻을 수 있게 해줍니다.

관계형 데이터베이스인 MySQL에선 JOIN이란 쿼리로, 비관계형 데이터베이스인 MongoDB에선 lookup이라는 쿼리로 이를 처리할 수 있습니다.

 

2. 조인의 종류

join은 크게 inner join, outer join으로 나뉩니다. outer join에는 left (outer) join, right (outer) join, full (outer) join이 있습니다.

2-1. INNER JOIN

양쪽 테이블에서 모두 일치하는 값이 있는 행만 반환합니다.

 

<STUDENT>

ID NAME DEPT
1 홍길동 컴퓨터공학과
2 이순신 산업경영공학과
3 임꺽정 수학교육과

 

<ENROLLMENT>

STUDENT_ID COURSE_CODE GRADE
2 101 A+
3 102 B-
4 103 A0

 

SELECT STUDENT.NAME, ENROLLMENT.COURSE_CODE, ENROLLMENT.GRADE
FROM STUDENT
	INNER JOIN ENROLLMENT
    ON STUDENT.ID = ENROLLMENT.STUDENT_ID
STUDENT.NAME ENROLLMENT.COURSE_CODE ENROLLMENT.GRADE
이순신 101 A+
임꺽정 102 B-

 

2-2. LEFT (OUTER) JOIN

왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환합니다.

SELECT S.NAME, E.COURSE_CODE, E.GRADE
FROM STUDENT AS S
	LEFT JOIN ENROLLMENT AS E
    ON S.ID=E.STUDENT.ID
S.NAME E.COURSE_CODE E.GRADE
홍길동 NULL NULL
이순신 101 A+
임꺽정 102 B-

 

모든 학생 정보와 수강 신청을 했다면 과목코드, 점수를 보여줍니다. 수강신청을 하지 않은 학생의 경우 과목 코드와 점수는 NULL값으로 표시됩니다.

 

2-3. RIGHT (OUTER) JOIN

오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 행을 반환합니다.

SELECT S.NAME, E.COURSE_CODE, E.GRADE
FROM STUDENT AS S
	RIGHT JOIN ENROLLMENT AS E
    ON S.ID=E.STUDENT.ID
S.NAME E.COURSE_CODE E.GRADE
이순신 101 A+
임꺽정 102 B-
NULL 103 A0

 

학생 정보가 없는 수강 신청의 경우 이름은 NULL 값으로 표시됩니다. 

 

2-3.  FULL (OUTER) JOIN

양쪽 테이블의 모든 행을 반환하고 일치하는 값이 없으면 NULL값으로 채웁니다.

SELECT S.NAME, E.COURSE_CODE, E.GRADE
FROM STUDENT AS S
	FULL JOIN ENROLLMENT AS E
    ON S.ID=E.STUDENT.ID
S.NAME E.COURSE_CODE E.GRADE
홍길동 NULL NULL
이순신 101 A+
임꺽정 102 B-
NULL 103 A0

 

728x90

데이터베이스는 데이터를 저장하고 관리하는 방식에 따라 크게 관계형 데이터베이스비관계형 데이터베이스로 나눌 수 있습니다.

 

1. 관계형 데이터베이스 (Relational Database Managment System, RDBMS)

관계형 데이터베이스는 데이터를 테이블 형식으로 저장하고, 테이블 간의 관계를 이용하여 데이터를 관리합니다.

SQL(Structured Query Language)을 사용하여 데이터를 조작합니다.

  • 종류
    MySQL, PostgreSQL, Oracle, SQL Server, MSSQL 등

MySQL

오픈 소스이며, 웹 기반 애플리케이션에 매우 인기가 높습니다. 간단하면서도 효율적인 처리를 제공합니다.

 

Microsoft SQL Server

엔터프라이즈 수준의 관리 기능과 보안 기능을 제공합니다.

 

Oracle Database

기업 환경에서 널리 사용되는 강력한 데이터베이스 시스템. 고가용성, 보안, 확장성이 탁월합니다.

 

PostgreSQL

오픈 소스이고, 표준 SQL을 지원하는 동시에 객체 관계형 기능도 제공합니다. 확장성이 뛰어납니다.

2. 비관계형 데이터베이스 (NoSQL, Not only SQL)

NoSQL(Not only SQL)이라는 슬로건에서 생겨난 데이터베이스입니다. SQL을 사용하지 않는 데이터베이스를 말합니다.

  • 종류
    MongoDB, redis

MongoDB

문서 지향적(Document-Oriented) 데이터베이스로, JSON과 유사한 형태로 데이터를 저장합니다. 스키마가 유연하여 개발이 빠르고 간편합니다.

 

Redis

키-값 저장소로, 데이터를 메모리에 저장하여 빠른 접근을 가능하게 합니다. 캐싱, 메시징 큐, 실시간 애플리케이션 등에 사용됩니다.

728x90

1. 트랜잭션(Transaction)이란?

트랜잭션DBMS에서 데이터의 일관성을 보장하기 위해 사용되는 논리적인 작업의 단위입니다. 쉽게 말해, 데이터베이스에서 하나의 작업을 수행하기 위한 여러 동작들을 하나로 묶은 것을 의미합니다.

 

예를 들어, 은행에서 돈을 이체한다고 하면

1. A계좌에서 돈을 출금한다.

2. 출금한 돈을 B계좌에 입금한다.

이 두 가지 동작은 따로따로 실행되면 안됩니다. 1번만 실행되고 2번이 실행되면 돈을 다 잃게 되기 때문입니다. 트랜잭션은 이 두 동작을 하나로 묶어서 둘 다 실행되거나, 둘 다 실행되지 않도록 보장합니다.

 

2. 트랜잭션의 특징(ACID)

트랜잭션은 ACID(원자성, 일관성, 독립성, 지속성)라는 특징을 갖고 있습니다.

 

2-1. 원자성 Atomicity

'All or Nothing'

 

트랜잭션은 'All or Nothing'이라는 원칙을 따릅니다. 즉, 트랜잭션의 모든 연산이 수행되거나 전혀 수행되지 않아야 합니다.

앞선 예시처럼 은행에서 계좌 이체 트랜잭션이 수행되는 경우, 출금과 입금이 모두 성공하거나 모두 실패해야 합니다.

 

commit

트랜잭션을 완료하고 변경 사항을 데이터베이스에 영구적으로 반영했다는 명령어입니다. 여러 쿼리(update, insert, delete)가 성공적으로 처리되었다고 확정했다는 뜻입니다.

'커밋이 수행되었다.' = '하나의 트랜잭션이 성공적으로 수행되었다.'

 

https://velog.io/@luvjoyyy/JUST-DO-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-6-COMMIT-ROLLBACK-PK

 

 

rollback

트랜잭션을 취소하고 변경 사항을 이전 상태로 되돌렸다는 명령어입니다. 에러나 여러 이슈 때문에 트랜잭션 전으로 돌려야 하는 상황에서 사용됩니다.

https://velog.io/@luvjoyyy/JUST-DO-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-6-COMMIT-ROLLBACK-PK

 

commit과 rollback으로 데이터의 무결성이 보장됩니다. 또한, 데이터 변경 전에 변경 사항을 쉽게 확인할 수 있고 해당 작업을 그룹화할 수 있습니다.

 

2-2. 일관성 Consistency

일관성허용된 방식으로만 데이터를 변경해야 하는 것을 의미합니다. 트랜잭션이 시작되기 전과 후에 데이터베이스는 항상 일관된 상태여야 합니다. 트랜잭션이 완료된 후에도 데이터베이스는 미리 정의된 규칙, 제약 조건, 무결정 조건을 준수해야 합니다.

계좌 잔액은 항상 0 이상이어야 한다는 규칙이 있다고 가정해봅시다.(마이너스 통장 안됨)

A에게 100만원, B에게 0원이 있다고 할 때, A가 B에게 입금할 수 있는 금액은 100만원이 넘어가선 안됩니다.

 

2-3. 격리성 Isolation

여러 트랜잭션이 동시에 실행되는 경우, 서로에게 영향을 주지 않도록 격리되어야 합니다. 격리성은 트랜잭션 수행 시 서로 끼어들지 못하는 것을 말합니다.

예를 들어, A가 계좌에서 돈을 출금하는 동시에 B가 같은 계좌에 입금하는 경우, 두 트랜잭션은 서로의 작업을 간섭하지 않고 독립적으로 실행되어야 합니다.

여러 개의 격리 수준으로 나뉘어 격리성을 보장합니다.

 

https://velog.io/@yu-jin-song/DB-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EA%B2%A9%EB%A6%AC-%EC%88%98%EC%A4%80Transaction-Isolation-Level

격리 수준에 따라 발생하는 현상으로 팬텀 리드, 반복 가능하지 않은 조회, 더티 리드가 있습니다.

 

1. Phantom Read(팬텀 리드)

한 트랜잭션 내에서 동일한 쿼리를 두 번 실행했을 때, 그 사이에 다른 트랜잭션이 데이터를 삽입하거나 삭제하여 결과 집합이 달라지는 현상입니다.

예)

1. 트랜잭션 A가 잔액 100만원 이상인 계좌 조회(결과: 3) (100 100 100)

2. 트랜잭션 B가 잔액 150만원 이상인 새로운 계좌 생성하고 커밋(데이터 삽입) (100 100 100 150)

3. 트랜잭션 A가 잔액 100만원 이상인 계좌 조회(결과: 4)

 

2. Non-Repeatable Read(반복 가능하지 않은 조회)

동일한 트랜잭션 내에서 같은 데이터(행)를 두 번 이상 조회했는데 그 사이에 다른 트랙잭션이 데이터를 변경하여 읽은 값이 달라지는 현상입니다.

ex)

1. 트랜잭션 T1이 계좌 잔액 100만 원을 읽음(결과: 100만 원)

2. 트랜잭션 T2가 해당 계좌에서 10만 원을 출금하고 커밋

3. 트랜잭션 T1이 다시 계좌 잔액을 읽음(결과: 90만 원)

팬텀 리드와 다른 점은 팬텀 리드는 다른 행이 선택될 수 있다는 것이고 반복 가능하지 않은 조회는 행 값이 달라질 수 있는 것입니다.

 

3. Dirty Read(더티 리드)

한 트랜잭션이 다른 트랜잭션이 아직 커밋하지 않은 데이터를 읽는 현상입니다.

ex)

1. 트랜잭션 T1이 계좌 잔액을 100만 원에서 90만 원으로 변경(아직 커밋되지 않음)

2. 트랜잭션 T2가 해당 계좌 잔액을 조회하면 90만 원으로 읽음

3. 트랜잭션 T1이 변경 상황을 롤백하여 잔액을 다시 100만 원으로 되돌림

4. 트랜잭션 T2는 잘못된 정보(90만 원)를 읽어온 것이 됨

 

트랜잭션 격리 수준에 따라 SERIALIZABLE, REPEATABLE_READ, READ_COMMITTED, READ_UNCOMMITTED로 나눌 수 있습니다.

1. SERIALIZABLE

가장 높은 수준의 격리로 트랜잭션을 순차적으로 진행시키는 것을 말합니다.

- 장점: Dirty Read, Non-Repeatable Read, Phantom Read를 모두 방지합니다.

- 단점: 교착 상태가 일어날 확률도 많고 가장 성능이 떨어지는 격리 수준입니다.

 

2. REPEATABLE_READ

트랜잭션이 시작된 후 읽은 데이터는 다른 트랜잭션이 변경할 수 없습니다. 트랜잭션 중에 같은 데이터를 여러 번 읽어도 항상 같은 값을 얻습니다. 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아주지만 새로운 행을 추가하는 것은 막지 않습니다. 

- 장점: Dirty Read, Non-Repeatable Read는 방지합니다.

- 단점: 새로운 데이터 삽입/삭제로 인해 Phantom Read가 발생할 수 있습니다.

 

3. READ_COMMITTED

트랜잭션이 커밋된 데이터만 읽을 수 있습니다. 다른 트랜잭션이 커밋하지 않은 변경 사항은 보이지 않습니다.

가장 많이 사용되는 격리 수준이며 PostgreSQL, SQL Server, Oracle에서 기본값으로 설정되어 있습니다.

- 장점: 커밋되지 않은 데이터는 읽을 수 없으므로 Dirty Read는 방지합니다.

- 단점: 어떤 트랜잭션이 접근한 행을 다른 트랜잭션이 수정할 수 있습니다. 따라서 트랜잭션이 같은 행을 다시 읽을 때 다른 내용이 반환될 수 있습니다. 따라서, Non-Repeatable Read, Phantom Read가 발생할 수 있습니다.

 

4. READ_UNCOMMITTED

가장 낮은 격리 수준이며 다른 트랜잭션에서 커밋되지 않은 데이터도 읽을 수 있습니다.

- 장점: 가장 빠릅니다.

- 단점: 데이터의 신뢰성이 떨어집니다.

격리 수준 Dirty Read Non-Repeatable Read Phantom Read 성능
SERIALIZABLE 불가능 불가능 불가능 낮음
REPEATABLE_READ 불가능 불가능 가능 중간
READ_COMMITTED 불가능 가능 가능 중간
READ_UNCOMMITTED 가능 가능 가능 높음

 

2-4. 지속성 Durability

트랜잭션이 성공적으로 완료되면, 그 결과는 영구적으로 데이터베이스에 반영되어야 하는 것을 의미합니다. 시스템 장애가 발생하더라도 트랜잭션의 결과는 유지되어야 합니다. 지속성을 보장하기 위해 체크섬, 저널링, 롤백 등의 기능을 사용합니다.

체크섬(Checksum)

: 데이터의 무결성을 확인하기 위한 간단한 방법입니다. 데이터의 내용을 기반으로 생성된 작은 숫자 값(체크섬)을 사용하여 데이터가 손상되거나 변조되지 않았는지 확인합니다.

- 작동방식

1. 데이터가 저장될 때, 데이터의 내용을 기반으로 체크섬 값이 계산되어 함께 저장됩니다.

2. 데이터가 읽힐 때, 다시 체크섬을 계산하여 저장된 체크섬 값과 비교합니다. 두 값이 일치하면 데이터가 무결하다고 판단합니다. 일치하지 않으면 데이터가 손상되었음을 뜻합니다.

저널링(Journaling)

트랜잭션의 변경 사항을 데이터베이스에 반영하기 전에 별도의 저널(로그) 파일에 기록하는 기법으로 시스템 장애 시 데이터베이스를 복구할 수 있게 합니다.

 

3. 무결성 Integrity

무결성데이터의 정확성, 일관성, 유효성을 유지하는 것을 의미합니다. 데이터베이스는 현실 세계를 반영해야 하므로 데이터베이스 내 데이터는 현실 세계의 규칙과 제약 조건을 준수해야 합니다. 이러한 규칙과 제약 조건을 데이터베이스에 적용하는 것을 무결성 제약 조건이라고 합니다.

정확성: 데이터베이스에 저장된 데이터가 현실 세계와 일치해야 합니다. 데이터는 오류나 누락 없이 정확하게 입력되고 유지되어야 합니다.

ex) 상품의 가격 정보가 잘못 입력되면 안됨

일관성: 데이터베이스 내의 데이터는 모순 없이 일관되게 유지되어야 합니다. 같은 정보를 나타내는 데이터는 모든 테이블에서 동일한 값을 가져야 합니다.

유효성: 데이터베이스에 저장된 데이터는 정해진 규칙이나 제약 조건을 만족해야 합니다.

ex) 숫자 형식의 필드에는 숫자값만 입력되어야 하고 필수 입력 필드에는 NULL 값이 허용되지 않아야 함

 

무결성은 개체 무결성, 참조 무결성, 고유 무결성, NULL 무결성 등이 있습니다.

1. 개체 무결성 (Entity Integrity)

: 기본키로 선택된 필드는 빈 값을 허용하지 않습니다.

 

2. 참조 무결성 (Referential Integrity)

: 외래키(foreign key)는 참조하는 테이블의 기본키 값과 일치하거나 NULL값을 가져야 합니다. 참조되는 테이블의 데이터가 없을 수도 있기 때문에 NULL값을 가질 수 있습니다.

 

3. 고유 무결성 (Unique Integrity)

: 특정 컬럼 또는 컬럼 조합에 중복된 값이 없어야 합니다. 기본키는 고유 무결성을 만족해야 합니다. 예를 들어 주민등록번호, 운전면허증 번호, 이메일 주소 등은 테이블 내에서 고유해야 합니다.

 

4. NULL 무결성 (NULL Integrity)

: 특정 컬럼에 대해 NULL 값이 허용되지 않도록 보장하는 것을 의미합니다.

728x90

머신러닝 모델은 크게 분류 모델과 회귀 모델로 나눌 수 있으며, 각 모델 유형에 따라 적합한 평가 지표가 다릅니다.

1. 분류 모델

Confusion Matrix

https://d3s0tskafalll9.cloudfront.net/media/images/E-2-3.max-800x600_mMmzi4T.jpg

 

정확도(Accuracy)

: 전체 예측 중 정답을 맞힌 비율

수식: (TN + TP)/(TN + FP + FN + TP)

- 직관적이고 이해하기 쉬움

- 불균형 데이터셋에서는 신뢰도 낮음

 

정밀도(Precision)

: 양성(긍정)으로 예측한 것 중 실제 양성(긍정)인 비율

수식: TP / (TP + FP)

- Positive 예측 결과가 중요할 때 유용 (ex. 스팸 메일 분류)

 

재현율(Recall)

실제 양성(긍정) 중 모델이 양성(긍정)으로 예측한 비율

수식: TP / (TP + FN)

- Positive 데이터를 놓치면 안될 때 유용 (ex. 암 진단)

 

F1 Score

: 정밀도와 재현율의 조화 평균

2 * (Precision * Recall) / (Precision + Recall)

- 클래스 불균형 데이터셋에서 모델의 성능을 종합적으로 평가하는 데 사용

 

ROC Curve

: 민감도(Sensitivity)와 1-특이도(Specificity)로 그려지는 곡선

민감도(SE)(=Recall) = TP / (TP + FN)

특이도(SP) = TN / TN + FP

1-특이도(Specificity)(=False Positive Rate) = FP / (TN + FP)

 

AUC(Area Under the Curve)

: ROC 곡선 아래 영역의 넓이

- 0에서 1 사이의 값을 가지며, 1에 가까울수록 모델의 성능이 좋다는 것을 의미

 

Log Loss

: 예측 확률 분포와 실제 값의 차이를 측정

수식: - (1/N) * ∑[y * log(p) + (1-y) * log(1-p)] (y: 실제 값, p: 예측 확률)

- 확률 기반 모델의 성능 평가에 유용

 

2. 회귀 모델

평균 제곱 오차(Mean Squared Error, MSE)

: 실제 값과 예측 값의 차이를 제곱한 후 평균으로 계산한 값

MSE = Σ(yᵢ - ŷᵢ)² / n (yᵢ: 실제 값, ŷᵢ: 예측 값)

- 제곱하기 때문에 이상치에 민감

 

평균 절대 오차(Mean Absolute Error, MAE)

: 실제 값과 예측 값의 차이의 절대값을 평균한 값

MAE =  Σ|yᵢ - ŷᵢ| / n

- MSE보다 이상치에 덜 민감

 

R제곱(R-squared)

: 회귀 모델이 종속 변수의 변동성을 얼마나 잘 설명하는지를 나타내느 지표

R-squared = 1 - Σ(yᵢ - ŷᵢ)² / Σ(yᵢ - ȳ)² (yᵢ는 실제 값, ŷᵢ는 모델의 예측 값, ȳ는 실제 값의 평균)

                   = 1 - (SSR/SST) (SSR: 오차 제곱합, SST: 총 제곱합)

- 0에서 1 사이의 값을 가지며, 1에 가까울수록 모델이 데이터를 잘 설명한다는 것을 의미

 

Adjusted R-squared

: R제곱의 한계인 독립 변수의 수가 증가함에 따라 R제곱이 증가하는 문제를 보완한 지표로, 변수의 개수에 따른 패널티를 부여

Adjusted R-squared = 1 - [(1 - R²) * (n - 1) / (n - k - 1)] (n은 샘플의 수, k는 독립 변수의 수)

 

평균 백분율 오차(MAPE)

: 예측값과 실제값 사이의 백분율 차이의 평균을 나타내는 지표

MAPE = Σ((yᵢ - ŷᵢ) / yᵢ) / n * 100 ( yᵢ는 실제 값, ŷᵢ는 모델의 예측 값, n은 샘플의 수)

- 양수 또는 음수가 될 수 있음

728x90

1. TCP/IP 4계층이란?

우리가 택배를 보낼 때, 여러 단계를 거칩니다.📦

1. 택배 상자를 포장하고 주소를 적는다.

2. 택배 회사에 맡기면, 분류 작업을 거쳐 해당 지역으로 이동한다.

3. 지역 택배 기사님이 우리 집까지 배송해준다.

 

TCP/IP 4계층은 이와 비슷하게 인터넷에서 데이터를 주고받는 과정을 4단계로 나누어 규칙을 정한 것입니다.

인터넷 프로토콜 스위트(Internet Protocol Suite)의 기반이 되는 네트워크 모델로 이 모델은 데이터를 네트워크를 통해 전송하는 데 필요한 기능을 계층별로 나누어 정의합니다.

각 계층은 특정 기능을 담당하며, 상위 계층에서 전달된 데이터를 처리하고 하위 계층으로 전달하는 역할을 합니다.

TCP/IP 4계층은 링크 계층, 인터넷 계층, 전송 계층, 애플리케이션 계층으로 나뉩니다.

 

2. 애플리케이션 계층 (Application Layer)

사용자 애플리케이션에서 사용되는 프로토콜이 이 계층에 속합니다. 사용자가 직접적으로 상호작용하는 네트워크 서비스를 제공합니다.

FTP, SSH, HTTP, SMTP, DNS 등의 프로토콜이 이 계층에 속합니다.

 

FTP (File Transfer Protocol): 장치와 장치 간의 파일을 전송하는 데 사용되는 표준 통신 프로토콜

SSH (Secure Shell): 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜

SMTP (Simple Mail Transfer Protocol): 이메일을 전송하기 위해 사용

HTTP (Hypertext Transfer Protocol): 웹 브라우저와 웹 서버 간에 웹 페이지, 이미지, 동영상 등의 데이터를 주고 받기 위해 사용

DNS(Domain Name System): 도메인 이름을 IP 주소로 변환하는 데 사용(ex. www.naver.com -> 222.111.222.111) 

 

3. 전송 계층 (Transport Layer)

전송 계층은 네트워크에서 데이터를 안전하고 효율적으로 전달하는 데 중요한 역할을 하는 계층입니다 ,택배로 비유하자면, 물건을 안전하게 포장하고, 배송 중 문제가 발생했을 때 다시 보내는 등의 역할을 하는 것입니다.

주요 프로토콜로는 TCP와 UDP가 있습니다.

 

TCP(Transmission Control Protocol)

연결형 서비스를 제공하며, 데이터의 신뢰성, 순서 보장, 흐름 및 혼잡 제어 기능을 제공합니다. 주로 웹 브라우징, 이메일, 파일 전송 등에 사용됩니다. 연결형 서비스란 데이터를 주고받기 전에 송신자와 수신자 간에 논리적인 연결을 먼저 설정하는 방식을 의미합니다. TCP는 가상 패킷 교환 방식을 사용합니다. TCP에서 신뢰성을 확보하기 위해서 '3-way handshake'라는 작업을 진행합니다.

 

UDP(User Datagram Protocol)

순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는 데이터그램 패킷 교환 방식을 사용합니다. 비연결형 서비스를 제공하며, 데이터 전송 속도는 빠르지만 신뢰성이 낮습니다. 주로 실시간 스트리밍, 온라인 게임, 음성 및 영상 통화 등에 사용됩니다.

특징 TCP UDP
연결 방식 연결형 비연결형
신뢰성 높음(데이터 순서 보장, 오류 검출 및 복구) 낮음(데이터 순서 보장 없음, 오루 검출 및 복구 없음)
속도 비교적 느림 비교적 빠름
방식 가상패킷 교환 방식 데이터그램 패킷 교환 방식
흐름제어 O X
혼잡제어 O X
활용 예시 웹 브라우징, 이메일, 파일 전송 실시간 스트리밍, 온라인 게임, 음성/영성 통화

 

가상회선 패킷 교환 방식(Virtual Circuit Packet Switching)

마치 전용 회선처럼 미리 정해진 경로를 통해 패킷을 전송하는 방식입니다. 가상 회선을 통해 데이터 패킷이 순서대로 전송되며, 모든 패킷이 같은 경로를 따라 이동합니다.

 

데이터그램 패팃 교환 방식(Datagram Packet Switching)

각 패킷이 독립적으로 최적의 경로를 선택하여 목적지로 이동하는 방식입니다. 하나의 데이터에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있으며 도착한 순서가 다를 수 있습니다.

 

TCP 연결 성립 과정(3-way handshake)

https://dev.to/snj/tcp-3-way-handshake-in-detail-eao
https://dev.to/snj/tcp-3-way-handshake-in-detail-eao

1. SYN(SYNchronization) 단계: 클라이언트가 서버에게 연결 요청 메시지를 보냅니다. 이 메시지에는 클라이언트의 초기 순서 번호(ISN)가 포함되어 있습니다.

2. SYN-ACK(Synchronize-Acknowledge) 단계: 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN+1을 보냅니다.

3. ACK(Acknowledgment) 단계: 클라이언트는 서버의 확인 메시지를 받으면, 서버의 ISN에 1을 더한 값을 ACK 번호로 하여 최종 확인 메시지를 서버에 보냅니다.

 

3단계가 마무리되면 신뢰성이 구축되고 데이터 전송을 시작합니다.

 

TCP 연결 해체 과정(4-way handshake)

https://jaehyeon48.github.io/network/tcp-three-way-handshake/

1. 클라이언트가 연결 종료 요청(FIN)을 서버에 보냅니다.

2. 서버는 클라이언트의 요청을 확인(ACK)합니다.

3. 서버가 연결 종료 요청(FIN)을 클라이언트에 보냅니다.

4. 클라이언트는 서버의 요청을 확인(ACK)합니다.

 

연결 종료 과정 중에 데이터 손실을 방지와 두 장치 연결이 닫혔는지 확인하기 위해 TIME_WAIT 상태를 거칩니다.

 

4. 인터넷 계층 (Internet Layer)

인터넷 계층은 논리적인 주소(IP주소)를 사용하여 서로 다른 네트워크 간에 데이터를 전송하는 역할을 합니다. 상대방이 제대로 받았는지에 대해 보장하지 않는 비연결적인 특징이 있습니다. 대표적인 프로토콜로 IP, ARP, ICMP이 있습니다.

 

5. 링크 계층 (Link Layer)

링크 계층은 전선, 광섬유, 무선 등으로 물리적인 네트워크(LAN) 내에서 데이터를 전송하는 역할을 합니다. 인터넷 계층에서 전달된 패킷을 물리적인 신호로 변환하여 전송하고 MAC 주소를 사용하여 통신합니다.

728x90

1. ERD란?

ERD(Entity Relationship Diagram)는 데이터베이스의 구조를 시각적으로 표현하는 다이어그램입니다.

데이터베이스를 구축할 때 가장 기초적인 뼈대 역할을 하며, Relation 간의 관계들을 정의한 것입니다.

 

ERD는 시스템 요구 상황을 기반으로 작성되며 이 ERD를 기반으로 데이터베이스를 구축합니다.

 

https://velog.io/@kjhxxxx/DataBase-ERD%EB%9E%80

ERD는 Entity, Attribute, Relationship으로 이루어져 있습니다.

ERD를 작성할 때, 요구 사항을 분석하고 entity와 attribute를 정의하고 각 entity 간의 관계를 정의해야 합니다. 또한, 데이터 중복을 최소화하기 위해 정규화를 고려해야 합니다.

2. 정규화

정규화는 데이터 중복을 최소화하고 데이터의 일관성을 유지하기 위한 거치는 과정입니다. 릴레이션 간의 잘못된 종속 관계로 발생되는 문제를 해결하고, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정입니다.

정규화는 여러 단계로 구성되며, 각 단계는 특정 규칙을 만족해야 합니다.

정규화된 정도에 따라 제1 정규형(NF, Normal Form), 제2 정규형, 제3 정규형, 보이스/코드 정규형, 제4 정규형, 제5 정규형이 있습니다.

2-1. 제1 정규형(1NF)

테이블의 모든 속성은 원자값(더 이상 분해할 수 없는 값)을 가져야 합니다.

StudentID Name Course
1 홍길동 {물리, 화학}
2 이순신 {수학, 영어}

 

속성 값 중에서 한 개의 기본키에 대해 두 개 이상의 값을 가지는 반복 집합이 있습니다. 홍길동의 Course가 {물리, 화학}인데 이것을 제1 정규형에 따르면 이것을 나눠야 합니다.

StudentID Name Course
1 홍길동 물리
1 홍길동 화학
2 이순신 수학
2 이순신 영어

 

2-2. 제2 정규형(2NF)

제1 정규형을 만족하면서 기본 키가 아닌 속성은 기본 키에 종속되어야 합니다.(부분 종속성 제거) 쉽게 말해, 현재 테이블의 주제와 관련없는 속성을 다른 테이블로 빼는 작업입니다.

OrderID(주문번호) CustomerID(고객ID) Product(상품명) Category(카테고리) Price(가격)
1 A 도서 15,000원
2 A 티셔츠 의류 25,000원
3 B 컴퓨터 마우스 전자제품 10,000원

 

이 테이블의 기본 키는 주문번호 및 고객ID입니다.

제 2정규형을 적용하기 위해선 기본 키에 완전히 종속되지 않은 속성을 찾아야 합니다. 기본 키가 아닌 키에 종속이 되는 키를 찾는다는 의미와 같습니다. Product, Category, Price는 기본 키인 {OrderID, CustomerID}에 완전히 종속되지 않습니다. 따라서 테이블을 아래와 같이 분리합니다.

 

<주문 테이블>

OrderID CustomerID Product
1 A
2 A 티셔츠
3 B 컴퓨터 마우스

 

<상품 테이블>

Product Category Price
도서 15,000원
티셔츠 의류 25,000원
컴퓨터 마우스 전자제품 10,000원

 

2-3. 제3 정규형(3NF)

제2 정규형을 만족하면서 이행적 함수 종속성(transitive FD)이 없어야 합니다.

이행적 함수 종속이란 A->B, B->C 관계에서 A->C 관계가 성립하는데 이 때, C가 집합 A에 이행적으로 함수 종속이 되었다고 합니다.

다시 말해, 기본 키가 아닌 속성이 다른 키(기본키 제외)에 종속되면 안됩니다.

위 예시에서 이행적 종속 관계를 확인해봅시다.

카테고리 내 상품들은 가격이 같다고 가정하면 상품 테이블에서 Product -> Category, Category -> Price 관계가 있으므로 이행적 종속인 Product -> Price 관계가 성립합니다. 따라서 상품 테이블을 아래와 같이 분리할 수 있습니다.

 

<상품 테이블>

Product Category
도서
티셔츠 의류
컴퓨터 마우스 전자제품

 

<카테고리 테이블>

Category Price
도서 15,000원
의류 25,000원
전자제품 10,000원

 

2-4. 보이스/코드 정규형(Boyce-Codd Normal Form, BCNF)

보이스/코드 정규형은 제 3정규형을 만족하면서 모든 결정자가 후보키여야 합니다.

 

결정자란 다른 속성의 값을 고유하게 결정하는 속성(또는 속성들의 집합)입니다.
간단히 말해, 결정자는 다른 속성에 대한 정보를 제공합니다.
학번(StudentID) 이름(Name) 전공(Major)
1 홍길동 경영학
2 이순신 컴퓨터공학
3 김유신 기계공학

이 테이블에서 학번 이름 전공을 결정합니다. 다시 말해, 학번을 알고 있다면 해당 학생 이름과 전공을 알 수 있습니다. 따라서 이 테이블의 결정자는 학번입니다. 함수 종속성으로 표현하면 학번 -> 이름, 학번 -> 전공 관계가 성립합니다.

 

<프로젝트 할당 테이블>

직원ID 프로젝트ID 역할 프로젝트매니저
1 100 개발자 김매니저
2 101 디자이너 박매니저
3 100 테스트 김매니저
4 102 개발자 이매니저

여기서 기본 키는 (직원ID, 프로젝트ID)입니다. 이 테이블은 제 3정규형을 만족합니다. 모든 비기본 키 속성(역할, 프로젝트매니저)이 기본 키 전체에 종속되기 때문입니다.

이 테이블을 보면 다음과 같은 함수 종속성이 있습니다.

1. (직원ID, 프로젝트ID) -> 역할, 프로젝트매니저

2. 프로젝트ID -> 프로젝트매니저

위의 두 번째 종속성을 보면 프로젝트ID 프로젝트매니저를 결정하고 있습니다. 하지만 프로젝트ID는 후보 키가 아닙니다.(기본 키 조합에 포함되어 있는 것이지 그 자체로 후보 키가 아님)

BCNF를 만족시키기 위해 테이블을 분리합니다.

 

<프로젝트 할당 테이블>

직원ID 프로젝트ID 역할
1 100 개발자
2 101 디자이너
3 100 테스트
4 102 개발자

 

<프로젝트 테이블>

프로젝트ID 프로젝트매니저
100 김매니저
101 박매니저
102 이매니저

 

이렇게 분리하면 모든 결정자(프로젝트 할당 테이블 - (직원ID, 프로젝트ID) / 프로젝트 테이블 - 프로젝트ID)가 후보 키가 되어 BCNF를 만족하게 됩니다.

 

정규형 과정을 거친다고 해도 성능이 무조건 좋아지는 것은 아닙니다. 경우에 따라 정규화 또는 비정규화 과정을 진행해야 합니다.

728x90

'DB' 카테고리의 다른 글

[데이터베이스] 조인의 원리  (0) 2024.05.29
[데이터베이스] 조인 JOIN  (0) 2024.05.28
[데이터베이스] 종류  (0) 2024.05.21
[데이터베이스] 트랜잭션 Transaction  (0) 2024.05.21
[데이터베이스] 데이터베이스 개념  (0) 2024.05.15

1. 데이터베이스 개념

데이터베이스(DB, DataBase)는 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음

DBMS(Database Management System): 데이터베이스를 관리하는 소프트웨어

- 종류: MySQL, Oracle, Microsoft SQL Server, PostgreSQL

데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어(query language)를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있습니다. 또한, 데이터베이스는 실시간 접근과 동시 공유가 가능합니다.

출처: https://www.techopedia.com/kr/definition/database-management-systems-dbms

위 그림과 같은 구조를 기반으로 데이터를 주고 받습니다.

Ex) MySQL(DBMS)가 있고 그 위에 응용 프로그램에 속하는 Node.js나 php에서 해당 데이터베이스 안에 있는 데이터를 그집어내 해당 데이터 관련 로직을 구축할 수 있습니다.

2. 엔터티(Entity)

엔터티는 현실 세계에서 독립적으로 존재하며 고유하게 식별 가능한 객체나 개체를 의미합니다. 예를 들어, 학생, 책, 주문 등이 엔터티가 될 수 있습니다.

  • 강한 Entity: 고유하게 식별할 수 있는 기본 키를 갖고 있으며 독립적으로 존재할 수 있는 entity
    Ex) 학생 entity는 학번을 기본 키로 가지며 다른 entity에 의존하지 않고 독립적으로 존재할 수 있습니다.
  • 약한 Entity:  고유하게 식별할 수 있는 기본 키(Primary key)가 없고 다른 entity에 의존하여 식별하는 entity
    Ex1) 주문 항목 entity는 주문 entity에 의존하여 식별됩니다. 주문번호와 항목번호를 합쳐서 고유하게 식별될 수 있습니다.
    Ex2) 직원의 자녀 entity는 직원 entity에 의존하여 식별됩니다. 직원ID와 자녀의 이름을 합쳐서 고유하게 식별될 수 있습니다.

2. 속성(Attribute)

엔터티는 속성(Attribute)를 가집니다. 속성 Entity의 특성이나 성질을 나타냅니다.

Ex) 학생이라는 Entity가 있을 때, 이름, 학번, 생년월일, 전공 등을 속성으로 가질 수 있습니다.

3. 도메인(Domain)

Domain은 속성이 가질 수 있는 값의 집합을 의미합니다.

Ex) 성별 속성이 있을 때, 이 속성이 가질 수 있는 값은 {남, 여} 집합이 됩니다.

4. 릴레이션(Relation)

Relation은 데이터베이스에서 정보를 구분하여 저장하는 기본 단위입니다. 쉽게 말해, 데이터를 표 형태로 표현한 것입니다. Entity에 관한 데이터를 데이터베이스는 relation 하나에 담아서 관리합니다.

Ex) 학생이라는 entity가 데이터베이스에서 관리할 때 아래와 같이 relation(표 형태)로 관리됩니다.

학번 이름 나이 전공
1 홍길동 20 컴퓨터공학과
2 임꺽정 21 산업경영공학과

관계형 데이터베이스에서는 'table', NoSQL 데이터베이스에서는 'collection'이라고 합니다.

  • 관계형 데이터베이스: 데이터를 테이블 형태로 저장하고 관리
    - 구조: record-table-database
  • NoSQL 데이터베이스: 비관계형 데이터베이스
    - 구조: document-collection-database

https://code.tutsplus.com/relational-databases-for-dummies--net-30244t

위 그림과 같이 record가 쌓여서 table이 되고 table이 쌓여서 database가 됩니다.

5. Field & Record

6. Field Type

필드는 타입을 갖습니다.

Ex) 이름 -> 문자열, 전화번호 -> 숫자

 

숫자 타입

타입 용량(byte) 최솟값(부호O) 최댓값(부호O) 최솟값(부호X) 최댓값(부호X)
TINYINT 1(=8bit) -128 127 0 255
SMALLINT 2 -32768 32767 0 65535
MEDIUMINT 3 -8388608 8388607 0 16777215
INT 4 -2147483648 2147483647 0 4294967295
BIGINT 8 -263 263-1 0 264-1

부호가 있는 정수: 양수 또는 음수

부호가 없는 정수: 0 또는 양수

 

날짜 타입

타입 용량(byte) 지원 범위
DATE 3 1000-01-01 ~ 9999-12-31
DATETIME 8 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
TIMESTAMP 4 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07

 

문자 타입

타입 특징 길이
CHAR 고정 길이 문자열(짧든 길든 선언한 길이 값으로 고정해서 저장) 0 ~ 255
VARCHAR 가변 길이 문자열(입력된 데이터에 따라 용량을 가변시켜 저장) 0 ~ 6535
TEXT 큰 문자열 저장(ex. 게시판의 본문 저장)  
BLOB 이미지, 동영상 등 큰 데이터 저장  
ENUM 미리 정의된 값 중 하나만 저장 가능 최대 65535개 요소 넣을 수 있음
SET 미리 정의된 값 중 여러 개 저장 가능 최대 64개 요소 넣을 수 있음

 

7. Relationship(관계)

데이터베이스에 있는 여러 개의 테이블은 서로 관계가 정의되어 있습니다. 관계를 화살표로 표현하는데 이를 관계화살표라고 합니다.

하나의 A는 하나의 B로 구성되어 있다.
하나의 A는 하나 이상의 B로 구성되어 있다.
하나의 A는 하나 이하의 B로 구성되어 있다.
하나의 A는 0 또는 하나 이상의 B로 구성되어 있다.

 

1:1 관계

유저 - 유저 이메일

 

1:N 관계

유저(1)-장바구니 내 상품(N)

 

N:M 관계

학생(N)-강의(M)

 

8. 키(Key)

<학생 테이블>

학번 이름 주민등록번호 학과 강의
2019000000 A 1234 컴퓨터공학과 웹프로그래밍
2019100001 B 1523 컴퓨터공학과 네트워크 기초
2019200002 C 4567 컴퓨터공학과 운영체제
2019300003 D 2647 컴퓨터공학과 웹프로그래밍
2019400004 E 1756 산업경영공학과 운영체제
2019500005 F 9842 산업경영공학과 웹프로그래밍
2019600006 G 3695 산업경영공학과 기술경영

 

<강의 테이블>

강의명 교수 교수ID
웹프로그래밍 김OO 1
네트워크 기초 박OO 2
운영체제 이OO 3
기술경영 김OO 1

 

기본키(Primary Key, PK)

: 유일성과 최소성을 가지며 각 행(record)을 유일하게 식별할 수 있는 칼럼(또는 칼럼 조합)

- 중복된 값을 가질 수 없습니다.

- NULL값을 허용하지 않습니다.

- 유일성: 어떤 키의 값이 데이터베이스 내의 모든 행에 대해 유일해야 한다는 원칙

- 최소성: 키를 구성하는 데 필요한 속성의 수를 최소화해야 한다는 원칙

Ex) 학생 테이블 -> 학번 or 주민등록번호 / 강의 테이블 -> 강의명

 

자연키 : 테이블의 데이터가 자연스럽게 가지고 있는 키를 이용해 만들어진 키(데이터 자체에서 파생되는 키)

Ex) 학생 테이블 -> 학번, 주민등록번호 / 강의 테이블 -> 강의명

 

인조키: 인위적으로 생성한 키

Ex) 강의 테이블 -> 강의ID를 부여하는 경우, 강의ID가 인조키

 

외래키(Foreign Key, FK)

: 다른 테이블의 기본키를 참조하는 값

- 두 테이블 간의 관계를 설정하는데 사용

Ex) 학생 테이블(강의) - 강의 테이블(강의명) -> '학생 테이블'의 '강의'는 외래키이며 '강의 테이블'의 기본키를 참조

 

후보키(Candidate Key)

: 테이블에서 기본키로 사용될 수 있는 후보가 되는 키

- 유일성과 최소성을 동시에 만족합니다.

Ex) 학생 테이블 - 학번, 주민등록번호

 

대체키(Alternate Key)

: 기본키로 사용될 수 있지만 실제로는 사용되지 않는 키(후보키 - 기본키)

Ex) 학생 테이블 - 기본키로 학번을 사용하면 주민등록번호는 대체키

 

슈퍼키(Super Key)

: 테이블 내에서 각 행을 유일하게 식별할 수 있는 하나 또는 하나 이상의 칼럼의 조합

- 유일성만 만족하면 됩니다.

- 최소성은 보장하지 않을 수 있습니다.

Ex) 학생 테이블 - {학번, 주민등록번호}

728x90

+ Recent posts