IT 면접족보/면접요령

족보정리

낙산암 2022. 3. 7. 21:15

[JAVA]

1.Garbage Collection(가비지 컬렉션)이란 무엇인가요?

 

> Garbage Collection(가비지 컬렉션)메모리 관리 방법 중 하나로 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요 없게 된 영역을 해제하는 기능이다.

>Garbage Collection의 장점은 이미 해제된 메모리에 접근하거나 또 다시 해제하는 버그와 메모리누수(더이상 사용되지 않는 객체들이 회수되지 못하고 누적되는 것)의 버그를 줄이거나 막을 수 있다.

>단점으로는 할당된 메모리가 해제되는 시점을 알 수 없어 프로그램이 예측 불가능하게 일시적으로 정지할 수 있어 실시간 시스템에 적합하지 않을 수 있다. 또한 프로그래머가 객체가 필요 없어지는 시점을 알고 있더라도 이 알고리즘이 메모리해제시점을 추적해야 하므로 오버헤드작업이 되는 경우가 있다.

>Java에서는 JVMGC(Garbage Collection) 기능을 사용하여 메모리를 정리한다.

자바의 GC는 어떻게 동작하나요?

>'메모리를 할당--> 사용중인 메모리 인식 --> 사용되지 않는 메모리 인식'과정으로 이 작업을 통해 앞으로 메모리를 얼마나 사용할 수 있는지 파악하고 Stop The World를 통해 GC를 실행시킨다. (Stop The WorldGC작업을 하기 위해 JVM이 어플리케이션 실행을 멈추는 것을 말한다. )

 

간략버전)

 

시스템에서 더이상 사용하지 않는 동적 할당된 메로리 블럭을 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것으로 시스템에서 가비지컬렉션을 수행하는 부분을 가비지 컬렉터라 부른다.

 

2. 자바의 기본형 데이터 타입에 대해 설명해 보세요.

기본형 타입을 8타입으로 나눌 수 있습니다.

 

- 정수형 타입 :

byte(1byte), short(2byte), int(4byte), long(8byte)

정수형은 정수를 표현하는 데이터 타입인데 표현할 수 있는 정수의 범위에 따라서 다양하게 제공된다.정수형에서 가장 자주 사용하는 int4바이트이다.

long형은 8byte크기를 가진다. int 보다 더 큰 범위의 정수를 표현하고 싶을때 사용한다.

 

- 실수형 타입 : float(4byte), double(8byte)

실수형은 floatdouble형이 있다.

float4바이트, double8바이트로 doublefloat보다 더 큰 범위의 실수를 표현할 수 있다.

 

- 문자형 타입 : char(2byte)

문자형은 char2byte크기를 가집니다. 문자는 작은따옴표를 이용하여 한 글자를 표현할 수 있다.

 

- 논리 타입: boolean(1byte)

논리형은 크기가 1byte이고 truefalse 중에 한 가지 값을 가질 수 있다.

 

 

3.자바의 참조형 데이터 타입에 대해 설명해 보세요.

 

참조 자료형은 클래스 타입으로 변수를 선언하는 자료형입니다. 그러므로 클래스에 따라 할당되는 메모리가 다릅니다. 대표적으로 String, Date 등이 존재하고 또한 임의로 내가 원하는 클래스를 만들어 참조 자료형으로 사용할 수 있습니다.

참조형은 객체의 저장 공간을 주소를 저장합니다. 참조형 변수는 null 값을 기본으로 가지고 있고 정의된 생성자를 통해 생성 되며 힙 메모리 공간에 저장 됩니다.

 

Reference type(참조형) - 메모리상에 객체가 있는 위치를 저장

종류 - Class, Interface, Array 등

 

4. OOP (Object-Oriented Programming)이란 ?

 

객체 지향적인 프로그래밍.

, C언어같은 절차 지향적인 프로그래밍이 아닌 객체의 관점에서 프로그래밍을 한다는 것

OOP는 객체를 기준으로 코드를 나누어 구현한다. 자바의 경우 그 구성 부분 단위가 클래스이다.

자세히 말하자면 클래스는 설계도고 직접 일 을 하는 구현체는 인스턴스이다.

 

OOP의 특징

캡슐화 (Encapsulation)

캡슐화란

하나의 객체에 대해 그 객체가 특정한 목적을 위한 필요한 변수나 메소드를 하나로 묶는 것을 의미한다. 따라서 클래스를 우리가 만들 떄 훗날 이 클래스에서 만들어진 객체가 특정한 목적을 잘 수행할 수 있도록 사용해야할 변수와 그 변수를 가지고 특정한 액션 즉 메서드를 관련성 있게 클래스에 구성해야한다.

 

정보은닉

그리고 캡슐화를 하는 중요한 목적은 바로 정보은닉이다. 유저 정보를 가지고 있는 User라는 객체에서 유저의 정보가 public으로 선언되어 있다면, 누구든 접근해서 유저 정보를 변경할 수 있다. 그렇기 때문에 private로 해서 데이터를 보호해서 접근을 제한해야한다.

 

이렇게 보호된 변수는 gettersetter 등의 메서드를 통해서만 간접적으로 접근이 가능하도록 하는 것이 캡슐화의 중요한 목적이다.(setter도 아무생각 없이 만들면 안된다.)

 

 

추상화 (Abstraction)

추상화는 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하기 위한 개념이다.

 

개념설명

세상에 있는 것을 본따 클래스를 만들고 그 클래스의 상태와 행동을 부여한 객체를 만든다.

 

그러나 세상에 모든 것을 다 클래스에 담고 객체를 만드것은 불가능하다. 그래서 추상적으로 생각해 일단 큰틀의 클래스를 구현하고 거기에 최소 이러한 공통적인 요소나 필수 적인 요소는 들어갔으면 하는 바램에서 만든 것이 추상클래스이다.

 

인터페이스와 추상클래스

 

이 과정에서 공통적인 요소나 특징을 추출하는 과정이 추상화 인것 같다.

 

예를들어. 벤츠, 아우디, 티코 등등 우리가 생각하는 여러 종류의 자동차가 있다. 이것을 다 클래스화하고 변수와 메서드 등을 개별적으로 만드는 것은 무모한 짓이다. (,확장성 때문에 추상화할 필요가 있다.)

따라서 방금 나열한 자동차들의 공통적인 요소나 특징을 추출하는 과정인 추상화를 거쳐 요소를 끄집어 내면 바퀴, 핸들, 차문, 유리창 등 필수적인 부품이 있다.

바퀴는 굴러가고, 핸들은 돌아가고 차문은 열려야한다 공통적인 행동 즉 어떤 차든 필수적으로 필요한 메서드가 추출된다.

 

이러한 과정이 추상화하는 과정이다. 이렇게 추상적으로 끄집어 낸 개념들을 큰 틀에서 클래스로 만든것이 바로 추상클래스이다.

추상화는 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법이라고 할 수 있다.

 

다형성(Polymorphism)

다형성은 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해준다. , 다형성은 형태가 같은데 다른 기능을 하는 것을 의미한다(같은 동작이지만 다른 결과물이 나올때 다형이라고 생각하면 된다.).

이를 통해 코드의 재사용, 코드 길이 감소가 되어 유지보수가 용이하도록 도와준다.

 

Overriding & Overloading

OOP에서 다형성의 개념을 녹여내는 방법은 두가지인데, 바로 오버라이딩(Overriding)과 오버로딩(Overloading)이다.

 

오버라이딩

- 부모 클래스에서 상속받은 자식 클래스에서 부모클래스에서 만들어진 메서드를 자식 클래스에서 자신의 입맛대로 다시 재정의해서 사용하는 것을 말한다.

오버로딩

- 같은 이름의 메서드를 사용하지만 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현할 수 있게 만드는 개념

오버로딩이 가능하려면 메서드끼리 이름은 같지만 매개변수의 갯수나 데이터 타입이 다르면 오버로딩이 적용

 

 

상속성, 재사용(Inheritance)

상속은 객체지향의 꽃이라고 할 수 있다.

상속이란 기존 상위클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와주는 개념이다.

기존 클래스에 기능을 가져와 재사용할 수 있으면서도 동시에 새롭게 만든 클래스에 새로운 기능을 추가할 수 있게 만들어 준다.

 

간략버전)

OOP란 Object-Oriented Programming의 약어로써 객체지향 프로그래밍을 의미

데이터를 객체로 취급하여 프로그램에 반영한 것이며, 순차적으로 프로그램이 동작하는 기존의 것들과는

다르게 객체와 객체의 상호작용을 통해 프로그램이 동작하는 것을 말한다.

OOP 특징

a. 객체지향 프로그래밍은 코드의 재사용성이 높다.

b. 코드의 변경이 용이

c. 직관적인 코드분석

d. 개발속도 향상

e. 상속을 통한 장점 극대화

 

5.캡슐화 패턴을 설명하시고, 왜 해야 하는지 설명해 주세요.

 

캡슐화의 패턴은 생성패턴 구조패턴 행위패턴으로 나뉜다.

캡슐화는 중요한 데이터를 쉽게 바꾸지 못하도록 할 때 사용한다.

 

캡슐화를 하는 가장 큰 이유는 정보 은닉에 있다.

캡슐화를 통해 외부에서 내부의 정보에 접근하거나 변경할 수 없게 직접적인 접근을 막고

객체가 제공하는 필드와 메소드를 통해서만 접근이 가능하다.

 

이렇게 접근을 제한함으로써 유지보수나 확장 시 오류의 범위를 최소화할 수 있고

객체 내의 정보 손상과 오용을 방지하고 데이터가 변경되어도 다른 객체에 영향을 주지 않아 독립성이 좋다.

 

6.다형성이란 무엇이고 동적 바인딩에 대해 설명해주세요.

 

다형성(Polymorphism)

-하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미합니다.

상속을 통해서 형성된 부모 자식 클래스들간의 효과적인 관리를 가능하게 해 줍니다.

-자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로

자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있습니다.

 

동적 바인딩(Dynamic Binding)

 

-동적 바인딩(Dynamic Binding)- 런타임에 호출될 함수가 결정되는 것으로, virtual 키워드를 통해 동적 바인딩하는 함수를 가상 함수라고 한다.

 

함수가 가상 함수로 선언이 되면, 포인터 변수가 실제로 가리키는 객체에 따라 호출의 대상이 결정된다.

 

(추가)정적 바인딩

 

-컴파일 타임에 호출될 함수가 결정되는 것으로, 함수는 기본적으로 정적 바인딩된다.

 

컴파일러는 선언되어있는 자료형을 보고 바인딩을 하기 때문에 실제로 가리키는 객체가 무엇이든 포인터의 자료형을 기반으로 호출의대상을 결정한다.

 

7. 상속이란 무엇인가요?

- 부모 클래스에서 정의된 필드와 메소드를 자식 클래스가 물려받는 것입니다.

 

8.상속에 대해 개발하면서 느낀점을 말해주세요.

(1) 상위 클래스 기능에 버그가 생기거나 기능의 추가/변경 등으로 변화가 생겼을 때 상위 클래스를 상속 받는 하위 클래스가 정상적으로 작동할 수 있을지에 대한 예측이 힘듬.

- 하위 클래스는 상위 클래스의 부분 집합이기 때문에

(2) 상속 구조가 복잡해질 수록 그 영향에 대한 예측이 힘들어짐

(3) 상위 클래스에서 의미 있었던 기능이 하위 클래스에서는 의미 없는 기능일 수 있음

(4) 하위 클래스는 반드시 상위 클래스로부터 물려 받은 기능들을 제공해야 함 + 하위 클래스에서 기능들이 추가됨

- 기능 확장에 따라 상위 클래스에서 파생된 클래스들이 많아지고, 그 규모가 커짐에 따라 일관성 있게 작성하지 않은 클래스들에 대한 이해도는 점차 복잡해지고 사용에 어려움이 생길 수 있음

 

9. classinterface에 대해 설명해주세요.

클래스와 인터페이스는 객체 지향 프로그래밍에서 사용하며, 클래스와 인터페이스의 차이점은 class는 객체를 인스턴스화하는 참조 유형이고, interface는 객체를 인스턴스화하는 데 사용할 수 없는 참조 유형이라는 것입니다. Class는 많은 interface를 구현할 수 있습니다.

 

10. thread란 무엇이고 thread를 구현하기 위한 인터페이스, 클래스는 어떤 것이 있나요?
Thread란 프로그램 안의 또 다른 프로그램이라는 뜻이며 프로그램을 여러 개 실행하여 효율성을 높이도록 도와줍니다. 특히 채팅프로그램에서 thread클래스를 상속하게 하여 동시에 실행할 용도로 사용했습니다. Thread를 구현하기 위해서는 Thread클래스를 상속받거나 Runnable인터페이스를 구현하는 방법 2가지가 있습니다.

 

11. static 키워드에 대해 설명하세요.

static은 고정된 의미를 가지고 있습니다. 변수나 메소드에 주로 사용하고,

인스턴스의 생성과 상관없이 메모리에 해당 영역을 초기화 시키고 해당 영역을 공유하는 기능을 가지고 있습니다.

 

12.오버로딩과 오버라이딩 차이점은 무엇인가여?

 

오버로딩 : 같은 함수이름으로 데이터 타입과 갯수를 달리 한 것(데이터 타입과 갯수 같고 리턴 타입 다르면 오버로딩X) -> 새로운 메소드를 정의-> 함수 여러개 만들 수 있음

ex : System.out.println()

오버라이딩 : 상속 관계에서 같은 함수로 바디만 달리한 것 -> 상속받은 기존의 메소드를 재정의

부모 = 자식

오버라이딩은 자식꺼

ex:

class Cake {

public void yummy() {

System.out.println("Yummy Cake");

}

}

 

class CheeseCake extends Cake {

@override

public void yummy() {

System.out.println("Yummy Cheese Cake");

}

}

  오버로딩 오버라이딩
메소드명 동일 동일
매개변수 및 타입 다름 동일
리턴 타입 관계 없음 동일

(#다형성 : 하나의 객체가 여러가지 타입을 가질 수 있는 것)

오버로딩(Overloading)도 다형성을 구현하는 방법 중 하나

public class Parent {

public static void main(String[] agrs) {

 

Parent p1 = new Parent();

Parent p2 = new Child();

Parent p3 = new ChildOther();

 

13. 추상클래스와 인터페이스에 대해 설명하시오.

추상클래스: 여러가지 클래스들 간에 비슷한 필드와 메서드를 공통적으로 추출해 만들어진 클래스이며 다중 상속이 불가능함.

인터페이스: 일종의 추상클래스, 추상클래스처럼 추상메소드는 갖지만 추상클래스보다 추상화 정도가 높다.

implements 키워드를 사용한다. Extends는 하나의 클래스만 상속 가능하나 Interface는 다중상속이 가능

 

Interface

일종의 추상 클래스

- 오직 추상메서드와 상수만을 멤버로 갖는다.

Implements 키워드를 사용

- 상속의 관계가 없는 클래스간 서로 공통되는 로직을 구현하여 쓸 수 있도록한다.

- Extends는 하나의 클래스만 상속 가능하나 Interface는 다중 상속이 가능하다.

Abstract

추상메서드를 하나 이상 가진 클래스

자신의 생성자로 객체 생성 불가능

- 하위 클래스를 참조하여 상위 클래스의 객체를 생성

- 하위 클래스를 제어하기 위해 사용

 

Interface vs Abstract

공통점 

- new 연산자로 인스턴스 생성 불가능.

- 프로토타입만 있는 메서드를 갖는다.

- 사용하기 위해서는 하위클래스에서 확장/구현 해야 한다.

차이점

- 사용하는 키워드가 다르다.

- Abstract는 일반 메서드를 사용할 수 있지만, Interface는 메서드 선언만 가능하다.

 

14.제넥릭은 무엇인가?

내부 데이터 타입을 컴파일 시 미리 지정하는 방법이다

제네릭 이전의 프로그래밍에서는 인수나 반환값으로 Object 타입을 사용했다 이 경우에는 반환된 Object 객체를 다시 원하는 타입으로 타입 변환해야 하며, 이때 오류가 발생할 가능성도 존재한다.

하지만 제네릭을 사용하면 컴파일 시에 미리 타입이 정해지므로, 타입 검사나 타입 변환과 같은 작업을 생략할 수 있다.

 

15. 배열과 ArrayList의 차이점은 무엇인가여?

 

1) 배열의 크기

배열 : 배열의 크기는 한 번 정하면 변경이 불가하다.

ArrayList : 저장하는 데이터 수에 따라 크기가 가변한다.

- 데이터 추가 add(index, element) : 2개의 인자를 넣으면 특정 인덱스에 저장 가능

- 데이터 삭제 remove(index) : 특정 인덱스의 데이터를 삭제 가능

- 데이터 가져오기 get(index) : 특정 인덱스의 데이터를 가져올 수 있다.

 

2) 데이터 자료형

배열 : 배열은 기본자료형 / 참조형 모두 저장이 가능하다.

ArrayList : Object으로만 저장할 수 있다.(기본형 x)

 

3) 길이

배열 : 길이를 반환하는 메소드로 length 변수를 사용

ArrayList : 길이를 반환하는 메소드로 size( ) 메소드를 사용

 

4) 추출 및 조회

배열 : forfor-each등의 제어문으로만 배열을 순회할 수 있다.

ArrayList : for loop은 물론 iterator를 사용해 배열을 순회할 수 있다.

 

 

16.스택과 링크드리스트와 리스트의 차이점을 설명해 보세요.

 

LinkedList

LinkedList는 불연속적(비순차적)으로 존재하는 데이터를 서로 연결(link)한 형태로 구성되어 있음.

LinkedList는 삭제가 간담함. (삭제하고자 하는 요소의 이전요소가 삭제하고자 하는 요소의 다음 요소를 참조하도록 변경하기만 하면 되므로 삭제가 간담함)

LinkedList는 새로운 데이터 추가하는 처리속도가 매우 빠름. (새로운 요소를 추가할 때는 새로운 요소를 생성한 다음 추가하고자 하는 위치의 이전 요소의 참조를 새로운 요소에 대한 참조로 변경해주고, 새로운 요소가 그 다음 요소를 참조하도록 변경하기만 하면됨)

LinkedListArrayList와 비교했을 때 데이터를 추가/변경할 때 유리함.

 

List

List인터페이스를 구현한 자료구조는 ArrayList(클래스), LinkedList(클래스), Vector(클래스), Queue(인터페이스).

순서가 있는 데이터의 집합. 데이터의 중복을 허용함.

 

Stack

클래스로 구현되어 있으므로 상속받으면 사용가능.

Stack은 마지막에 저장한 데이터를 가장 먼저 꺼내게 되는 LIFO(Last In First Out)구조로 되어 있음.

Stack은 순차적으로 데이터를 추가하고 삭제하는 ArrayList와 같은 배열기반의 컬렉션 클래스가 적합.

 

17. 자바 컬렉션프레임워크의 대표 인터페이스는 무엇이 있나요?


컬렉션 프레임워크는 데이터(객체)를 효율적으로 추가, 삭제, 검색하기 위해 특정 알고리즘을 적용해 구현한 인터페이스를 말합니다.  Collection 인터페이스에는 List, Map, Set, Stack, Que가 있습니다.
각 인터페이스의 특징을 간략하게 설명하면 List는 순서가 있고 배열과 유사하게 인덱스로 데이터를 저장 및 관리하며 중복을 허용합니다. Map은 key와 value의 쌍의로 이루어진 데이터의 집합으로 key값은 중복이 허용되지 않지만 value는 중복이 허용됩니다. Set은 순서가 없는 데이터의 집합이며 중복을 허용하지 않습니다.
Stack은 마지막에 넣은 요소가 먼저 나오는 특징을 가지고 있는 것과 반대로 Queue는 먼저 들어간 데이터가 먼저 나오는 구조를 가지고 있습니다. 추가적으로 Deque은 Stack과 Queue를 합친 형태를 가지고 있습니다.

 

18.접근제어자의 종류와 특성에 대해 성명하세요

 

public : 모든 접근을 허용

protected :  상속관계의 객체들만 허용

default : 같은 패키지(폴더)에 있는 객체들만 허용

private : 현재 객체 내에서만 허용

 

 

 

19. hashCode()값이 모두 같다면 어떤 일이 벌어질까요?

 

 그러면 비교 기준을 무엇으로 삼을까요? hashCode 값마저 같다면?

 

 2개가 모두 Dog 객체였다면, identityHashCode 값으로 비교합니다. 이것을 가지고 균형 트리를 맞춥니다. 맞추는데, 이 두 값이 같은 경우도 있습니다. 이 때에는 -1을 리턴합니다.

출처https://codingdog.tistory.com/entry/java-hashset-key-해쉬-코드가-모두-같을--최악-복잡도가-어떻게-될까요  [강아지의 코딩공부]

-----------------------------------------------------------------------------------------------

객체 주소가 같다면 hashCode()값은 같습니다.

 

String의 경우

String a = "자바"

String b = new String("자바")

hashcode는 서로 다른 값이어야 합니다.

그런데,

String 클래스 입장에서 ab는 같은 객체 입니다.

같은 문자열이니까요.

같은 문자열을 갖는 두 객체의 hashcode가 다르다면,

hashcode의 의미가 없어진다고 볼 수 있지 않을까요

hashcode를 활용해서 Map이나 Set에 저장된 key값을 찾아야 하는데,

같은 객체인데도 불구하고 hashcode값이 다르니,

제대로 찾을 수가 없겠죠.

 

그러므로 인위적으로 String클래스 안에서의 hashcode메소드를 재정의하여

같은 String객체에 대해(equals 리턴값이 true) hashcode가 같아지도록 만들어 준 것입니다.

 

Q. hashCode가 같다면, equals가 반드시 트루인가 ??

 

답은 아닙니다.

 

실제 String의 경우 서로 다른 문자열이 (equals리턴값은 false)이지만 같은 hashCode를 리턴하는 경우가 생깁니다.

hashCode의 값은 객체마다 유일한 값이 아니라는겁니다.

-------------------------------------------------------------------------------------------------

 

 

 

20. HashtableHashMap 차이점은 무엇인가요?

 

-중복 키에 대한 처리로 해시테이블은 키가 같은 값을 두 번 넣게 되면 초기 값을 유지하게 되고, 해시맵은 키가 같은 값을 두 번 넣게 되면 두번째 값으로 덮어버리는 차이가 있다. 해시맵은 키에 널 값을 허용한다.

 

21. 객체의 직렬화는 무엇이고 직렬화 대상이 되기 위해서 어떤 인터페이스를 구현해야 하나요?


자바 직렬화란 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술이다.
직렬화를 하기 위해서는 Serializable 인터페이스를 생성해주면 된다.

 

22. 자바로 자판기를 설계 할 때, 어떻게 설계 할 것인지 설명해 주세요.

 

1. 제품을 보여준다

2. 고객이 돈을 넣었는지 확인한다

3. 고객이 넣은 돈을 제품 가격과 비교한다

4. 고객이 넣은 돈이 제품가격 보다 작은가? => 돈을 더 넣어달라는 알람이 들어온다

5. 고객이 넣은 돈이 제품 가격보다 큰가? => 제품을 내어 준다.

6. 제품을 내주고도 고객이 넣은 돈이 남았는가? => 제품을 다시 보여주고, 거스름 돈의 알람을 같이 띄운다

7. 고객이 제품을 선택하면 3~6을 반복한다.

8. 고객이 거스름돈을 선택하면 남은 거스름돈을 내어준다.

 

 

23. 라이브러리와 프레임워크의 차이점은?

 

라이브러리 Library

Javascript의 라이브러리는 jQuery이고 클래스의 라이브러리는 OOP이다.

미리 작성된 코드, 변수, 함수, 클래스가 포함될 수 있으며 개발자가 개발하는데 필요한 것들을 모아둔 도구들의 나열로 필요할 때 호출하여 사용할 수 있다. 즉 프로그램 기능 수행을 위해 활용이 가능한 도구들의 집합이다.

 

프레임워크 Framework

Java의 프레임워크는 Spring, Python의 프레임워크는 django 그리고 PHP의 프레임워크로는 Laravel이 있다.

 

소프트웨어 애플리케이션이나 솔루션 개발을 수월하게 하기 위해 소프트웨어의 구체적 기능들에 해당하는 부분의 설계와 구현을 재사용 가능하도록 협업화된 형태로 제공하는 소프트웨어 환경이다.

 

프레임워크는 애플리케이션 개발시 필수적인 코드, 알고리즘, 데이터베이스 연동 등과같은 기능을 위해 뼈대를 제공해준다. 그리고 개발자는 그 뼈대 위에서 코드를 작성하여 애플리케이션을 완성한다. 객체지향 개발을 하면서 일관성 부족 등의 문제를 해결해 준다. 완성된 제품을 만들기 위해 개발자를 도와주고 기반이 되는 역할을 해준다. 소프트웨어의 특정 문제를 해결하기위해 상호 협력하는 클래스와 인터페이스의 집합니다.

 

- 특정 형태의 소프트웨어 문제를 해결하기 위해 상호 협력하는 클래스프레임과 인터페이스 프레임의 집합
- 특정한 틀을 만들어놓고 거기에 살을 붙여 놓음으로써 프로그램을 만들어 작업시간을 줄여주는 것이다. 
- 프레임워크는 특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성된다.
- 프레임워크는 이렇게 추상적인 개념들이 문제를 해결하기 위해 같이 작업하는 방법을 정의한다.
- 프레임워크 컴포넌트 들은 재사용이 가능하다.
- 프레임워크는 좀 더 높은 수준에서 패턴을 조작한다.
* 프레임워크가 중요한 이유는 객체지향 개발을 하게 되면서 개발자의 취향에 따라 다양한 프로그램이 나오게 되었다.
 프로그램 개발에 투입되는 개발자도 점점 늘어남에 따라 전체 시스템의 통합성, 일관성이 부족하게 되었기 때문이다. 
 그래서 개발자의 자유를 제한하기 위해 프레임워크를 도입했다.
 
프레임워크가 가져야할 특징
a. 개발자들이 따라야할 가이드라인을 가진다.
b. 개발할 수 있는 범위가 정해져 있다.
c. 개발자를 위한 다양한 도구들이 지원된다.
 
프레임워크의 장/단점
장점 - 개발 시간을 줄일 수 있고 오류로부터 자유로울 수 있다.
단점 - 프레임워크에 너무 의존하면 개발 능력이 떨어져서 프레임워크 없이 개발하는 것이 불가능해지는 점이다.

 

 

 

[WEB]

1.MVC 패턴에 대해 동작방식을 설명해 주세요.

 

 

# MVC

 - Model : DATA, 정보들의 가공을 책임지는 컴포넌트를 말합니다.

 - Conrtoller : 모델(Model)과 뷰(View) 사이를 이어주는 브릿지(Bridge) 역할을 의미합니다. 

 - View : 사용자에게 보여지는 부분, 즉 유저 인터페이스(User interface)를 의미합니다.

 

# MVC 동작 순서

 브라우저에서 요청을 받는 경우(JSP/Servlet)

 

             request          (request를 받아서)                 request         데이터베이스 연결

사용자 ────── 컨트롤러 ────────Model클래스 ───────데이베이스(DAO)

          결과값을 받는다           request에 값을 담아서    (setAttribute())

─────────Model클래스 ────────컨트롤러 ────────JSP로 전송 ────> 사용자

 

 사용자가 보내준 request를 이용해서 ─> 결과값을 담아 준다 ─> (request는전체 동일하다)

                                                    Call By Reference

 

 

 

 

2.model 1model 2패턴의 차이를 설명해 주세요.

 

 

model1 패턴 :

model 1JSP 또는 Servlet을 사용하고

JSP 또는 Servlet이 요청에 대해서 모든 응답을 처리 한다.

요청 :

request,

valiating data,

handling businness logic,

generating response

 

model 1 business 로직과 presentation 로직이 결합되어 있다.

model 1 은 작고 , 개발하기 쉬운 간단한 기능에 사용된다.

 

 

model 2 패턴:

model 2

content를 다루고 구하는데 사용되는 로직으로 부터

contentdisplay가 분리 되어 있다.

 

model 2logicdisplay를 분리한다.

model-view-controller (MVC)

구성이 되어진다.

 

정확게 MVC 안의 model model 2 디자인에 의해서 결정된 것은 아니다.

 

model 2 어플리케이션에서는

client browser controller request하고

controller

display를 위한 content을 얻어오는데 필요한 logic을 구성한다.

 

controllerrequest를 전달할 view을 결정한다.

view

controller 에 의해서 content 전달 된 것을 render 한다

(화면을 구성한다.)

 

model 2는 중간이나 큰 크기의 어플리케이션에 적합하다.

 

 

3.JSTL은 무엇이고 사용하는 이유는 무엇인가요?

 

 

#정식명칭

자바서버 페이지 표준 태그 라이브러리 (JAVAServer Pages Standard Tag Library)이다. Java EE기반의 웹 어플리케이션 개발 플랫폼을 위한 컴포넌트 모음이다.

JSTL + EL의 조합이고, EL의 정식 명칭은 표현 언어(Expression Language)라고 하여 줄여서 EL이라고 부른다.

Java EE은 자바로 구현되는 웹프로그래밍에서 가장 많이 사용되는 JSP, Servlet을 비롯하여, 데이터베이스에 연동하는 JDBC와 같은 많은 기술들이 포함되어 있다.

웹 어플리케이션은 소프트웨어 관점에서 인터넷이나 인트라넷을 통해 웹 브라우저에서 이용할 수 있는 응용 소프트웨어를 말한다.

컴포넌트(component)은 여러 개의 프로그램 함수들을 모아 하나의 특정한 기능을 수행할 수 있도록 구성한 작은 기능적 단위. 컴포넌트를 이용하면 소프트웨어 개발을 쉽게 조립할 수 있다. 이것을 모듈이라고도 한다.

 

#사용하는 이유

- 다른 JSP페이지 호출

- 데이터베이스로의 입력, 수정, 삭제, 조회 가능

- XML문서의 처리 가능

- 문자열을 처리하는 함수 호출

- JAVA의 장점을 그대로 사용

- 다양한 Servlet간의 데이터 공유

- 많은 사용자의 원활한 접속처리

- Java Beans의 활용

- 사용자 특화 커스텀 태그 라이브러리

 

#면접 시 암기력 킹들만

자바로 구현되는 웹프로그래밍에서 가장 많이 사용되는 JSP, Servlet, 데이터베이스 연동을 비롯하여, 개발 플랫폼에 사용되는

프로그램 함수들을 모아 XML 테이터 처리와 조건문, 반복문과 같은 기능을 수행할 수 있도록 구성한 작은 기능적 단위입니다.

 

#면접 시 암기력 No들만

자바로 구현되는 웹프로그래밍에서 가장 많이 사용되는 Servlet(서블렛)에 사용하는

프로그램 함수들을 모아 XML데이터 처리와 같은 기능을 수행할 수 있도록 구성한 것입니다.

 

4. JSP에서 세션에 값을 저장하고 꺼내는 방법은 무엇인가요?
세션에 값 저장하기 위해서는 session 객체의 setAttribute 메소드를 사용
세션에 저장된 값을 얻기 위해서는 session 객체의 getAttribute 메소드를 사용

 

5. jsp에서 한글이 깨지는 문제가 발생시 어떻게 해야 하나요?

 

파일의 인코딩 방식과 브라우저가 사용하는 인코딩 방식이 서로 달라서 나타나는 문제로,

하나의 인코딩 방식으로 통일  주어야 합니다.

 

현재 한국에서 사용되는 인코딩 방식으로는 크게 euc-kr 방식과 UTF-8 방식이 있습니다.

euc-kr은 국가 언어코드 우리나라에서만   있도록 만든 코드이며 세계 어디에서나 공통으로 사용되는 인코딩 방식이 아니기 때문에다른 언어를 사용하는 환경(외국 )에서는 한글 페이지를 제대로   없는 문제가 발생합니다.

 

이를 해결하기 위해 새로운 인코딩 방식이 개발되었는데그중 가장 보편화된 인코딩이 UTF-8입니다.

 

JSP <head> 태그 안에 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

를 삽입하면 됩니다.

 

6.JSP는 무엇인가여?

 

Java Sever Page의 약자임.

 

JSP 란 JavaServer Pages 의 약자이며

HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.

JSP 가 실행되면 자바 서블릿(Servlet) 으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고

그렇게 생성된 데이터를 웹페이지와 함께 클라이언트로 응답한다.

 

7. Servlet이란 무엇인가요?

 

> 클라이언트의 요청을 처리하고 그 결과를 반환하는 Servlet클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술이다. 일반적으로 웹서버는 정적인 페이지만 제공하는데 동적인 페이지를 제공하기 위해서 Servlet을 사용한다. (여기에서 동적인 페이지란 사용자의 요청에 따라 변화되는 무언가를 제공하는 것을 말한다.)

>MVC패턴 중에서 Controller로 이용된다.

 

>Servlet 동작 과정

 

1. 사용자(클라이언트)url을 입력하면 http Request를 서블릿 컨테이너로 전송

2. 전달받은 서블릿 컨테이너는 HttpServletRequestHttpServletResponse객체를 생성한다.

3. web.xml이 요청받은 url을 분석하여 어느 서블릿에 요청한 것인지 찾는다

4. 해당 서블릿에서 service메소드를 호출한 뒤에 get,post여부에 따라서 doGet()이나 doPost()를 호출한다.

5. 호출한 메소드는 동적페이지를 생성한 뒤에 HttpServletResponse객체에 응답을 보낸다.

6. 응답이 끝나면 생성한 두 객체를 소멸시킨다.

 

8.ajax 란 무엇인가요?

Asynchronous JavaScript And XML web pageload 된 이후에, web server 로 부터 data를 읽어 올 수 있다pagereload 하지 않고 web pageupdate할 수 있다.background 에서 web serverdata를 보낼 수 있다.

 

 

9.RESTful은 무엇이라고 생각하시나요?

 

웹에 존재하는 모든 자원(이미지,동영상 DB자원등)에 고유한 URI를 부여해 활용하는 것으로, 자원을 정의하고 자원에 대한 주소를 지정하는 방법론을 의미합니다. 하나의 URI 는 하나의 고유한 리소스를 대표하도록 설계된다는 개념에 전송방식을 경합해서 원하는 작업을 지정합니다.

URI 설계시 주의 사항들은 다음과 같습니다.

 

URI 경로에는 대문자보다 소문자를, 동사보다는 명사를 사용하여야한다. 슬래시 구분자(/)는 계층 관계를 나타내는데 이용한다. URI 마지막 문자 뒤에 슬래시 구분자(/)를 포함하지 않는다. 언더바 대신 하이폰을 사용한다. 행위와 파일 확장자의 구호를 포함하지 않는다입니다.

보통 CRUD의 기능을 POST 방식만으로 처리가 아닌, Create(생성)POST , Read(조회)GET, Update(수정)PUT,PATCH, Delete(삭제)DELETE 에 매칭시켜 예측 가능하게 만들곤 합니다.

 

다만 이는 표준 규약이 아닌 일종의 약속으로, 사람마다, 기관마다 작성방식에 차이가 있을 수 있다는 단점이 있습니다.

 

 

10. 쿠키와 세션의 차이

 

Session과 Cookie 사용 이유

- 현재 우리가 인터넷에서 사용하고 있는 HTTP프로토콜은 연결 지향적인 성격을 버렸기 때문에 새로운 페이지를 요청할 때마다

 새로운 접속이 이루어지며 이전 페이지와 현재 페이지 간의 관계가 지속되지 않는다. 이에 따라 HTTP프로토콜을 이용하게 되는 

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

 

Session

- 특정 웹사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한번의 방문을 의미한다.

- Session에 관련된 데이터는 Server에 저장된다.

- 웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다.

- Cookie에 비해 보안성이 좋다.

 

Cookie

- 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법

- 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해 주는 정보이다.

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

  Server가 아닌 Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용된다.

- Cookie는 Client PC에 저장되는 정보기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다.(정보 유출 가능, Session보다 보안성이 낮은 이유)

 

Q. 보안성이 낮은 Cookie 대신 Session을 사용하면 되는데 안하는 이유?

A. 모든 정보를 Session에 저장하면 Server의 메모리를 과도하게 사용하게 되어 Server에 무리가 감

 

11.Get/Post 전송방식의 특징을 말해 주세요.

 

Get 방식

- 클라이언트에서 서버로 데이터를 전달할 때, 주소 뒤에 "이름"과 "값"이 결합된 스트링 형태로 전달

- 주소창에 쿼리 스트링이 그대로 보여지기 때문에 보안성이 떨어진다.

길이에 제한이 있다.(=전송 데이터의 한계가 있다.)

Post방식보다 상대적으로 전송 속도가 빠르다.

 

Post 방식

- 일정 크기 이상의 데이터를 보내야 할 때 사용한다.

- 서버로 보내기 전에 인코딩하고, 전송 후 서버에서는 다시 디코딩 작업을 한다.

- 주소창에 전송하는 데이터의 정보가 노출되지 않아 Get방식에 비해 보안성이 높다.

속도가 Get방식보다 느리다.

- 쿼리스트링(문자열) 데이터 뿐만 아니라, 라디오 버튼, 텍스트 박스 같은 객체들의 값도 전송가능.

 

Get과 Post 차이점

- Get은 주로 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용

- Post는 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용.

- Get을 사용하면 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩되어 URL에 붙는다.

- Post방식은 전달되는 데이터가 보이지 않는다.

- Get방식은 전달되는 데이터가 255개의 문자를 초과하면 문제가 발생할 수 있다.

- 웹서버에 많은 데이터를 전달하기 위해서는 Post 방식을 사용하는 것이 바람직하다.

 

12.jquery를 사용한 후 느낀 점은 무엇인가요?

 

-자바스크립트로 만들어진 라이브러리 언어로 자바스크립트에서 발생한 호환성 문제를 해결 할 수 있으며 여러 가지 불편한 점을 개선하였기에 사용이 편리합니다.애니메이션 효과 등의 구현이 자바스크립트오 어려웠지만 쉽게 해주는 아주 편리한 라이브러리입니다.

 

 

[Spring Framework]

 

1. 스프링 프레임워크의 특징에 관해 설명해 주세요

 

자바(JAVA) 플랫폼을 위한 오픈소스(Open Source) 애플리케이션 프레임워크(Framework)

자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크

자바 개발을 위한 프레임워크로 종속 객체를 생성해주고,  조립해주는 도구

자바로 된 프레임워크로 자바SE로 된 자바 객체(POJO)를 자바EE에 의존적이지 않게 연결해주는 역할

 

스프링 특징 간단히

- 크기와 부하의 측면에서 경량.

- 제어 역행(IoC)이라는 기술을 통해 애플리케이션의 느슨한 결합을 도모

- 관점지향 프로그래밍(AOP)을 위한 풍부한 지원

- 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너(Container)라고 할 수 있음

- 간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정할 수 있음

 

스프링 특징 자세히

a. 경량 컨테이너로서 자바 객체를 직접 관리.

   각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.

b. 스프링은 POJO(Plain Old Java Object) 방식의 프레임워크.

   일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 

   존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다.

c. 스프링은 제어의 역행(IoC : Inversion of Control)을 지원.

   컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.

d. 스프링은 의존성 주입(DI : Dependency Injection)을 지원

   각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.

e. 스프링은 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원

   따라서 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.

f. 스프링은 영속성과 관련된 다양한 서비스를 지원

   iBatis나 Hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.

g. 스프링은 확장성이 높음.

   스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 

   이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.

 

2. DI란 무엇인가요?

 

(1) DIDependency Injection의 줄임말로 한글로 번역하면 의존성 주입

"의존성 주입"은 제어의 역행이 일어날 때 스프링이 내부에 있는 객체들간의 관계를 관리할 때 사용하는 기법이다.

자바에서는 일반적으로 인터페이스를 이용해서 의존적인 객체의 관계를 최대한 유연하게 처리할 수 있도록 한다.

의존성 주입은 말 그대로 의존적인 객체를 직접 생성하거나 제어하는 것이 아니라,

특정 객체에 필요한 객체를 외부에서 결정해서 연결시키는 것을 의미한다.

, 우리는 클래스의 기능을 추상적으로 묶어둔 인터페이스를 갖다 쓰면 되는 것이다.

나머지는 스프링에서 객체를 주입해주기 때문이다.

따라서 이러한 의존성 주입으로 인해 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

 

3. 자동으로 DI해주는 어노테이션은 어떤 것들이 있나요?

스프링 DI에서는 주로 사용하는 @Autowired 어노테이션, @Resource 어노테이션이 있습니다. Resource 어노테이션은 자바에서 제공하는 어노테이션이며, 스프링은 @Resource 뿐만 아니라 자바에서 제공하는 @Inject 어노테이션 등 다양하게 사용할 수 있습니다.

 

4. AOP란 무엇이고 어드바이스 종류를 말해주세요.
AOP란 Aspect Oriented Programming 의 약자로 관점 지향 프로그래밍이라는 뜻입니다.  어떤 로직을 기준으로 핵심적인 관점과 부가적인 관점으로 나누어 보고 그 관점을 기준으로 각각 모듈화(어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것)하겠다는 뜻입니다. 어드바이스는 Before, After, Around, AfterReturning, AfterThrowing 이 있습니다. 

 

5.springMVC 동작방식을 설명해 주세요.

 

Client에 요청을 받을 DispatcherServletweb.xml 파일에 설정

Client의 요청을 처리할 Controller를 작성

View Resolver 설정(Controller가 전달한 값을 이용하여 응답 결과 화면을 생성할 View를 결정함)

jsp 등을 이용하여 View 영역의 코드를 작성

 

[Oracle DB]

 

1.데이터베이스란 무엇이고 장단점은 무엇인가요?

- 장점

1. 데이터 중복의 최소화

각 응용 프로그램마다 자신의 파일이 개별적으로 유지 관리 되기 때문에 저장되는 데이터의 입장에서 보면 많은 데이터가 같은 내용을 표현하며 중복 저장되고 있다.

하지만 데이터베이스는 데이터를 통합하여 구성함으로써 이러한 중복을 사전에 통제할 수 있다.

 

2. 데이터의 일관성 유지

한 가지를 나타내는 두 개의 데이터가 있을 때, 하나의 데이터만 변경이 되고 다른 하나는 변경되지 않는다면 데이터간의 불일치성, 모순성을 갖게 된다.

그렇다면 서로 상충되는 정보를 제공하게 되고 데이터베이스의 유용성을 저해하게 된다.

데이터베이스 관리 시스템은 바로 이 데이터의 중복을 제어하고 중앙 집중식 통제를 통해 데이터의 일관성을 유지할 수 있다.

 

3. 데이터의 무결성 유지

데이터 중복성이 완전히 제거된다고 해도 허용되지 않는 값이나 부정확한 데이터가 여러가지 경로에 의해 데이터베이스에 잠입될 수 있다.

데이터베이스 관리 시스템은 데이터베이스가 생성 조작될 때마다 제어 기능을 통해 그 유효성을 검사함으로써 데이터의 무결성을 유지할 수 있다.

 

 

4. 데이터의 공용

기존 여러 응용프로그램들이 수행하던 데이터에 대한 유지관리 부담을 면제시켜줄 뿐만 아니라 새로 개발하는 응용 프로그램에 대해서도 데이터 구성에 신경 쓸 필요 없이 응용 자체에만 전념할 수 있게 해준다.

 

 

5. 데이터의 보안 보장

데이터베이스 관리 시스템은 데이터베이스를 중앙 집중식으로 총괄함으로써 데이터베이스의 관리 및 접근을 효율적으로 통제할 수 있다.

이것은 정당한 사용자, 허용된 데이터와 연상 등을 확인함으로써 모든 데이터에 대해 철저한 보안을 제공한다.

 

- 단점

1. 운영비의 증대

DBMS는 고가의 제품이고 컴퓨터 시스템의 지원을 많이 사용한다.

특히, 주기억장치를 많이 차지하기 때문에 DBMS를 운영하기 위해서는 메모리 용량이 더 필요하게 되고, 더 빠른 CPU를 요구하게 된다.

결과적으로 시스템 운영비의 오버헤드를 가중시키게 된다.

 

2. 자료 처리의 복잡화

데이터베이스는 상이한 여러 타입의 데이터가 서로 관련되어 있다.

응용 프로그램은 이러한 상황 속에서 여러 제한점을 가지고 수행될 지도 모른다.

따라서 응용 시스템은 설계 시간이 길어지게 되고 보다 전문적, 기술적 기술이 필요하기 때문에 고급 프로그래머가 필요하다.

 

3. 시스템의 취약성

DBMS는 통합된 시스템이기 때문에 그 일부의 고장이 전체 시스템을 정지시켜 시스템 신뢰성과 가용성을 저해할 수 있다.

 

4. 복잡한 예비와 회복

데이터베이스는 구조가 복잡하고 여러 사용자가 동시에 공용하기 때문에 예비(Backup) 조치나 사후 회복(Recovery) 기법을 수립해 놓는 것이 어렵다.

 

 

2. sql에 대해 설명해주세요.

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

 

 

3.DDL , DML, DCL의 역할과 구문 예를 들어 설명하세요.

 

1) DDL 데이터 정의어

데이터베이스를 정의하는 언어이며, 데이터를 생성, 수정, 삭제하는 등의 데이터의 전체의 골격을 결정하는 역할을 하는 언어.

EX)

CREATE : 데이터베이스, 테이블등을 생성

ALTER : 테이블을 수정

DROP : 데이터베이스, 테이블을 삭제

TRUNCATE : 테이블을 초기화

 

2)DML 데이터 조작어

정의된 데이터베이스에 입력된 레코드를 조회하거나 수정, 삭제하는 역할을 하는 언어

EX)

SELECT : 데이터를 조회

INSERT : 데이터를 삽입

UPDATE: 데이터를 수정

DELETE : 데이터를 삭제

 

3)DCL 데이터 제어어

데이터베이스에 접근하거나 객체에 권한을 주는 역할을 하는 언어

EX)

GRANT : 권한 부여

REVOKE : 권한 회수

COMMIT : 작업결과를 저장하고 데이터베이스에 반영

ROLLBACK : 트랜잭션의 작업을 취소 및 복구

 

4.트랜잭션이란 무엇인가여?

1) 의미 : 하나의 작업을 수행하기 위해 필요한 데이터베이스의 연산작업 단위

작업 수행에 필요한 SQL문의 집합

 

2) 기능 : 회복 작업과 병행 제어 처리를 위한 기본 단위

 

3) 특성

원자성(Atomicity)

- 트랜잭션에(하나의 작업단위) 속한 연산들이 모두 실행완료되거나 실행되지 않아야 한다.

- 연산이 부분적으로 실행되는 것은 허용되지 않는다.

 

일관성(Consistency)

- 트랜잭션이 성공적으로 수행된 후에도 데이터베이스는 일관된 상태를 유지해야한다.

 

격리성(Isolation)

- 수행중인 트랜잭션이 완료될 때까지 다른 트랜잭션이 연산 중간에 접근할 수 없다.

 

지속성(Durability)

- 트랜잭션이 성공적으로 완료된 후에도 데이터베이스에 반영된 수행 결과는 영구적이어야 함

 

4) Transaction의 주요연산

commit

- 트랜잭션의 수행이 성공적으로 완료되었음을 선언하는 연산

- 실행되면 트랜잭션의 수행 결과가 데이터베이스에 반영되고 일관된 상태를 지속적으로 유지하게 됨

 

rollback

- 트랜잭션의 수행이 실해했음을 선언하는 연산

- 실행되면 트랜잭션이 지금까지 실행한 연산의 결과가 취소되며, 데이터베이스가 트랜잭션 수행 전의 일관된 상태로 되돌아감

 

 

5) 트랜잭션의 상태

 

활동상태

- 트랜잭션이 실행중인 상태

 

부분완료

- 트랜잭션의 마지막 연산이 실행을 끝낸 직후의 상태

 

완료상태

- 트랜잭션이 성공적으로 완료, commit 연산을 실행한 상태

: 최종 결과를 DB에 반영하고, DB가 새로운 일관된 상태가 되면서 트랜잭션이 종료됨

 

실패상태

- 장애가 발생, 트랜잭션의 실행이 중단된 상채

 

철회상태

- 트랜잭션의 실행 실패로 rollback 연산을 실행한 상태, 실행된 트랜잭션의 연산 과정을 취소, 수행되기 전의 상태로 DB를 되돌리면서 종료됨

 

5.기본키와 외래키에 대해 설명해주세요

 

테이블에 저장된 각각의 데이터를 유일하게 구분하는 키를기본키(Primary Key)라 부르며. 각 테이블 간에 연결을 만들기 위해서 테이블에서 다른 테이블의 참조되는 기본키 칼럼을외래키(Foregin Key)라 한다.

 

 

6번. where과 having의 차이는 뭔가요?
where과 having은 둘다 DB에서 자료를 검색할 때 구제적인 조건을 걸어 해당 조건에 맞는 자료만을 찾기 위해 사용합니다. 이 때 둘의 차이점이 있는데 우선 where절은 항상 from 뒤에 위치하고, having은 항상 group by 뒤에 위치한다는 것입니다. 즉, where은 모든 필드에 대해 조건을 줄 때 사용하고, having은 group by로 그룹화 한 특정 테이블에서 어떤 조건을 걸어 자료를 가져올 때 사용합니다.

 

7.Group by 란 무언인가요?

특정 컬럼값을 기준으로 그룹화함

 

 

8.Inner Join Outer Join 의 차이점에 대해 설명하세요.

 

조인 (INNER JOIN) : 기준 테이블과 조인 테이블 모두 데이터가 존재해야 조회됨

아우터 조인 (OUTER JOIN) : 기준 테이블에만 데이터가 존재하면 조회되며 (+)가 붙음

 

조인 (INNER JOIN)

SELECT EMPLOYEE.ENAME||'의 매니저는 '|| MANAGER.ENAME||'입니다.' FROM EMP EMPLOYEE, EMP MANAGER WHERE EMPLOYEE.MGR = MANAGER.EMPNO; 

 

아우터 조인 (OUTER JOIN)

SELECT EMPLOYEE.ENAME||'의 매니저는 '|| MANAGER.ENAME||'입니다.'

FROM EMP EMPLOYEE, EMP MANAGER WHERE EMPLOYEE.MGR = MANAGER.EMPNO(+); 

 

9. 제약조건은 어떤 것이 있는 지 말해보세요.

not null : null값을 허용하지 않는다.

unique : 중복된 값을 허용하지 않는다.

primary key(기본키) : 항상 유일한 값을 가지도록 하며 비어 있을 수 없다.

foreign key(외래키) : 참조하는 테이블의 컬럼에 값이 존재하면 허용한다.

check : 미리 설정해둔 값 이외의 값이 들어오면 오류를 띄운다.

 

 

 

 

 

'IT 면접족보 > 면접요령' 카테고리의 다른 글

프로젝트 관련- 면접 족보  (0) 2022.03.23
면접족보 2탄  (0) 2022.03.12
면접 시 유의사항 및 요령  (0) 2021.12.07