728x90
728x90

처음 기술면접이라는 것을 봐보는 입장으로, 면접을 생각하니 떨리네요.
그렇지만 정리하면서 한번 보는 건 그 자체로도 재밌기도 하고
공부하다보니 다른 생각을 잊어버릴 수 있어서 좋은 것 같습니다.

[  순서 :   1.자바   2.데이터베이스   3.JSP   4.웹  ]

신입 개발자 면접 준비 (1) : 일반 면접 관련 예상 질문(개발 외)

 


 

1. 자바

 

Java

네트워크상에서 쓸 수 있도록 미국의 Sun마이크로시스템이 개발한 객체지향 프로그래밍 언어이다. 다른 언어와 비교하여 자바의 가장 큰 특징은 운영체제 없이 독립적이라는 것이다. 운영체제에 관계없이 같은 코드를 사용 가능한데, OS위의 JVM(Java Virtual Machine) 이라는 가상머신 위에서 자바가 실행되기 때문이다.

자바 프로그램은 한개이상의 클래스로 구성 
클래스는 한개이상의 필드나 메소드로 구성
맨 먼저 메인메소드 public static void main(String[] args) 를 찾아 실행 
system.out.println() ---- 표준 입출력 클래스
명령문 : 자바프로그램 동작명령함.  세미콜론 ;로 끝남
주석 이해 +디버깅

특징

JVM만 설치하면 컴퓨터의 운영체제에 상관없이 작동한다.( 운영체제에 독립적)
기본 자료형을 제외한 모든 요소들이 객체로 표현
객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어
Garbage Collector를 통한 메모리 관리기능
멀티쓰레드(Multi-thread)를 지원한다.

 

 

객체지향 프로그래밍 OOP (Object - Oriented Programming)

데이터를 객체로 취급하여 프로그램에 반영한 것
순차적으로 프로그램이 동작하는 기존의 것들과 다르게 객체와 객체의 상호작용을 통해 프로그램이 동작한다.
자바의 경우에는 구현은 클래스, 사용은 오브젝트로 구
분단위를 가지며
구현한 객체들을 벽돌처럼 쌓듯이 합쳐서 전체 결과물을 만든다.


특징 : 다형성(폴리모피즘), 상속, 캡슐화

  • 코드 재사용성이 높으며, 코드의 변경이 용이해 개발속도가 향상되며
  • 직관적인 코드 분석 (블럭의 내부 구조가 어떤지 신경쓸 필요가 없다 --캡슐화, 추상화) 이 가능하며

  • 상속을 통한 장점이 극대화된다
더보기

(폴리모피즘) 하나의 메소드나 클래스가 다양한 방법으로 동작하는 것. ) 오버로딩과 오버라이딩
상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해 주고, 같은 클래스 내의 코드 길이를 줄여줌.

(상속) 공통적으로 필요한 성격을 가장 기본적인 클래스로 정의해두고, 상속받아 사용. 중복 최소화

(캡슐화) public, protected, private라는 접근 지정자를 통해 클래스에 담는 내용 중 중요한 데이터나 기능을 외부에서 접근하지 못하도록 함. 객체 외부에서는 내부 정보를 직접 접근하거나 조작할 수 없음, getter  setter를 통해서만 접근 가능.

 

절차지향 프로그래밍과의 차이

  • 절차지향,구조적 프로그래밍(C) : 초창기에 많이 사용한 방법으로 순차적 프로그래밍이라고도 한다. 해야할 작업을 순서대로 코딩을 한다. 구조적 프로그래밍에서는 함수 단위로 구성되며 기능별로 묶어놓은 특징이 있다.
  • 객체지향 프로그래밍(Java, C++, C#) : 주 구성요소는 클래스와 객체이다. 그리고 상속과 다형성을 특징으로 들 수 있다. 클래스를 활용하여 각각의 기능별로 구성이 가능하며, 이를 나중에 하나로 합쳐서 프로그램의 완성이 가능하다. 객체 별로 개발이 가능하기에 팀 프로젝트를 하기에도 유리한 장점을 가지고 있다. 또한 코드의 재사용이 가능하며, 오류 발생 가능성이 적고 안정성이 높다.
  • 예를 들면 물건을 파는 판매자와 사는 구매자가 있다고 하자. 그렇다면 “판매자”와 “구매자”는 서로 다른 객체인 것이다. 즉, 객체지향에서의 클래스는 어떠한 ‘행동’을 하는 사람이라고 생각하며 구현해야한다. 이래도 이해가 되지 않는다면 객체는 작은 프로그램이라고 생각해도 된다. 즉, 프로그램에서 필요한 행위들을 일반화 시켜서 객체로 만들고 이 객체를 사용하는 형태로 프로그래밍을 하는 것.

 

Object 객체

OOP에서 데이터(변수)와 그 데이터에 관련되는 동작(함수), 절차, 방법, 기능을 모두 포함한 것.
같은 성질, 같은 구조와 형태를 가지는 객체는 등급으로 정의하고 등급에 속하는 객체는 그 등급의 인스턴스라고 한다.

ex) 기차역에서 승차권을 발매하는 경우, 실체인 ‘손님’과 동작인 ‘승차권 주문’은 하나의 객체이며,
실체인 ‘역무원’과 동작인 ‘승차권 발매’도 하나의 객체이다.


 

자바 컴파일 과정

컴파일러가 소스코드를 자바 바이트코드로(.class) 변환, JVM이 그 바이트코드를 기계어로 변환하여 인터프리터 방식으로 어플리케이션을 실행

 

스크립트 언어와 컴파일 언어의 차이

  • 스크립트 언어 : JavaScript, Python, Ruby...
  • 컴파일 언어 : C, C++, C#, Java...
  • 차이점 : 컴파일러의 존재 여부
  • 컴파일 언어의 경우 컴파일러를 통해서 한번 컴파일 된 후에는 코드 수정 후 재 컴파일을 하기 전까지는 같은 결과를 나타내지만, 스크립트 언어의 경우 실행될 때 바로 해석하므로 코드 변경시 실행 할 때마다 결과가 바뀌게 된다. 

 

JDBC (Java Database Connectivity)

JAVA 언어를 통해 데이터베이스에 접근할 수 있는 프로그래밍
java에서 DB에 접근하여 (작업데이터를 조회/삽입/수정/삭제 가능
=> 연결해주는 응용프로그램 인터페이스인 JAVA API DBMS 종류에 따라 그에 맞는 jdbc를 설치해야함.

ODBC (Open Database Connectivity)

응용프로그램에서 DB 접근을 위한 표준 개방형 응용 프로그램 인터페이스.
MS
사에서 만들어진 것, DB2/Excel/Text 등 여러 종류의 데이터에 접근할 수 있다.

SDK (Software Development Kit)

개발을 위한 클래스, 컴파일러, 실행도구, 디버깅 툴, 예제 코드, 튜토리얼 등을 모아놓은 환경을 제공하는 것
개발을 위한 도구 세트

 

 

다형성

하나의 지시(예를들어 메소드를 실행하는 것)에 대해 여러 객체가 각자 다른 행위를 수행하는 것.
자바에서 overloading이나 overriding이 이에 해당된다.

Overloading (오버로딩)

같은 이름의 메소드를 여러 개 정의하는 것으로 매개변수의 타입이 다르거나 개수가 달라야 한다.
Return type과 접근 제어자는 영향을 주지 않음

Overriding (오버라이딩)

상속에서 나온 개념으로 상위 클래스(부모)의 메소드를 하위 클래스(자식 클래스)에서 재정의

 

 

상속

기존 클래스의 변수와 메소드를 그대로 가지면서 추가적인 기능도 가지는 클래스를 새로 만드는 것
복잡한 문제를 나누어서 공통 부분부터 구현하기 위해 사용합니다.

장점

  1. 변수와 메소드를 그대로 쓰므로 코드중복을 줄임,
  2. 객체를 사용하는, 클래스 외부적인 관점으로 봤을 때 호두,잣, 등을 견과류라고 묶어서 처리(upcasting)
    할 수 있으므로 효율적인 코드가 됨

 

 

Interface 인터페이스

껍데기만 있는 클래스. 클래스의 템플릿.
인터페이스는 멤버 변수, 멤버 함수를 가질 수 없고, 추상 메소드만 가질 수 있다.
사용목적은 인터페이스라는 이름 뜻 그대로, 클래스를 사용함에 있어서 인터페이스를 제공하기 위함
즉, 인터페이스는 여러 클래스의 사용 방법이 같음을 보장합니다.
렇기 때문에 자신을 implement 하는 클래스들에게 메서드 구현을 강제합니다.
예를들어 List 인터페이스 를 implement 하는 클래스 들인 ArrayList, LinkedList는
공통적으로 add(), clear(), indexOf(), get() 등의 메서드를 가지고 있다.
Implements 키워드를 사용해서 구현
일종의 추상 클래스로 오직 추상메서드와 상수만을 멤버로 갖는다.
상속의 관계가 없는 클래스간 서로 공동되는 로직을 구현하여 쓸 수 있도록 한다.
Extends는 하나의 클래스만 상속 가능하나 Interface는 다중 상속이 가능하다.

Abstract

추상메소드를 하나 이상 가진 클래스
하위 클래스를 참조하여 상위 클래스의 객체를 생성
하위 클래스를 제어하기 위해 사용
자신의 생성자로 객체 생성 불가

공통점 / 차이점

  •  New 연산자로 인스턴스 생성 불가능
  •  프로토타입만 있는 메서드를 갖는다.
  •  사용하기 위해서는 하위클래스에서 확장/구현해야 한다.
  •  차이점 : 사용하는 키워드가 다르고 Abstract는 일반 메서드를 사용할 수 있지만,
    Interface는 메서드 선언만 가능하다

 

Static

클래스가 로딩될 때, 메모리 공간을 할당하는데 처음 설정된 메모리 공간이 변하지 않음을 의미한다.
객체를 많이 만들어도 해당 변수는 하나만 존재한다. (객체와 무관한 키워드)

 

Generic

클래스에서 사용할 타입을 클래스 외부에서 설정하는 것. 만들어져 있는 클래스를 내가 원하는 형태로 사용할 수 있음.
< > 
안에 들어갈 수 있는 것은 참조자료형(클래스, 인터페이스, 배열) . 
기본자료형을 사용하기 위해선 wrapper 클래스를 이용해야 함.

 

 

자바 데이터 타입

1) Primitive type 기본형

변수에 값 자체를 저장(정수형, 실수형, 문자형, 논리형) : boolean, char, int 등 8가지
stack 메모리 영역에 실제 값을 저장하는 데이터 타입

2) Reference type 참조형

기본형 외의 모든 타입입니다. String, 클래스, 인터페이스, 어레이 등 모든 변수는 참조형 변수입니다.
새로 만들때는 heap 메모리에 저장공간을 확보하며 항상 new로 정의합니다.
실제 값은 heap 영역에 저장되고, stack 에는 메모리 주소만 저장됩니다.
(참고로 자바는 변수를 복사하는 경우가 없고 무조건 참조합니다)

메모리상에 객체가 있는 
위치를 저장 Class, Interface, Array 등

 

 

Thread

프로세스(운영체제에서 실행중인 하나의 프로그램으로 하나 이상의 쓰레드 포함)
내에서 동시에 실행되는 독립적인 실행 단위. 자원을 많이 사용하지 않고 구현이 쉬우며 범용성이 높다.

장점 : 빠른 프로세스 생성, 적은 메모리 사용, 쉬운 정보 공유
단점 : 교착상태 DEADLOCK 에 빠질 수 있음. (https://webie.tistory.com/99)
(다중 프로그래밍 체제에서 하나 또는 그 이상의 프로세스가 수행할 수 없는 어떤 특정 시간을 기다리고 있는 상태)
왜 기다려야 하냐면 자원(쉽게 말하면 변수 같은 것들)을 공유해서 쓰기 때문이다.


Thread와 Process 차이

  • 프로세스 : 실행중인 프로그램을 나타낸다. CPU가 실행되고 있는 프로세스에 대해 메모리 자원을 안정되게 분배해줘야 하며 운영체제의 성능에 따라 성능이 결정된다. 
  • 스레드 : 이 프로세스 내에서 실행되는 각각의 일. 프로세스 내에서 실행되는 세부 작업 단위로 여러 개의 스레드가 하나의 프로세스를 이루게 되는 것이다. 스레드는 각자의 스택 메모리영역을 가지고 있으며 동일한 프로세스 내의 다른 스레드들과 전역 메모리를 공유한다. 따라서 CPU로부터 새로운 자원을 할당받지 않아도 되기 때문에 프로세스보다 실행 속도가 빠르다는 장점을 가지고 있다.

 

 

접근 제한자 (접근지정자)

Public – 같은 프로젝트 내에 어디서든 사용 가능
Protected – 같은 패키지 내, 다른 패키지에서 상속 받아 자손 클래스에서 접근 가능
Default – 같은 패키지 내에서만 접근 가능
Private – 같은 클래스 내에서만 접근 가능

 

 

값에 의한 호출, 레퍼런스에 의한 호출

Call by value : 값을 복사해서 새로운 함수로 넘기는 호출 방식. 원본의 값이 변경되지 않는다.
Call by reference :  주소 값을 인자로 전달하는 호출 방식. 원본의 값이 변경된다.

 

 

String , StringBuffer, StringBuilder 차이

자바의 기본 데이터 타입인 int, float, char 등과 다르게 String은 데이터 타입이 아닌 클래스 객체이다.

String : 불변. 문자를 수정하려면 지우고 다시 새로 생성 -> 문자열 연산이 많으면 성능 저하

한번 String name =”길동”; 라고 선언하게 되면 먼저 String 객체타입인 name이라는 인스턴스를 만들고 메모리에 “길동”을 올린다.
그리고 name이 “길동”을 참조하는 레퍼런스가 되는 것. 이제 이 name에 새로운 내용을 추가하여 name += “홍”; 와 같은 소스를 적용하게 되면 name인스턴스가 가리키는 값은 “길동홍”이 된다. 아까 String이 불변 객체라고 설명을 했듯이 String은 char배열 형태가 아니기 때문에 한번 선언된 내용에 추가적으로 바뀌지 않는다.  

수십번 String이 더해지는 경우에는 각 String의 주소값이 stack에 쌓이고 클래스들은 Garbage Collector가 호출되기 전까지 heap에 지속적으로 쌓이게 된다. 메모리 관리적인 측면에서는 치명적이라고 볼 수 있다. (https://novemberde.github.io/2017/04/15/String_0.html)
String에서 저장되는 문자열은 알고보면 char의 배열형태로 저장되며 이 값들은 외부에서 접근할 수 없도록 private으로 보호된다. 또한 final형이기 때문에 초기값으로 주어진 String의 값은 불변으로 바뀔 수가 없게 되는 것이다.

StringBuffer : 가변. 한번 만들고 필요할 때 크기를 변경하여 문자 변경.
스트링 버퍼는 char타입의 배열로 되어 있어서 한글자 한글자를 append할 수 있다

name = name + “홍”; 구문이 실행될 때 실제로는 스트링 버퍼를 새로 생성해서 name이 가리키는 “길동”을 만들어주고 스트링 버퍼의 append 함수를 이용하여 “홍” 를 붙여준다. 그렇게 완성된 스트링 버퍼값을 메모리에 올리고 name은 다시 이 값을 참조하게 된다. 그럼 그와중에 생겨난 메모리 안의 “길동” 이라는 값과 “홍”라는 값은 가비지 컬렉터가 가지고 있다가 필요없으니 버린다. 그 짧은 순간에 이런 일처리가 진행이 되어서 스트링 버퍼를 사용하는 것이 스트링 객체를 사용하는 것보다 빠르다.

StringBuilder : 동기화 지원 안함. 멀티쓰레드 환경에 부적합하나 싱글쓰레드에서 stringBuffer보다 좋다.
세 가지 차이에 대해 잘 정리해 놓은 곳 : https://jeong-pro.tistory.com/85

 

자바 메모리 영역

- 메서드 영역 : 바이트코드, static 변수, 전역변수, 코드에서 사용되는 Class 정보 등이 올라간다.
코드에서 사용되는 class들을 로더로 읽어 클래스별로 런타임 필드데이터, 메서드 데이터 등을 분류해 저장한다.

- 스택(Stack) : 매개변수, 지역변수, 함수(메서드) 등이 할당되는 LIFO(Last In First Out) 방식의 메모리
사용이 끝나면 바로 소멸되며 컴파일 시 메모리를 할당

- 힙(Heap) : new 연산자를 통한 동적 할당된 객체들이 저장되며, Garbage 컬렉션에 의해 메모리가 관리되어 진다.
호출이 끝나도 사라지지 않으며 프로그램 실행 시 동적으로 할당된다

 

 

DAO (Data Access Object)

데이터베이스의 데이터에 접근을 위한 객체  (DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담)
데이터베이스에 접근을 하기위한 로직과 비즈니스 로직을 분리하기 위해서 사용한다.

 

DTO (Data Transfer Object = VO(Value Object))

계층간 데이터 교환을 위한 JavaBean.
여기서 계층이란 Controller, View, Business Layer, Persistent Layer를 말하며
사실 VO는 동일한 개념이지만 read only 속성을 가진다.

 

 

변수명 표기하는 방법의 종류

  • 헝가리언 표기법 : 자료형을 식별자에 같이 포함  ex) inum; int int_num; 인터페이스명.
  • 파스칼 표기법 : 식별자가 한 단어나 혹은 여러 단어로 조합(언더바X), 각단어의 첫문자만 대문자로  ex) KorScore
  • 캐멀 표기법 : 모든 단어를 공백없이 조합(언더바X) – 첫단어의 첫문자는 소문자로  ex) korScore
  • 스네이크 표기법 : ex)eng_score

 

 

제어문

조건문 (if, switch), 반복문 (for, while, do-while)이 있다.

1. 반복문

for

반복 횟수를 알고 있을 때 적합.
for(초기화;조건식;증감식){ //참일 때 }

while

while (조건식) { //참일 때 }

 

 

링크드리스트, 배열의 차이점

 : (배열) 인덱스를 가짐, 원하는 데이터를 한번에 접근하여 접근 속도가 빠름. 크기 변경 불가.

 데이터를 삽입, 삭제 후 그 위치의 다음위치부터 모든 데이터의 위치를 변경해야하는 단점.

 (연결리스트) 인덱스 대신 현재 위치의 이전/ 다음 위치를 기억. 크기가 가변적.

한번에 접근 불가, 연결되어 있는 링크를 따라가야 접근 가능하여 배열에 비해 속도가 떨어짐.

데이터 삽입/삭제는 논리적 주소만 바꿔주기 때문에 용이함.

 => 데이터 양이 많지만 삽입/삭제 없으며, 데이터 접근이 빈번할 때 (배열 추천)

데이터 양이 적고, 삽입/삭제가 빈번할 때 (링크드리스트 추천)

 

 

- ArrayList<>

 : 배열의 확장판. 배열의 크기를 임의적으로 변화시킬 수 있음, list에 들어갈 데이터 타입 설정 가능

(add, remove, isEmpty, size, get, indexOf 등의 메소드가 있음)

 

- hash?

 : 내부적으로 배열을 사용(HashTable)하여 데이터를 저장, 검색 속도가 빠름.

 데이터 삽입/삭제시 기존 데이터를 밀어내거나 채우지 않고, 데이터와 연관된 고유한 숫자를 생성해 이를 인덱스로 사용.

 

- equals HashCode?

 : (equals) 동일한 내용을 가진 객체인지를 비교

(hashcode) 동일한 객체인지 구별하기 위해 고유한 정수 값으로 출력

 

- 스택과 큐의 차이

: (stack) Last in First out / 함수를 호출 할 때, 현재 함수에서 사용되는 값을 스택에 넣고, 작업이 끝나면 함수를 리턴하고 스택에 넣었던 값을 꺼내는 방식으로 동작

 (Queue) First in First out / 프로세스 처리, CPU 관리, 프린터 큐 등에 사용

 

가비지 컬렉션 

정리되지 않은 메모리, 유효하지 않은 메모리 주소인 가비지를 정리해주는 프로그램
안드로이드도 있다. (자바니까)

 

안드로이드

안드로이드 현재 버전은 10이고 이번부터 디저트 네임을 붙이지 않는다. 

 

 


 

2. 데이터베이스

 

데이터베이스

업무처리를 위해 다수의 응용시스템 혹은 다수의 사용자들이 공용으로 사용하기 위해 저장된 운영 데이터의 집합

DBMS 

"다수의 사용자가 데이터베이스 내의 데이터를 접근할 수 있도록 시스템"
(database management system) 데이터베이스 관리 시스템
데이터베이스라는 데이터의 집합을 만들고, 저장 및 관리할 수 있는 기능들을 제공하는 응용프로그램

RDBMS

Relational database management system. 관계형 모델을 기반으로 한 데이터 베이스 시스템

SQL / NoSQL

관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어.(CRUD기능이 탑재)

NoSQL

관계형 데이터베이스 보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공하는 데이터베이스.

오라클과 MySQL의 차이

(Oracle) 대규모 트랜잭션로드를 처리하고 성능을 최적화하기위해 여러 서버에 대용량 DB분산
절차적 언어를 통해 DB내 내장된 프로그램의 작성을 지원함. (독립실행특정 이벤트 의해 트리거)
(MySQL) 단일 DB로 제한되어있어, 매일 수백만번 액세스하는 대용량 DB에는 부적합
DB를 이전상태로 복원하는데 도움이되는 저장점이 없음 (COMMIT, ROLLBACK만 존재)

 

데이터베이스 언어

DCL : (제어어 : Data Control Language) 

데이터에 대해 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어.
(commit, rollback, grant, revoke)

DML : (조작어 : Data Manipulation Language) 

데이터베이스 내의 자료 검색, 삽입, 갱신, 삭제를 위한 언어. (select, delete, update, insert)

DDL : (정의어 : Data Definition Language)

데이터베이스 구조를 정의,수정,삭제하는 언어. (create, alter, drop)

 

스키마

데이터베이스의 전체적인 구조와 제약조건에 대한 명세를 기술 정의한 것

 

PK, FK, ER 모델

  • Primary Key : 관계형 DB에서 레코드(튜플)의 식별자로 이용하기에 가장 적합한 것을 후보키 중에 하나 선택한 것
  • Foreign Key: 관계형 DB에서 한 테이블의 키 중 다른 테이블의 튜플을 식별할 수 있는 키
  • ER-model : 관계형 데이터베이스와 같은 데이터 관리 시스템 상의 구조적인 데이터를 기술하는 것. 개체(Entity)와 관계(Relationship)을 이용해 현실에서의 데이터 세계를 개념적으로 표현한다.

 

DB정규화

"중복을 최대한 줄여 데이터를 구조화하여 불필요한 데이터를 제거하고
데이터를 논리적으로 저장하여 이상현상이 안일어나게 하는 것"
  • 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스
    = 안정적 자료구조로 변환하기 위해서 한 테이블을 두 개 이상으로 분리하는 작업
  • 목적 : 저장공간 최소화, 데이터무결성 유지, 자료구조의 안정성 최대화
    데이터 구조의 일관성, 안정성 최대화, 효과적인 검색 알고리즘(Query),
    중복 배제를 통한 DML 이상 발생 방지
  • 제1정규화: 테이블에 있는 모든 속성의 도메인이 원자값(Atomic Value)만으로 되어있도록 정규화 하는 것.
    모든 항목에 값이 있어야 하며, 중복 기능 열이 없어야 한다.
  • 제2정규화: 부분적 함수 종속을 제거하는 정규화
  • 제3정규화: 이행적 함수 종속을 제거하는 정규화.

이상 현상

릴레이션에서 일부 속성들의 종속으로 인해 데이터 중복이 발생 (insert, update, delete)

개체 무결성

기본키는 NULL값이 올 수 없으며, 중복될 수 없다.

참조 무결성

외래키 값은 NULL이거나 참조 테이블(릴레이션)의 기본키(Primary Key)값과 동일해야한다.
--> DB설계시 가장 중요한 것은? : 무결성을 보장하는 것 => 무결성 보장 방법은?
 (애플리케이션) 데이터를 조작하는 프로그램 내에서 데이터 생성, 수정, 삭제 시 무결성 조건 검증
 (DB트리거) 트리거 이벤트 시 저장 SQL실행, 무결성 조건 실행
 (제약조건) DB제약조건 기능 선언하여 무결성 유지

트리거

자동으로 실행되도록 정의된 저장 프로시저. INSERT / UPDATE/ DELETE문에 대한 응답으로 자동 호출
 => 사용 이유 업무 규칙을 보장업무 처리 자동화데이터 무결성 강화 (변경생성제거복구를 통해)

DB 무결성이란?

(개체테이블에있는 모든 행들이 유일한 식별자를 가질 것을 요구같은 값X
(참조외래키 값은 NULL이거나 참조테이블의 PK값이여함
(영역한 컬럼에 대해 NULL허용 여부와 자료형규칙으로 타당한 데이터 값을 지정

 

Commit

하나의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝났을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산

Rollback

하나의 트랜잭션 처리가 비정상적으로 종료되어 DB의 일관성을 깨뜨렸을 때, 모든 연산을 취소(Undo)시키는 연산.

 

집합연산자

SELECT조회 쿼리 결과를 대상으로 연산을 수행하는 연산자
같은 개수의 칼럼을 조회하지 않으면 에러 발생
ORDER BY 문은 맨 마지막에만 사용할 수 있다. (특정 컬럼 기준 정렬이기 때문)

  • UNION :  합집합으로 한번만 나온다.
  • UNION ALL : 중복항목도 모두 조회한다.
  • INTERSECT : 교집합
  • MINUS : 차집합 (공통 레코드를 제외한 항목)

 

 

JOIN

두개이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색
보통 Primary key혹은 Foreign key로 두 테이블을 연결
연결하려면 적어도 하나의 칼럼은 서로 공유되고 있어야한다.


1) INNER JOIN 이너조인
: 교집합.기존테이블과 조인한테이블의 중복값을 보여주는데 결과값은 교집합만 검색

SELECT 별칭.칼럼, 별칭.칼럼 FROM 기준테이블별칭
INNER JOIN 조인테이블 별칭 
ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키 
AND 기준테이블별칭.기준키 = 조인테이블별칭.기준키

--예
SELECT
A.NAME, --A테이블의 NAME조회
B.AGE --B테이블의 AGE조회
FROM EX_TABLE A
INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP AND A.DEPT = B.DEPT

 

2) LEFT/RIGHT OUTER JOIN기존테이블 값 + 교집합

SELECT 별칭.칼럼, 별칭.칼럼 FROM 기준테이블별칭
LEFT OUTER JOIN 조인테이블 별칭 
ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키 
AND 기준테이블별칭.기준키 = 조인테이블별칭.기준키

 

3) FULL OUTER JOIN :  합집합

SELECT 별칭.칼럼, 별칭.칼럼 
FROM 기준테이블별칭
FULL OUTER JOIN 조인테이블 별칭 
ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키 
AND 기준테이블별칭.기준키 = 조인테이블별칭.기준키

 

4) CROSS JOIN : 모든 경우의 수 (N*M)

SELECT 별칭.칼럼, 별칭.칼럼 
FROM 기준테이블별칭
CROSS JOIN 조인테이블 별칭 

 

5) SELF JOIN 셀프조인 : 하나의 테이블을 여러번 복사해서 조인.

SELECT 별칭.칼럼, 별칭.칼럼 
FROM 테이블명 별칭1, 테이블명 별칭2

 

 

 

서브쿼리 subquery (Inner Query) 

문법은 서브쿼리를 괄호로 묶어서 사용한다. Order By절은 사용불가하며 연산자 오른쪽에 사용해야 한다.

쿼리 안에 있는 쿼리. Where/from/select 절 안에 들어가는 쿼리.
서브쿼리는 하나의 쿼리문 안에 포함된 또 하나의 쿼리문으로 (중첩문)
메인쿼리가 서브쿼리를 포함하는 종속적 관계

서브쿼리의 반환값에 따른 서브쿼리

☞ 단일 행 서브쿼리 : 서브쿼리의 결과가 1행
☞ 다중 행 서브쿼리 : 서브쿼리의 결과가 여러 행
☞ 다중 컬럼 서브쿼리 : 서브쿼리의 결과가 여러 컬럼

 

1) Where 절 서브쿼리

중첩서브쿼리 (nested subqueries) 라고도 하며 가장 자주 쓰인다.

// 선택과목 B 테이블에서 MATH를 선택한 학생들의 이름을 찾아
// 학생 A 테이블에서 모든 정보를 조회하기
SELECT * 
FROM student A
WHERE A.student_name IN (SELECT B.student_name
                          FROM subject B
                          WHERE B.subject_name = 'MATH');

 

2) From 절 서브쿼리

From 절 안에 들어 있고 인라인뷰 (inline views) 라고도 한다.
From 에는 테이블 명이 와야 하지만 대신에 서브쿼리를 사용하면 조회된 값을 테이블처럼 활용할 수 있다.

// item_name과 total_amt 를 알고 싶은데
// 각각 서로 다른 테이블 suppliers와 orders에 있는 경우 
// 각각 데이터를 불러와 출력
SELECT A.item_name, subquery1.total_amt
FROM suppliers A,
     (SELECT supplier_id, SUM(B.amount) AS total_amt
      FROM orders B
      GROUP BY supplier_id) subquery1
WHERE subquery1.supplier_id = A.supplier_id;

 

3) Select 절 서브쿼리

스칼라 서브쿼리Scalar subqueries라고도 불린다.
select 절에 오는 서브쿼리는 반드시 단일값을 리턴해야 한다.
따라서 sum, count, min, max와 같은 집계 함수가 많이 쓰인다.

// 테이블에 존재하지 않는 데이터를 조회하고 싶을 때
SELECT product_name, list_price,
       ROUND(
         (SELECT  AVG( list_price )
          FROM    products p1
          WHERE   p1. category_id = p2.category_id
         ), 2 ) avg_list_price
FROM  products p2
ORDER BY  product_name;

 

이외 having, order by, insert 문의 value, update 문의 set, 집계함수 등 다양한 곳에서 사용간으하며
서브쿼리 안에 서브쿼리 이렇게 여러 개의 서브쿼리를 중첩해서도 사용가능하다.

 

 

시퀀스 Sequence

UNIQUE한 값을 생성해주는 오라클 객체, 시퀀스를 생성하면 PK와 같이 순차적으로 증가하는 컬럼을 자동으로 생성할 수 있음.
(생성) CREATE SEQUENCE 시퀀스이름
START WITH n
INCREMENT BY n …
 (수정) ALTER SEQUENCE 시퀀스이름          (START WITH은 수정 불가능)
 (삭제)DROP SEQUENCE 시퀀스 이름

 

VIEW 뷰 (가상 테이블)

허용된 데이터를 제한적으로 보여주기 위해 하나 이상의 테이블에서부터 유도된 가상 테이블
사용자가 view에 접근했을 때 해당하는 데이터를 원본에서 가져옴.

장점 : 뷰에 나타나지 않은 데이터 보호 가능(보안성) + 편의성

  • 정의된 기본 테이블이 삭제되면 뷰도 자동적으로 제거된다.
  • 한번 정의된 뷰는 변경할 수 없으며, 삭제한 후 다시 생성해야 한다.
  • 검색은 일반 테이블과 동일한 방식으로 한다.
  • 뷰에 대한 삽입, 삭제, 갱신에 대한 제약이 따른다.
    컬럼에 기본키가 포함되어 있지 않으면 삽입, 갱신, 삭제가 되지 않는다.

 

인덱스 index .색인

"데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조"

-- 보통 인덱스를 통해 성능 향상을 얻는 연산은 검색 연산(SQL의 SELECT)

create index A
on table(column)


인덱스 생성시 고려할 사항

  • 테이블의 전체 데이터 중 적은 양을 조회할 때 사용한다.
  • 테이블에 데이터가 적을수록 인덱스의 효율은 떨어진다.
  • 데이터의 유일성이 높을수록, 데이터의 범위가 넓을수록 인덱스의 효율은 올라간다.
  • NULL이 적은 컬럼이 인덱스 효율이 좋다.
  • 결합 인덱스의 경우 자주 사용되는 컬럼을 앞쪽에 배치한다.

 

 

트랜잭션

데이터베이스의 상태를 바꾸는 기능을 수행하기 위한 작업의 단위

--모든 명령어의 성공 또는 실패를 한번에 처리. 흔한 예로 계좌입금에서 일어날 수 있는 오류 등을 생각해보면 좋다
하나의 트랜잭션으로 관리하면, 영희의 계좌에 입금하는 기능이 실패했을 경우, 철수의 계좌에 돈이 다시 입금되어야 한다
(이를 Rollback 이라고 한다.)

더보기

특성

  • 원자성(Atomicity): 한 트랜잭션 내에서 실행한 작업들은 하나로 간주한다. 즉, 모두 성공 또는 모두 실패. 

  • 일관성(Consistency): 트랜잭션은 일관성 있는 데이타베이스 상태를 유지한다. (data integrity 만족 등.)

  • 격리성(Isolation): 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야한다.

  • 지속성(Durability): 트랜잭션을 성공적으로 마치면 결과가 항상 저장되어야 한다.

 

 

 

GROUP BY

집계함수(SUM같은)가 호출될 때마다 모든 컬럼 값들의 결과 반환
GROUP BY기능 없이 컬럼 값들의 개별 그룹마다 합계를 구하는 것은 불가능

Where 절과 Having절의 다른 점

Having절은 그룹함수의 그룹의 조건으로 사용되고, where 절은 select할 데이터에 조건을 주는 역할

 

 

테이블 DROP, Truncate(자르기), Delete의 차이

 DELETE TABLE은 로그되는 작업이기 때문에 삭제되는 각 행은 트랜잭션 로그에 기록되고 이것은 작업을 느리게 합니다.
 TRUCATE TABLE 역시 테이블 내 행들을 삭제하지만 삭제되는 각 행을 기록하지 않고 대신 테이블의 데이터베이스 할당 해제를 기록하여 작업이 빠릅니다. TRUNCATE TABLE는 롤백할 수 없습니다.
  •  DELETE 명령어는 데이터는 지워지지만 테이블 용량은 줄어들지 않는다. 원하는 데이터만 지울 수 있다. 삭제 후 RollBack 가능하다.
  •  TRUNCATE 명령어는 용량이 줄어들고, 인덱스 등도 모두 삭제된다. 테이블은 삭제하지는 않고 데이터만 삭제한다. 한꺼번에 다 지워야 한다. 삭제후 절대 되돌릴 수 없다.
  •  DROP 명령어는 테이블 전체를 삭제,공간, 객체를 삭제한다. 삭제 후 절대 되돌릴 수 없다.

 

제약조건

컬럼에 대한 속성을 정의하는 것이며, 데이터 무결성을 보장하기 위한 용도로 사용
컬럼의 속성처럼 사용하지만, 엄연히 데이터베이스의 객체이므로 고유의 이름(제약조건 명)을 지정해주어야 한다. 
사용자가 지정하지 않는 경우, ORACLE이 자동으로 부여해준다.

NOT NULL

오로지 컬럼에만 적용 가능하다. 테이블은 안됨
반드시 데이터가 들어와야만 하는 컬럼에 명시

UNIQUE 유일키

해당 컬럼에 들어가는 값은 중복값을 허용하지 않는다. notnull과 함께 사용가능
기본키는 널을 허용하지 않지만 유일키는 모든 컬럼 중 유일하게 하나에 대한 NULL을 허용
그래서 unique키는 개체하나하나를 구분할 기본키가 될 수 없다.

PRIMARY KEY 기본키

UNIQUE+NOTNULL의 형태를 띄며, 테이블 당 1개의 기본키만 생성할 수 있다. 물론, 여러 컬럼을 묶어 하나의 기본키로 만드는 것이 가능하다. (최대 32개 까지 가능하다.) 기본키는 데이터 무결성을 지켜주는 역할을 한다.

FOREIGN KEY 왜래키

테이블 간의 참조 데이터 무결성을 보장해준다. 참조 데이터 무결성 보장을 통해, 참조 관계가 있는 테이블의 데이터 추가, 삭제, 수정을 통제할 수 있다. 아무래도 '관계'에 관한 제약조건이다 보니, 다른 제약조건에 비해 제약사항이 복잡

  • 참조하는 테이블이 먼저 생성되어 있어야 함
  • 외래키가 참조하는 컬럼은 참조하는 테이블의 기본키(PRIMARY KEY)이어야 함.
  • 여러 컬럼을 외래키로 할 경우, 참조하는 테이블의 기본키와 컬럼 개수 및 순서가 같아야 함.
  • 기본키와 마찬가지로, 최대 32개 컬럼까지 가능.

 

비교조건식

비교조건식은 논리연산자(<,>,<> 등, 참고: [ORACLE] SQL의 연산자(Operator) 정리)
ANY, SOME, ALL, IN, EXISTS 키워드로 특정 값을 비교하는 조건식

ALL :  모든 조건 충족
ANY : 조건 중 하나라도 해당
SOME : 
IN : 
exist : 따라오는 조건이 값의 리스트가 아닌, 서브쿼리가 온다

논리조건식

조건절에서 AND, OR, NOT, BETWEEN을 사용하는 조건식. 반환값이 TRUE, FALSE, UNKOWN이다.
AND는 모든 조건을 만족하는 경우에만 TRUE를 반환하고,
OR는 하나라도 만족하면 TRUE를 반환한다.
NOT은 조건식의 결과가 거짓일 때, TRUE를 반환한다.

IS NULL 조건식

특정 값이 NULL인지 아닌지 판단. 반대는 IS NOT NULL

LIKE 조건식

이름의 일부로 값을 비교할 수 있는 like절
like연산자에서 %, _를 검색하려면 그 문자 앞에 escape'@' 등으로 특수문자를 지정하여 사용
//  name에 문자열 na를 포함하는 name레코드들을 가진 레코드셋을 반환합니다.
SELECT * FROM people WHERE name LIKE ‘%na%’; 

 

 


 

3. JSP

 

JSP (Java Server Page)  

html 내에 자바코드를 블록화하여 삽입한 것(JAVA in Html)웹서버에서 동적으로 웹브라우저를 관리하는 언어

Servlet 서블릿

Container가 이해할 수 있도록 구성된 자바코드로 이루어진 것 (Html in JAVA)
  • 자바 플랫폼에서 웹 앱을 개발할 때 사용하는 핵심기술
  • 따라서 컨트롤러와 뷰의 역할분담이 가능해지며 자바API를 모두 쓸 수 있고, 다양한 서버환경에서 실행할 수 있다
  • 스레드를 기반으로 한다.
  • Servlet Container : Servlet을 서버에서 실행하기 위한 서버 프로그램 (서버는 서블릿 자체를 직접 실행 못함)
    JVM을 내장하고 있다.

 

Get방식

  •  클라이언트에서 서버로 데이터를 전달할 때, 주소 뒤에 “이름”과 “값”이 결합된 쿼리 스트링 형태로 전달.
  •  주소창에 쿼리 스트링이 그대로 보여지기 때문에 보안성이 떨어진다.
  •  길이에 제한이 있다.(= 전송 데이터의 한계가 있다.)
  •  Post방식보다 상대적으로 전송 속도가 빠르다

Post 방식

  •  일정 크기 이상의 데이터를 보내야할 때 사용한다.
  •  서버로 보내기 전에 인코딩하고, 전송 후 서버에서는 다시 디코딩 작업을 한다.
  •  주소창에 전송하는 데이터의 정보가 노출되지 않아 Get방식에 비해 보안성이 높다.
  •  속도가 Get방식보다 느리다.
  •  쿼리 스트링(문자열) 데이터 뿐만 아니라, 라디오 버튼, 텍스트 박스 같은 객체들의 값도 전송가능

차이점

  •  Get은 주로 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용
  •  Post는 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용
  •  Get을 사용하면 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩되어 URL에 붙는다.
  •  Post방식은 전달되는 데이터가 보이지 않는다.
  •  Get방식은 전달되는 데이터가 255개의 문자를 초과하면 문제가 발생할 수 있다.
  •  웹서버에 많은 데이터를 전달하기 위해서는 Post방식을 사용하는 것이 바람직하다.

 

세션

HTTP프로토콜을 이용하게 되는 웹 사이트에서는 웹 페이지에 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용한다.

  •  특정 웹사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한번의 방문을 의미한다.
  •  Session에 관련된 데이터는 Server에 저장된다.
  •  웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다.
  •  Cookie에 비해 보안성이 좋다.

쿠키

  • 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법
  • 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해주는 정보이다.
  • Cookie는 인터넷 사용자가 특정 웹서버에 접속할 때, 생성되는 개인 아이디와 비밀번호, 방문한 사이트의 정보를 담은 임시파일로써, Server가 아닌 Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용된다.
  • Cookie는 Client PC에 저장되는 정보이기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다.( 정보유출 가능, Session보다 보안성이 낮은 이유 )

 

Q. 보안성이 낮은 Cookie대신 Session을 사용 안하는 이유?
A. 모든 정보를 Session에 저장하면 Server의 메모리를 과도하게 사용하게 되어 Server에 무리가 가게 된다.

 

== : 추상 동등 연산자
=== : 완전 동등 연산자로 타입변환을 하지 않으므로 두 값의 타입이 다르면 false를 반환한다.

 

브라우저의 렌더링 과정

javascript : 웹에서 바로 동적구현이 가능한 언어

자바스크립트의 원시 타입 (데이터) 은 무엇이 있나 : Number, String, Boolean, Null, Undefined, (Symbol)
자바스크립트의 Number Type 의 다른 언어들과 차이점

Java와 JavaScript의 차이는?

  • Java : 객체지향 프로그래밍 언어로 시스템 개발안드로이드용 어플리케이션 개발에 사용
  • JavaScript : 사용자와 웹사이트가 상호작용하는데 도움을 주는 스크립트 언어
    사용자가 어떠한 액션을 취했을 때 다른 페이지 열지 않고 변화된 결과를 즉각적으로 보여줌페이지의 동적 제어.

 => node.js를 통해 서버상에서도 javascript 사용할 수 있게 됨컴파일 필요없고 바로 실행.
 Node.js는 http서버 라이브러리를 포함하고있어서 웹서버에서 아파치 등 별도 소프트웨어 없이 동작

 

AJAX (asynchronous JavaScript and XML)

비동기 웹 응용 프로그램을 만들기 위해 클라이언트 측에서 사용되는 웹 개발 기술의 집합 Ajax를 사용하면 웹 애플리케이션은 기존 페이지의 화면 및 동작을 방해하지 않으면서 백그라운드에서 비동기적으로 서버로 데이터를 보내고 서버에서 데이터를 받아올 수 있습니다. Ajax는 프리젠테이션 레이어에서 데이터 교환 레이어를 분리함으로써, 웹페이지 및 확장 웹 애플리케이션이 전체 페이지를 다시 로드 할 필요 없이 동적으로 컨텐츠를 변경할 수 있도록 합니다. 실제로 최근에는 일반적으로 네이티브 JavaScript의 장점 때문에 XML대신 JSON을 사용합니다.

(벡터동기식 :  한 스레드가 벡터 작업중이면 다른 스레드가 벡터 보유할 수 없음.
(어레이리스트비동기식여러 스레드가 어레이리스트에서 동시에 작업할 수 있음.

장점

  • 상호작용성이 좋아집니다. 서버의 새로운 컨텐츠를 전체 페이지를 다시로드할 필요 없이 동적으로 변경할 수 있습니다.
  • 스크립트나 스타일 시트는 한 번만 요청하면 되므로 서버에 대한 연결을 줄여줍니다.
  • 상태를 페이지에서 관리 할 수 ​​있습니다. 메인 컨테이너 페이지가 다시 로드되지 않기 때문에 JavaScript의 변수와 DOM의 상태가 유지됩니다.
  • 기본적으로 SPA의 대부분의 장점과 같습니다.

단점

  • 동적 웹 페이지는 북마크하기 어렵습니다.
  • 브라우저에서 JavaScript가 비활성화된 경우 작동하지 않습니다.
  • 일부 웹 크롤러는 JavaScript를 실행하지 않으며 JavaScript에 의해 로드된 콘텐츠를 볼 수 없습니다.
  • SPA의 대부분의 단점과 같습니다.

 

 

Framework 프레임워크 

"소프트웨어 환경에서 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조" 
뼈대가 되는 부분을 미리 구현한 클래스, 인터페이스, 메서드 등의 모음

라이브러리와 프레임워크는 둘은 애플리케이션의 틀과 구조를 결정한다는 측면에서 활용도가 상당히 유사하나
라이브러리는 특정 기능이 필요할 때 호출해서 쓰는 도구 모음에 불과하다.
동일한 라이브러리를 사용하더라도, 개발자에 따라 핵심 클래스 설계와 상속구조, 데이터 처리방식 등이 달라질 수 있다.
이를 '확장 가능한 코드'를 통해 통제(혹은 가이드)하는 것이 프레임워크이다.

장점

  1. 미리 구현해 둔 코드를 쓰기 때문에 빨리 만들 수 있고,
  2. 품질이 보장되어 있고,
  3. 추상화 계층을 하나 제공하는 것이 되어 사용하기 쉽습니다.

단점

  1. 이것 자체도 익숙해 지는데에 시간이 걸릴 수 있고,
  2. 프레임워크 내부를 커스터마이징 하기 힘들고, 즉 유연성이 부족합니다.
  3. 언어가 아닌 프레임워크를 배우게 된다는 부작용이 있습니다.



프레임워크는 라이브러리가 가진 한계를 극복한 형태이다. 프레임워크는 설계자가 의도한 여러 디자인 패턴으로 구성되어있으며, 그래서 개발자가 애플리케이션의 구조적 설계를 신경 쓸 필요가 없다. (신경 쓰고 싶어도 못하도록 막는다.)

 즉 프레임워크는 개발자의 고민을 덜어주는 한편, 애플리케이션의 구조적 설계를 마치 한 사람이 만든 것처럼 튼튼하게 만들어주는 효과가 있다. 게다가 프레임워크는 개발자가 정해진 틀 안에서 비즈니스 로직을 편하게 구현할 수 있도록 라이브러리를 제공한다.

 정리하자면 프레임워크는 라이브러리보다 더 큰 개념이다. 라이브러리가 '쓸만한 기능들을 모아놓은 유틸 모음집"에서 그쳤다면, 프레임워크는 '일정 수준 이상의 품질을 보증하는 코드를 비교적 빠르고 편하게 완성 및 유지보수 할 수 있는 솔루션'이라고 할 수 있다.

 

라이브러리(Library)

"소프트웨어 개발에 쓰이는 하부 프로그램들의 모임"
즉, 자주 쓰일 만한 기능들을 (따로 구현하여) 모아 놓은 유틸(혹은 클래스)의 모음

프레임워크는 큰 틀을 제공하고 내 코드는 프레임워크의 틀 안에 맞춰서 작성해야 합니다. 큰 뼈대는 이미 잡혀있고 그 안의 내용물을 채우는 느낌 입니다. 작동할 때 코드 실행 흐름을 보면 프레임워크가 내 코드를 호출합니다. 반면 라이브러리는 사용할 수 있는 함수들의 모음으로, 내가 라이브러리를 호출해서 능동적으로 사용합니다.

 

 

스프링 프레임워크

  •  자바(JAVA) 플랫폼을 위한 오픈소스(Open Source) 애플리케이션 프레임워크(Framework)
  •  자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
  •  자바개발을 위한 프레임워크로 종속 객체를 생성해주고, 조립해주는 도구
  • 자바로 된 프레임워크로 자바SE로 된 자바 객체(POJO)를 자바EE에 의존적이지 않게 연결해주는 역할

특징

  • 크기와 부하의 측면에서 경량
  • 제어 역행(IoC)이라는 기술을 통해 애플리케이션의 느슨한 결합을 도모
  • 관점 지향 프로그래밍(AOP)을 위한 풍부한 자원
  • 애플리케이션 객체의 생명주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너(Container)라고 할 수 있음.
  • 간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정할 수 있음

 

 

디자인 패턴 : 싱글톤 패턴

app이 시작 될 때 클래스가 최초로 한번만 메모리를 할당하고 그 메모리에 인스턴스를 만들어 사용.
그 인스턴스에 대한 전역 접근을 제공하는 전역 인스턴스여서 다른 클래스 인스턴스가 데이터를 공유하기 쉬움
인스턴스가 절대적으로 하나라는 것을 보증하고싶을 경우. 두 번째 이용시부터 객체 로딩 시간이 줄어 성능 개선.

단점 : 생성자 private. New를 이용한 객체 생성 불가능. Static method인 getInstance를 호출하여 받야아 함
=> 멀티쓰레드 환경에서 객체가 두개 이상이 되는 문제생김

해결 1) synchronized : 동기화, volatile : 원자성 보장  / but, 성능에 안좋음
해결 2) 객체를 프로그램 시작과 동시에 초기화하는 방법.
해결 3) 별도의 static class에서 초기화를 해서 가지고있음

 

 

스프링 Spring MVC 패턴

웹 애플리케이션 개발 방법론(아키택쳐) 중 하나로 유명하다. 인기있는 프레임워크는 대부분 MVC패턴을 채택하고 있다. 
사용자(User)는 컨트롤러(Controller)를 사용(Uses)하여 웹 애플리케이션을 다룰 수 있다. 컨트롤러는 사용자의 요청에 맞는 데이터를 모델(Model)에 요청한다.(Manipulates) 뷰(View)는 모델이 리턴한 결과를 반영한다(Updates)

애플리케이션을 Model, View, Controller 영역으로 구분하여 개발합니다. 영역간의 결합도를 최소화한 디자인 패턴.
사용자에게 보여지는 프레젠테이션 영역과 비즈니스 로직, 데이터 구조가 서로 완전히 분리되어 있다
  • Model: 데이터를 가진 객체, 파라미터로 자주 쓰인다. DB의 테이블과 대응하는 경우가 많다.
  • View: UI를 담당한다. 클라이언트 측 기술인 Html, Css, Javascript등으로 만들어진 컨테이너이다.
  • Controller: UI를 통한 사용자의 입력 명령에 응답하고, 및 데이터 흐름 제어를 담당한다


  • 장점
  1. 디자이너, 개발자 영역이 분리됨으로써 분업화가 쉬워지며,
  2. 유지보수가 용이

출처 : https://preamtree.tistory.com/11


사실, 모델1 방식으로 웹 서비스를 개발하는 사례는 아예 없다고 봐도 무방하다. 지금은 프론트엔드 개발자와 백엔드 개발자의 역할이 명확해졌고, 모델1은 백엔드와 프론트엔드 역할 분담이 모호해서 오히려 협업의 걸림돌이 되기 때문이다.

처리과정

더보기

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를 생성한다.

 

MVC에서 왜 Maven을 쓰는가?

 

 

 

QR code : Quick Response

작은 공간에 기존 바코드보다 훨씬 많은 데이터를 담을 수 있음
오류 정정 기능이 있어, 일부가 손상되어도 복원이 가능 하다
360도 어느 방향에서나 읽을 수 있다. (3가지의 네모를 통해서)
연결 기능을 지원한다. (여러 QR코드에 나뉘어 저장된 정보를 다른 데이터로 연결 가능)

 

- 닷넷과 자바의 차이는?

 : (닷넷) ms에서 개발한 windows/mac os프로그램 개발 및 실행 환경

 (자바) 웹 어플리케이션 개발을 위한 플랫폼.

 

- 모바일 웹과 모바일 앱의 차이는?

 : (모바일 웹) HTML기반 웹 브라우저로 동작

                  () 플랫폼에 상관없이 모든 모바일 기기에서 빠르게 접근, 이용 가능
                        (URL, QR CODE, NFC)

                       하나의 웹사이트로 수많은 종류의 모바일 기기 유저가 경험 가능

 (모바일 앱) 디바이스에 설치 후 사용

                 () 네트워크 연결 없이도 동작할 수 있도록 개발 가능

                       특정 타겟에 맞춤 컨텐츠 제공 가능

 

- SI SM의 차이는?

 : (System Integration) 새로운 시스템 구축을 위해 일정기간 프로젝트를 진행

  새로운 IT개발 기술이나 다양한 개발 경험으로 다양한 분야를 접하며 빠르게 성장할 것

(System Management) 그렇게 구축된 시스템을 오픈 이후에 사용하며 개선사항/ 오류사항에 대한 유지보수

 개발된 시스템을 분석, 필요한 기능을 추가하거나 수정하면서 업무지식에 대한 전문가로 성장

 

- SW개발론에 대해서?

 : (폭포수) 순차적인 소프트웨어 개발 프로세스

 => 요구사항 분석 / 설계 / 구현 / 테스트 / 유지보수

 (애자일) 프로젝트의 방향을 지속적으로 검토, 버그를 고치고 필요한 것을 바꾸며 다시 개발을 진행할 수 있도록 변화에 대처하면서 위험요소를 최소화.

 (V모델) 폭포수 모델의 확장된 형태, 테스트 단계를 추가. 각 개발 단계 검증에 초점하여 오류 줄임

 (프로토타입모델) 요구사항 분석 / 프로토타입 설계 / 프로토타입 개발 / 사용자 평가 / 구현

 (나선형모델) 계획 및 초기 요구 분석/ 1차 위험분석 / 1차 프로토타입 개발 / 1차 사용자 평가 / 처음으로

 

- 인터넷과 인트라넷의 차이는?

 : (인터넷) 외부와 광범위하게 연결되어있는 여러 개의 네트워크를 묶은 개념

 (인트라넷) 조직이나 단체 내부에서 사용되는 네트워크.

 (엑스트라넷) 인트라넷과 유사하지만 특정 조직의 인트라넷을 사용이 허가된 사람 이외에도 고객, 협력업체 등에서 사용할 수 있도록

 

- 방화벽이란 무엇인가?

 : 트래픽을 모니터링해 허용하거나 차단하는 툴

 

- 프레임워크란?

 : 개발할 때 설계 기본이 되는 뼈대나 구조, 환경

 

- XML이란?

 : 확장할 수 있는 표시 언어. 태그를 사용자 임의로 만들 수 있음. 텍스트 기반의 간결한 데이터형.

 Html이 가지는 태그의 한계를 극복. 웹에서 데이터 및 구조화된 문서를 위한 보편적 표준

 

- 블루투스란

 : 휴대폰이나 그 주변장치를 연결하는 무선 통신 기술. 연결 케이블 없이 전파를 사용하여 데이터를 주고받기 위한 규격.

 

- 리눅스와 유닉스의 차이는?

 : (리눅스) 유닉스의 장점을 포함한 유닉스와 거의 닮은 운영체제.

 (유닉스) 서버용 운영체제.암호화 능력이 좋고 안정성과 메모리 관리 능력이 좋음.

 

- TCP/UDP 차이는? (TCP/IP 4계층 응용, 전송, 인터넷, 네트워크인터페이스 중 전송계층)

 : (TCP) 연결형 프로토콜로 목적지와 수신지를 확실히 하여 정확한 전송을 보장하기 위해 세션을 수립함. 3 way handshake로 연결을 설정, 4 way handshake로 해제. 높은 신뢰성. UDP보다 속도가 느림. 1:1 통신

 (UDP) 비연결형 프로토콜로 데이터를 빨리 전달 하는 것을 목적으로함. 신뢰성이 낮지만 TCP보다 빠름. 실시간서비스(스트리밍)처럼 연속성이 중요한 서비스에 사용. 1:1 & 1: &  : 다 통신

 

- IPv6?

 : IPv4 (32비트) 주소가 모자라 대안으로 제안된 인터넷 프로토콜 => 128비트

 

- 임베디드 시스템, 임베디드 SW?

 : 제어가 필요한 시스템 내에 존재하는 시스템, sw이다. 특정목적의 컴퓨터 시스템이며, 전체 장치의 일부분으로 구성,

 

- VPN NAT의 차이는?, VPN의 구성요소는?

 : (VPN) Virtual Private Network, 인터넷 네트워크를 이용해 특정 집단만 사용할 수 있는 작은 네트워크 구축. 인터넷 회선을 암호화된 규격을 통해 개인 전용 선 처럼 사용

 (NAT) Network Address Translation, 네트워크 주소 변환

사설 ip주소를 공인 ip주소로 바꿔주는데 사용함.

 

- 스레드와 프로세스의 차이는?

 : (스레드) 프로세스가 할당 받은 자원을 이용하는 실행 단위, 프로세스 하나가 생성되면 하나의 메인스레드 생성됨. 추가하지 않는 한 모든 코드는 메인스레드에서 실행됨.

 (프로세스) 운영체제로부터 자원을 할당 받는 작업의 단위, 컴퓨터에서 실행중인 프로그램

 

- ERP?

 : 기업 자원 관리(Enterprise Resource Planning) 기업 전체의 인적물적 자원을 효과적이며 통합적으로 관리하며 경영의 효율화와 기업 경쟁력을 강화하는 솔루션입니다생산판매인사회계 등 기업의 전반적인 업무 프로세스를 하나의 체계로 구축하며 정보를 공유하고 신속한 업무처리를 도와주는 시스템.

 

- Git, Github

 : (Git) 여러 대의 컴퓨터

 (Github) 여러 대의 컴퓨터가 소통할 수 잇는 서버

 

- “RESTful 하다의 정확한 의미

 : Representational State Transfer의 약자, REST를 지킨 서비스 디자인

 REST 구성 (자원 = URI, 명령= HTTP Method , 표현 = Representations)

- 빅오, 오메가, 세타

 (빅오) 최악의 경우, (오메가) 최선의 경우, (세타) 최소와 최악의 중간인 평균복잡도

 

 

 

출처
https://webie.tistory.com/99
https://sas-study.tistory.com/53
https://brunch.co.kr/@thswlsgh/5
https://preamtree.tistory.com/41?category=743847
http://dailyddubby.blogspot.com/2018/05/111-it.html
728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v