면접준비 기술 질문

JongseokLee·2021년 12월 30일
0
post-thumbnail

기술관련 질문 정리

1. Primary Key와 Foreign Key의 차이점

Primary Key

  • Unique와 not null의 특징 모두 가지고 있는 제약조건으로 데이터의 중복은 물론 null값도 허용하지 않음
  • 테이블에서 유일하게 하나만 있는 값

    프라이머리키는 유니크 특성과 null 값을 허용하지 않는 특성을 가지고 있습니다. 테이블에서 유일하게 하나만 있는 값으로 알고 있습니다.

Foreign Key

  • 어떤 Relation에 소속된 속성 또는 속성 집합이 다른 릴레이션의 기본키가 되는 키
  • 다른 릴레이션의 기본키를 그대로 참조하는 속성의 집합

Foreign Key는 Relation인 DB 테이블에서 생성한 기본키를 그대로 참조하는 키입니다.

2. JAVA에서 public, protected, private를 각각 설명하세요

  • Public 접근제한자: 모든 package에서 해당 class로 접근 가능
  • Protected 접근제한자: 같은 패키지 또는 상속받은 class에서만 해당 class로 접근 가능
  • Private 접근제한자 : 자신을 포함한 package에서만 해당 class로 접근 가능

퍼블릭은 모든 패키지에서 클래스로 접근이 가능합니다. 프로텍트는 같은 패키지나 상속받은 클래스에서만 접근이 가능합니다. 프라이베잇은 자신을 포함한 패키지에서만 클래스로 접근이 가능합니다.

3. Override와 Overload의 차이점

  • Overloading: 같은 이름의 메서드 여러개를 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술
  • Overriding: 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용

오버로딩은 같은 이름 메서드를 여러개 가지면서 매개변수 유형이랑 개수를 다르게 하는 방법입니다.
오버라이딩은 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 다시 사용하는 방법입니다.

4. SELECT, FROM, WHERE, ORDER BY, HAVING, GROUP BY의 순서를 정의하시오

from -> where -> group by -> having -> select -> order by

출신은?/어디서왔구요/00그룹이었습니다/가지고있는건 이거구요/골라보세요/정렬해서 드릴게요

5. 인덱스(INDEX)

  • 테이블의 레코드(릴레이션의 각 행)를 빠르게 찾기 위한 자료 구조
  • 인덱스에 저장되어 있는 데이터의 물리적 주소로 가서 데이터를 가져오는 식으로 동작을 하여 검색 속도의 향상을 가져옴

    인덱스는 테이블의 레코드를 빠르게 찾기 위한 자료 구조입니다.

6. SQL injection에 대해서 설명하시오.

  • 응용 프로그램 보안 상의 허점을 의도적으로 이용해서 악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법

    SQL injection은 악의적으로 SQL문을 실행해서 비정상적으로 데이터베이스를 조작하는 공격 방법입니다.

7. SQL에서 union all과 union의 차이

  • union all: 테이블간의 중복값까지 모두 합쳐서 출력
  • union: 테이블간의 중복값은 제거하고 출력(단 메모리 점유를 많이 하며 index의 유무에 따라 쿼리 수행시간이 길어질 수 있음)

union all은 테이블간의 중복값까지 모두 합쳐서 출력하는 방법입니다, 그냥 유니온은 테이블간에 중복값은 제거하고 출력하는 방법입니다.

8. HTTP Method중 GET방식과 POST방식의 차이점

  • GET 방식
    URL의 쿼리문자열에 데이터를 같이 전달하는 방식으로 데이터 길이에 제한이 있고, 보안에 취약하다.
  • POST 방식
    헤더에 데이터를 넣어 보내기 때문에 보안에 조금 더 유리하고, 데이터 길이에 제한이 없다. 하지만 GET에 비해 다소 느리다.

Get은 url의 쿼리스트링에 데이터를 같이 전달하는 방식이고, 보안에 취약합니다. Post는 헤더에 데이터를 넣어서 보내기 때문에 보안에 유리하지만 Get에 비해서 전송 속도가 다소 느린 편입니다.

9. Software 개발의 5단계

1) 분석

  • 프로젝트 만들어진 목적 및 배경 분석
  • AS-IS 분석(정보구조, 화면설계), 데이터/인프라 환경 분석
    2) 설계
  • 정보구조, 기능정의, 업무흐름도, 화면 설계 등
    3) 구현
  • UI/UX 디자인, CSS, 접근성 구현 및 frontend, backend 구현 개발
    4) 검수
  • 테스트계획, 시나리오 계획 관리 및 오류 리스트 관리
  • 최종산출물 정리 및 매뉴얼 정리
    5) 운영 오픈 및 안정화
  • 운영 시 생길 수 있는 문제 정리 및 안정화

뭘 만들건지 정했으면 그게 타당한지 '분석'하고나서 '설계'를 합니다. 그다음 '구현'을 해야죠? 구현이 끝났으면 잘 됐는지 검수를하고 이상이 없으면 운영 오픈을 합니다.

10. Cookie와 Session의 차이

1) Cookie

  • 웹브라우저가 보관하는 데이터
  • Key-value형태로 웹 브라우저의 쿠키 저장소에 저장(client local에 저장)
  • 웹 서버는 쿠키를 생성하여 웹 브라우저에 정보를 전송
  • 웹 서버에 요청을 보낼 때 쿠키를 헤더에 실어서 함께 전송
  • 서버요청시 속도가 빠름
  • 보안에 취약함

2) Session

  • 서버의 저장소
  • 쿠키보다 속도가 느림
  • 쿠키가 탈취당할 수 있다는 단점을 보완
  • 사용량이 많을 시 서버에 부하를 줄 수 있음

    쿠키는 사용자의 정보를 클라이언트가 로컬에 저장을 하는 방식입니다. 쿠키를 헤더에 실어서 함께 전송을 하는 방법이고, 전송속도가 빠르지만 보안에 취약합니다. 세션은 쿠키보다 속 도가 느리지만 보안에 강하고, 서버에 사용자의 정보를 저장하는 방식입니다.

11. URI vs URL

URI가 더 넓은 의미의 개념입니다.
URL은 클라이언트가 요청한 자료의 위치 까지만 파싱해서 알려주지만,
URI는 매개변수 및 쿼리 스트링까지 포함되어 전달되는 개념으로 최근에는 URL보다 URL라고 부르는 사람들이 많습니다.

운영체제(OS-Operating System)

1. 운영체제의 개념

  • 사용자가 컴퓨터를 편리하게 사용할 수 있도록 도와주고 하드웨어를 효율적으로 사용할 수 있게 다양한 기능을 제공하는 소프트웨어로서 사용자와 컴퓨터 시스템이 정보 및 명령을 상호 교환할 수 있는 인터페이스를 제공하여야 한다.

운영체제란 것은 사용자가 컴퓨터의 다양한 기능들을 훨씬 쉽게 사용할 수 있게 인터페이스를 제공해주는 그런 소프트웨어입니다.

2. 메모리 계층 구조(Memory hierarchy)

  • 메모리를 필요에 따라 여러가지 종류로 나누어 두는 것, 하드디스크, 메모리, 캐시, 레지스터 순으로 피라미드를 이룬다. 레지스터와 캐시는 CPU 내부에 존재함 CPU는 아주 빠르게 접근할 수 있다. 메모리는 CPU 외부에 존재한다. 하드디스크는 CPU가 직접 접근할 방법이 없다. CPU가 하드디스크에 접근하려면 데이터를 메모리에 올리고 CPU가 메모리로 접근을 해야 한다.

레지스터와 캐시는 CPU내부에 존재하기 때문에 CPU에 아주 빠르게 접근할 수 있습니다. 메모리는 CPU외부에 존재하고 하드디스크에서 필요한 정보를 메모리에 전달을 한 다음에 CPU에 보내는 역할을 합니다.

3. 시스템 콜(System Call)의 정의 및 방법

  • 운영체제가 관리하는 모든 자원(네트워크, 메모리, 디스크 등)을 프로세스가 필요할 경우 이 시스템콜을 통해서 사용해야함, open(), exec(), fork(), kill()등의 함수로 사용함(프로세스란 실행중인 프로그램을 뜻함)

운영체제가 관리하는 모든 자원을 실행할 때 시스템콜 함수를 이용해야 합니다.

4. CPU 스케줄링

  • 컴퓨터 자원을 효율적으로 관리하기 위해 프로세스들 사이에서 CPU 할당을 위한 우선순위를 관리하는 일을 뜻함

컴퓨터 자원을 효율적으로 관리하기 위해서 프로세스를 CPU에 할당 우선순위를 관리하는 일을 뜻합니다.

5. 장기/중기/단기 스케줄러

  • 장기(long-term): 실행할 작업을 큐에서 꺼내 메인 메모리에 적재
  • 중기(mid-term): 어떤 프로세스들이 CPU를 할당 받을 것인지 결정
  • 단기(Dispatch): 준비 큐에 있는 프로세스 중 먼저 도착한 프로세스에게 CPU를 할당함

6. 스케줄링 알고리즘

  • FCFS(First Come First Service): 가장 간단한 CPU 스케줄링 알고리즘으로, 대기 큐에 도착한 순서에 따라 CPU를 할당함
  • SJF(Short Job First): SJF 스케줄링은 장기 스케줄링에서 자주 사용되는 알고리즘이며, 수행 시간이 가장 짧다고 판단되는 프로세스 먼저 CPU를 할당한다.
  • 우선순위 스케줄링(Priority Scheduling): 우선순위가 가장 높은 프로세스에게 제일 먼저 CPU를 할당하는 방식이다.

7. Process 개념/상태도

  • 실행중인 프로그램을 의미함, 레지스터, 스택, 포인터, 실행중인 프로그램, 데이터 등으로 구성된 집합체이다. 프로세스는 내부에 하나의 스레드를 가지고 있다.

프로세스는 실행중은 프로그램(.exe 파일을 실행한 상태)을 뜻합니다. 내부에는 하나의 스레드를 가지고 있습니다.

8. Context Switching

  • CPU가 이전 상태의 프로세스를 PCB에 보관하고, 또 다른 프로세스를 PCB에서 읽어 레지스터에 적재하는 과정

9. 멀티 프로세스 vs 멀티 스레드

  • 스레드란 프로세스 내부의 작업의 흐름, 단위를 의미하는 것으로, 프로세스에서 실행의 개념만을 분리한 개념 스레드가 여러 개 존재하는 것을 멀티스레드라고 하고 멀티스레드끼리는 일정 메모리 영역을 공유함
  • PCB(Process Control Block) : 운영체제가 프로세스를 제어하기 위해 프로세스의 상태 정보를 저장하는 장소 (프로세스 생성 시 만들어지며, 주기억장치에 유지됨)

스레드란 것은 프로세스 내부에 작업이 흐름이라고 할 수 있고, 작업의 세부적인 단위를 의미하는 합니다. 예를 들어서 햄버거 만드는 프로세스가 작동 중이면 거기서 야채를 다듬고 패티를 굽는 등의 행동이 스레드라고 할 수 있습니다.

컴퓨터 네트워크

1. HTTP, HTTPS

  • HTTP(Hyper Text Transfer Protocol) 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약으로, 80번 포트를 사용한다. 상태를 가지고있지 않은 Stateless 프로토콜이며, Method, Path, Version, Header, Body 등으로 구성됨
  • HTTPS(Hyper Text Transfer Protocol Secure) HTTP에 데이터 암호화가 추가된 프로토콜이다.

HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약이고 80번 포트를 상용합니다. 메서드, 패스, 버전, 헤더, 바디등으로 구성되어 있습니다. 상태를 가지고 있지 않습니다. 그리고 HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜입니다.

  • 위에서 정리함

3. TCP/IP

  • 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 통신규약으로 가장 많이 쓰이는 프로토콜 슈트가 TCP와 IP이다.
    IP의 주소 체계를 따르고 TCP의 특성을 활용해 송신자와 수신자의 논리적 연결을 생성함

TCP/IP는 통신규약이고 가장 많이 쓰이는 프로토콜 슈트라고 알고 있습니다.

4. HTTP method

  • GET: 리소스 조회
  • POST: 데이터 등록
  • PUT: 리소스를 대체, 생성
  • PATCH: 리소스를 일부만 변경
  • DELETE: 리소스 삭제
    기타
  • HEAD: GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 변환
  • OPTIONS: 대상 리소스에 대한 통신 가능 옵션을 설명(주로 CORS에서 사용)
  • CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정
  • TRACE: 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

    GET=Read, POST=Create, PUT=Update, DELETE=Delete

5. 소켓 통신 vs HTTP 통신

  • HTTP통신: html 파일을 전송하는 프로토콜이고 현재는 json, image 파일 등 또한 전송함
  • 소켓통신: 소켓 통신이란 서버와 클라이언트 양방향 연결이 이루어지는 통신으로 클라이언트도 서버로 요청을 보낼 수 있고, 서버도 클라이언트로 요청을 보낼 수 있는 통신이다.

HTTP통신은 html과 json, 이미지 파일 등을 전송하는 통신방법이고, 소켓통신은 서버와 클라이언트 양방향 연결이 이루어지는 통신입니다.

6. REST/REST API

  • 리소스 (HTTP URI)를 어떻게 하겠다(HTTP Method + Payload(전송되는 데이터)를 구조적으로 깔끔하게 표현하는 방법이다.

리소스를 어떻게 처리 할 건지 HTTP메서드와 페이로드 구조로 표현하는 방식입니다.

7. REST 정의, 장단점, 구성 요소

  • 장점: REST API 사용을 위한 별도의 인프라 구축이 필요없다, 서버와 클라이언트의 역할을 명확하게 분리한다.
  • 단점: 사용할 수 있는 메소드가 4가지 밖에 없다, HTTP method 형태가 제한적이다.

8. TCP vs UDP

  • TCP: UDP보다 전송속도가 느리다, 신뢰성있는 데이터를 전송한다, 데이터의 전송 순서 보장한다.
  • UDP: 데이터의 경계를 구분한다, 신뢰성 없는 데이터를 전송한다, TCP보다 전송속도가 빠르다. 패킷의 전송을 보장할 수 없다.

TCP는 신뢰성있는 데이터를 전송하지만 속도가 느리고, UDP는 신뢰성 없는 데이터를 전송하고 속도가 빠릅니다.

9. TCP의 연결 및 해제 과정

  • 연결을 할 때는 핸드쉐이크 과정을 3way handshake라고 하는데, 말 그대로 3번의 통신 과정을 거쳐 연결이 성립된다. 이 과정을 통해서 양 종단에 내가 누구와 통신중인지, 내가 받아야할 데이터의 번호가 몇 번인지 등 정보를 주고받으면서 연결 상태를 생성한다. 연결을 해지 할때도 특정한 과정을 거쳐서 연결을 종료해야 한다. 그냥 연결을 끊어버리면 연결이 끊어졌는지 지속되고 있는지 알 방법이 없기 때문에 4 way handshake 방식으로 연결을 해지하여 잡고 있던 손을 놓는다.

10. 흐름 제어, 혼잡 제어, 오류 제어

  • 인터넷에서 데이터를 보내기 위한 경로 배정(라우팅)을 효율적으로 하기 위해 데이터를 여러개의 조각으로 나누어 전송하게 되는데, 이때의 조각을 패킷이라고 부른다.
  • 흐름제어: 송신측과 수신측 사이의 데이터 처리 속도 차이(흐름)을 제어하기 위한 기법으로 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지함
  • 오류제어: 오류 검출과 재전송을 포함한다.
  • 혼잡제어: 한 라우터에게 데이터가 몰려 모든 데이터를 처리할 수 없는 경우, 호스트들은 재전송을 하게 되고 결국 혼잡을 가중시켜 오버플로우나 데이터 손실이 발생한다.

데이터베이스

1. 데이터베이스 특징

  • 실시간 접근성, 지속적인 변화, 동시 공유, 내용에 대한 참조, 데이터 논리적 독립성

2. 데이터베이스 성능

-얼마나 많은 사용자가 얼마나 빨리 데이터를 처리할 수 있느냐가 성능의 기준이 되겠습니다.

3. 색인

  • 데이터의 검색이나 그룹화 등의 작업 속도를 향상시키기 위해 데이터를 일정한 기준에 맞게 정렬되도록 설정하는 기능

4. DBMS 기능

  • 응용 프로그램에서 데이터에 대한 모든 액세스가 가능하도록 데이터베이스를 관리해주는 응용 소프트웨어이다. DBMS의 주요 기능으로는 데이터의 기능, 데이터 조작 기능, 그리고 데이터 제어 기능을 주요 기능으로 하고있다. 스키마로 인해 데이터가 유연하지 못합니다. 스키마가 변경될 경우 번거롭고 어렵다.

5. NoSQL vs RDBMS

  • RDBMS에서 R은 Relational의 약자로 관계형 데이터베이스 관리 시스템을 의미함 RDB는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터 베이스이다.

  • NoSQL이란 RDB형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미하고 있다. 데이터의 일관성은 포기하되 비용을 고려하여 여러 대의 데이터에 분산하여 저장하는 Scale-Out을 목표로 등장함 대표적으로 MongoDB가 있음, 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있다.

RDMBS에서 R은 릴레이셔널의 약자입니다. 그래서 관계형 데이터베이스를 뜻하고, 2차원 형태의 테이블로 표현하게 됩니다. NoSQL은 관계형 데이터베이스가 아니라 다른 형태의 데이터 저장기술을 의미합니다. 데이터의 일관성 보다는 비용을 고려해서 여러 대의 데이터를 분산 저장하는 방법입니다. 스키마가 없어서 자유롭게 데이터 구조를 가질 수 있습니다.

  • Scale-out 서버 대수를 늘림
  • Scale-up 서버 용량을 늘림

6. Transaction

  • 업무 처리 단위

7. 교착상태, 데드락(정의/원인/해결방법)

  • 여러 개의 트랜잭션들이 실행을 하지 못하고, 서로 무한정으로 기다리는 상태를 뜻함 해결 방법은 트랜잭션 진행방향을 같은 방향으로 처리, 트랜잭션 처리 속도를 최소화함

8. 2단계 락킹

  • 동시성 제어 기법으로는 대표적으로 잠금기법이 있다. 동시에 실행되는 트랜잭션 간의 간섭으로 문제가 발생하지 않도록 트랜잭션의 실행 순서를 제어하는 기법이다. 기존의 락킹기법은 직렬 가능성이 보장되지 않지만, 2단계 락킹 기법은 직렬성을 보장한다.

9. 키(정의/종류)

  • 1) 후보키: 기본키가 될 수 있는 후보들
    2) 기본키: 후보키 중에서 선택된 주키, 특정 튜플을 유일하게 구별할 수 있는 속성, Null 값을 가질 수 없다, 동일한 값이 중복되어 저장될 수 없다
    3) 대체키(보조키): 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키
    4) 슈퍼키: 릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족하지만, 최소성은 만족시키지 못함
    5) 외래키: 참조되는 릴레이션의 기본키과 대응되어 릴레이션간에 참조 관계를 표현하는데 중요한 도구, 외래키로 지정되면 참조 테이블의 기본키에 없는 값은 입력될 수 없다.

후보키(기본키후보), 기본키(프라이머리키), 대체키(나머지키), 슈퍼키(유일성o 최소성x), 외래키(기본키와 대응되어 참조관계를 표현)

10. 무결성

-데이터의 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 말한다.

11. SQL(Structured Query Language)

  • 데이터베이스와 소통하기 위해서 만들어진 언어
  • Student 테이블 유저의 '모든 이메일'을 갖고 오고 싶다면
    SELECT email FROM Students;
  • 21살보다 많은 유저의 '이메일'
    SELECT email FROM students WHERE age > 21;
  • 유저의 이메일이 naver인 경우의 '나이'를 알아보자
    SELECT age FROM students WHERE email LIKE "%naver.com";
  • 2번 ID를 지우고 싶다면
    DELETE FROM students WHERE id=2;
  • 15살~18살의 친구들의 이메일만 찾고싶다.
    SELECT email FROM students WHERE age BETWEEN 15 and 18

알고리즘/자료구조

1. 정렬 알고리즘

-정렬 알고리즘(sorting algorithm)이란 원소들을 번호순이나 사전 순서와 같이 일정한 순서대로 열거하는 알고리즘이다(종류: 단순, 삽입, 선택 등)

2. Tree vs Graph

  • 트리: 두 꼭지점사이에 하나만 있다, 정확히 하나의 루트 노드를 가지고 있다, 루프는 허용안됨, 덜 복잡, 계층적
  • 그래프: 둘 이상의 경로가 허용 됨, 그래프에 루트 노두가 없음, 그래프는 루프를 가질 수 있음, 비교적 복잡함, 회로망

3. AVL 트리

  • 스스로 균형을 잡는 이진 탐색 트리이다.
profile
DataEngineer Lee.

0개의 댓글