Daily/취준

자바 기초 기술 면접

창문닦이 2019. 7. 24. 13:57

 

참조한 블로그 및 사이트

#1
신입 프로그래머 기술(실무) 면접준비


https://91ms.tistory.com/2?category=711086
JVM이란 무엇인가 https://asfirstalways.tistory.com/158
TCPschool http://tcpschool.com/java/java_usingClass_innerClass
1: 프론트엔드와 백엔드 (5편까지 존재) https://goo.gl/7GLeQN
백엔드 개발자를 꿈꾸는 학생개발자에게 https://d2.naver.com/news/3435170
도커와 서버리스 관련 https://medium.com/harrythegreat/2019%EB%85%84-%EC%9B%B9-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9D%98-%EC%A0%84%EB%A7%9D%EA%B3%BC-%ED%99%94%EB%91%90-654d00686a59

 

 

  질문 답 변
1 String, StringBuffer, StringBuilder 차이점은? 모두 문자열을 저장하고 관리하는
클래스입니다.
- String
불변하고 StringBuffer StringBuilder 가변적이라는 특징이 존재합니다.
스트링은 인스턴스가 생성되면 메모리공간이 절대 변하지 않아
문자열 연산이 있는 경우 새로운 객체를 만들어서 오버헤드가 발생할 있습니다.
- String
클래스는 문자열 연산이 적고 조회가 많을 멀티쓰레드 환경에서 사용하는 것이 좋습니다.
StringBuffer
StringBuilder 가변적입니다.
문자열 연산이 자주 있을때 사용하면 성능이 좋습니다.
- StringBuffer
멀티쓰레드환경에서 Synchronized 키워드가 가능하므로 동기화가 가능합니다.
- StringBuilder
동기화를 지원하지 않기 때문에 멀티쓰레드환경에서는 적합하지 않습니다. 그래서 연산처리가 빠릅니다.
 
 
2 OOP
? (객체 지향 프로그래밍 - Object Oriented Programming)
데이터를 추상화시켜 상태와 행위를 가진 객체로 취급하여 프로그램에 반영한 입니다.
객체와 객체의 상호작용을 통해 프로그램이 동작합니다.
특징으로는 코드 재사용성이 높고, 코드의 변경이 용이하며, 개발속도 향상, 상속을 통한 장점 극대화가 있습니다.
3 객체 지향적 설계 원칙 SRP(Single Responsibility Principle) : 단일 책임 원칙
클래스는
하나의 책임을 가져야 하며 클래스를 변경하는 이유는 하나의 이유이어야 한다.
OCP(Open-Closed Principle) :
개방-폐쇄 원칙
확장에는
열려 있어야 하고 변경에는 닫혀 있어야 한다.
LSP(Liskov Substitution Principle) :
리스코프 치환 원칙
상위
타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
ISP(Interface Segregation Principle) :
인터페이스 분리 원칙
인터페이스는
인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
DIP(Dependency Inversion Principle) :
의존 역전 원칙
고수준
모듈은 저수준 모듈의 구현에 의존해서는 안된다.
4 클래스와 구조체의 차이점 - 구조체는 하나의 구조로 묶일수 있는 데이터, 변수들의 집합
- 클래스는 변수 뿐만 아니라 함수(메서드)까지 포함시킬 있다는 .
5 클래스와 인스턴스  - 클래스는 속성과 행위를 변수와 메소드로 정의한 것입니다.
- 인스턴스는
클래스에서 정의한 것을 토대로 실제 메모리상에 할당된 것으로 실제 프로그램에서 사용되는 데이터입니다.
6 내부 클래스(inner class) 내부 클래스(inner class) 하나의 클래스 내부에 선언된 다른 클래스 의미합니다.
이러한 내부 클래스는 외부 클래스(outer class) 대해 개의 클래스가 서로 긴밀한 관계를 맺고 있을 선언할 있습니다

내부
클래스의 장점
1.
내부 클래스에서 외부 클래스의 멤버에 손쉽게 접근할 있게 됩니다.
2.
서로 관련 있는 클래스를 논리적으로 묶어서 표현함으로써, 코드의 캡슐화를 증가시킵니다.
3.
외부에서는 내부 클래스에 접근할 없으므로, 코드의 복잡성을 줄일 있습니다.
7 정적 클래스(static class) 외부 클래스 영역에 선언된 클래스 중에서 static 키워드를 가지는 클래스 정적 클래스(static class)라고 합니다.이러한 정적 클래스는 주로 외부 클래스(outer class) 클래스 메소드에 사용될 목적으로 선언됩니다.
8 인스턴스 클래스(instance class) 외부 클래스 영역에 선언된 클래스 중에서 static 키워드를 가지지 않는 클래스 인스턴스 클래스(instance class)라고 합니다.이러한 인스턴스 클래스는 주로 외부 클래스(outer class) 인스턴스 변수나 인스턴스 메소드에 사용될 목적으로 선언됩니다.
9 지역 클래스(local class) 지역 클래스(local class) 외부 클래스의 메소드나 초기화 블록에 선언된 클래스 의미합니다.이러한 지역 클래스는 선언된 블록 내에서만 사용할 있습니다.
10 익명 클래스(anonymous class) 다른 내부 클래스와는 달리 이름을 가지지 않는 클래스를 의미합니다.익명 클래스는 클래스의 선언과 동시에 객체를 생성하므로, 하나의 객체만을 생성하는 일회용 클래스입니다따라서 생성자를 선언할 수도 없으며, 오로지 하나의 클래스나 하나의 인터페이스를 상속받거나 구현할 있을 뿐입니다.이러한 익명 클래스는 매우 제한적인 용도에 사용되며, 구현해야 하는 메소드가 매우 적은 클래스를 구현할 사용됩니다.

// 익명 클래스는 선언과 동시에 생성하여 참조변수에 대입함.
클래스이름 참조변수이름 = new 클래스이름(){
    // 메소드의 선언
};
11 추상화 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 공통의 속성이나 기능을 묶어 이름을 붙이는 것이다.
12 캡슐화 코드를 재수정없이 재활용 있도록 관련된 기능과 특성을 모아 클래스로 분류합니다.
13 상속 부모클래스의 속성과 기능을 그대로 이어받아 사용할 있게하고 일부분을 변경해야할 경우 상속받은 클래스에서 해당 기능만 재정의하여 사용할 있게 하는 것입니다.

  is-a
관계가 성립되어야한다(~ ~이다.) 사람과 학생의 관계를 생각(Person-Student)

상속받는 클래스를 만들기 위해서 class Student extends [상속할 클래스 이름] 이런식으로 상속이라는 문법을 사용할 있다. 상속을 사용한 프로그램은 메모리 공간 할당 -> 부모 클래스의 생성자 실행 -> 자식 클래스의 생성자 실행이라는 순서를 가지게 된다.
14 다형성 하나의 변수명, 함수명이 상황에 따라 다른의미로 해석될 있는 것입니다. 오버라이딩과 오버로딩이 가능합니다.
15 Java Sun 마이크로 시스템사가 개발한 객체지향 프로그래밍 언어입니다.
JVM
설치하면 컴퓨터의 운영체제에 상관없이 작동합니다.
Garbage Collector
통해 메모리를 관리하는 기능이 존재합니다.
16 JVM(Java Virtual Machine) 자바가상머신의 약자입니다. 가상머신은 프로그램을 실행을 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것입니다. JVM 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어들여 자바 api 함께 실행하는 것입니다. 그리고 JAVA OS사이에서 중개자 역할을 수행합니다. 그리고 가장 중요한 메모리 관리, Garbage Collection 수행합니다. 또한 JVM 스택기반의 가상머신입니다. 
17 Object(
객체)
데이터(변수) 데이터에 관련되는 함수를 포함한 개념입니다. 같은 성질, 같은 구조와 형태를 가지는 객체는 등급으로 정의하고 등급에 속하는 객체는 등급의 인스턴스라고 한다.
18 Object
클래스
Object 클래스는 모든 자바 클래스의 최고 조상 클래스가 됩니다.
따라서 자바의 모든 클래스는 Object 클래스의 모든 메소드를 바로 사용할 있습니다.
이러한 Object 클래스는 필드를 가지지 않으며, 11개의 메소드만으로 구성되어 있습니다.
19 오버로딩 메소드 중복정의
같은 이름의 메소드를 여러 정의하는 것입니다.
매개변수의 타입이나 개수를 다르게 정의해야 합니다.반환타입이나 접근제어자는 영향을 주지 않습니다. 메소드의 이름을 동일하게 하여 유사한 기능 설계시 통일성을 부여할 있습니다.
20 오버라이딩 메소드 재정의
상속에서
나온 개념으로 상위 클래스의 메소드를 하위 클래스에서 재정의하는 것입니다.
21 J
DBC
자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API
22 I
nterface
일종의 추상클래스 입니다. 오직 추상메소드와 상수만을 멤버로 갖습니다.
목적 : 상속의 관계가 없는 클래스간 서로 공통되는 로직을 구현하여 있도록 한다.

Implements
키워드를 사용하며 상속의 관계가 없는 클래스간 서로 공동되는 로직을 구현하여 쓸수 있도록 합니다. 다중상속이 가능합니다.
23 A
bstract
추상메소드를 하나 이상 가진 추상클래스 입니다.
자신의 생성자로 객체 생성이 불가능하며 하위클래스를 참조하여 상위클래스의 객체를 생성합니다. 하위 클래스를 제어하기 위해 사용합니다.
24 Interface
Abstract class 공통점
추상클래스와 인터페이스는 선언만 있고 구현 내용이 없는 클래스입니다.
인터페이스와 추상클래스를 가지고 새로운 인스턴스를 생성할 없습니다.
추상클래스를 extends 상속받아 구현한 자식클래스나 인터페이스를 implements 구현한 자식클래스만이 객체를 생성할 있습니다.
25 Call by Reference, Call by Value Call by Reference 매개변수의 원래 주소에 값을 저장하는 방식입니다.
Call by Value
주어진 값을 복사하여 처리하는 방식. 메서드 내의 처리 결과는 메서드 밖의 변수에 영향을 미치지 않습니다.
26 Static 의미는? 클래스가 로딩될 메모리 공간을 할당하는 처음 설정된 메모리 공간이 변하지 않음을 의미
.
객체를 아무리 많이 만들어도 해당 변수는 하나만 존재합니다.
27 Garbage collection? 시스템에서 이상 사용하지 않는 동적 할당된 메모리 블록을 찾아 자동으로 다시 사용가능한 자원으로 회수하는 입니다. 시스템에서 가비지 컬렉션을 수행하는 부분을 가비지 컬렉터라 부릅니다.
28 Primitive type(
기본형- 원시타입)
 Reference type(참조형)
원시타입 - 변수에 자체를 저장합니다. (정수형, 실수형, 문자형, 논리형). Wrapper 클래스를 통해 객체로 변환이 가능하다

참조형
타입 - 메모리상에 객체가 있는 위치를 저장합니다. (클래스타입, 인터페이스타입, 배열타입, 열거타입)
29 Wrapper Class Primitive Type 표현할 있는 간단한 데이터를 객체로 만들어야 경우가 있는데 그런 경우를 지원한다.
30 Boxing
UnBoxing


- Boxing :
기본 자료형을 Wrapper 클래스의 객체로 변경하는 과정 ex) Integer age = new Integer(30);

- Unboxing :
각각의 객체를 기본 자료형으로 변경하여 사용하는 과정
ex) int age2 = age.intValue();
출처: https://hyeonstorage.tistory.com/168 [개발이 하고 싶어요]
31 AutoBoxing
AutoUnBoxing
- AutoBoxing

Integer obj = 61;
숫자 61 Integer 객체에 넣기 위해서는(Boxing) new Integer(61) 같이 객체를 생성해야 하지만, 위와 같이 대입하면 AutoBoxing 자동으로 진행된다.

- AutoUnBoxing

Integer obj2 = new Integer(69);
int num1 = obj2;
Integer
객체에 있는 int 값을 가져오기 위해서는(UnBoxing) obj2.intValue() 메소드를 사용하여 가져와야 하지만, 위와 같이 int 변수에 Integer 객체를 대입하면 자동으로 UnBoxing 진행된다.

* AutoBoxing
AutoUnBoxing 단지 기본형 타입과 상응하는 Wrapper class에만 일어난다. 다른 경우에 대입을 시도하면 컴파일 에러가 발생한다.
출처: https://hyeonstorage.tistory.com/168 [개발이 하고 싶어요]
32 스레드와 프로세스 스레드는 프로세스내에서 동시에 실행되는 독립적인 실행단위입니다.
프로세스는 운영체제에서 실행중인 하나의 프로그램입니다. 하나 이상의 스레드를 포함합니다.
프로세스 내에서 실행되는 세부 작업단위로 여러 개의 스레드가 하나의 프로세스를 이룹니다.

스레드의 장점은 빠른 프로세스 생성. 자원을 많이 사용하지 않고 구현이 쉬우며 범용성이 높습니다. 단점은 교착상태에 빠질 있습니다.
33 교착상태 다중 프로그래밍 체제에서 하나 또는 이상의 프로세스가 수행할 없는 어떤 특정시간을 기다리고 있는 상태입니다.

두개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태입니다.
34 트랜잭션 동시성 제어 동시에 실행되는 트랜잭션 수를 최대화하면서도 입력, 수정, 삭제, 검색 데이터의 무결성이 유지될 있도록 노력하는 것을 말한다.
35 접근제어자
(public > protected > default > private)
public - 접근 제한이 없다. 같은 프로젝트 내에서 어디서든 사용이 가능하다
protected -
같은 패키지내, 다른 패키지에서 상속 받아 자식 클래스에서 접근이 가능하다.
Default -
같은 패키지 내에서만 접근이 가능하다.
private -
같은 클래스 내에서만 접근이 가능하다.
36 Stack Last in First Out. 후입선출 구조입니다.
Push();
이용한 데이터 입력, pop(); 이용한 데이터 출력
시스템 스택 : CPU 함수의 호출과 복귀 순서를 스택의 구조로 응용하여 관리.
역순 문자열 만들기, 수식의 괄호 검사, 수식의 후위 표기법 변환 사용됩니다.
37 Q
ueue
First in First Out. 선입선출 구조입니다.
enQueue();
이용한 데이터 입력, deQueue(); 이용한 데이터 출력
넣은
순서대로 자료를 꺼내가므로 순서대로 처리해야하는 자료를 임시적으로 저장하는 용도로 흔히 사용합니다. 저장되는 자료의 타입이 동일하므로 배열 또는 연결리스트로 큐를 구현할 있습니다.
우선순위가
같은 작업 예약(인쇄 대기열), 선입 선출이 필요한 대기열(티켓 카운터)
38 이진탐색트리(Binary Search Tree) 이진탐색트리는 데이터의 삽입, 삭제, 탐색 등이 자주 발생하는 경우에 효율적인 구조로, 이진 트리이면서 같은 값을 갖는 노드가 없어야한다.
왼쪽 서브 트리에 있는 모든 데이터는 현재 노드의 값보다 작고, 오른쪽 서브 트리에 있는 모든 노드의 데이터는 현재 노드의 값보다 크다. , 정렬이 되어있어야 한다
39 Servlet Container 이해할 있도록 구성된 자바코드로 이루어진 (HTML in Java)
 웹프로그래밍에서 클라이언트의 요청을 처리하고 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그래밍 기술
클라이언트의
요청에 대해 동적으로 작동하는 어플리케이션 컴포넌트
html 사용하여 요청에 응답한다. Java Thread 이용하여 동작한다. MVC 패턴에서 Controller 이용된다.
HTTP
프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다. UDP보다 속도가 느리다. HTML 변경 Servlet 재컴파일해야 하는 단점이 있다.

 
웹서버가 동적인 페이지를 제공할 있도록 도와주는 어플리케이션이 서블릿이며, 동적인 페이지를 생성하는 어플리케이션이 CGI입니다. 
40 CGI(Common Gateway Interface) 별도로 제작된 웹서버와 프로그램간의 교환방식입니다. CGI방식은 어떠한 프로그래밍언어로도 구현이 가능하며, 별도로 만들어 놓은 프로그램에 HTML Get or Post 방법으로 클라이언트의 데이터를 환경변수로 전달하고, 프로그램의 표준 출력 결과를 클라이언트에게 전송하는 것입니다.
, 자바 어플리케이션 코딩을 하듯 브라우저용 출력 화면을 만드는 방법입니다.
41 Deque
데크
자료의 입출력을 양쪽끝에서 가능하게 하는 자료구조
42 Scroll
스크롤
입력이 한쪽 끝으로만 가능하도록 제한한
43 Shelf
셸프
출력이 한쪽 끝으로만 가능하도록 제한한
44 JSP(Java Server Page) HTML 기반에 자바코드를 블록화하여 삽입한 (Java in HTML)
HTML
소스 코드속에 들어가는 자바 소스 코드는 <% 소스코드 %> 또는 <%= 소스코드 =%> 형태로 사용합니다.
출처: https://til0804.tistory.com/25
45 Get
방식과 Post방식
두 방식 모두 서버에 요청을 하는 메서드.
Get방식은 클라이언트에서 서버로 데이터를 전달할 주소뒤에 이름과 값이 결합된 쿼리 스트링 형태로 전달합니다
. URL에 데이터를 담기 때문에 http패킷의 헤더에 포함되어 서버에 요청한다. 주소창에 해당 데이터 값이 그대로 보여지기 때문에 보안성이 떨어집니다. 전송 데이터의 길이에 제한이 있습니다. Post방식보다 상대적으로 전송속도가 빠릅니다

Post방식은 일정 크기 이상의 데이터를 보내야할 사용합니다
. body에다가 데이터를 넣어서 보낸다. 헤더필드중 body의 데이터를 설명하는 Content-type이라는 헤더 필드가 들어가고 어떤 데이터 타입인지 명시한다. 서버로 보내기전에 인코딩하고 전송 서버에서는 다시 디코딩 작업을 합니다. 주소창에 데이터 정보가 노출되지 않아 Get방식에 비해 보안성이 높습니다. 문자열 데이터 뿐만 아니라, 라디오 버튼, 텍스트 박스와 같은 객체들의 값도 전송 가능합니다.

- Get
주로 브라우저가 서버에 데이터를 요청할 사용
- Post 브라우저가 서버에 데이터를 전달하기 위해 사용
- Get 사용하면 브라우저에서 서버로 전달되는 데이터가 인코딩되어 URL 붙는다.
- Post
방식은 전달되는 데이터가 보이지 않는다.
- Get
방식은 전달되는 데이터가 255개의 문자를 초과하면 문제가 발생할 있다.
-
웹서버에 많은 데이터를 전달하기 위해서는 Post방식을 사용하는 것이 바람직하다.참조 : https://mommoo.tistory.com/60
46 Session
Cookie 사용 이유 
 현재 우리가 인터넷에서 사용하고 있는 HTTP 프로토콜은 연결 지향적인 성격을 버렸기 때문에 새로운 페이지를 요청할 때마다 새로운 접속이 이루어지며 이전 페이지와 현재 페이지간의 관계가 지속되지 않는다. 이에 따라 HTTP 프로토콜을 이용하게 되는 사이트에서는 페이지에 특정 방문자가 머무르고 있는 동안에 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용한다.
47 HTTP
프로토콜의 특징
비연결을 지향한다
-HTTP는 먼저 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 요청에 맞는 response를 보내고 접속을 끊는 특성이 있다.

상태정보를 유지하지 않는다.
-연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태정보는 유지하지 않는 특성이 있다.

장점 : 통신 연결을 유지하지 않아 리소스낭비 감소.
단점 : 새로 커넥션을 열기때문에 클라이언트는 내가 누구인지 계속 인증해야한다.
48 Session 세션은 특정 웹사이트에서 사용자가 머무르는 기간 또는 한명의 사용자가 한번의 방문을 의미한다.
세션에 관련된 데이터는 서버에 저장된다.
브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다.
쿠키에 비해 보안성이 좋다.

클라이언트가 Request 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID 부여하는 이것이 세션ID.
49 Cookie  쿠키는 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터파일이다. 이름,,쿠키만료시간, 경로정보등이 들어있다. 쿠키는 일정시간동안 데이터를 저장한다.

사용자
정보를 유지할 없다는 HTTP 한계를 극복할 있는 방법이다.
인터넷 사이트의 방문 기록을 남겨 사용자와 사이트 사이를 매개해주는 정보이다

쿠키는
인터넷 사용자가 특정 웹서버에 접속할 , 생성되는 개인 아이디와 비밀번호, 방문한 사이트 정보를 담은 임시파일이다.

서버가 아닌 클라이언트에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 사용된다.
쿠키는 클라이언트PC 저장되는 정보이기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다. (그래서 정보 유출이 가능하여 세션보다 보안성이 낮다.)
50 보안성이 낮은 쿠키 대신 세션을 사용하면 되는데 안하는 이유는? 모든 정보를 세션에 저장하면 서버의 메모리를 과도하게 사용하게 되어 서버에 무리가 가게된다.
51 MVC? Model, View, Controller 분리하여 사용하는 소프트웨어 디자인 패턴입니다.
52 M
VC 구성요소는?
Model : 데이터를 담고 있는 객체. 자바빈즈를 뜻한다 (DTO, DAO)
-
컨트롤러에서 request 분석해서 알맞은 모델을 호출하면서 모델의 기능 시작
-
모델은 컨트롤러가 요청한 비즈니스로직을 처리 결과를 자바빈에 저장해서 컨트롤러에 전달

View : 화면처리 (JSP page), 프론트엔드. 데이터를 표현하는 객체
- MVC 패턴에서의 View역할을 하는 JSP 비즈니스 로직과 관련된 코드가 없다는 제외하고 일반 JSP 페이지와 동일
- 특징 :  request session 기본 객체에 저장한 데이터를 사용해서 알맞은 결과를 출력.

Controller :
프로그램의 흐름을 제어하는 역할. 데이터를 컨트롤하고 Model View사이를 중재한다.
-
컨트롤러는 분배기 개념으로 비즈니스 로직을 필요가 없다
- request 맞는 모델을 사용하여 요청한 기능을 수행하고 결과를 View 전달
- Model
에서 받은 결과물을 가공한 request session 기본객체의 setAttribute 메소드를 사용하여 결과값을 속성에 저장
53 M
VC 패턴 모델1 모델2 차이
Model1은 뷰와 컨트롤러를 JSP로 구현한다. 
장점은 개발속도가 빠르고 배우기 쉽습니다. 하지만 가독성이 떨어지고 재사용이 힘들다는 단점이 존재합니다. 모든 클라이언트의 요청과 응답을 JSP 담당하는 구조이기 때문에 단순한 페이지 작성으로 쉽게 구현 가능한 중소형 프로젝트에 적합하다.

반면 Model2 클라이언트의 요청처리와 응답처리, 비즈니스 로직처리하는 부분을 모듈화 시킨 구조입니다
. 뷰는 JSP, 컨트롤러는 서블릿으로 작성되어 클라이언트의 요청을 서블릿으로 구현된 컨트롤러가 받아 파라미터를 서비스 객체로 전달하여 처리하고 그 결과를 뷰에 전달한다. 처리 작업의 분리로 인해 유지보수와 확장이 용이해진다.  (책임구분이 명확해진다는 것은 의존성이 약해진다는 개념). 개발자와 디자이너의 역할과 책임구분이 명확해진다. 컴포넌트의 재사용성이 높아진다. MVC구조에 대한 이해가 필요하며 개발자의 높은 skill 요구된다.
54 데이터베이스란? 조직에서 업무처리를 위해 다수의 응용시스템 혹은 다수의 사용자들이 공용으로 사용하기 위해 저장된 운영 데이터의 집합입니다.
55 데이터정의어 DDL 데이터베이스 구조를 정의, 수정, 삭제하는 언어입니다.
(CREATE, ALTER, DROP)
56 데이터조작어 DML 데이터베이스 내의 자료 검색, 삽입, 갱신, 삭제를 위한 언어입니다.
(SELECT, DELETE, UPDATE, INSERT)
57 데이터제어어 DCL 데이터에 대해 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어입니다.
COMMIT, ROLLBACK, GRANT, REVOKE
58 스키마 데이터베이스의 전체적인 구조와 제약조건에 대한 명세를 기술 정의한 입니다.
59 개체 무결성 기본키는 Null값이 없으며, 중복될 없다.
60 참조 무결성 외래키는 Null값이 있으며, 부모테이블의 기본키에 종속되어야한다.
61 도메인 무결성 특정 속성의 값이 속성이 정의된 도메인에 속한 값이어야 한다.
62 고유 무결성 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 속성값은 모두 달라야 한다.
63 NULL 무결성 특정 속성 값에 null 올수 없다는 조건이 주어진 경우, 속성값은 null 올수없다
64 키 무결성 릴레이션에는 최소한 하나의 키가 존재해야한다는 제약조건
65 하나 이상의 테이블로부터 유도되어 만들어진 가상테이블입니다.
66 인덱스 생성시 고려사항 테이블의 전체 데이터 적은양을 조회할 사용합니다.
테이블에 데이터가 적을수록 인덱스의 효율은 떨어집니다.
데이터의 유일성이 높을수록, 데이터의 범위가 넓을수록 인덱스의 효율은 올라갑니다.
Null
적은 컬럼이 인덱스 효율이 좋습니다.
67 테이블을 드롭(DROP)하는 것과 자르는 (Truncate), 그리고 테이블 모든 레코드를 삭제(Delete)하는 것의 차이점은 무엇입니까? delete table 로그에 기록되는 작업이기 때문에 삭제되는 행은 트랜잭션 로그에 기록되고 이것은 작업을 느리게 합니다. Truncate table 역시 테이블내에 행들을 삭제하지만 삭제되는 행을 기록하지 않고 테이블의 데이터베이스 할당 해제를 기록하여 작업이 빠릅니다. 하지만 롤백이 불가능합니다.

- delete
명령어는 데이터는 지워지지만 테이블 용량은 줄어들지 않습니다. 원하는 데이터만 지울 있고 삭제 롤백이 가능합니다.
- truncate
명령어는 용량이 줄어들고 인덱스도 모두 삭제됩니다. 테이블은 삭제하지 않고 데이터만 삭제합니다. 삭제 되돌릴 없습니다.
- drop
명령어는 테이블 전체를 삭제합니다. 
68 WHERE 절과 HAVING 절의 차이점 Having절은 그룹함수의 그룹의 조건으로 사용되고,
where
절은 데이터에 조건을 주는 역할입니다.
69 기본키와 유일키의 차이점 기본키는 null 허용하지 않지만 유일키는 모든 컬럼중 유일하게 하나에 대한 null 허용합니다. 그래서 unique key 개체 하나하나를 구분할 기본키가 없습니다.
70 쿼리 순서  SELECT -> FROM -> WHERE -> GROUP BY -> ORDER BY
71 프레임워크 특정 형태의 소프트웨어 문제를 해결하기 위해 상호 협력하는 클래스 프레임과 인터페이스 프레임의 집합
소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는
72 스프링 프레임워크 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크.
자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
크기와 부하의 측면에서 경량
제어의
역전이라는 기술을 통해 애플리케이션의 느슨한 결합을 도모
관점
지향 프로그래밍(AOP) 위한 풍부한 자원
애플리케이션
객체의 생명주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너라고 있다.
간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정할 있다.
73 제어의 역전 IoC 객체의 생성과 소멸에 대한 제어건이 사용자가 아니라 프레임워크에게 옮겨져 필요에 따라 스프링에서 사용자의 코드를 호출한다.
74 의존성 주입 DI 각각의 계층이나 서비스들간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
75 관점
지향 프로그래밍(AOP)
트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 있다.
76 스프링 MVC 구조의 처리과정 1) DispatcherServlet : 어플리케이션으로 들어오는 모든 Request 받는 관문이다. Request 실제로 처리할 Controller에게 전달하고 결과값을 받아서 View에게 전달하여 적절한 응답을 생성할 있도록 흐름을 제어한다.
2) HandlerMapping : Request URL
각각 어떤 Controller 실제로 처리할 것인지 찾아주는 역할
3) Controller : Request 직접 처리한 결과를 다시 DispatcherServlet에게 돌려준다.
4) ModelAndView : Controller
처리한 결과와 결과를 보여줄 View 관한 정보를 담고있는 객체이다.
5) ViewResolver : View
관련 정보를 갖고 실제 View 찾아주는 역할을 한다.
6) View : Controller
처리한 결과값을 보여줄 View 생성한다.
77 WAS(Web application Server) DB조회, 로직처리가 요구되는 컨텐츠와 같은 동적 컨텐츠를 제공하기 위해 만들어진 애플리케이션 서버
JSP, Servlet
실행시킬 있는 소프트웨어 = 컨테이너
대표적인
: 톰캣, Jeus, Jboss
78 서버(Web Server) 클라이언트가 서버에 페이지 요청을 하면 요청을 받아 정적 컨텐츠를 제공하는 서버
클라이언트에서
요청이 가장 앞에서 요청에 대한 처리를 한다.
클라이언트의 요청을 기다리고 요청에 대한 데이터를 만들어서 응답하는 역할을 한다.
대표적인 : apache, nginx
79 WAS 웹서버의 차이 동적 컨텐츠 처리를 수행가능 여부.

WAS
정적, 동적 컨텐츠 처리 모두 가능하지만 정적처리를 WAS 하게되면 부하가 많이 걸려서 좋지 않습니다. 참고 : 톰캣(WAS)에는 아파치(웹서버) 기능(웹서비스데몬, Httpd) 포함하고 있습니다. 
80 톰캣앞에 아파치를 두는 이유 정적 컨텐츠 제공보다는 로드밸런싱 역할을 하는 경우가 많습니다.
포트에 따른 권한 보안 이슈 때문에  구성하는 경우가 있습니다.
https://okky.kr/article/482325
81 Load Balancing 하나의 인터넷 서비스가 발생하는 트래픽이 많을 여러 대의 서버가 분산처리하여
(서버의 로드율 증가, 부하량, 속도저하 등을 고려하여 적절히 분산처리하여) 해결해주는 서비스입니다.
82 싱글톤 패턴이란? 애플리케이션이 시작될때 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 메모리에 인스턴스를 만들어 사용하는 디자인패턴입니다. 하나의 인스턴스를 생성해 사용하는 디자인패턴입니다.

생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나고 최초 생성 이후에 호출된 생성자는 최초에 생성한 객체를 반환합니다.(자바에서는 생성자를 private 선언해서 생성불가하게 만들고 getInstance() 메소드를 통해 객체를 받아쓰도록 만들기도 )
83 싱글톤 패턴의 장점 고정된 메모리 영역을 얻으면서 한번의 new 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 있습니다.
싱글톤 패턴으로 생성된 클래스의 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽습니다.
DBCP(Database Connection Pool)
처럼 공통된 객체를 여러 생성해서 사용해야 하는 상황에서 많이 사용합니다. (스레드풀, 캐시 대화상자, 사용자설정, 레지스트리 설정, 로그 기록 객체 )
84 싱글톤 패턴의 문제점 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들간에 결합도가 높아져 개방폐쇄원칙 위배하게 됩니다.(객체 지향 설계 원칙에 어긋난다)
멀티스레드환경에서 동기화처리를 안하면 인스턴스가 두개 생성될 있습니다.
https://jeong-pro.tistory.com/86?category=793347
85 HTTP(HyperText Tranfer Protocol) 웹브라우저(Client) 서버(Server)간의 웹페이지같은 자원을 주고 받을 쓰는 통신 규약입니다.
http
텍스트 교환이다. html페이지도 텍스트다. 바이너리 데이터로 되어있는 것도 아니고 단순 텍스트를 주고 받기 때문에 누군가 네트워크에서 신호를 가로채어 본다면 내용이 노출된다.(보안문제)
86 HTTPS 인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer) 프로토콜을 이용하여 브라우저(클라이언트) 서버가 데이터를 주고 받는 통신 규약입니다. 암호화 원리는 공개키 암호화 방식입니다.
87 SSL(Secure Socket Layer)  SSL이란 보안 소켓 계층을 이르는 것으로, 인터넷 상에서 데이터를 안전하게 전송하기 위한 인터넷 암호화 통신 프로토콜
88 브라우저에서 HTML문서 렌더링 과정 1. 불러오기 : 로더가 서버로부터 전달받는 리소스 스트림을 읽는 과정. 읽으면서 어떤 파일인지, 데이터인지, 파일을 다운로드할 것인지 등을 결정한다.
2.
파싱 : 엔진이 가지고 있는 HTML/XML 파서가 문서를 파싱해서 DOM Tree 만든다
3. 렌더링 트리 만들기 : DOM TREE 내용을 저장하는 트리로 자바스크립트에서 접근하는 DOM 객체를 쓸때 이용하는것. 별도로 그리기 위한 트리가 만들어져야 하는데 그게 렌더링트리.
4. CSS
결정 : 선택자에 따라서 적용되는 태그가 다르기 때문에 모든 CSS 스타일을 분석해 태그에 스타일 규칙이 적용되게 결정한다.
5.
레이아웃 : 렌더링 트리에서 위치나 크기를 가지고 있지 않기 때문에 객체들에게 위치와 크기를 정해주는 과정이다.
6.
렌더링 트리를 탐색하면서 그리기
89 렌더링 순서에 따른 CSS JS 위치   브라우저의 렌더링 순서에 따르면 문서를 파싱해서 DOM Tree 만들어도 스타일 규칙이 없으면 렌더링 수가 없다. 스타일규칙을 알아야 렌더링 트리가 완전히 만들어지므로 스타일 시트 파일을 모두 다운로드 시키기 위해 <head> 태그 사이에 놓는 것이다. (인터프리터는 위에서 아래로 읽음)

자바스크립트는 DOM객체를 이용해서 컴포넌트들을 조작하는데 상단에 놓이게 되면 HTML파서가 파싱을 멈추고 스크립트 파일을 읽기 때문이다. 따라서 시간이 오래걸려 사용자 입장에서 웹페이지가 느리게 보일 있다.
90 J
query Document.ready() Window.load() 실행순서
$(document).ready() : 외부 리소스, 이미지와 상관없이 DOM Tree 생성 실행된다.

$(window).load() :
화면에 필요한 모든 요소들이 메모리에 모두 올려진 다음에 실행된다. (화면이 모두 그려진 이후)
91 메모리 단편화란? RAM에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태
92 내부단편화 메모리를 할당할때 프로세스가 필요한 양보다 메모리가 할당되어서 프로세스에서 사용하는 메모리공간이 낭비되는 상황
93 외부단편화 메모리가 할당되고 해제되는 작업이 반복될 작은 메모리가 중간중간 존재하게 된다. 이때 중간마다 미사용 메모리 때문에 메모리공간은 충분하지만 실제로 할당할 없는 상황
94 메모리파편화 해결방법 - 페이징 기법 사용하지 않는 프레임을 페이지에 옮기고, 필요한 메모리를 페이지 단위로 프레임에 옮기는 기법
외부단편화
해결
95 메모리파편화 해결방법 - 세그멘테이션 기법 가상메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할해서 메모리를 할당하여 메모리를 할당하여 실제 메모리 주소로 변환
내부단편화
해결
96 메모리파편화 해결방법 - 메모리 필요한 메모리 공간을 필요한 크기,개수만큼 사용자가 직접 지정하여 미리 할당받아 놓고 필요할때마다 사용하고 반납하는 기법. 메모리를 가져다쓰고 반납하기 때문에 외부단편화가 발생하지 않고 필요한 만큼 할당해놓기 때문에 내부단편화 또한 생기지 않습니다.
메모리의 할당, 해제가 잦은 경우 메모리풀을 쓰면 효과적입니다.
97 Context Switch 멀티 프로세스 환경에서 CPU 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 기존의 프로세스의 상태 또는 레지스터 (Context) 저장하고 CPU 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 (Context) 교체하는 작업을 Context Switch(Context Switching)라고 한다.
98 Exclusive Lock
Shared Lock
Exclusive Lock 배타적잠금 = Write Lock 쓰기잠금
어떤
트랜잭션에서 데이터를 변경하고자 해당 트랜잭션이 완료될 때까지 해당 테이블 혹은 레코드를 다른 트랜잭션에서 읽거나 쓰지 못하게 잠그는

Shared Lock 공유잠금 = Read Lock 읽기잠금
리소스를
다른 사용자가 동시에 읽을 있게 하되 변경은 불가하게 하는

Lock
DBMS 자동으로 적용하기도 하고 수동으로도 있다. Lock 범위가 넓어질수록 동시에 접근할 없는 자원이 많아지므로 동시성 비용이 높아져 효율이 떨어질수있다.
99 템플릿 메소드 패턴 템플릿을 만들어주고 특정 메서드안을 채워넣기만 하면 되는 디자인 패턴
100 스트래티지 패턴 상속받은 객체마다 다를 있는 행위 부분(메소드) 캡슐화해 교환하여 사용하는 패턴
101 팩토리 메소드 패턴 객체생성을 직접하지 않고 하위 클래스가 어떤 객체 생성을 할지 결정하도록 위임하는 디자인 패턴
102 TCP/IP
UDP 차이점
Transfer Control Protocol / Internet Protocol 
인터넷 표준 프로토콜로서 컴퓨터 간의 주고받는 데이터를 전송할 에러가 발생하지 않도록 알맞게 나누어 전송하고 이를 수신하여 다시 기존의 정보로 변환하는 것을 약속해 놓은 을 말합니다.
데이터의 흐름관리 ,정확성 확인, 패킷의 목적지 보장을 담당한다. TCP/IP 응용/전송/인터넷.네트워크 인터페이스 계층으로 구성된다

전송시에
사용하는 프로토콜은 TCP UDP 존재합니다.
TCP(Transfer Control Protocol)
연결형 프로토콜
. 데이터의 경계를 구분하지 않고 신뢰성 있는 데이터를 전송할때 사용합니다. 일대일 통신에서 사용합니다.
UDP(User Datagram Protocol) 비연결형 프로토콜로 데이터의 경계를 구분합니다.
일대일, 일대다, 다대다 통신에서 사용합니다.
둘의 공통점은 포트번호를 이용하여 주소를 지정한다는 점과 데이터 오류검사를 위한 체크섬( header 변조되었는지 확인하는 역할) 있다는 점입니다.
103 TCP/IP
프로토콜 스택 4계층
l  LINK 계층 : 물리적인 영역의 표준화에 대한 결과. 가장 기본이 되는 영역으로 LAN, WAN, MAN 같은 네트워크 표준과 관련된 프로토콜을 정의하는 영역.
l  IP 계층 : 경로검색을 해주는 계층. IP 자체는 비연결지향적이며 신뢰할 없는 프로토콜이다. 데이터를 전송할 때마다 거쳐야 경로를 선택해주지만, 경로는 일정치 않다. 특히 데이터 전송 도중에 경로상에 문제가 발생하면 다른 경로를 선택해 주는데, 과정에서 데이터가 손실되거나 오류가 발생하는 등의 문제가 발생한다고 해서 이를 해결해주지 않는다. , 오류발생에 대한 대비가 되어있지 않은 프로토콜이다.
l  TCP/UDP(전송) 계층 : 데이터의 실제 송수신을 담당한다. UDP TCP 비해 상대적으로 간단하며, TCP 신뢰성 있는 데이터의 전송을 담당한다. 그런데 TCP 데이터를 보낼 기반이 되는 프로토콜이 IP이다. 앞서 말했듯이 IP 계층은 문제가 발생한다면 해결해주지 않는 신뢰되지 않은 프로토콜이다. 문제를 해결해 주는 것이 TCP. 데이터가 순서에 맞게 올바르게 전송이 갔는지 확인을 해주며 대화를 주고받는다. 확인절차를 걸쳐서 신뢰성 없는 IP 신뢰성을 부여한 프로토콜이라 생각하면 .
l  APPLICATION 계층 : 이러한 서버와 클라이언트를 만드는 과정에서 프로그램의 성격에 따라 데이터 송수신에 대한 약속(규칙)들이 정해지기 마련인데, 이를 가리켜 Aplication 프로토콜이라한다.
104 OSI 7계층 OSI 7 Layer 통신 접속에서 완료까지의 과정을 7단계로 정의한 국제 통신 표준 규약으로 다음과 같이 분류된다.
 물리계층 : 전송하는데 필요한 기능을 제공. 장비로는 통신 케이블, 허브가 존재한다.
 데이터링크계층 : /수신을 확인. MAC Address 가지고 통신. 장비로는 브릿지와 스위치가 존재한다.
 네트워크계층 : 패킷을 네트워크 간의 IP 통하여 데이터를 전달, 장비로는 라우팅이 존재한다.
 전송계층 : 호스트 시스템으로부터 발생하는 데이터의 흐름을 제공한다.
 세션계층 : 통신 시스템 사용자간의 연결을 유지 설정한다.
 
표현계층 : 세션 계층 간의 주고받는 인터페이스를 일관성 있게 제공한다.
 응용계층 : 사용자가 네트워크에 접근할 있도록 서비스를 제공한다.
105 제네릭 제네릭은 클래스와 인터페이스, 메소드를 정의할때 타입 파라미터로 사용합니다.
클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법
컴파일할때 타입을 체크해서 에러를 사전에 확인 가능하며, 코드의 재사용성이 좋아집니다.
106 데이터베이스 인덱스 RDBMS에서 대용량의 데이터(레코드) 있을 , 특정 데이터를 검색하기 위해서 테이블의 레코드를 full scan하는 것이 아니라, 인덱스가 적용된 컬럼의 테이블(컬럼, 인덱스주소) 따로 파일로 저장해놓고 그것을 검색해서 검색 효율을 높이는 방법이다
인덱스는 범위 스캔을 한다. 
107 공공데이터포털 OPEN API 사용하는 방법 (API 발급 과정부터 개발 문서 확인, 자바코드로 Response 받아보기까지 example) https://jeong-pro.tistory.com/143?category=793347
108 Ajax
( Asynchronous JavaScript and XML )
Ajax 페이지 전체를 다시 로딩하지 않고도, 페이지의 일부분만을 갱신할 있게 해줍니다.
Ajax 이용하면 백그라운드 영역에서 서버와 통신하여, 결과를 페이지의 일부분에만 표시할 있습니다. 서버와 통신하기 위해서 XMLHttpRequest 객체를 사용한다. 일반 텍스트 형식, JSON, XML,HTML 다양한 포맷을 주고받을 있다. 비동기 기술의 가장 장점은 비동기적으로 작업을 수행함으로써 페이지 일부만을 변경할 있다는 것이다. 이러한 비동기성을 통해서 특정 Event 발생시 전체 페이지가 아닌 일부분만을 업데이트하는 것이 가능하다.
109 XMLHttpRequest
객체
웹서버와의 비동기통신을 담당하는 자바스크립트 객체
110 readyState
XMLHttpRequest

객체의 주요 프로퍼티
 XMLHttpRequest 객체의 상태를 나타내는 코드. 처음 XMLHttpRequest 객체를 생성하면 0이다.
 0 (uninitialized) - (request
초기화되지 않음)
 1 (loading) - (
서버와의 연결이 성사됨)
 2 (loaded) - (
서버가 request 받음)
 3 (interactive) - (request(
요청) 처리하는 )
 4 (complete) - (request
대한 처리가 끝났으며 응답할 준비가 완료됨)
111 status
XMLHttpRequest

객체의 주요 프로퍼티
 서버로부터 받은 응답 코드를 나타내는 숫자.
200 (OK) -
정상적으로 응답을 받은 경우
403 (Forbidden) -
접근거부
404 (Not Found) - 페이지를 찾지 못한 경우
500 (Internal Server Error ) - 서버 오류 발생
112 statusText
XMLHttpRequest

객체의 주요 프로퍼티
 서버로부터 받은 응답 코드를 나타내는 문자열.
 
정상적으로 응답을 받으면 'OK' 되고 파일을 찾지 못하면 'Not Found' 된다.
113 세마포어(Semaphore) 운영체제 또는 프로그램 작성 내에서 공유자원에 대한 접속을 제어하기 위해 사용되는 신호이다.
공유자원에 접근할 있는 최대
허용치만큼만 동시에 사용자 접근이 가능하다. 스레드들은 리소스 접근 요청을 있고 세마포어에서는 카운트가 하나씩 줄어들게 되며 리소스가 모두 사용중인 경우(카운트 0) 다음 작업은 대기하게된다.
114 뮤텍스(Mutex) 상호배제, 제어되는 섹션에 하나의 쓰레드만을 허용하기 때문에 해당섹션에 접근하려는 다른 쓰레드들을 강제적으로 막음으로써 첫번째 쓰레드가 해당 섹션을 빠져 나올때까지 기다린다. 구조라고 생각하면 된다.
115 스크립트 언어와 컴파일 언어를 나열하고 차이점을 설명해보아라 스크립트 언어 : JavaScript, Python, Ruby...
컴파일 언어 : C, C++, C#, Java...
차이점 : 컴파일러의 존재 여부

컴파일
언어의 경우 컴파일러를 통해서 한번 컴파일 후에는 코드 수정 컴파일을 하기 전까지는 같은 결과를 나타내지만, 스크립트 언어의 경우 실행될 바로 해석하므로 코드 변경시 실행 때마다 결과가 바뀌게 된다.
116 동기화 무엇이며 어떠한 경우에 사용하는가 다중 스레드에서 하나의 자료에 접근할 사용한다(static으로 선언되어 있거나 배열에 접근하는 경우)

예를 들면, 은행계좌에 있는 돈에 대하여 동시에 출금 요청(접근) 가능하다면 쪽에서 출금 처리가 완료되기 전에 다른 쪽에서 출금을 요청하면 출금이 있기 때문에 반드시 동기화 처리를 해서 작업이 일어나는 중에는 다른 쪽에서의 접근을 막아주어야 한다.
117 포인터의 개념 포인터란 메모리 주소를 저장하는 변수이다.

예를 들면 주소를 지칭하고 있는 곳이다. 엘리베이터에서 포인터는 해당 층을 표시하는 버튼이며, 10 버튼을 누르면 10층으로 이동하듯이 해당 위치를 가리키고 있는 변수이다.

*
포인터를 사용할 주의할 점은 어떠한 주소를 가리키고 있어야 사용이 가능하다.
118 변수들이 메모리에 저장되는 영역 l  Heap 영역 : 동적할당(malloc)으로 할당된 변수가 들어감. 프로그래머 영역.

l
 Stack 영역 : 지역변수, 블록내에서 할당된 변수가 들어감. 블록을 벗어나면 사라짐

Run time Bss Heap사이를 기준으로 해서 Heap 아래로 순차적으로 메모리를 사용하고 Stack 위쪽으로 순차적으로 메모리를 사용한다
119 재귀함수 재귀함수란 함수내에서 자기자신을 다시 호출하는 형태 입니다.
장점은 소스코드의 간결화가 가능해진다는 것이며, 단점은 연산시간이 오래걸리고 잘못작성시 무한루프에 빠질 있습니다.
120 U
ML(Unified Modeling Language)
객체 모델링 언어. 시스템 설계, 요구분석, 시스템 구현등의 과정에서 사용되는 모델링 언어 표기법의 표준화를 목적으로 합니다.
121 UML
다이어그램의 종류
클래스 다이어그램 : 클래스 별로 연관관계를 나타내는 다이어그램
유스케이스
다이어그램 : 행위자(Actor) UseCase 구분되어 그려진다.
상태 다이어그램 : 현재 상태를 나타내는 다이어그램
시퀀스
다이어그램 : 시간의 흐름에 따라서 나타내는 다이어그램
122 프로젝트 관리 모형 종류 폭포수 : 단계를 확실히 매듭 짓고 결과를 철저하게 검토 승인, 이전 단계로 돌아가기 어려움으로 확실하게 검토해야

프로토타입
: 사용자의 요구 사항을 정확히 파악하고 결과물을 예측하여 만들어내는 모형물, 사용자에게 미리 보여줄 있지만 결과물과 조금 다를 수도 있고 단기간에 만들어야 한다.

나선형 모델 : 가장 현실적인 모형으로 비교적 최신형태이다. 점진적으로 개발 과정이 순환하며 진행된다.

애자일 : 
123 Multi-Thread
서버
자바 프로그램은 클라이언트와 통신하기 위한 스레드를 생성할 있으며, 서버는 스레드를 이용하여 들어올 다음 연결을 처리할 준비를 있다. 스레드는 독립적인 자식 프로세스를 생성하는 것보다 서버에 훨씬 적은 부하를 준다.

사실 일반적인 유닉스 FTP 서버가 속도의 저하 없이 동시에 400 연결 이상을 처리할 없는 가장 이유가 많은 프로세스를 생헝할 발생하는 부하 때문이다.

반면에 프로토콜이 단순하고 빠르며 대화가 끝날 서버가 연결을 종료하는 것이 허용된다면, 클라이언트의 요청마다 스레드를 생성하지 않고 즉시 처리하는 것이 서버에게는 더욱 효과적이다.

운영체제는 특정 포트를 향해 들어오는 연결 요청을 FIFO(fisrt-in, first-out) 큐에 저장한다.
자바는 기본적으로 큐의 길이를 50으로 설정하지만, 운영체제마다 다를 있다.

큐의 길이가 부족할 경우 큐의 길이를 변경할 있지만 운영체제가 지원하는 최대 길이 이상으로 큐를 증가시킬 수는 없다. 길이에 관계없이 연결을 처리하는 상당한 시간이 걸리는 경우에도, 새로운 연결이 들어오는 속도보다 빠르게 큐를 비우고 싶을 것이다.

문제를 해결하기 위해서는 큐에 추가되는 새로운 연결을 수용하는 스레드와 분리된 별도의 스레드를 연결마다 할당하는 것이다.

출처: https://cbts.tistory.com/147 [IT일기장]
124 XML(Extensible Markup Language)? 마크업언어를 정의하기 위한 언어, 확장이 가능한 언어입니다. 서로 다른 포맷의 데이터를 보낼 용히하기 위해 어떠한 데이터를 설명하기 위해 이름을 임의로 지은 태그로 데이터를 감쌉니다.
구성요소
- DTD(Document Type Definition) :
작성하는 문서가 어떤 문서인지에 대해서 정의하는

- Style Sheet :
, 문단 등에 대한 양식과 서식에 해당하는 문서

-
확장성 연결 언어
Xlink 방식 : 1대다, 다대1 관계를 통해 마크업언어를 링크시킬 있다.
Xpointer :
문서의 특정부분만 링크시킬 있다.

- Parser : XML
해석을 위한 프로그램
125 S
pring 프레임워크
자바 엔터프라이즈 개발의 효율성을 높이는 오픈소스 경량 애플리케이션 프레임워크
126 RESTful API 월드 와이드 (World Wide Web a.k.a WWW) 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 형식으로 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반에 대한
패턴

REST, REpresentational State Transfer 약자이다. 여기에 ~ful 이라는 형용사형 어미를 붙여 ~ API 라는 표현으로 사용된다. , REST 기본 원칙을 성실히 지킨 서비스 디자인은 'RESTful'하다라고 표현할 있다.

REST
디자인 패턴이다, 아키텍처다 많은 이야기가 존재하는데, 하나의 아키텍처로 있다. 정확한 표현으로 말하자면, REST Resource Oriented Architecture 이다. API 설계의 중심에 자원(Resource) 있고 HTTP Method 통해 자원을 처리하도록 설계하는 것이다.
127 Test Driven Development Test-Driven Development(TDD) 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스이다. 우선 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고 해당 테스트를 통과하는 가장 간단한 코드를 작성한다. 일단 테스트 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거치는 것이다. 그대로 테스트가 코드 작성을 주도하는 개발방식인 것이다.
128 Unit Test 단위테스트
129 IPv4
에서 IPv6 갈수밖에 없는 이유는?
현재 사용되고 있는 IP 주소 체계는 IPv4(IP 버전4) 0부터 255까지의 십진수 개를 (.)으로 구분하여 사용합니다.

32
비트의 주소 체계인 IPv4 이론상 43 개의 IP 주소를 나타낼 있지만, 인터넷의 급격한 발달에 따라 IP 주소가 부족해지는 현상이 발생합니다.

따라서 이에 대한 해결책으로 고안된 128비트의 주소 체계인 IPv6(IP 버전6) 사용이 점점 증가되고 있는 추세입니다
130 IPv4
보다 IPv6 얼마나 많은가?
IPv6 주소 수는 IPv4 주소 수보다 1028(79,228,162,514,264,337,593,543,950,336) 큽니다. IPv6 주소의 텍스트 형태는 xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx입니다. 여기서 x 16진수이며 4비트를 나타냅니다. 선행 0 생략할 있습니다. 임의 갯수의 0비트를 나타내기 위해 주소의 텍스트 형태에 이중 콜론(::) 사용할 있습니다. 예를 들어, ::ffff:10.120.78.40 IPv4 맵핑된 IPv6 주소입니다.
131 Reflecton 이란? 경험, 용도? 스프링을 공부하다가 보면 BeanFactory 라는 Spring Container 개념을 학습하게 된다.
이 BeanFactory는 어플리케이션이 실행한 후 객체가 호출 될 당시 객체의 인스턴스를 생성하게 되는데
그 때 필요한 기술이 Reflection이다.
자바는 스크립트 언어가 아닌 컴파일 언어이다. 물론 .java -> .class -> 실행이라는 2단계의 메커니즘을 가지고 있지만 컴파일 언어로 분리하는 게 옳다. 원래 자바에서는 동적으로 객체를 생성하는 기술이 없었다. 그리고 동적으로 인스턴스를 생성하는 Reflection으로 그 역할을 대신하게 된다.
리플렉션이란 객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법을 말한다.
가정을 해 보자. 만약 객체의 메모리만을 알고 있고, 그리고 객체의 형에 대해서는 모른다고 생각하보자,
리플렉션으로 형은 알고 있지만 형변환을 할 수 없는 상태에서 객체의 메서드를 호출할 수 있다.

Class c = Data.class;
//Class c = Class.forName("클래스이름");
Method[] m = c.getMethods();                    
Field[] f = c.getFields();
Constructor[] cs = c.getConstructors();
Class[] inter = c.getInterfaces();
Class superClass = c.getSuperclass();

참조 https://gyrfalcon.tistory.com/entry/Java-Reflection
132 AWT
Swing 차이점
자바 언어는 GUI 기반의 응용프로그램 작성을 위해서 다양한 GUI 컴포넌트(GUI Component) 제공해요.GUI 컴포넌트는 AWT 컴포넌트와 Swing 컴포넌트로 구분되며, 이들은 각각 java.awt 패키지와 javax.swing 패키지를 통해 공급되요.

​ AWT
-AWT(Abstract Windowing Toolkit)
자바가 처음 나왔을 함께 배포된 패키지로서 많은 GUI 컴포넌트를 가지고 있어요.Frame, Window, Panel, Dialog, Button, Label, TextField, Checkbox, Choice 등과 같은 AWT 컴포넌트들은 중량 컴포넌트(heavy weingt component)로도 불려요.
컴포넌트들은 운영체제(OS) 도움을 받아 화면에 출력되는데, 운영체제의 리소스를 많이 소모하여 운영체제에 부담을 많이 줘요. 또한 AWT 컴포넌트는 운영체제에 의존적이므로 OS환경에 따라 다르게 구현될 있어요.
 
스윙(Swing)
-
스윙은 AWT기술을 기반으로 작성된 라이브러리로 AWT와는 달리 순수하게 자바 언어로 작성되었어요. 스윙 컴포넌트는 경량 컴포넌트(light weight component)라고도 불리며, 운영체제에 도움을 받지 않고 구현되기 때문에 운영체제와 관계없이 항상 동일하게 작동하며 동일한 모양으로 그려져요.
*
스윙 컴포넌트의 이름은 AWT 컴포넌트와 구분하기 위해 모두 대문자 J 시작해요.
 
​ AWT보다는 스윙 사용 권장
- 개발자는 AWT 스윙 택하여 GUI 응용프로그램을 개발할 있는데,
일반적으로 다양하고 모양이 예쁜 스윙 컴포넌트를 AWT보다 많이 사용해요.
http://blog.naver.com/PostView.nhn?blogId=1stwook&logNo=220138459087
133 퍼시스턴스 프레임워크(Persistence Framework) 퍼시스턴스 프레임워크(Persistence Framework) 데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 설정 파일들의 집합이다. 퍼시스턴스 프레임워크를 사용하면 JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 있으며 안정적인 구동도 보장한다.
134 URI(Uniform Resource Identifier) 통합 자원 식별자
인터넷에
있는 자원을 나타내는 유일한 주소이다. URI 존재는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에 항상 붙어다닌다. URI 하위 개념으로 URL, URN 있다.
출처: https://bkjeon1614.tistory.com/6 [아무거나]

URI 인터넷의 우편물 주소 같은 것으로, 정보 리소스를 고유하게 식별하고 위치를 지정할 있다.
URI >= URL, URN
이다.
출처: https://mygumi.tistory.com/139 [마이구미의 HelloWorld]
135 URL(Uniform Resource Locator) 정형화된 리소스의 위치 표시
http://test.com/work/sample.pdf
test.com
서버에서 work 폴더안의 sample.pdf 요청하는 URL.
136 EL(Expression Language) ${dto.username}
표현언어
(EL) 표현식(<%=..) 대신하는 효과를 가지며
null 값을 가지는 변수에 대해 관대하고 데이터형을 자동으로 변환해준다.
137 JSTL(JSP Standard Tag Library) JSP
사용자 정의 태그를 만들수있는 기능이 있다.
아파치에서 프로그래머들이 만든 태그들을 표준화시켜서 배포한 .
c로 시작하는 태그는 해당 uri에서 읽어오는 태그 라고 선언해주어야 한다.
<%@ taglib uri="http://java.sun.com/sjp/jstl/core" prefix="c" %>
138 버블정렬 배열에서 현재데이터(array[i])와 다음데이터(array[i+1]) 값의 크기를 계속 비교함(이웃되는값끼리 비교 ). 더 이상 자리 교체가 없을때까지 반복. 배열에서 가장 쉽지만, 시간복잡도가 높아 효율적이진 않다.
139 선택정렬 버블정렬과 유사하다. 가장 수를 찾아 배열의 마지막 위치와 교환합니다.
140 삽입정렬 인덱스를 설정하여 현재 위치의 값을 아래쪽으로 순회하며 알맞은 곳에 넣어준다
정렬된 데이터를 새로운 리스트에 담아서 반환
141 병합정렬 정렬한 리스트를 반으로 쪼개며 좌우 리스트를 분할해 정렬 병합합니다. 가장 많이 사용하는 정렬중 하나입니다.
142 힙정렬 힙이라는 자료구조를 통해 내림차순으로 숫자를 넣은 역순으로 꺼내어 정렬합니다.
143 퀵정렬 pivot 기준으로 좌측과 우측으로 작은 값과 큰값을 재배치하고 분할하여 정렬합니다
재귀적. 임의의 숫자(pivot)을 선정하여  pivot >=(크거나 같다), <(작다)로 두 가지로 분류함
그리고 두 가지로 분류된 각 리스트는 다시 스스로를 정렬하는 메소드를 호출..
144 오라클 힌트 힌트라고 하는 것은 옵티마이져에게 사용자의 요구를 전달할 있는 중요한 보조 수단 입니다
힌트를
사용하는 이유는 옵티마이져의 잘못된 판단을 바로 잡아주는 방법입니다.

출처: https://dlfma1985.tistory.com/47 [육아]
145 데이터마이닝 주어진 데이터에서 유용한 정보를 찾아내고 패턴을 찾는데 치중
대용량의
데이터로부터 이들 데이터내에 존재하는 관계, 패턴, 규칙을 찾아 모형화함으로써 유용한 지식을 추출하는 일련의 과정
종류
: 분류, 관계규명, 클러스터링, 회귀분석
146 기계학습 (머신러닝) 패턴인식, 학습이론, 인공지능과 연계된 컴퓨터공학의 학문분야
147 빅데이터 대규모 Volume, 다양성 Variety, 빠른속도 Velocity
148 딥러닝 인간 두뇌의 정보처리 방식을 모방해서 컴퓨터가 다양한 단계의 사고과정을 거처 추론, 판단하게 하은 기술. 인공신경망 알고리즘 기반(뉴럴 네트워크)
149 클라우드 컴퓨팅 인터넷사의 데이터서버에 컴퓨터를 두고 필요할 때마다 사용자의 컴퓨터나 스마트폰으로 불러와서 사용하는 인터넷 기반의 컴퓨터 기술
150 SI SI
system integration 약자입니다.
시스템 통합. 기업의 경영목표 달성을 위해 정보시스템을 구축하는 종합서비스를 말한다

**참고
ERP(Enterpise Resorce Planning)
기업의 자원을 계획하는 (SAP 유사분야)
CRM(Customer Relationship Management) 
고객관계관리
MIS(Management Infomation System) 경영정보시스템
SCM(Supply Chain management)  공급망관리
SEM(Serch engine Marketing) 검색엔진마케팅
EAI (Enterprise Application Integration) 기업 애플리케이션 통합
PLM (Product Lifecycle Management) 제품수명주기관리
151 솔루션 업체 흔히 사람들이 알고 있는 그룹웨어, 보안제품 등을 회사내에서 자체적으로 개발(=솔루션)
회사의 어느정의 노하우가 집약되야 만들어 낼수 있는 제품입니다. 솔루션을 가지고 있는 회사는 연혁이 오래됐죠
업무형태는
고객이 회사의 솔루션 제품을 구매한다 > 회서의 입맛에 맞체 커스텀마이징(고객의 요구사항에 맞게 제품을 수정) 한다
 
152 버전관리 시스템 버전 관리 시스템은 파일의 변화를 시간에 따라 기록하여 과거 특정 시점의 버전을 다시 불러올 있는 시스템이다.
153 FIDO(Fast Identity Online) 기존에 사용하던 아이디, 패스워드 방식이 아닌 주로 지문, 홍채, 얼굴 인식, 목소리, 정맥 등을 이용한 새로운 인증방식입니다. 생체정보들을 활용.
초기 생체 인증 방식은 해킹의 가능성으로 신뢰도가 높지 않았고, 생체 정보 전송의 위험등의 한계가 있었습니다. 그러나 FIDO방식은 이러한 문제를 극복하기 위해 인증 프로토콜과 인증 수단을 분리하여 보안을 높이고, 안정성을 확보하였습니다.

FIDO 1.0
모바일 환경에서 인증가능
FIDO 2.0 모바일을 넘어 PC 환경도 가능하게 .
154 배열과 연결리스트의 차이 데이터에 대한 접근속도는 배열이 빠르다
연결리스트는
최소 한번은 리스트를 순회하여야 하므로 O(n) 접근

데이터
삽입/삭제 속도는 경우에 따라 다르다. 전체적으로는 연결리스트가 빠르다.
155 연결리스트 자료항목의 순서에 따라 노드의 포인터 부분을 이용하여 서로 연결시킨 자료구조