<p class="coding">

한국은행 컴퓨터공학 2022 기출문제 풀이 (공부 중)

daisy26 2023. 9. 6. 17:46

몰라 묻지마 쨔샤

데이터베이스 - 가

(1)

SELECT A.직원ID, 판매실적금액
FROM 직원 A
LEFT JOIN 판매실적 B ON A.직원ID = B.직원ID
WHERE 판매실적금액 >= 10000

(2)

SELECT A.직원ID
FROM 직원 A
LEFT JOIN 영업지점 B ON A.직원ID = B.직원ID
WHERE 도시 = 'SEOUL'
ORDER BY 입사일자 DESC

 

데이터베이스 - 나

SQL 삭제 기본 구조

DELETE [FROM] 테이블 명
WHERE 조건

(1) 

DELETE FROM 영업지점
WHERE 지점명 LIKE '서%'

SQL 수정(UPDATE)

UPDATE 테이블명 SET 필드 = 값 WHERE 조건;

(2) 

UPDATE 판매실적
SET 판매실적금액 = 판매실적금액 * 1.20
WHERE 직원ID IN (
    SELECT 직원ID
    FROM 직원
    WHERE 입사일자 <= '2020-12-31' AND (퇴사일자 IS NULL OR 퇴사일자 > '2020-12-31')
) AND 판매년월 = '2020-12';

 

데이터베이스 - 다

함수 종속(functional dependency)은 데이터베이스의 릴레이션(relation)에서 두 개의 속성(attribute) 집합 간 제약의 일종

 

https://firststep-de.tistory.com/6

 

[DataBase fundamentals] 데이터베이스 함수 종속성(Functional Dependency)에 대하여

1. 들어가며 데이터베이스는 최신 정보 시스템의 기본 구성 요소이며, 데이터베이스의 설계 및 관리는 데이터베이스가 저장하는 데이터의 정확성, 일관성 및 신뢰성을 보장하는 데 중요한 역할

firststep-de.tistory.com

함수 종속 관계

직원ID -> (직원명, 직원전화번호, 입사일자, 퇴사일자) - 완전 함수 종속 (Full Functional Dependency)
직원ID 하나만으로 직원명, 직원전화번호, 입사일자, 퇴사일자를 결정합니다.

지점ID -> (지점명, 도시, 지점전화번호) - 완전 함수 종속 (Full Functional Dependency)
지점ID 하나만으로 지점명, 도시, 지점전화번호를 결정합니다.

두 경우 모두 속성 하나가 다른 속성 집합을 완전히 결정하므로 완전 함수 종속 관계입니다.

 

데이터 변경할 때 발생할 수 있는 문제

중복 데이터 문제: 한 지점에서 여러 직원이 근무하는 경우, 같은 지점 정보가 여러 번 중복되어 저장될 수 있습니다. 이로 인해 데이터 크기가 증가하고 중복된 정보를 유지하는 데 불필요한 노력이 필요합니다.

데이터 무결성 문제: 데이터 무결성 규칙을 강제하기 어렵습니다. 예를 들어, 한 지점에 속한 직원의 입사일자가 서로 다르게 입력되어 데이터 무결성 위반 사례가 발생할 수 있습니다.

데이터 업데이트 어려움: 데이터 변경 시 관련 정보를 모두 업데이트해야 하므로 데이터 일관성 유지가 어려울 수 있습니다. 예를 들어, 지점의 전화번호가 변경된 경우 모든 해당 지점 정보를 업데이트해야 합니다.

 

데이터베이스 - 라

뷰 생성 쿼리

CREATE VIEW 뷰이름 AS
SELECT 필드이름1, 필드이름2, ..
FROM 테이블이름
WHERE 조건

뷰의 이름을 명시하고, AS 키워드 다음에 SELECT 문을 사용하여 해당 뷰가 접근할 수 있는 필드를 명시합니다.
이때 WHERE 절을 사용하여 특정 조건을 설정할 수도 있습니다. 이렇게 CREATE VIEW 문은 SELECT 문에서 선택된 필드를 가지는 새로운 뷰를 생성합니다.

CREATE VIEW EMPLOYEE AS
SELECT 직원ID, 지점ID, 직원명
FROM 직원
WHERE 입사일자 >= '2020-01-01';

 

데이터베이스 - 마

(1)

사용자 USER1에게 '직원' 릴레이션에 대한 삽입 권한을 부여하고 권한 전달을 허용하는 명령어

GRANT INSERT ON 직원 TO USER1 WITH GRANT OPTION;

이 명령어는 USER1에게 '직원' 릴레이션에 대한 삽입 권한을 부여하며, 권한 전달을 허용합니다. 이렇게 하면 USER1은 직원 릴레이션에 행을 추가할 수 있으며, 그 권한을 다른 사용자에게도 부여할 수 있습니다.

사용자 USER2에게 '직원' 릴레이션에 대한 조회 권한을 부여하고 권한 전달을 불허하는 명령어

GRANT SELECT ON 직원 TO USER2;

이 명령어는 USER2에게 '직원' 릴레이션에 대한 조회 권한을 부여하며, 권한 전달을 허용하지 않습니다. 따라서 USER2는 직원 릴레이션의 데이터를 조회할 수 있지만, 이 권한을 다른 사용자에게 전달할 수는 없습니다.

(2)

사용자 USER1에게 '직원' 릴레이션에 대한 삽입 권한을 취소하고 연쇄 취소를 불허하는 명령어

REVOKE INSERT ON 직원 FROM USER1 CASCADE;

이 명령어는 USER1에게 '직원' 릴레이션에 대한 삽입 권한을 취소하고, 연쇄 취소를 불허합니다. 따라서 USER1이 부여한 이 권한이 다른 사용자에게 전파되지 않습니다.

사용자 USER2에게 '직원' 릴레이션에 대한 조회 권한을 취소하며, 연쇄 취소 대상이 없는 명령어

REVOKE SELECT ON 직원 FROM USER2;

이 명령어는 USER2에게 '직원' 릴레이션에 대한 조회 권한을 취소합니다. 연쇄 취소 대상이 없으므로 USER2가 다른 사용자에게 부여한 권한은 영향을 받지 않습니다.

 

REF)

https://paintycode.tistory.com/62

 

[SQL] 레코드 삭제, 수정하기 (DELETE, UPDATE, TRUNCATE)

DELETE DELETE 문은 테이블에 삽입되어있는 레코드 (행)을 삭제할때 사용되는 구문이다. DELETE FROM 테이블 WHERE 조건; DELETE문의 경우는 WHERE 뒤에 오는 조건에 해당하는 모든 레코드들을 삭제해버리기

paintycode.tistory.com

소프트웨어공학 - 가

(2)

문제

  • 데이터 일관성 문제: 여러 고객이 동시에 같은 계좌에 자금을 이체하려고 할 때, 각각의 이체가 데이터베이스에 동시에 반영될 때 일관성이 깨질 수 있습니다. 즉, 누가 먼저 이체하는지에 따라 계좌 잔액이 다르게 기록될 수 있습니다.
  • 데이터 무결성 문제: 데이터베이스에서 중복된 이체 요청을 허용하지 않는 설정이라도, 동시에 여러 사용자가 동일한 계좌에 대한 이체를 시도하면 중복된 요청으로 인한 데이터 무결성 위반 문제가 발생할 수 있습니다.

해결책

테이블 레벨 락(lock) 사용
동시 이체를 방지하기 위해 대상 계좌에 락(lock)을 적용합니다. 여러 고객이 동시에 동일한 계좌에 접근하지 못하도록 합니다. 락을 설정한 후에만 해당 계좌에 대한 자금 이체가 가능하며, 락을 해제한 후에 다음 이체 요청을 처리합니다.


Serializable Transactions 격리 수준 설정

데이터베이스에서 지원하는 가장 엄격한 트랜잭션 격리 수준인 "Serializable Transactions"를 설정합니다. 이는 한 번에 하나의 트랜잭션만 실행되도록 보장합니다.

 

예외 처리 및 롤백(Rollback)
동시 이체 시 발생할 수 있는 예외 상황에 대한 처리 로직을 구현합니다. 이를 통해 오류가 발생하면 트랜잭션을 롤백하고, 일관성을 유지할 수 있습니다.

 

소프트웨어공학 - 나

  • 결합도 (Coupling): 결합도는 소프트웨어 모듈 간 상호 의존성의 정도를 나타내는 개념입니다. 높은 결합도는 모듈 간의 의존성이 강하고 변경이 어렵다는 것을 의미하며, 낮은 결합도는 모듈 간의 의존성이 약하고 독립적이라는 것을 의미합니다.
  • 응집도 (Cohesion): 응집도는 하나의 모듈 내에 있는 요소들이 얼마나 밀접하게 관련되어 있는지를 나타내는 개념입니다. 높은 응집도는 모듈 내의 요소들이 관련성이 높아 하나의 목적을 수행하는 것을 의미하며, 낮은 응집도는 모듈 내의 요소들이 서로 무관한 일을 수행하거나 분리되어 있는 것을 의미합니다.

소프트웨어 모듈화의 목표

  • 결합도를 낮추기: 모듈 간의 결합도를 낮추어 모듈 간의 의존성을 최소화합니다. 이를 통해 모듈 간의 변경이 서로에게 미치는 영향을 최소화하고 모듈 재사용을 촉진합니다.
  • 응집도를 높이기: 모듈 내의 요소들이 밀접하게 관련되어 하나의 목적을 수행하도록 설계합니다. 이렇게 하면 모듈의 기능이 명확하고 모듈 자체가 독립적으로 테스트 및 유지보수할 수 있게 됩니다.
  • 모듈 재사용 촉진: 낮은 결합도와 높은 응집도를 통해 모듈은 다른 프로젝트나 부분에서 재사용될 수 있도록 설계됩니다. 이를 통해 개발 시간을 단축하고 코드의 일관성을 유지할 수 있습니다.

(2)

자료 결합도(Data Coupling)
모듈 간의 결합도를 나타내는 개념 중 하나로, 모듈 간의 데이터를 얼마나 공유하고 의존하는지를 나타냅니다. 높은 자료 결합도는 한 모듈이 다른 모듈의 내부 데이터 구조에 의존하거나 공유할 때 발생하며, 이는 모듈 간의 강한 결합을 의미합니다. 이는 변경의 위험을 증가시키고 모듈의 재사용을 어렵게 만듭니다.

예를 들어, 모듈 A가 모듈 B의 내부 데이터 구조에 직접 접근하고 수정하는 경우, 높은 자료 결합도가 발생합니다. 이는 모듈 A가 모듈 B의 내부 구현에 의존하므로 모듈 B의 변경이 모듈 A에 영향을 미칠 가능성이 큽니다.

기능적 응집도(Functional Cohesion)
모듈 내의 요소들이 하나의 기능 또는 목적을 수행하기 위해 얼마나 밀접하게 관련되어 있는지를 나타내는 개념입니다. 높은 기능적 응집도는 모듈 내의 모든 요소들이 유사한 작업 또는 목적을 수행하는 경우 발생하며, 모듈이 명확하고 독립적으로 수행할 수 있는 기능을 가집니다.

예를 들어, 계산 모듈이라는 모듈이 있다고 가정해봅시다. 이 모듈은 덧셈, 뺄셈, 곱셈, 나눗셈 등의 연산을 수행하는 함수들로 구성되어 있고, 이러한 함수들은 모두 계산 기능을 수행합니다. 이 경우, 모듈은 높은 기능적 응집도를 가집니다.

자료 결합도를 낮추고 기능적 응집도를 높이는 것은 소프트웨어의 유지보수성과 재사용성을 향상시키는 데 도움이 됩니다. 따라서 모듈 간의 데이터 공유를 최소화하고, 모듈 내의 요소들이 동일한 기능 또는 목적을 수행하도록 설계하는 것이 중요합니다.

 

메모리관리기법 - 가

 

메모리관리기법 - 나

메모리관리기법 - 다

라우팅 - 가

라우팅 - 나

라우팅 - 다

머신러닝 - 가

  • 지도 학습은 레이블이 포함된 데이터로 모델을 훈련시키며, 출력을 예측하는 데 사용됩니다. 반면에 비지도 학습은 레이블 없이 데이터의 구조를 발견하거나 데이터를 변환하는 데 사용됩니다.
  • 지도 학습은 명시적인 목표(레이블)가 주어지며, 비지도 학습은 명시적인 목표 없이 데이터의 특성을 파악하거나 데이터를 가공합니다.
  • 지도 학습은 분류와 회귀와 같은 문제를 해결하는 데 주로 사용되며, 비지도 학습은 클러스터링, 차원 축소 및 특성 추출과 같은 작업에 사용됩니다.

머신러닝 - 나

머신러닝 - 다

distance = sqrt(pow((start_x - end_x), 2) + pow((start_y - end_y), 2));

K-Nearest Neighbors (KNN) 알고리즘

지도 학습 (Supervised Learning) 분야에서 사용되는 분류 (Classification) 및 회귀 (Regression) 알고리즘
KNN은 데이터 포인트의 근접한 이웃들을 기반으로 예측을 수행하는 데 사용됩니다. 다음은 KNN 알고리즘의 개요입니다.

KNN 알고리즘의 주요 개념
거리 측정: KNN은 데이터 포인트 사이의 거리를 측정하여 이웃을 판별합니다. 일반적으로 유클리드 거리가 가장 많이 사용되지만, 맨하탄 거리 또는 코사인 유사도 등 다양한 거리 측정 방법을 사용할 수 있습니다.

K 값 선택: 사용자는 예측할 때 고려할 이웃의 수를 지정하는 K 값을 선택해야 합니다. 작은 K 값은 모델의 분산을 증가시킬 수 있고, 큰 K 값은 모델의 편향을 증가시킬 수 있습니다.

다수결 투표: 주어진 데이터 포인트에 대해 K 개의 가장 가까운 이웃을 찾은 후, 다수결 투표를 통해 해당 데이터 포인트의 클래스 레이블을 예측합니다. 즉, 가장 많은 이웃이 속한 클래스로 예측됩니다.

KNN 알고리즘의 동작 과정
예측하려는 데이터 포인트와 다른 모든 데이터 포인트 사이의 거리를 계산합니다.
거리가 가장 가까운 K 개의 이웃을 선택합니다.
이웃들의 클래스 레이블을 확인하고, 다수결 투표를 통해 예측할 데이터 포인트의 클래스를 결정합니다.