기술면접

#1 신입 프로그래머 기술(실무) 면접준비 [데이터베이스]

91MS 2017. 9. 22. 22:07

#1 신입 프로그래머가 필요한 기본 소양



# 데이터베이스


[1] PK, FK, ER 모델이란?

    • Primary Key : 테이블에서 각 Row(행)을 유일하게 구분하는 Column-Key
    • Foreign Key : 하나의 테이블에 있는 Column(열)으로는 그 의미를 표현할 수 없는 경우, 다른 테이블의 Primary-Key Column의 값을 반드시 참조해야 하는 Key
    • ER(Entity-Relation) 모델 : 개체-관계 모델, 데이터베이스를 설계할 때 사용하는 모델 중 하나


[2] 참조 무결성이란?

    • 관계 데이터베이스 관계 모델에서 관련된 테이블 간의 일관성(데이터 무결성)을 말한다.
    • 사용자의 실수로 관련 데이터가 삭제되거나 수정되는 것을 막아준다.
    • 참조 무결성 제약 조건 : 기본 테이블에서 일치하는 필드가 기본키(PK)이거나 고유 인덱스를 갖고 있거나 관련 필드의 데이터 형식이 같아야 한다.


[3] DBMS란?

    • 다수의 컴퓨터 사용자들이 컴퓨터에 수록 된 수 많은 자료들을 쉽고 빠르게 추가, 수정, 삭제 할 수 있도록 해주는 시스템
    • 데이터베이스 내의 정보를 검색하거나 정보를 저장하기 편리하고 효율적인 환경을 제공하는 것이 목적
    • 대표적인 3가지 기능 : 구성, 조작, 제어
    • 구성 : 데이터베이스에 저장 될 자료의 구조와 응용 프로그램이 그것을 이용하는 방식을 정의(레코드 구조, 데이터 모형, 물리적 구조 등)
    • 조작 : 사용자 도구에 따라 데이터베이스에 저장된 자료를 검색, 갱신, 삽입, 삭제 할 수 있도록 지원
    • 제어 : 데이터베이스의 내용에 대한 일관성, 중복제거, 접근제어에 대한 기능을 지원


[4] RDBMS란?

    • 관계형 데이터베이스 관리 시스템, RDB를 관리하기 위한 소프트웨어 또는 그것이 설치된 시스템을 말한다.
    • RDBMS 종류 : Oracle DBMS, MySQL, MS Access 등
    • 모든 데이터를 2차원 테이블로 표현
    • 상호 관련성을 가진 테이블의 집합
    • 만들거나 이용하기도 비교적 쉽지만, 무엇보다도 확장이 용이하다는 장점을 가짐
    • SQL(Structured Query Language)은 데이터베이스와 통신하기 위한 언어


[5] DB에서의 Commit과 Rollback이란?

    • Commit : 작성한 쿼리문에서 Update, Delete, Insert를 수행했을 때, 그 쿼리문 수행결과에 대해 확정을 짓겠다는 뜻이다.
    • Rollback : 쿼리문 수행결과에 대해 번복을 함. 즉, 쿼리문 수행 이전으로 원상복귀 하겠다는 뜻이다 (Commit 하기 전에 사용 됨).


[6] DB Normalization(정규화)란?

    • 논리적 데이터베이스 설계에 있어서 테이블을 구조화하는 기법 중 하나
    • 자료의 손실이나 불필요한 정보의 도입없이 데이터의 일관성 및 데이터 중복을 최소화하고 최대의 데이터 안정성 확보를 위한 안정적 자료구조로 변환하기 위해서 하나의 테이블을 둘 이상으로 분리하는 작업
    • 제 1 정규형(1NF) : 테이블의 각 셀의 값은 단일값을 가진다.
    • 2 정규형(2NF) : 주키가 합성키며 부분종속이 존재 할 경우 2차 정규형의 대상이 된다.
    • 제 3 정규형(3NF) : 비주키 속성 간에 발생하는 함수적 종속(이전종속)이 발생하면 3차 정규형의 대상이 된다.


[7] DB Normalization(정규화)의 목적은?

    • 저장 공간 최소화
    • 데이터 무결성 유지
    • 자료구조의 안정성 최대화


[8] SQL 이란?

    • Structured Query Language의 약자로 구조화 질의어라고 한다.
    • 데이터 정의어(DDL)와 데이터 조작어(DML)를 포함한 데이터베이스 용 질의 언어(Query Language)의 일종으로 데이터베이스를 사용 할 때 데이터베이스에 접근할 수 있는 데이터베이스 하부 언어를 뜻한다.


[9-14] 다음 테이블을 참고하여 질문에 해당하는 SQL문을 작성하라.

 이름(name)

학번(num) 

폰번호(pnum) 

주소(address) 

이메일(email) 

성별(sex) 

홍길동

10

010-1111-1111

서울시

hong@com

민수

11

010-2222-2222

경기도

m@com

유관순

12

010-3333-3333

경상도

yu@com


[9] 테이블 생성 - 테이블 명은 'student'로 할 것

create table student ( name varchar(10) not null, num int not null, pnum int not null, address varchar(10) not null, email varchar(10) not null, sex varchar(2) not null, primary key(num) );


[10] 테이블 수정 - 대학교(university)를 추가하고 null 값을 허용해라

alter table student add university varchar(10) null;


[11] 데이터 삽입 - 임의의 데이터 2개를 추가하라

    • insert into student(name, num, pnum, address, email, sex) value('김사또', 11, 01022222222, '경기도', 'kim@com', '남');
    • insert into student(name, num, pnum, address, email, sex) value('강민수', 13, 01077777777, '서울', 'kang@com', '남');


[12] 데이터 수정 - 홍길동의 핸드폰 번호를 010-5555-5555로 변경

update student set pnum = 010-5555-5555 where name = '홍길동';


[13] 데이터 검색

    • 전체 자료 조회 : select * from student;
    • 학번이 3번보다 이상인 사람들의 이름과 학번을 조회 : select name, num from student where = num >= 3 order by num desc;
    • 김자로 시작하는 학생의 이름을 조회 : select name from student where name like '김%';
    • ORDER BY xx DESC(내림차순)
    • ORDER BY xx ASC(오름차순)


[14] 데이터 삭제

    • 모든 자료(행) : delete from student;
    • 특정 자료(행) : delete from student where name = '홍길동';


[15] DB Transaction(트랜잭션) 이란?

    • 데이터의 무결성으로 인하여 데이터 작업시에 문제가 생기면, 데이터 작업을 하기 이전 시점으로 모든 데이터를 원상 복구 하는 것을 말한다.
    • 즉, 모두 실행되거나 모두 실행되지 않거나를 뜻한다.


[16] RDB에서 Join이 무엇인지에 대한 설명과 간단한 샘플 쿼리문을 작성해보아라.

    • Join이란 2개 이상의 테이블에서 조건에 맞는 데이터를 추출하기 위하여 사용
    • * Inner Join : 2개 이상의 테이블에서 교집합만을 추출
    • * Left Join : 2개 이상의 테이블에서 from에 해당하는 부분을 추출
    • * Right Join : 2개 이상의 테이블에서 from과 join하는 테이블에 해당하는 부분을 추출
    • * Outer Join : 아웃터 조인 또는 풀 조인이라고 불림, 2개 이상의 테이블에서 모든 테이블에 해당하는 부분을 추출
    • Inner) SELECT user.name, course.name FROM user INNER JOIN course ON user.course=course.id;
    • Left) SELECT user.name, course.name FROM user LEFT JOIN course ON user.course=course.id;
    • Right) SELECT user.name, course.name FROM user RIGHT JOIN course ON user.course=course.id;
    • Outer) SELECT user.name, course.name FROM user OUTER JOIN course ON user.course=course.id;
    • * 가장 많이 쓰이는 Join은 Inner Join.


[17] DB에서 Index를 사용하는 이유는?

    • 인덱스(Index)는 데이터를 논리적으로 정렬하여 검색과 정렬 작업의 속도를 높이기 위해 사용된다.
    • 예를 들면, 책에서 가장 빨리 내용을 찾는 방법은 책의 뒤편의 색인을 보는 것.
    • 기본키에 대해서는 항상 DBMS가 내부적으로 정렬된 목록을 관리하기에 특정 행을 가져올 때 빠르게 처리된다. 하지만, 다른 열의 내용을 검색하거나 정렬시에는 하나하나 대조를 해보기 때문에 시간이 오래걸린다. (이를 인덱스로 정의해두면 검색속도가 향상된다.)
    • 단점: 인덱스를 사용하면 데이터를 가져오는 작업의 성능은 향상시킬 수 있지만 데이터 삽입, 변경 등이 일어날 때 매번 인덱스가 변경되기 때문에 성능이 떨어질 수 있다.
    • 사용대상 : 데이터 필터링과 정렬에 사용되므로, 데이터를 특정한 순서로 자주 정렬한다면 인덱스를 사용하기에 적합


[18] NoSQL이란?

    • NoSQL 데이터베이스는 관계형 데이터베이스(RDB)보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다.
    • 단순 검색 및 추가 작업을 위한 매우 최적화된 키-값 저장 공간을 사용한다.
    • 빅데이터 시대에 따라 많은 양의 데이터를 효율적으로 처리하기 위해 등장하였다. (분산처리, 빠른쓰기 및 데이터의 안정성)
    • 분산형 구조를 통해 여러 대의 서버에 분산해 저장하고, 분산시에는 데이터를 상호 복제에 특정 서버에 장애가 발생했을 때에도 데이터 유실이나 서비스 중지가 없는 형태의 구조를 갖고 있다.


[19] NoSQL이 기존 RDBMS와 다른 점은?

    • 스키마가 없다. 즉 데이터 관계와 정해진 규격(table-column의 정의)이 없다.
    • 관계 정의가 없으니 Join이 불가능하다. (하지만 reference와 같은 기능으로 비슷하게 구현은 가능.)
    • 트랜잭션을 지원하지 않는다.
    • 분산처리(수평적 확장)의 기능을 쉽게 제공한다.
    • 대부분의 NoSQL DB는 분산처리기능을 목적으로 나왔기 때문에 분산처리 기능을 자체 프레임워크에 포함하고 있다.




출처 : http://myeonguni.tistory.com/1496