MyBatis 면접 질문 - MyBatis myeonjeob jilmun

mybatis란?

sql문을 xml파일에 작성하면 매핑해주는 sql mapper.

비슷한 기능으로는 procedure가 있다.

자바에서는 관계형 데이터베이스 프로그래밍을 하기위해 JDBC를 제공,

JDBC는 다향한 관계형 데이터베이스 프로그래밍을 위해 API제공

--> Mybatis는 JDBC를 보다 편하게 사용하기 위해 개발됨.

mybatis 와 procedure의 차이?

mybatis는 xml파일에 작성된 sql문을 수정하고 서버에 올려야 하지만

procedure는 데이터베이스에서 procedure를 수정하면 끝.

즉, procedure는 서버에 올리는 작업이 필요없다.

mybatis 특징?

sql문이 코드로부터 완전히 분리됨

- 기존에는 DAO파일에 모든 SQL문을 작성하였는데,

Mybatis에서는 mapper파일에 sql코드를 입력해놓고 

Dao 파일에서 필요할때만 가져와서 사용.

-> 그러므로 코드가 간결해지고 생산성을 높인다.

-> mapper파일에만 코드를 입력하고 나중에 sql문도 이곳에서만 변경하기 떄문에

Dao는 아무런 영향을 받지 않아서 유지보수성이 향상된다.

안녕하세요.  웹 개발자로서 1차 직무 면접 때 받았던 질문과 답변을 정리해보았습니다. 

[웹] 신입 웹 개발자 직무 면접 정리 1탄 life-with-coding.tistory.com/414

[Spring] 신입 웹 개발자 직무 면접 정리 2탄  life-with-coding.tistory.com/417

목차
1. 스프링이란?
2. 스프링 특징 4가지 
3. Spring MVC 구조 흐름
4. MVC1/ MVC2 패턴 차이
5. DAO/DTO/VO
6. Servlet / JSP 
7. JDBC란? 
8. MyBatis란?
9. 필터와 인터셉터 차이
10. web.xml / pom.xml 
11. 싱글톤패턴 

스프링(Spring)이란 자바 기반의 플랫폼 기반 경량급 오픈소스 어플리케이션 프레임워크입니다. 

DI 계층간 의존성이 존재할 경우, 프레임워크가 주로 연결합니다.

IoC 컨트롤의 제어권을 프레임워크가 가지고 있어서 필요에 따라 스프링 프레임워크가 사용자 함수를 호출합니다. 

AOP 개발 로직과 비즈니스 로직을 분리하고 트랜잭션, 로깅, 보안 등의 기능을 종단으로 분리하여 관리합니다. 

POJO 순수한 자바 객체를 의미하고, get/set을 통해 캡슐화된 오브젝트를 의미합니다. 

Spring MVC 동작 구조

1) 클라이언트가 서버에 요청하면 DispatcherServlet(Front Controller)이 먼저 요청을 처리한다.

2) DispatcherServlet HandlerMapping에게 어떤 컨트롤러가 요청을 처리할지 물어봅니다.  

3) 요청을 처리할 컨트롤러가 있다면 @RequestMapping을 통해 해당 메서드에 접근합니다.

4) 컨트롤러에서 해당 요청을 처리한 Service를 주입받아 비즈니스 로직을 위임합니다.

5) Service에서는 요청에 필요한 작업을 수행하며, 데이터베이스에 접근 필요 시 DAO를 주입받아 DB처리는 DAO에게 위임합니다.

6. DAO는 mybatis을 이용해서 SQL 쿼리를 날려 DB에 저장되어있는 정보를 받아 Service에게 다시 돌려줍니다.

7. 모든 비즈니스 로직을 끝낸 서비스가 결과물을 컨트롤러에게 넘깁니다.

8. 결과물을 받은 컨트롤러는 결과 정보를 DispatcherServlet에게 보냅니다.

9. DispatcherServlet은 ViewResolver에게 받은 뷰의 대한 정보를 넘깁니다.

10. ViewResolver는 해당 JSP를 찾아 DispatcherServlet에게 알려줍니다.

11. DispatcherServlet은 View에게 렌더링를 지시하고 View는 로직을 처리합니다.

12. 결과적으로 DispatcherServlet이 클라이언트에게 렌더링된 View를 응답한다.

MVC1 는 클라이언트의 요청을 JSP가 받아 처리하는 구조입니다. 

장점 : 단순한 페이지 작성으로 쉽게 구현 가능

단점 : 시스템이 복잡해지는 경우 유지보수가 어려움

MVC1 패턴 구조

MVC2 는 클라이언트 요청을 하나의 서블릿이 받아 처리하고 처리된 결과를 JSP로 포워딩하는 구조입니다. 

장점 : 유지보수와 확장이 용이함

단점 : 구조 설계가 오래 걸려 개발기간이 증가

DTO(Data Transfer Object) 

계층(컨트롤러, 뷰, 비즈니스 계층 등)간 데이터 교환을 위한 자바빈즈입니다. 일반적으로 로직을 갖고 있지 않으며 getter, setter 메소드만 가진 클래스를 의미합니다. 

VO(Value Object) DTO와 동일한 개념이나 Read-Only 속성을 가지는 객체입니다. 

DAO(Data Access Object)

DB에 데이터를 조회하거나 조작(select,insert,update,delete)하는 기능을 전담하도록 만든 오브젝트입니다. 사용자는 자신이 필요한 인터페이스를 DAO에게 던지고 DAO는 인터페이스를 구현한 객체를 사용자에게 편리하게 사용할 수 있도록 반환합니다. 

Servlet  클라이언트의 요청에 의해 동적으로 작동하는 웹 어플리케이션 컴포넌트입니다.

MVC패턴에서 컨트롤러 역할을 수행하며 비즈니스 로직의 흐름을 제어하고 JAVA코드안에 HTML코드가 삽입되어 있습니다. 

JSP  MVC패턴에서 뷰 역할을 수행하며 서블릿기반 스크립트 기술로, HTML코드 안에 JAVA코드를 삽입하는 형식입니다. 

JDBC(Java Database Connectivity)란 자바에서 데이터베이스에 접속할 수 있도록 하는 API입니다. 

JDBC 코딩 흐름

1) JDBC드라이버 로드    2) DB연결    3) DB에 읽고 쓰기    4) DB 연결 종료

JDBC 커넥션 풀

DB와 미리 커넥션한 객체들을 풀(Pool)에 저장해두었다가 계속 재사용하는 방식입니다. 클라이언트 요청이 올때마다 계속 맺고 끊으면 오버헤드가 발생하므로 풀에 저장해두었다가 클라이언트가 재요청한 경우 주고 반납합니다. 

MyBatis 자바 오브젝트와 SQL사이의 자동 매핑 기능을 지원하는 ORM(Object Relational Mapping)프레임워크입니다.

MyBatis 컴포넌트 SqlSession Factory Builder, SqlSession Factory, SqlSession 세가지가 있습니다. 

MyBatis 특징

1) 쉬운 접근성  : JDBC의 기능을 MyBatis가 대부분 제공합니다. 

2) SQL을 별도 파일로 분리해 관리 : SQL문과 개발 코드 분리해 SQL 변경이 있을때마다 코드를 수정하지 않아도 됩니다.

3) 다양한 언어로 개발 가능 

Filter 서블릿필터는 DispatcherServlet 이전에 실행이 되는데 자원의 앞단에서 요청 내용을 변경하거나 여러가지 검증을 수행합니다. Intercepter 필터는 스프링의 컨텍스트 외부에 존재하여 요청에 대한 작업 전/후로 가로채 동작한다.

인터셉터 DistpatcherServlet이 컨트롤러를 호출하기 전, 후로 끼어들기 때문에 스프링 컨텍스트내부에서 Controller에 관한 요청과 응답에 대해 처리합니다.

web.xml 서블릿과 URL을 매핑하고 alias를 설정하는 역할입니다. 

pom.xml 메이븐(Maven)의 빌드 정보를 담고 있는 파일입니다.

메이븐이란, 자바 프로젝트 관리 툴으로 미리 작성된 xml 파일을 사용하여 필요한 라이브러리를 다운로드하거나, 생성, 프로젝트 빌드 하는 등의 작업을 자동화한다. 

메이븐 관련 글 : life-with-coding.tistory.com/375

싱글톤 패턴  인스턴스가 오직 1개만 생성되어야하는 경우 사용되는 패턴입니다. 단일 객체만 존재해야 하고, 애플리케이션의 여러곳에서 공유하는 경우 주로 사용되는 디자인패턴입니다. 

싱글톤 한계 

1) private 생성자이기 때문에 상속할 수 없음

2) 테스트하기 어려움

3) 서버환경에서 싱글톤이 하나만 만들어지는 것을 보장하지 못함 

4) 싱글톤 패턴은 애플리케이션 어디서든지 접근가능하기 때문에 전역상태로 사용될 수 있어 바람직하지 못함

Toplist

최신 우편물

태그