면접준비 및 개인공부

Date : 2021.02.06   Modified date : 2021.02.07

DB

PK, FK, ER

  1. PK(primary Key) : 테이블에서 각 Row를 유일하게 구분하는 Column-key

  2. FK(Foreign Key) : 하나의 테이블에 있는 Column(열)으로는 그 의미를 표현할 수 없는 경우, 다른 테이블의 Primary-Key Column의 값을 반드시 참조해야 하는 Key

  3. ER(Entity-Relation)모델 : 개체-관계 모델, 데이터베이스를 설계할 떄 사용하는 모델 중 하나

참조 무결성

  • 기본키와 참조키 간의 관계가 항상 유지됨을 보장한다.
  • 참조되는 테이블의 행을 이를 참조하는 참조키가 존재하는 한 삭제될 수 없고, 기본키도 변경할 수 없다.

DBMS( DataBase Management System )

  • 데이터베이스를 관리하는 시스템이다.
  • 사용자와 DB사이에서 사용자의 요구에 따라 데이터를 생성해주고 DB를 관리해주는 소프트웨어이다.

RDBMS ( Relational DataBase Management System )

  • DBMS의 한 종류
  • 모든 데이터를 2차원 테이블로 표현
  • 테이블은 ROW( record, tuple )과 COLUMN( field, item )으로 이루어진 기본 데이터 저장 단위
  • ER모델에 따라, 데이터베이스가 만들어지며, 데이터베이스는 하나 이상의 테이블로 구성됨.

commit과 rollback

  • commit
    • 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어이다.
    • 트랜잭션의 처리 과정을 데이터베이스에 반영하기 위해서, 변경된 내용을 모두 영구 저장한다.
    • 하나의 트랜잭션 과정을 종료한다.
  • rollback
    • 작업 중 문제가 발생했을 때, 트랜잭션의 처리 과정에서 발생한 변경 사항을 취소하고, 트랜젝션 과정을 종료시킨다.
    • 트랜잭션으로 인한 하나의 묶음 처리가 시작되기 이전의 상태로 되돌린다.

인덱스란(index)?

데이터베이스 테이블의 검색 속도를 향상 시키기 위한 자료구조이다. index를 적용하지 않은 컬럼을 조회시, Full Scan을 수행하여 전체를 탐색하기 때문에 처리 속도가 많이 떨어진다.

  • 장점
    • 빠르게 데이터에 접근 가능, select절의 속도가 빨라짐
  • 단점
    • insert, update의 속도가 저하됨. 정렬된 상태를 유지해야하고, 테이블 외에 인덱스 테이블에도 insert, update를 해야 하기 때문에, 수정이 자주 일어나는 테이블에 대해서는 index 설정이 성능에 부정적인 영향을 줄 수도 있음.

정규화

자료의 손실이나 불필요한 정보의 도입 없이 데이터의 일관성, 데이터 중복을 최소화하고 최대의 데이터 안정성 확보를 위한 안정적 자료 구조로 변환하기 위해서 하나의 테이블을 둘 이상을 분리하는 작업이다.

정규화의 목적은 자료의 삽입, 갱신 및 삭제에 따른 이상 현상을 제거하고 ( 데이터 무결성 유지 ), 자료 구조의 안정성 최대화를 위해서 이다.

  1. 비정규 릴레이션 -> 1NF : 원자값이 아닌 도메인을 분해
  2. 1NF -> 2NF : 부분 함수 종속 제거
  3. 2NF -> 3NF : 이행 함수 종속 제거
  4. 3NF -> BCNF : 결정자가 후보키가 아닌 함수종속(FD) 제거
  5. BCNF -> 4NF : 함수종속이 아닌 다치종속(MVD) 제거
  6. 4NF -> 5NF : 후보키를 통하지 않는 조인종속(FD) 제거

Join

  1. INNER JOIN(내부조인)
    • 키 값이 있는 테이블의 컬럼 값을 비교 후 조건에 맞게 값을 가져오는 것이다.
  2. CROSS JOIN(교차조인)
    • 조인되는 두 테이블을 곱집합을 반환한다.
  3. OUTER JOIN
    • 조인하는 여러 테이블에서 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽 테이블의 내용을 전부 출력하는 방법이다.

SQL

SQL은 구조화 질의어라고 한다. 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)를 포함한 데이터베이스용 질의 언어의 일종이다.

  • 데이터 정의어(DDL)
    • 테이블과 같은 데이터 구조를 정의하는데 사용
  • 데이터 조작어(DML)
    • 테이블 조회 및 검색하시에 사용
  • 데이터 제어어(DCL)
    • DB에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어들을 말함

PLSQL

SQL이 확장된 개념으로 DML문과 Query문, 절차형 언어등을 사용해서 절차적 프로그래밍을 가능하게 하는 트랜잭션 언어이다. 블록구조로 수행속도를 높일 수 있다.

트랜잭션

컴퓨터 과학에선 쪼개질수 없는 업무처리의 단위를 의미한다. 즉, 하나의 작업 단위를 의미함.

DB에서의 트랜잭션은 질의를 하나의 묶음 처리해서 만약 중간에 실행이 중단됐을 경우, 처음부터 다시 실행하는 ROllback을 수행하고, 오류없이 실행을 마치면 commit을 하는 실행 단위를 의미한다.

하나의 트랜잭션은 Commit 되거나 Rollback 됨.

  • ACID
    • 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)

TCP/IP

IP기반에 TCP가 사용되서 이렇게 불린다고 한다.

TCP가 데이터의 추적을, IP가 배달을 처리한다고 보면 된다.

네트워크

HTTP 프로토콜

HTTP( Hypertext Transfer Protocol )는 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜이다.

웹 서버와 웹 어플리케이션 서버(WAS)의 차이

  • Web Server
    • 하드웨어 : Web 서버가 설치되어 있는 컴퓨터
    • 소프트웨어 : 웹 브라우저 클라이언트로 부터 HTTP 요청을 받아 정적인 컨텐츠(.html .jpg .css 등)를 제공하는 컴퓨터 프로그램
    • ex) Apache Server, Nginx 등
  • WAS( Web Application Server )
    • DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server
    • ex) Tomcat, JBoss, Jeus 등

Session과 Cookie의 차이

  • Cookie
    • 쿠키는 클라이언트(브라우저) 로컬에 저장디는 키와 값이 들어있는 작은 데이터 파일이다.
    • 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있다.
    • 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request시에 Request Header를 넣어서 자동으로 서버에 전송한다.
    • 웹 서버에서 쿠키를 생성하여 클라이언트에 전송
  • Session
    • 세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.
    • 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때 까지 인증상태를 유지한다.
    • 클라이언트로 부터 들어오는 요구를 하나의 상태로 보고, 그 상태를 일정하게 유지시켜준다.
    • 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.

java & spring

java

자바는 Sun Microsystems가 1995년에 처음 출시한 프로그래밍 언어이다. 제임스 고슬링과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다.

Java의 구동 방식

  1. 자바 소스 파일 작성
  2. JDK가 가지고 있는 컴파일러로 바이트 코드로 변환. 이때 확장자명이 .class인 자바 목적파일이 나온다.
  3. JRE가 JVM을 구동 시킨다.
  4. JVM이 바이트코드를 해서갛여 자바 프로그램이 실행된다.

Java의 장단점

  • 자바의 장점
    • 객체지향 언어
    • 운영체제에 독립적
    • 다중 쓰레드 제공
  • 자바의 단점
    • JVM을 사용하여 CPU자원과 더 많은 물리적 메모리 소비로 인해 속도가 느리다.
    • 처리 속도가 중요한 애플리케이션에는 적합하지 않음.

스택(Stack)과 힙(Heap)

  • 스택(Stack)
    • 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
    • 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다.
    • 스택 메모리에 접근할때는 후입선출(Last In Firts Out)의 순서로 자료에 접근한다.
    • 참조변수에 저장되는 메모리주소는 스택영역에 저장되지만, 그 주소가 가리키는 메모리는 모두 힙 영역에 저장된다.
  • 힙(Heap)
    • 스택에 저장되어있는 참조변수의 주소가 가리키는 곳의 실제 값들이 저장되어 있는 영역이다.
    • 사용자에 의해 메모리 공간이 동적으로 할당되고 해제되는 곳이다. new연산자를 통해 메모리를 할당하는 것은 저부 힙(heap) 영역에 할당
    • 자바에서는 가비지 컬렉터 또는 jvm에 의해 메모리가 해제 될 떄까지 유지된다.

기본형 변수, 참조 변수

8가지 원시타입(byte, short, int, long, float, double, char, boolean)을 제외한 그 외의 타입으로 정의된 변수들은 전부 레퍼런스 변수, 즉 참조변수이다.

프로세스와 스레드

  • 프로세스
    • 운영체제에서는 실행준인 하나의 어플리케이션을 프로세스라고 한다.
    • 운영체제로 부터 자원을 할당받는 작업의 단위
    • 운영체제로 부터 프로세서를 할당받고, 운영되기 위해 필요한 주소 공간, 메모리 등 자원을 할당받는다.
  • 스레드
    • 프로세스가 할당받은 자원을 이용하는 실행의 단위
    • 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
  • 멀티스레드 vs 멀티 프로세스
    • 멀티스레드 : 스택 영역을 스레드 개수만큼 분할해서 사용, 하나의 스레드에서 다른 스레드의 스택 영역에는 접근 불가, 스태틱 영역 및 힙은 공유
    • 멀티 프로세스 : 다수의 데이터 저장 영역, 즉 다수의 메모리를 갖는 구조, 각 프로세스별로 메모리가 있다. 각자 고유 공간으로 침범 불가.

클래스 변수, 인스턴스 변수, 지역 변수

  • 클래스 변수
    • 인서턴스 변수에 static을 붙이면 클래스 변수가 된다. 클래스 변수는 모든 인스턴스가 공통된 값을 공유한다.
  • 인스턴스 변수
    • 인스턴스가 생성될 때 생성된다.
    • 인스턴스 변수의 값을 읽어오거나 저장하려면 인스턴스를 먼저 생성해야한다.
  • 지역 변수
    • 메서드 내에서 선언되며 메서드 내에서만 사용할 수 있다.

오버로딩, 오버라이딩

  • 오버라이딩( overriding ) : 같은 메서드 이름, 같은 인자 목록으로 상위 클래스의 메서드를 재정의
  • 오버로딩( overloading ) : 같은 메서드 이름, 다른 인자 목록으로 다수의 메서드를 중복 정의

접근 제어자

  1. private
    • 해당 클래스 내에서만 접근가능
  2. defalut
    • 해당 패키지 내에서만 접근가능
  3. protected
    • 동일 패키지내의 클래스 또는 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근 가능
  4. public
    • 어떤 클래스에서라도 접근이 가능하다.

상속, 구현

  • 상속 ( extends )
    • 자식이 부모의 특징을 상속 받아서 사용 가능하다.
    • 코드의 재사용성을 높이고 코드의 중복성을 최소화 가능
  • 구현 ( implements )
    • 인터페이스를 클래스에서 구현한다 것을 의미
    • 인터페이스에서 정의한 메서드에 강제 구현
  • 상속관 구현 특징
    • 클래스에서는 클래스의 다중 상속 불가능, 인터페이스는 다중 구현 가능

인터페이스, 추상 클래스

  • 추상 클래스 ( 추상화 )
    • 공통점을 찾아 추상화시킴
    • 추상클래스 는 공통적인 기능을 하는 객체들의 추상화이다. ( ex : 템플릿 메서드, 팩토리 메서드 패턴 )
    • 공통적인 기능에서 필요한 선택적으로 오버라이딩할 수 있는 훅(Hook) 메서드를 둘수 있음
    • static이나 final이 아닌 필드 지정 가능, 접근 제어자 원하는 대로 지정 가능
  • 인터페이스 ( 다형성 )
    • 무엇을 할 수 있는, 예) 고래는 헤엄칠 수 있다.
    • 모든 변수는 public static final, 모든 메소드는 public abstarct
    • 구현하는 모든 클래스에 대해 특정한 메서드가 반드시 존재하도록 강제
    • 구현 객체가 같은 동작을 한다는 것을 보장한다.
  • 추상 클래스, 인터페이스의 공통점
    • 인스턴스화 하는 것은 불가능
    • 구현부가 있는 메소드와 없는 메소드 모두 가질 수 있다는 점에서 유사

상위 클래스는 물려줄 특성이 풍성할수록 좋고( LSP 리스코프 치환 원칙에 따름 ), 인터페이스는 구현을 강제할 메서드의 개수가 적을수록 좋다 ( ISP 인터페이스 분할 원칙에 따름 ).

익명 클래스

InnerClass의 한 종류로 이름이 없는 객체를 만들 수 있다. 부모 클래스를 상속 받는 서브 클래스를 없이, 단일 객체를 만들어서 사용가능 하다.

객체지향 4대 특성

  1. 캡슐화 : 정보은닉 ( 접근 제어자 )
  2. 상속 : 재사용 ( 클래스 상속 )
  3. 추상화 : 모델링 ( 추상 클래스 )
  4. 다형성 : 사용 편의 ( 인터페이스 )

OOP

객체지향 프로그래밍(OOP)는 컴퓨터 프로그래밍 패러다임중 하나이다. 독립된 단위의 객체 ( Object )를 만들고 그 객체들 간의 메시지를 주고 받으며, 데이터를 처리하는 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

SOLID

SOLID는 객체지향 설계 5대 원칙이라 부르며, 객체 지향 4대 특성을 발판으로 하고 있다. 스프링 프레임워크의 근간이기도 하다.

  1. SRP : 단일 책임원칙
    • 모든 클래스는 각각 하나의 책임만 가져야한다.
  2. OCP : 개방폐쇄의 원칙
    • 확장에는 열려있고 수정에는 닫혀있어야한다.
  3. LSP : 리스코브 치환의 원칙
    • 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있다는 원칙
  4. ISP : 인터페이스 분리 원칙
    • 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.
  5. DIP : 의존 역전 원칙
    • 자신보다 변하기 쉬운 것에 의존하지 말아야한다.

AOP

  • AOP는 관점 지향 프로그래밍으로 불린다.
  • 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 것이다.
  • spring 에서의 aop는 프록시 패턴이라는 디자인 패턴을 사용해서 효과를 냄

디자인 패턴

  1. 어댑터 패턴
    • 호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴
  2. 프록시 패턴
    • 제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴
  3. 데코레이터 패턴
    • 메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴
  4. 싱글턴 패턴
    • 클래스의 인스턴스, 즉 객체를 하나만 만들어 사용하는 패턴
  5. 템플릿 메서드 패턴
    • 상위 클래스의 견본 메서드에서 하위 클래스가 오버라이딩한 메서드를 호출하는 패턴
  6. 팩터리 메서드 패턴
    • 오버라이드된 메서드가 객체를 반환하는 패턴
  7. 전략 패턴
    • 클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴
  8. 템플릿 콜백 패턴
    • 전략을 익명 내부 클래스로 구현한 전략 패턴

Ioc

IoC란 Inversion of Control의 줄임말로 한글로 번역하면 제어의 역전이다. 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미.

DI

DI란 Dependency Injection의 줄암말로 한글로 번역하면 의존성 주입이다. 객체를 직접 생성하는게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다. 이를 통해 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

bean 라이플 사이클

  1. 객체 생성
  2. 의존 설정
  3. 초기화
  4. 소멸

Spring MVC 패턴

MVC는 Model-View-Contorller의 약자이다.

  1. Model
    • Contorller에서 받은 데이터를 저장하는 역할, 데이터 의미
  2. View
    • 전달받은 Model 데이터 바탕으로 화면 출력 로직을 담당
  3. Contorller
    • Model과 View의 연결하는 제어 로직을 담당

기타

java, javascript

  • 자바는 서버측 언어이며 자바스크립트는 클라이언트용 언어이다.
  • 큰 차이는 자바는 컴파일 과정을 거치지만 자바스크립트는 브라우저가 직접 사용자의 명령을 해석함으로 컴파일 과정을 거치지 않는다.
  • java 컴파일 언어, javascript 인터프리터 언어

인터프리터 언어는 바로 번역 및 실행이 가능하고, 컴파일러 언어는 코드를 실행하기 전 코드를 컴파일하여 컴퓨터가 읽을수 있는 기계어로 변환하는 과정이 필요하다.

  • javascript
    • 클로저 : 독립적인 변수를 가리키는 함수이다.

jsp, servlet

  • servlet
    • 웹 서버의 성능을 향상시키기 위해 사용되는 자바 클래스의 일종이다.
    • 자바를 이용하여 웹페이지 문서를 동적으로 생성하는 서버측 프로그램을 말한다.
    • 서블릿은 자바 코드 안에 HTML을 포함하고 있다.
    • DB와의 통신, Business Logic 호출, 데이터를 읽고 확인하는 작업 등에 유용하다.
    • 데이터를 가공하여 view 전달하는 Controller의 역할을함 ( MVC2 )
  • jsp ( java server page )
    • HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 서버 사이드 스크립트 언어이다.
    • 서블릿의 단점을 보완하고자 만든 서블릿 기반의 스크립트 기술이다.
    • 사용자에게 결과를 보여주는 프리젠테이션 층을 담당
    • 요청 결과를 나타내는 HTML 작성하는데 유용

둘이 기능 차이는 없지만, 역할의 차이는 존재한다. jsp는 사용자에게 보여지는 view를 담당하고, 복잡한 데이터 처리는 servlet이 처리하는 역할을 한다.

서블릿은 수정시에 전체 코드를 업데이트하고 다시 컴파일한 후 재배포하는 작업이 필요하고, jsp는 수정된 경우 재배포할 필요가 없이 WAS가 알아서 처리한다.

브라우저에서 jsp를 호출 하게 되면 jsp 파일 자체를 보여주는게 아니라, jsp가 servlet 형태로 변환되어 응답한다.