면접질문(Android)

 

1.

github.com/taeiim/Android-Study/blob/master/study/week16/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A1%9C%20%EC%B7%A8%EC%97%85%ED%95%98%EA%B8%B0%20-%20%EB%A9%B4%EC%A0%91/%EC%8B%A0%EC%9E%85%20%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A1%9C%20%EC%B7%A8%EC%97%85%ED%95%98%EA%B8%B0%20-%20%EB%A9%B4%EC%A0%91.md

 

 

 

 

 

 

면접질문(JAVA)

1. 신입개발자 기술면접 #1 - Java 질문 모음

sas-study.tistory.com/m/53?category=774876

 

 

신입개발자 기술면접 #1 - JAVA 질문 모음

1. Java

 

Java는 네트워크상에서 쓸 수 있도록 미국의 Sun마이크로시스템가 개발한 객체지향 프로그래밍 언어

특징

a.     JVM만 설치하면 컴퓨터의 운영체제에 상관없이 작동한다.( 운영체제에 독립적)

b.     기본 자료형을 제외한 모든 요소들이 객체로 표현

c.     객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어

d.     Garbage Collector를 통한 메모리 관리기능

e.     멀티쓰레드(Multi-thread)를 지원한다.

 

2. OOP(객체지향 프로그래밍)

 

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

데이터를 객체로 취급하여 프로그램에 반영한 것이며, 순차적으로 프로그램이 동작하는 기존의 것들과는 다르게 객체와 객체의 상호작용을 통해 프로그램이 동작하는 것을 말한다.

OOP 특징

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

b.     코드의 변경이 용이

c.      직관적인 코드 분석

d.     개발속도 향상

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

 

3. Object

 

Object(객체)는 OOP에서 데이터(변수)와 그 데이터에 관련되는 동작(함수). 즉 절차, 방법, 기능을 모두 포함한 개념

예) 

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

같은 성질, 같은 구조와 형태를 가지는 객체는 등급으로 정의하고 등급에 속하는 객체는 그 등급의 인스턴스라고 한다.

 

 

4. Overloading vs Overriding

 

Overloading(오버로딩)

-       같은 이름의 메소드를 여러 개 정의하는 것.

-       매개변수의 타입이 다르거나 개수가 달라야 한다.

-       Return type과 접근 제어자는 영향을 주지 않음

 

Overriding(오버라이딩)

-       상속에서 나온 개념

-       상위 클래스(부모 클래스)의 메소드를 하위 클래스(자식 클래스)에서 재정의

 

5. JDBC

-       Java Data Base Connection의 약자로 JAVA 언어를 통해 데이터베이스에 접근할 수 있는 프로그래밍

 

6. Interface, Abstract

 

Interface

-       일종의 추상 클래스

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

-       Implements 키워드를 사용

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

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

 

Abstract

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

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

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

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

 

Interface vs Abstract

공통점

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

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

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

 

차이점

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

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

 

7. Call by Reference, Call by Value

 

Call by References     – 매개변수의 원래 주소에 값을 저장하는 방식, 클래스 객체를 인수로 전달한 경우

Call by Value            – 인수로 기본 데이터형을 사용. 주어진 값을 복사하여 처리하는 방식. 메서드 내의 처리 결과는 메서드 밖의 변수에 영향을 미치지 않늗다.

 

 

8. Static의 의미

 

- 클래스가 로딩될 때, 메모리 공간을 할당하는데 처음 설정된 메모리 공간이 변하지 않음을 의미

- 객체를 아무리 많이 만들어도 해당 변수는 하나만 존재(객체와 무관한 키워드)

 

9. Garbage Collection(가비지 컬렉션)

 

- 시스템에서 더 이상 사용하지 않는 동적 할당된 메모리 블록을 찾아 자동으로 다시 사용 가능한 자원으로 회수 하는 것. 시스템에서 가비지 컬렉션을 수행하는 부분을 가비지 컬렉터라 부른다. 고로 자바에서는 메모리 문제를 신경쓰지 않아도 된다!

 

10. Primitive type과 Reference type

 

Primitive type – 변수에 값 자체를 저장(정수형, 실수형, 문자형, 논리형) – Wrapper Class를 통해 객체로 변환 가능

Reference type – 메모리상에 객체가 있는 위치를 저장

종류 – Class, Interface, Array 등

(참고 - coding-factory.tistory.com/547)

 

11. Wrapper Class

Primitive type으로 표현할 수 있는 간단한 데이터를 객체로 만들어야 할 경우가 있는데 그러한 기능을 지원

 

12. Thread

 

Thraed(쓰레드)      – 프로세스내에서 동시에 실행되는 독립적인 실행 단위를 말함. 장점으로는 자원을 많이 사용하지 않고 구현이 쉬우며 범용성이 높다.

Process(프로세스)  – 운영체제에서 실행중인 하나의 프로그램(하나 이상의 쓰레드를 포함한다.)

 

Thread 장점

-       빠른 프로세스 생성

-       적은 메모리 사용

-       쉬운 정보 공유

 

Thread 단점

-       교착상태에 빠질 수 있다.

 

*교착상태 : 다중 프로그래밍 체제에서 하나 또는 그 이상의 프로세스가 수행할 수 없는 어떤 특정 시간을 기다리고 있는 상태

 

Thread와 Process 차이

여러 분야에서 ‘과정’ 또는 ‘처리’라는 뜻으로 사용되는 용어로 컴퓨터 분야에서는 ‘실행중인 프로그램’이라는 뜻으로 쓰인다. 이 프로세스 내에서 실행되는 각각의 일을 스레드라고 한다. 프로세스 내에서 실행되는 세부 작업 단위로 여러 개의 스레드가 하나의 프로세스를 이루게 되는 것이다.

 

13. 접근 제한자(public > protected > default > private)

 

Public – 접근 제한이 없다.(같은 프로젝트 내에 어디서든 사용 가능)

Protected – 같은 패키지 내, 다른 패키지에서 상속 받아 자손 클래스에서 접근 가능

Default – 같은 패키지 내에서만 접근 가능

Private – 같은 클래스 내에서만 접근 가능

 

14. Stack, Queue

 

Stack

-       LIFO(Last In First Out)의 후입선출 구조

-       push(); 를 이용한 데이터 입력, pop();을 이용한 데이터 출력

-       예) 시스템 스택 : 함수의 호출과 복귀 순서는 스택의 구조를 응용하여 관리.

-       역순 문자열 만들기, 수식의 괄호 검사, 수식의 후위 표기법 변환

 

Queue

-       FIFO(First In First Out)의 선입선출 구조

-       enQueue();를 이용한 데이터 입력, deQueue();를 이용한 데이터 출력

-       예) 우선순위가 같은 작업 예약(인쇄 대기열), 선입 선출이 필요한 대기열(티켓 카운터)

-      (참고) coding-factory.tistory.com/602

* Linear Queue(선형큐)는 메모리 재사용이 불가능 이러한 문제점을 보완하여 Circular Queue(원형 큐)가 나옴

 

 

15. Singleton Design Pattern(싱글톤 디자인 패턴, 싱글톤 패턴)

- 클래스 인스턴스가 하나만 만들어지도록 하고, 그 인스턴스에 대한 전역 접근을 제공한다.

 

16. String과 StringBuffer의 차이 --------------모름--------------

 

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

또한 String은 불변의 객체입니다.

한번 String name =”길동”; 라고 선언하게 되면 먼저 String 객체타입인 name이라는 인스턴스를 만들고 메모리에 “길동”을 올려버립니다. 그리고 name이 “길동”을 참조하는 레퍼런스가 되는 것입니다.

 

중요한점은 이제 이 name에 새로운 내용을 추가하겠습니다.

name += “홍”; 와 같은 소스를 적용하게 되면 name인스턴스가 가리키는 값은 “길동홍”가 됩니다. 우리는 이런식으로 흔히 코딩을 했을 텐데 아까 위에서 String이 불변 객체라고 설명을 했듯이 한번 선언된 내용에 추가적으로 바뀌지 않습니다. String은 final char배열 형태이기 때문에 내용의 추가와 삭제가 되지 않거든요. 그럼 도대체 어떻게 name변수의 값이 바뀌는 건지 답은 내부에 있습니다.

 

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

 

 

17. 자바의 메모리 영역

 

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

 

- 스택(Stack) : 지역변수, 함수(메서드) 등이 할당되는 LIFO(Last In First Out) 방식의 메모리

 

- 힙(Heap) : new 연산자를 통한 동적 할당된 객체들이 저장되며, Garbage 컬렉션에 의해 메모리가 관리되어 진다.

 

 

 

18. DAO와 DTO

 

- DAO : Data Access Object의 약자로 간단히 데이터베이스의 데이터에 접근을 위한 객체이다. 데이터베이스에 접근을 하기위한 로직과 비즈니스 로직을 분리하기 위해서 사용한다. DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.

 

- DTO : Data Transfer Object의 약자로 VO(Value Object)로 바꾸어 말할 수 있는데 계층간 데이터 교환을 위한 JavaBean을 말합니다. 여기서 말하는 계층이란 Controller, View, Business Layer, Persistent Layer를 말하며 각 계층간 데이터 교환을 위한 객체를 DTO 또는 VO라고 부릅니다. 그런데 VO는 동일한 개념이지만 read only 속성을 가집니다.

 

19. 변수 명명법

 

- 헝가리언 표기법 : 자료형을 식별자에 같이 포함 

ex) inum; int int_num; 인터페이스명.

 

- 파스칼 표기법 : 식별자가 한 단어나 혹은 여러 단어로 조합(언더바X), 각단어의 첫문자만 대문자로 

ex) KorScore

 

- 캐멀 표기법 : 모든 단어를 공백없이 조합(언더바X) – 첫단어의 첫문자는 소문자로 

ex) korScore

 

- 스네이크 표기법 : ex)eng_score

 

 

 

 

신입개발자 기술면접 #2 - JSP 질문 모음

1. Servlet, JSP

Servlet – Container가 이해할 수 있도록 구성된 자바코드로 이루어진 것(Html in JAVA)

JSP(Java Server Page) – html 기반에 자바코드를 블록화하여 삽입한 것(JAVA in Html)

 

 

2. Get과 Post 방식

Get방식

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

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

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

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

 

Post방식

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

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

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

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

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

 

Get과 Post 차이점

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

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

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

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

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

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

 

 

3. Session과 Cookie

Session과 Cookie 사용 이유

현재 우리가 인터넷에서 사용하고 있는 HTTP 프로토콜은 연결 지향적인 성격을 버렸기 때문에 새로운 페이지를 요청할 때마다 새로운 접속이 이루어지며 이전 페이지와 현재 페이지 간의 관계가 지속되지 않는다. 이에 따라 HTTP프로토콜을 이용하게 되는 웹 사이트에서는 웹 페이지에 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용한다.

 

Session

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

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

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

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

 

Cookie

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

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

- Cookie는 인터넷 사용자가 특정 웹서버에 접속할 때, 생성되는 개인 아이디와 비밀번호, 방문한 사이트의 정보를 담은 임시파일로써, Server가 아닌 Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용된다.

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

 

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

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

 

 

4. MVC 패턴

MVC란?

- 객체지향프로그래밍에서, MVC란 사용자 인터페이스를 성공적이며 효과적으로 데이터 모형에 관련 시키기 위한 방법론 또는 설계 방식중 하나이다. MVC방식은 자바, Smalltalk

- MVC 패턴은 목적 코드의 재사용에 유용한 것은 물론, 사용자 인터페이스와 응용프로그램 개발에 소요되는 현저하게 줄여주는 형식이라고 많은 개발자들이 평가

 

MVC 구성요소

Model – 소프트웨어 응용과 그와 관련된 고급 클래스 내의 논리적 데이터 기반 구조를 표현. 이 목적 모형은 사용자 인터페이스에 관한 어떠한 정보도 가지고 있지 않다.

View – 사용자 인터페이스 내의 구성요소들을 표현(사용자에게 보여지는 화면)

Controller – Model과 View를 연결하고 있는 클래스를 대표, Model과 View 내의 클래스들 간의 정보교환하는 데 사용

 

 

 

 

면접질문(Oracle)

1. 데이터베이스

- 어느 한 조직에서 업무처리를 위해 다수의 응용시스템 혹은 다수의 사용자들이 공용으로 사용하기 위해 저장된 운영 데이터의 집합.

 

2. 데이터베이스 언어

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

- 조작어(DML : Data Manipulation Language) : 데이터베이스 내의 자료 검색, 삽입, 갱신, 삭제를 위한 언어. (select, delete, update, insert)

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

 

3. 스키마(Schema) 

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

 

4. 무결성

- 개체 무결성 : 기본키는 NULL값이 올 수 없으며, 중복될 수 없다.

- 참조 무결성 : 외래키는 NULL값이 올 수 있으며, 부모 테이블의 기본키에 종속되어야 한다.

- 도메인 무결성, 고유(Unique)무결성, NULL 무결성, 키 무결성이 있다.

 

5. 

- 하나이상의 테이블로부터 유도되어 만들어진 가상테이블, 실제로 기억공간을 차지하지 않으며 논리적 독립성을 제공하고 데이터 접근 제어로부터 보안성을 향상시킴

- 정의된 기본 테이블이 삭제되면 뷰도 자동적으로 제거된다.

- 한번 정의된 뷰는 변경할 수 없으며, 삭제한 후 다시 생성해야 한다.(replace)

- 검색은 일반 테이블과 동일한 방식으로 한다.

- 뷰에 대한 삽입, 삭제, 갱신에 대한 제약이 따른다. 컬럼에 기본키가 포함되어 있지 않으면 삽입, 갱신, 삭제가 되지 않는다.

 

6. 인덱스 생성시 고려할 사항

- 테이블의 전체 데이터 중 적은 양을 조회할 때 사용한다.

- 테이블에 데이터가 적을수록 인덱스의 효율은 떨어진다.

- 데이터의 유일성이 높을수록, 데이터의 범위가 넓을수록 인덱스의 효율은 올라간다.

- NULL이 적은 컬럼이 인덱스 효율이 좋다.

- 결합 인덱스의 경우 자주 사용되는 컬럼을 앞쪽에 배치한다.

 

 

데이터 베이스 질문들

 

1. SELECT문은 무엇입니까?

- Select문은 사용자들이 데이터베이스 내 테이블에서 값들을 선택할 수 있도록 합니다. 데이터베이스 테이블에서 어떤 값들을 선택하는 가는 SQL질의 내 다양한 조건에 달려있습니다.

 

2. 전체 이름이 아닌 이름의 일부로 값을 비교할 수 있는 방법은 무엇입니까?(like 절)

- SELECT * FROM people WHERE name LIKE ‘%na%’; 이렇게 하면 name에 문자열 na를 포함하는 name레코드들을 가진 레코드셋을 반환합니다.

 

3. Insert문은 무엇입니까?

- 데이터베이스에 정보를 삽입하는 문입니다.

 

4. 데이터베이스에서 레코드는 어떻게 삭제합니까?(DELETE문)

- DELETE문은 데이터베이스에서 레코드 또는 특정 컬럼의 값을 삭제합니다.

 

5. 테이블에서 어떻게 중복이 없는(별개) 항목을 얻을 수 있습니까?(distinct)

- DISTINCT에 대해서 설명을 하자면 중복된 결과를 제거하고 하나만 원하고자 할 때 쓰이는 문법이다. 데이터베이스 테이블에 특정 값에 a,a,b,c가 있으면 a,b,c만 나오게 할 수 있다.

 

6. 어떤 순서로 정렬된 결과를 얻는 방법은 무엇입니까?(order by)

- 프로그램에서 ORDER BY 키워드를 사용하여 정렬하고 정렬된 결과를 반환하여 정렬을 수행하는 수고를 덜 수 있습니다. 키워드는 ORDER BY 렬에 사용됩니다. ORDER BY를 이용함으로써 오름차순으로 정렬되고 ‘DESC’값을 주게 되면 내림차순이 된다.

 

7. 테이블의 전체 레코드 수를 어떻게 얻을 수 있습니까?

- 예를 들어 SELECT COUNT(*) FROM employees WHERE age > 40 에서 처럼 count키워드를 사용하게 되면 카운트(수)를 얻을 수 있습니다.

 

8. GROUP BY는 무엇입니까?

- GROUP BY 키워드는 집계함수(SUM같은)가 호출되 때마다 모든 컬럼 값들의 합계를 반환하기 때문에 SQL에 추가되었습니다. GROUP BY기능 없이 컬럼 값들의 개별 그룹마다 합계를 구하는 것은 불가능합니다.

 

9. 테이블을 드롭(DROP)하는 것과 자르는 것(Truncate), 그리고 테이블 내 모든 레코드를 삭제(Delete)하는 것의 차이점은 무엇입니까?

- DELETE TABLE은 로그되는 작업이기 때문에 삭제되는 각 행은 트랜잭션 로그에 기록되고 이것은 작업을 느리게 합니다. TRUCATE TABLE 역시 테이블 내 행들을 삭제하지만 삭제되는 각 행을 기록하지 않고 대신 테이블의 데이터베이스 할당 해제를 기록하여 작업이 빠릅니다. TRUNCATE TABLE는 롤백할 수 없습니다.

- DELETE 명령어는 데이터는 지워지지만 테이블 용량은 줄어들지 않는다. 원하는 데이터만 지울 수 있다. 삭제 후 RollBack 가능하다.

- TRUNCATE 명령어는 용량이 줄어들고, 인덱스 등도 모두 삭제된다. 테이블은 삭제하지는 않고 데이터만 삭제한다. 한꺼번에 다 지워야 한다. 삭제후 절대 되돌릴 수 없다.

- DROP 명령어는 테이블 전체를 삭제,공간, 객체를 삭제한다. 삭제 후 절대 되돌릴 수 없다.

 

10.Where 절과 Having절의 다른 점은 무엇입니까?

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

 

11.기본키(Primary Key)와 유일키(Unique Key)의 차이점은 무엇입니까?

-  기본키널을 허용하지 않지만 유일키모든 컬럼 중 유일하게 하나에 대한 NULL을 허용합니다.

그래서 unique키는 개체하나하나를 구분할 기본키가 될 수 없다.

 

12. 쿼리 순서

- SELECT -> FROM -> WHERE -> GROUP BY -> ORDER BY

 

 

 

면접질문(Spring)

1. Framework

- 특정 형태의 소프트웨어 문제를 해결하기 위해 상호 협력하는 클래스 프레임과 인터페이스 프레임의 집합.

- 특정한 틀을 만들어 놓고 거기에 살을 붙여 놓음으로써 프로그램을 만들어 작업시간을 줄여주는 것이다.

- 프레임워크는 특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성된다.

- 프레임워크는 이렇게 추상적인 개념들이 문제를 해결하기 위해 같이 작업하는 방법을 정의한다.

- 프레임워크는 좀 더 높은 수준에서 패턴을 조작한다.

* 프레임워크가 중요한 이유는 객체지향 개발을 하게 되면서 개발자의 취향에 따라 다양한 프로그램이 나오게 되었다. 프로그램 개발에 투입되는 개발자도 점점 늘어남에 따라 전체 시스템의 통합성, 일관성이 부족하게 되었기 때문이다. 그래서 개발자의 자유를 제한하기 위해 프레임워크를 도입했다.

 

프레임워크가 가져야할 특징

a. 개발자들이 따라야할 가이드라인을 가진다.

b. 개발할 수 있는 범위가 정해져 있다.

c. 개발자를 위한 다양한 도구들이 지원된다.

 

프레임워크의 장/단점

장점  –  개발 시간을 줄일 수 있고 오류로부터 자유로울 수 있다.

단점  –  프레임워크에 너무 의존하면 개발 능력이 떨어져서 프레임워크 없이 개발하는 것이 불가능해진다.

 

 

2. Spring Framework(스프링 프레임워크)

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

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

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

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

 

 

3. 스프링 특징 간단히

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

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

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

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

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



4. 스프링 특징 자세히

a. 경량 컨테이너로서 자바 객체를 직접 관리 => 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.

b. 스프링은 POJO(Plain Old Java Object) 방식의 프레임워크. => 일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다.

c. 스프링은 제어의 역행(IoC : Inversion of Control)을 지원 => 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.

d. 스프링은 의존성 주입(DI : Dependency Injection)을 지원 => 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.

e. 스프링은 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원 => 따라서 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.

f. 스프링은 영속성과 관련된 다양한 서비스를 지원 => MyBatis나 Hibernate등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.

g. 스프링은 확장성이 높음 => 스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.

 

 

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

 

 

6. MVC 패턴(mode, viewm controller)

히스토리

모델 1

  •  JSP를 활용하여 출력 로직과 비즈니스적인 처리 로직이 함께 혼용되어 개발되는 개발 방법.
  • 코딩은 매우 직관적으로 한 페이지에서 일어나는 내용이 하나의 소스코드 페이지에 모두 담겨져 있다.
  • 따라서 코딩은 매우 쉽지만 여러 중복코드가 반복되어 유지보수가 매우 어렵다.
  • 또한 HTML 태그와 <%%> 안의 자바 코드의 혼용으로 인해 일명 스파게티 코드로 불리우는 읽기 매우 껄끄러운 코드가 될 가능성이 높다.
  • 현재의 backend와 frontend의 분업을 구분하기 어렵다.

 

모델 2

  • MVC 패턴을 웹에 적용한 케이스
  • 비즈니스 로직과 출력 로직을 분리하여 개발 -> 뷰 로직 / 데이터 처리 로직 분업 개발 가능
  • 유지보수 가능해짐
  • 서블릿을 통해 알맞는 JSP 페이지를 호출하여 특정 데이터를 넘겨 보낼 수 있는 구조.

MVC 패턴이란?

클라이언트(사용자의 행위)가 필요한 기능을 Controller에 요청하면 Controller는 알맞는 Model에게 안내해주고 비즈니스 로직을 수행한 후, View를 찾고 결과에 맞는 데이터를 View에 전달하여 화면을 구성하도록 하는 패턴.

 

구성요소

M(Model)

  • 모델은 데이터와 처리 로직을 한번에 일컫는 말이다. 모델이란 말이 데이터 덩어리의 결과 모델을 이야기 하는 것 같지만 내부 비즈니스까지 포함하는 개념을 말한다. 
  • Controller에 의해 수행되는 요소로 어플리케이션의 상태 변화, 상태 정보 반환 등을 수행한다.

V(View)

  • Model 에서 데이터를 처리하고 수행한 결과를 반환받아 화면을 구성하는 로직이다.(사실 결과반환은 컨트롤러에서 이루어진다.)
  • 일절 비즈니스 처리로직은 포함되어서는 안되고 오로지 Model에게 받은 데이터(컨트롤러를 통해)를 통해서만 화면을 구성해야한다.
  • Controller에 의해서 결정되는 요소로 출력 처리 담당이다.

C(Controller)

  • 사용자의 요청 해석하여 처리하고 결과를 반환하는 역할이다.
  • Model  View를 느슨하게 연결해주어 어플리케이션을 이루고 데이터의 흐름을 관장한다.

 

사용이유
  • 코드의 재사용 : Model 1에서 발생되는 코드의 중복을 Model2에서 해결한 것 처럼 MVC 패턴을 활용하여 재사용할 수 있는 코드의 비율을 높여 어플리케이션이 좀 더 가벼워진다.
  • 확장성 : 코드의 재사용성을 좀더 높였기 때문에 비교적 추가적인 업데이트 부분이나 기능 확장에 대비하여 유연함을 챙길 수 있다.
  • 요소에 집중 가능 : 모델, 뷰, 컨트롤러 세가지의 역할을 따라 데이터 처리로직, 출력 로직, 제어 로직 등 요소마다의 역할에 집중할 수 있다.

 

 

7. SQL Injection 이야기(MyBatis, JPA)

SQL 인젝션은 백엔드 데이터베이스 단에 저장된 중요한 정보들에 접근하기위해 SQL 쿼리문을 조작하는 공격중 하나이다. 

 

 

 

 

 

 

 

 

 

'참고 URL' 카테고리의 다른 글

AWS  (0) 2021.07.07
질문 사이트  (0) 2021.04.16
Spring + boot  (0) 2021.03.01
JSP & Servlet + Spring  (0) 2021.03.01