-
[면접질문 정리] Java & Spring 관련(OLD) 취업 2020. 3. 11. 09:41
★ 스프링 프레임워크의 특징에 관해 설명하라.
① Portable Service Abstraction(서비스 추상화)
트랜젝션 추상화, OXM 추상화, 데이터 액세스의 Exception 변환기능 등
기술적인 복잡함은 추상화를 통해 Low Level의 기술구현부분과 기술을 사용하는
인터페이스로 분리한다.
② 객체 지향과 DI(Dependency Injection)
Spring은 객체지향에 충실한 설계가 가능하도록 단순한 객체형태로 개발할 수 있고,
DI는 유연하게 확장 가능한 객체를 만들어 두고 그 관계는 외부에서 다이내믹하게 설정해준다.
③ AOP(Aspect Oriented Programming)
AOP는 애플리케이션 로직을 담당하는 코드에 남아있는 기술 관련 코드를 분리해서
별도의 모듈로 관리하게 해주는 강력한 기술이다.
④ POJO(Plain Old Java Object)
POJO는 객체지향 원리에 충실하면서, 특정 환경이나 규약에 종속되지 않고 필요에 따라 재활용될수 있는
방식으로 설계된 객체이다.
★ SpringMVC의 정의 및 동작방식?
<정의>
MVC 는 Model, View, Controller의 약자
하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴.
사용자가 controller를 조작하면 controller는 model을 통해서 데이터를 가져오고
그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달하게 됨.
모델, Model
애플리케이션의 정보, 데이터를 나타냄.
데이터베이스, 처음의 정의하는 상수, 초기화값, 변수 등을 뜻함
또한 이러한 데이터, 정보들의 가공을 책임지는 컴포넌트뷰, View
데이터 및 객체의 입력, 그리고 보여주는 출력을 담당.
input 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소.컨트롤러,Controller
데이터와 사용자인터페이스 요소들을 잇는 다리역할.
사용자가 데이터를 클릭하고, 수정하는 것에 대한 "이벤트"들을 처리하는 부분.<동작방식>
1. DispatcherServlet이 브라우저로부터 요청을 받는다.
2. DispatcherServlet은 요청된 URL을 HandlerMapping 객체에 넘기고,
호출해야 할 Controller 메소드(핸들러) 정보를 얻는다.
3. DispatcherServlet이 HandlerAdapter 객체를 가져온다.
4. HandlerAdapter 객체의 메소드를 실행한다.
5. Controller 객체는 비즈니스 로직을 처리하고, 그 결과를 바탕으로 뷰(ex. JSP)에 전달할 객체를
Model 객체에 저장한다. DispatcherServlet에게 view name을 리턴한다.
6. DispatcherServlet은 view name을 View Resolver에게 전달하여 View 객체를 얻는다.
7. DispatcherServlet은 View 객체에 화면 표시를 의뢰한다.
8. View 객체는 해당하는 뷰(ex. JSP, Thymeleaf)를 호출하며,
뷰는 Model 객체에서 화면 표시에 필요한 객체를 가져와 화면 표시를 처리한다.
★ Map과 List의 차이점
1) Map: '키-값' 의 쌍으로 나열되어 있어 키값을 통해 원하는 값을 한번에 찾아낼 수 있다.
빈번한 검색과, 범위데이터가 아닌 특정 데이터를 순간마다 캐치해야할 때 유리한 자료구조
Map을 이용해 저장할때는 List처럼 뭉텅이로 저장하는것이 아니라,
Map에 아이템을 저장할때마다, 빈 공간을 찾아 저장한다.
따라서 List보다는 데이터 저장속도가 느릴 수 있다. Map의 가장 큰 특징이라면,
쌍을이루는 Key와 Value값을 이용한다는 것이다.
따라서 단순한 포지션(0~10 같은 인덱션)보다는, 저장하고 싶은 데이터가 특별한 Key값을
가질때 Map을 사용하는것이 좋다.
동일한 Key값을 사용하면 기존의 Key값을 가지고 있는 value가 사라지고
후에 저장한 valuse 값이 셋팅이 된다. key만 다르다면 value 값이 중복되도 상관 없다.
Map은 콘솔에 찍힌거와 같이 키값이 의미가 있을때 좋은 자료구조 이다.
ArrayList안에 원하는 데이터를 검색하는 경우에는 0번부터 해당 데이터가 있을때까지
검색을 해야하지만, (원하는 데이터의 index를 모르는 경우) hashMap의 경우는
key값을 통해서 빠르게 데이터를 검색한다.
요소의 추가 삭제는 List보다 성능이 나을때가 많다. 따라서, 검색성능은 기본적으로 Map이 좋다.
2) List : 순차적으로 데이터를 저장하거나 엑세스 할때 사용.
원하는 데이터 범위를 순차적으로 표현할때 유리한 자료구조
ArrayList안에 있는 데이터를 삽입/삭제가 빈번할때, 비효율적인 경우가 있다.
추가는 단순히 ArrayList 내부 배열의 크기를 바꾸고 기존 배열의 데이터를 추가하는데 그치지만,
원하는 포지션(인덱스)의 삽입/삭제는 이야기가 다르다.
삽입/ 삭제는 해당 포지션 아래의 데이터들을 Copy 해야한다.
(새로운 배열을 만든후,기존 배열의 값을 포지션별로 다시 채워야한다.)
기존 배열의 크기를 늘린후 삽입/삭제 데이터를 처리하고 Copy된 데이터를 다시 붙인다.
따라서 ArrayList의 size가 큰 경우는 많은 양의 요소들을 Copy해야 하므로 내부적으로 성능이
떨어질 수 있다.
- 상속이란 무엇이고, 상속의 단점은?
상속이란 부모 클래스가 가지고있는 모든것을(생성자 제외) 자식클래스가 물려받아 같이 공유하며 나아가 확장(extends)하는 개념이다. 부모 클래스를 상위 클래스(superclass)로 부르며 상속받는 자식 클래스를 하위클래스(subclass)라고 부른다.
상속의 단점으로는,
1. 하위 클래스는 상위 클래스의 부분집합이기 때문에 상위 클래스가 변경이 일어나면 하위 클래스도 따라서 변형되기 때문에, 상속은 상위 클래스가 기능의 버그와 기능의 추가/변경 등으로 변화가 생겼을 때 상위 클래스를 상속받은 하위 클래스가 정상 동작할지를 예측하기 힘들다.
2. 기능 확장에 따라 상위 클래스에서 파생된 많은 클래스들이 생겨나는데 규모가 커질수록 매우 다양한 클래스들이 존재하고 이 클래스들을 일관성있게 만들지 않으면 사용자는 이해하고 사용하는데 많은 어려움이 생긴다.
→ 클래스간 결합 관계(필요한 기능들을 클래스 필드에 두어 그 기능들을 적절히 사용하여 새로운 기능을 구현하는 방식)를 이용해 해결한다.
- class와 instance는 무엇인가?
클래스는 객체를 만들어 내기 위한 설계도 혹은 틀
연관되어 있는 변수와 메서드의 집합인스턴스는 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체이다. 즉, 객체를 소프트웨어에 실체화 하면 그것을 ‘인스턴스’라고 부른다. 자바의 경우 new로 메모리에 할당해서 사용한다
- thread란? thread를 구현하기 위한 인터페이스, 클래스는?
스레드(thread)란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미합니다.
모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행.
쓰레드 구현을 위한 두가지 방법
1. Runnable 인터페이스를 구현하는 방법
2. Thread 클래스를 상속받는 방법
- static 키워드에 대해 설명하라.
클래스를 이용하여 객체를 생성할 때, 각각의 객체들은 자신만의 멤버 변수를 가진다.
각각의 객체는 이들 변수에 대하여 별도의 기억 공간을 가지고 있는데,
static 키워드를 이용하여 선언한 변수는 해당 클래스의 모든 객체들에 의해 공유된다.
- 오버로딩과 오버라이딩의 차이점은?
오버로딩 : 같은 이름의 메소드를 여러개 가지면서 매개 변수를 다르게 정의하는 것.
오버라이딩 : 부모클래스가 갖고 있는 메소드를 자식클래스에서 재정의해 사용하는 것.
- 추상클래스와 인터페이스에 대해 설명하라.
추상클래스는 클래스 내 추상메소드가 하나 이상 포함 되어있거나 abstract로 정의된 경우를 말한다.
반면 인터페이스는 모든 메소드가 추상 메소드인 경우이다.
추상클래스는 그 추상클래스를 상속받아서 기능을 이용하고 확장하는데에 있고,
인터페이스는 함수의 껍데기만 있는데, 그 함수의 구현을 강제하기 위해서이다.
- MVC패턴 대해 동작방식을 설명하라.
1. 사용자는 원하는 기능을 처리하기 위한 모든 요청을 컨트롤러에 보낸다.
2. 컨트롤러는 모델을 사용하여 알맞은 비즈니스 로직을 수행한다.
3. 사용자에게 보여줄 뷰를 선택한다.
4. 선택된 뷰는 사용자에게 알맞는 결과 화면을 보여준다. 이 때 사용자에게 보여줄 데이터는 컨트롤러를 통해서 전달받는다.
- model1과 model2 패턴의 차이를 설명하라.
model1은 뷰와 로직을 모두 JSP페이지 하나에서 처리하는 구조를 말하며
model2는 JSP페이지와 서블릿, 그리고 로직을 위한 클래스가 나뉘어 브라우저 요청을 한다.
- JSTL은 무엇이고 사용하는 이유는 무엇인가?
JSP 표준 태그 라이브러리의 약어로써, 자신만의 태그를 추가할 수 있는 기능을 제공한다.
주로 JSTL의 core에서 c를 사용하여 <c:if> <c:forEach> 등으로 사용한다.
- JSP에서 세션에 값을 저장하고 꺼내는 방법은 무엇인가?
1. session.setAttribute(String name, Object value);
- 세션에 값을 저장하기 위해 셋어트리뷰트를 이용해 세션에 저장될 특정값을 지정한다.
- name이 바로 세션에 저장된 특정 값을 찾아오기 위한 키로 사용된다.
- 이 키와 일대일 대응으로 저장하고 싶은 값을 value 위치에 지정한다.
2. Object getAttribute(String name)
- 세션에 저장된 값을 얻어오기 위해 getAttribute 메소드를 사용한다.- JSP에서 한글이 깨지는 문제가 발생시 어떻게 해야 하나?
1. JSP 페이지 1번 줄에 셋팅
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
2. post 방식의 파라미터를 받는 페이지마다 해당 라인 추가
request.setCharacterEncoding("utf-8");
3. 톰캣 server.xml 파일에 Connector마다 URIEncoding="utf-8" 추가
<connector uriencoding="utf-8" connectiontimeout="20000" port="8080" protocol="HTTP/1.1" redirectport="8443">
</connector>
4. 톰캣 web.xml 파일 수정
<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<async-supported>true</async-supported>
</filter>
- JSP는 무엇인가?
JSP 란 JavaServer Pages 의 약자이며
HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.
JSP 가 실행되면 자바 서블릿(Servlet) 으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고
그렇게 생성된 데이터를 웹페이지와 함께 클라이언트로 응답한다.
- Servlet이란 무엇인가?
서블릿이란 웹페이지를 동적으로 생성하기 위해 서버측 프로그램을 말한다.
이는 자바 언어를 기반으로 만들지며 웹 어플리케이션 서버 ( Web Application Sever ) 위에서 컴파일 되고 동작한다.
JSP 와 서블릿의 차이점은 결과적으로 하는일은 동일하지만
JSP 는 HTML 내부에 JAVA 소스코드가 들어감으로 인해 HTML 코드를 작성하기 간편하다는 장점이있으며
서블릿은 자바코드내에 HTML 코드가 있어서 읽고 쓰기가 굉장히 불편하기 때문에 작업의 효율성이 떨어진다.
- Ajax란 무엇인가?
AJAX란, JavaScript의 라이브러리중 하나이며 Asynchronous Javascript And Xml (비동기식 자바스크립트와 xml) 의 약자이다. 브라우저가 가지고있는 XMLHttpRequest 객체를 이용해서 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법
JavaScript를 사용한 비동기 통신, 클라이언트와 서버간에 XML 데이터를 주고받는 기술이며,
쉽게 말해 자바스크립트를 통해서 서버에 데이터를 요청하는 것이다.
- JSON이란 무엇인가?
JSON은 JavaScript Object Notation 의 줄임말로 말 그대로 자바스크립트에서 객체를 표현하는 방법입니다.
원래는 자바스크립트 언어에서 객체를 정의할 때 사용하는 문법, 규칙이었는데, key-value 방식으로 데이터를 표현하거나 이해하는데 직관적이고 규칙도 간단하여 여러 언어나 통신에서 사용됨.
JSON은 네이버나 구글같은 플랫폼 기업에서 제공하는 공개 API에서도 XML과 같이 사용되고 있음.
거의 대부분의 언어에서 자체적으로 JSON을 다룰 수 있는 API를 제공하거나
자체 API가 없더라도 오픈 소스 라이브러리를 제공하는 추세.
참고: GSON은 JSON구조를 띄는 직렬화된 데이터를 JAVA의 객체로 역직렬화, 직렬화 해주는 자바 라이브러리이다.
즉, JSON Object -> JAVA Object 또는 그 반대의 행위를 돕는 라이브러리.
- RESTful이 무엇인가?
RESTful이란 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이며,
이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것에 목적이 있다.
그러므로 ‘REST API’를 제공하는 웹 서비스를 ‘RESTful’하다고 할 수 있다.여기서 REST는 “Representational State Transfer” 의 약자이고,
자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다.REST API는 REST 기반으로 설계 기본규칙에 따라 서비스 API를 구현한 것이다.
(/: 계층관계, -:가독성위해사용, uri 경로에는 소문자를 쓰며 _는 사용하지 않는다 등...)
최근 OpenAPI(누구나 사용할 수 있도록 공개된 API: 구글 맵, 공공 데이터 등), 마이크로 서비스(하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처) 등을 제공하는 업체 대부분은 REST API를 제공한다.사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 할 수 있다.
REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있다.즉, REST API를 제작하면 델파이 클라이언트 뿐 아니라, 자바, C#, 웹 등을 이용해 클라이언트를 제작할 수 있다.
- 세션과 쿠키의 차이점은 무엇인가?
- 세션: 일정 시간동안 같은 브라우저로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 유지하는 기술
- 쿠키: 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.
- 쿠키와 세션의 차이:
1. 저장위치: 쿠키는 클라이언트에 파일로 저장, 세션은 서버에 저장
2. 보안: 쿠키는 클라이언트 로컬에 저장되기 때문에 보안에 취약하지만 세션은 쿠키를 이용해서 sessionid 만 저장하고 그것으로 구분해서 서버에서 처리하기 때문에 비교적 보안성이 좋다.
3. 라이프 사이클: 쿠키도 만료시간이 있지만 파일로 저장되기 때문에 브라우저를 종료해도 계속해서 정보가 남아 있을 수 있다. 또한 만료기간을 넉넉하게 잡아두면 쿠키삭제를 할 때 까지 유지될 수도 있다.
반면에 세션도 만료시간을 정할 수 있지만 브라우저가 종료되면 만료시간에 상관없이 삭제된다.
4. 속도: 쿠키에 정보가 있기 때문에 서버에 요청시 속도가 빠르고 세션은 정보가 서버에 있기 때문에 처리가 요구되어 비교적 느린 속도를 낸다.
* 세션을 주로 사용하면 좋은데 왜 쿠키를 사용할까?
세션은 서버의 자원을 사용하기때문에 무분별하게 만들다보면 서버의 메모리가 감당할 수 없어질 수가 있고 속도가 느려질 수 있기 때문.
* 쿠키,세션은 캐시와 엄연히 다르다.
캐시는 이미지나 css, js파일 등이 사용자의 브라우저에 저장이 되는 것이다.
이를 이용해 자원이 아껴지는 것, 한번 캐시에 저장되면 브라우저를 참고하기 때문에 서버에서 변경이 되어도 사용자는 변경되지 않게 보일 수 있는데, 이런 부분을 캐시를 지워주거나 서버에서 클라이언트로 응답을 보낼 때 header에 캐시 만료시간을 명시하는 방법등을 이용할 수 있다.
-
MVC란?
MVC 는 Model, View, Controller의 약자
Model은 가공된 데이터 등 어떤 동작에 수행하는 코드를 뜻하고, View는 사용자에게 보여지는 화면, Controller는 데이터의 입력 등을 처리와 흐름제어를 담당하는 3개지 역확로 구분한 패턴 입니다.
-
MVC 패턴 모델 1, 2의 차이점
model1은 뷰와 로직을 모두 JSP페이지 하나에서 처리하는 구조를 말하며
model2는 JSP페이지와 서블릿, 그리고 로직을 위한 클래스가 나뉘어 브라우저 요청을 한다.
-
모델1 구조는 사용자의 요청을 JSP가 전부 다 처리.
웹브라우저 사용자의 요청을 받은 JSP는 자바빈이나 서비스 클래스를 사용하여 웹브라우저가 요청한 작업을 처리하고 그 결과를 출력.
모델 2 구조는 모델 1구조와 달리 웹브라우저 사용자의 요청을 서블릿이 받음.
서블릿은 웹브라우저의 요청을 받아 View로 보여줄것인지 Model로 보내줄것인지 정하여 전송. 여기서 View페이지는 사용자에게 보여주는 역할만 담당하고 실질적인 기능의 부분은 Model에서 담당.
MVC1 Patternhttps://t1.daumcdn.net/cfile/tistory/99E8D5395BD5971D25
하지만 이러한 로직은 추후 유지보수시 Controller와 View와 같이 있다보니 소스가 지저분하고 고치기에 다소 걸리고
동료가 하던 것을 넘겨받아서 유지보수를 할 시 에는 소스보기에도 힘든 면이 있고 분석하고 다시 고치기에 시간이 걸립니다.
MVC2 Pattern* 모듈화 : 소프트웨어를 부품화 시킨다는 개념.
예를들어, 모든 소스가 한곳에 다 적혀서 만들어진 웹 어플리케이션이라면 추후 유지보수 시 찾는 것도 힘들고 재활용하기에도 힘들것 입니다. 하지만, 모듈화를 한다면 DB관련 따로 View화면 따로, 이 두개를 관리하는 곳도 따로 관리한다면 유지보수시 에러가 난 곳을 쉽게 찾아가서 수정가능하고 업데이트 시에도 해당 파일만 건드리면 되기에 유지보수가 쉽습니다.
https://t1.daumcdn.net/cfile/tistory/99C3243D5BD59D4507
사용자 화면에 데이터가 필요한 과정이라면 이러한 로직이 수행될 것입니다.
또한, View 단이 꼭 jsp로 하는 것은 아니지만, 표현하기 쉽기 때문에 jsp파일로 많이 표현합니다.
그리고 Model 역시 java 파일로 많이 표현합니다.
Model1 과 Model2에서 작업속도는 Model1 이 더 빠를 수 있겠지만, 추후 시간이 흐르고 프로젝트가 커졌을 경우 유지보수 및 관리 측면에서 Model2 방식이 효율이 훨씬 뛰어날것입니다.
- MVC에서 Model, View, Controller 가 모두 모듈화 되어 있는 형태이다. ( 규모가 크고 추후 유지보수 시 개발이 자주 일어날 수 있는 경우에 사용. )
- MVC에서 View와 Controller 가 같이 있는 형태이다. ( 규모가 작고 유지보수 보단 빨리 개발할 때 사용. )
-
스프링 특징
① "경량 컨테이너"(크기와 부하의 측면)로서 자바 객체를 직접 관리
- 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.
② 제어 역행(IoC : Inversion of Control)
-
애플리케이션의 느슨한 결합을 도모.
-
컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어 필요에 따라 스프링에서 사용자의 코드를 호출한다.
③ 의존성 주입(DI : Dependency Injection)
- 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
개발자가 주체가 되는 것이 아니라 컨테이너가 주체가 되어서 코드의 의존관계가 되는 것으로 annotation을 통해서 코드가 단순해지고 실행 시 동적으로 의존관계가 생성된다.
③ 관점지향 프로그래밍(AOP : Aspect-Oriented Programming)
- 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.
④ 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다는 점에서 일종의 "컨테이너"(Container)라고 할 수 있다.
- iBatis, myBatis나 Hibernate 등 완성도가 높은 데이터베이스처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.
⑤ 트랜잭션 관리 프레임워크
- 추상화된 트랜잭션 관리를 지원하며 설정파일(xml, java, property 등)을 이용한 선언적인 방식 및 프로그래밍을 통한 방식을 모두 지원한다.
⑥ 모델-뷰-컨트롤러 패턴
- 웹 개발 시 거의 표준적인 방식인 **"Spring MVC"**라 불리는 모델-뷰-컨트롤러(MVC) 패턴을 사용한다.
- DispatcherServlet이 Controller 역할을 담당하여 각종 요청을 적절한 서비스에 분산시켜주며 이를 각 서비스들이 처리를 하여 결과를 생성하고 그 결과는 다양한 형식의 View 서비스들로 화면에 표시될 수 있다.
-
AJAX에 대해서, 동기 비동기식의 차이점
Ajax를 이용하면 사용자가 서버에 자료를 요청할 때 화면 전환 없이 요청한 자료를 전송받을 수 있음.
또한 자료를 요청할 경우 어느정도 시간이 소요되는데 반해 Ajax는 기다릴 필요 없이 바로 수행 가능.
- 어떤 루틴을 완전히 끝내고 제어를 반납하면 동기식
- 동작이 안 끝났어도 일단 제어권을 반납한 후 지 할일 계속하면 비동기식
-
SpringFramework의 주요 백엔드 기술은?
객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는
개발 프레임 워크로써, JDBC를 통해 데이터베이스에 엑세스 하는 작업을 캡슐화하고
일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하며 모든 JDBC 코드 및 매개 변수의 중복작업을
제거 합니다. Mybatis에서는 프로그램에 있는 SQL쿼리들을 한 구성파일에 구성하여 프로그램 코드와
SQL을 분리할 수 있는 장점이 있음.
-
Mybatis의 정의와 쓰는 이유
객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는
개발 프레임 워크로서, JDBC를 통해 데이터베이스에 엑세스하는 작업을 캡슐화하고
일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하며 모든 JDBC 코드 및 매개 변수의 중복작업을
제거 합니다. Mybatis에서는 프로그램에 있는 SQL쿼리들을 한 구성파일에 구성하여
프로그램 코드와 SQL을 분리할 수 있는 장점
-
Spring툴을 사용하면서 Service와 Dao를 나누어 사용하는 이유
DAO - 단일 데이터의 접근과 갱신만 처리한다(CRUD)
Service - 여러 DAO를 호출하여 사용자의 요구에 맞게 가공한다.
DAO는 단일 데이터 접근/갱신만 처리합니다.Service는 여러 DAO를 호출하여 여러번의 데이터 접근/갱신을 하며 그렇게 읽은 데이터에 대한 비즈니스 로직을 수행하고, 그것을 하나의(혹은 여러개의) 트랜잭션으로 묶습니다.
-
AOP 특징 설명
Aspect Oriented Programming의 약자 관점 지향 프로그래밍이라고 불린다.
어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다
-
HTTP 메소드 종류에 대해서 설명 및 GET ,POST의 차이
GET: GET 메서드는 특정 리소스의 표시를 요청. GET 사용 요청은 오직 데이터를 받기만 함.
POST: POST 메서드는 특정 리소스에 엔티티를 제출할 때 쓰임. 종종 서버의 상태의 변화나 부작용을 일으킴.
HEAD: HEAD 메서드는 GET 메서드의 요청과 동일한 응답을 요구하지만, 응답 본문을 포함하지 않는다.
PUT: PUT 메서드는 목적 리소스 모든 현재 표시를 요청 payload로 바꿈
DELETE: DELETE 메서드는 특정 리소스를 삭제.
CONNECT: CONNECT 메서드는 목적 리소스로 식별되는 서버로의 터널을 맺음.
OPTIONS: OPTIONS 메서드는 목적 리소스의 통신을 설정하는 데 쓰임.
TRACE: TRACE 메서드는 목적 리소스의 경로를 따라 메시지 loop-back 테스트를 함.
PATCH: PATCH 메서드는 리소스의 부분만을 수정하는 데 쓰인다.
-
GET 방식
-
클라이언트가 입력한 query의 이름과 값이 결합되어 스트링 형태로 서버에 전달됩니다.
-
<FORM> TAG의 METHOD 속성의 값으로 GET을 입력합니다.
ex) <FORM NAME="form1" ACTION="index.jsp" METHOD="GET">
-
-
POST 방식
-
클라이언트와 서버 간에 인코딩하여 서버로 전송합니다.
-
헤더를 통해 요청이 전송되는 방식입니다.
-
<FORM> TAG의 METHOD 속성의 값으로 POST을 입력합니다.
ex) <FORM NAME="form1" ACTION="index.jsp" METHOD="POST">
-
-
-
forward 와 redirect 차이
[ Forward 방식 ]
Forward는 Web Container 차원에서 페이지의 이동만 존재합니다. 실제로 웹 브라우저는 다른 페이지로 이동했음을 알 수 없습니다. 그렇기 때문에 웹 브라우저에는 최초에 호출한 URL이 표시되고, 이동한 페이지의 URL 정보는 확인할 수 없습니다. 또한 현재 실행중인 페이지와 forward에 의해 호출될 페이지는 Request 객체와 Response 객체를 공유합니다.
[ Redirect 방식 ]
Redirect는 Web Container로 명령이 들어오면, 웹 브라우저에게 다른 페이지로 이동하라고 명령을 내립니다. 그러면 웹 브라우저는 URL을 지시된 주소로 바꾸고 해당 주소로 이동합니다. 다른 웹 컨테이너에 있는 주소로 이동하며 새로운 페이지에서는 Request와 Response객체가 새롭게 생성됩니다.
-
session과 cookie 설명 둘이 다른점
-
세션: 일정 시간동안 같은 브라우저로 부터 들어오는 요구들을 하나의 상태로 보고 그 상태를 유지하는 기술.
-
쿠키: 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일.
- 쿠키와 세션의 차이:
1. 저장위치: 쿠키는 클라이언트에 파일로 저장, 세션은 서버에 저장
2. 보안: 쿠키는 클라이언트 로컬에 저장되기 때문에 보안에 취약하지만 세션은 쿠키를 이용해서 sessionid 만 저장하고 그것으로 구분해서 서버에서 처리하기 때문에 비교적 보안성이 좋다.
3. 라이프 사이클: 쿠키도 만료시간이 있지만 파일로 저장되기 때문에 브라우저를 종료해도 계속해서 정보가 남아 있을 수 있다. 또한 만료기간을 넉넉하게 잡아두면 쿠키삭제를 할 때 까지 유지될 수도 있다.
반면에 세션도 만료시간을 정할 수 있지만 브라우저가 종료되면 만료시간에 상관없이 삭제된다.
4. 속도: 쿠키에 정보가 있기 때문에 서버에 요청시 속도가 빠르고 세션은 정보가 서버에 있기 때문에 처리가 요구되어 비교적 느린 속도를 낸다.
- 세션을 주로 사용하면 좋은데 왜 쿠키를 사용할까?
세션은 서버의 자원을 사용하기때문에 무분별하게 만들다보면 서버의 메모리가 감당할 수 없어질 수가 있고 속도가 느려질 수 있기 때문.
- 쿠키,세션은 캐시와 엄연히 다르다.
캐시는 이미지나 css, js파일 등이 사용자의 브라우저에 저장이 되는 것이다.
이를 이용해 자원이 아껴지는 것, 한번 캐시에 저장되면 브라우저를 참고하기 때문에 서버에서 변경이 되어도 사용자는 변경되지 않게 보일 수 있는데, 이런 부분을 캐시를 지워주거나 서버에서 클라이언트로 응답을 보낼 때 header에 캐시 만료시간을 명시하는 방법등을 이용할 수 있다.
-
-
플랫폼, 프레임워크, 라이브러리 차이점
-
Platform : 소프트웨어SW를 실행해주는 환경. Windows, Linux 등의 OS가 예이다.
-
Framework : Software Framework. 클래스와 라이브러리들의 집합이라고 생각하자. 여기에서 라이브러리랑은 뭐가 달라요?라는 의문이 생긴다.
-
LIbrary는 개발자가 프로그램의 흐름을 제어한다. 주가 개발자이다.
그러나, Framework는 그 반대이다. 프레임워크의 실행 흐름 내에서 개발자가 일부분을 개발한다.
-
출처: https://shlee0882.tistory.com/200
https://mommoo.tistory.com/34?category=582808
'(OLD) 취업' 카테고리의 다른 글
[면접질문 정리] 업무 관련 질문 및 기타 질문 (0) 2020.03.11 -