[Spring] Spring ~ REST 과목평가 예상문제
1. Spring DI
1.Bean의 인스턴스화 조립, 관리의 역할, 사용 소멸에 대한 처리를 담당하는 것?
→ Container
2. 스프링 컨테이너에서 빈을 얻어오기 위한 메소드인 getBean()의 반환타입?
→ Object
3. 다음과 같이 생성자 방식으로 의존관계를 주입할 때 Test에서 doWork()를 실행하면 다음의 출력창이 나와야한다. name과 ref 값으로 알맞은 것은?
@Autowired
public Worker(Computer computer) {
this.computer = computer;
}
public void doWork() {
System.out.println(this.computer.getInfo() + " 로 일을 합니다.");
}
// applicationContext.xml
<bean class="com.ssafy.spring.Desktop" id="desktop"></bean>
<bean class="com.ssafy.spring.Labtop" id="labtop"></bean>
<bean class="com.ssafy.spring.Worker" id="worker">
<constructor-arg name=" " ref=" "/>
</bean>
→ <constructor-arg name="computer" ref="desktop"/>
4. 기존 JDBC를 사용한 프로젝트를 Spring과 연동하였을 때, 기존의 DBUtil의 역할을 하는 인터페이스는?
→ DataSource, DB와 연결된 것에 집중하며 dao는 Datasource에 의존한다.
5. bean으로 등록될 준비를 마친 클래스들을 스캔하여, bean으로 등록해주는 태그는?
→ component-scan
6. base-package는 패키지를 어디부터 스캔할지 지정해주는 부분이다. 스캔할 패키지를 여러 개로 지정해줄 수 있는가? (O/X)
→ O

* bean으로 등록될 준비란?
- 클래스에 @Controller @Service @Component @Repository 어노테이션을 붙이는 것이다.
* component-scan 사용방법 ? xml파일에 설정하기
<context:component-scan base-package="com.ssafy.ws.controller" />
- base-package 하위의 @Controller @Service @Component @Repository 클래스가 모두 bean으로 등록된다.
2. Spring AOP
7. 메서드 실행이나 예외처리와 같은 프로그램 실행 중의 특정 지점이다. 스프링에서는 메서드 실행을 의미하는 AOP용어의 이름은?
→ Join Point
8. Join Point에 Aspect를 적용하기 위한 조건을 서술한다. Aspect는 지정한 '이것'에 일치하는 모든 join point에서 실행된다.
→ Pointcut
9. 'target메서드 정상동작 후'에 실행하며, 실행결과를 인자로 받는다. 다음 설명에 알맞은 Advice Type은?
→ after returining
before - target 메서드 호출 이전
after – target 메서드 호출 이후, java exception 문장의 finally와 같이 동작
after returning – target 메서드 정상 동작 후
after throwing – target 메서드 에러 발생 후
around – target 메서드 의 실행 시기, 방법, 실행 여부를 결정
10. after throwing 메소드의 타입?
→ Throwable
3. Spring WebMVC
11. Spring Web MVC 에서 중심이 되는 front controller 역할을 하며, 요청처리 기능을 제공하는 '이것'은?
→ DispatcherServlet
12. Spring MVC의 구성요소를 요청처리 흐름대로 나열하라.
→ DispatcherServlet - HandlerMapping - Controller - ModelAndView - ViewResolver - View
DispatcherServlet - 클라이언트 요청처리( 요청 및 처리 결과 전달)
HandlerMapping - 요청을 어떤 Controller가 처리할 지 결정
Controller - 요청에 따라 수행할 메서드를 선언하고, 요청처리를 위한 로직 수행(비즈니스 로직 호출)
ModelAndView - 요청처리를 하기 위해서 필요한 혹은 그 결과를 저장하기 위한 객체
ViewResolver - Controller에 선언된 view이름을 기반으로 결과를 반환할 View를 결정
View - 응답화면 생성
13. Spring MVC의 요청처리흐름을서술하시오.
(1) 클라이언트 요청이 들어오면 DispatcherServlet이 받는다.
(2) HandlerMapping이 어떤 Controller가 요청을 처리할지 결정
(3) DispatcherServlet은 Controller에 요청을 전달
(4) Controller는 요청을 처리
(5) 결과 (요청처리를 위한 data, 결과 보여줄 viewName)를 ModelAndView에 담아 반환
(6) ViewResolver 의해 실제 결과를 처리할 View를 결정하고 반환
(7) 결과 처리할 View에 ModelAndView를 전달
(8) DispatcherServlet은 View가 만들어낸 결과를 응답
14. URL을 클래스나 특정 핸들러(메서드)에 매핑하며, 일반적으로 요청 경로, 요청패턴에 매칭한다. 메서드 Annotaion은 요청방식(GET, POST)등으로 범위를 좁혀주는 '이것' 은?
→ @RequestMapping
15. 컨트롤러의 핸들러 리턴값을 리다이렉트를 위해 사용할 때 view이름 앞에 사용하는 접두어는?
→ redirect:
4. File Upload & Spring MyBatis
16. MyBatis과 Spring연동을 위해 MyBatis 실행에 필요한 객체 두 가지?
→ dataSource, sqlSessionFactory
dataSource : JDBC Connection 객체의 소스를 설정한다.
sqlSession : sqlSessionFactory를 통해 만든 인스턴스로, DB에 대해 SQL명령어를 실행하기 위한 메서드를 포함한다.
17. File을 <form>태그를 이용하여 보낼 때 method방식?
→ POST
18. <form>에서 넘어온 데이터의 name과 컨트롤러에서 매핑한 파라미터명이 다를 경우 지정해주는 옵션은?
→ @RequestParam("폼의 데이터 name")
19. 다음은 게시판 만들기 실습에 대하여, 전체 글을 조회하는 쿼리문을 작성 중이다. xml Mapper의 namespace와 id명에는 무엇이 들어가야 하는지 차례대로 쓰시오.
<mapper namespace="/패키지명은 고려하지 않는다./(1)">
<select id="(2)" resultType="Board">
SELECT id, writer, content, title, view_cnt as viewCnt, date_format(reg_date, '%Y-%M-%d') as regDate
FROM board
</select>
public interface BoardDao {
public List<Board> selectAll();
..
public interface BoardService {
List<Board> getBoardList();
..
→ BoardDao (com.ssafy.board.model.dao.BoardDao), selectAll
xml Mapper의 id와 Mapper Interface의 메서드이름을 일치시켜야 하기 때문이다.
5. REST API
20. 기존의 웹 접근 방식과 REST API 방식의 차이점에 대해 서술하시오.
→ 기존의 접근 방식은 GET과 POST만으로 자원에 대한 CRUD를 처리하며, URI는 액션을 나타냈다. 반면 REST로 변경할 경우 POST/GET/PUT/DELETE를 모두 사용하여 CRUD를 처리하며 URI는 제어하려는 자원을 나타낸다.
21. REST API에 대한 설명으로 옳지 않은 것은?
(1) 하이픈(-)은 사용 가능하나, 언더바(_)는 사용하지 않는다.
(2) 대소문자를 구분하지 않는다.
(3) URI 마지막에 슬래시(/)를 사용하지 않는다.
(4) 확장자가 포함된 파일 이름은 직접 포함시키지 않는다.
(5) URI는 명사를 사용한다.
→ (2) 대소문자를 구분하기 때문에 특별한 경우를 제외하고 대문자 사용은 하지 않는다.
22. 기존 Service와 REST API Service의 차이점에 대해 서술하시오.
→ 기존 Service는 요청에 대한 처리를 한 후 가공된 data를 이용하여 특정 플랫폼에 적합한 형태의 View로 만들어서 반환한다. 반면 REST Service는 data처리만 한다거나, 처리 후 반환될 data가 있다면 JSON, XML형식으로 전달한다. 즉, View에 대해선 신경 쓸 필요가 없기에 Open API에서 많이 사용한다.
23~27. REST API와 관련된 어노테이션 및 클래스에 대한 설명이다. 해당하는 이름을 적으시오.
23.
Controller가 REST방식을 처리하기 위한 것임을 명시한다.
→ @RestController
24.
JSP와 같은 뷰로 전달되는 게 아닌 데이터 자체를 전달한다.
→ @ResponseBody
25.
URL경로에 있는 값을 파라미터로 추출한다.
→ @PathVariable
26.
JSON 데이터를 원하는 타입으로 바인딩한다.
→ @RequestBody
27.
데이터 응답 시 [상태코드, 헤더, 데이터] 설정이 가능하다.
→ ResponseEntity