관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

[Spring반] 기말 시험 6 - Spring 이론 시험 및 문제 풀이 1 : 1~9번 문제 본문

개발 포트폴리오/수료증 및 시험

[Spring반] 기말 시험 6 - Spring 이론 시험 및 문제 풀이 1 : 1~9번 문제

huenuri 2024. 10. 31. 16:02

시험이 너무 어려워서 과연 시간 안에 다 풀 수 있을지 모르겠다. 30분은 딴짓하느라 다 보내고 이제 진짜로 남은 시간 시험에 집중해보려고 한다.


 

 

 

이론 시험

 

문제 1번

FrameWork를 왜 사용해야 하는지 이유에 대해서 서술하시오.

 

 

프레임워크(FrameWork)는 소프트웨어 개발에서 일관성과 생산성을 높이기 위해 제공되는 구조와 도구 세트를 말한다. 프레임워크를 사용하는 이유는 다음과 같다.

1. 개발 속도 및 생산성 향상

프레임워크는 반복적인 작업을 자동화하고, 미리 정의된 코드를 제공하여 개발자가 핵심 기능 구현에 집중할 수 있도록 돕는다. 예를 들어, 웹 프레임워크(: Django, Flask)는 데이터베이스 연결, URL 라우팅, 인증 등의 기능을 기본으로 제공해 개발 속도를 크게 높여준다.

 

2. 일관성 있는 코드 구조 제공

프레임워크는 코드의 구조와 패턴을 정의해 줌으로써 팀 내 일관성을 유지할 수 있게 한다. 이는 협업 시 유지보수성과 가독성을 높이는 데 도움이 된다. 모든 팀원이 동일한 구조를 사용하므로 코드 리뷰나 버그 수정이 더 효율적이다.

 

3. 보안 및 안정성 향상

프레임워크는 보안에 대한 기본적인 방어 기제를 내장하고 있어, 개발자가 일일이 보안 문제를 신경 쓰지 않아도 안전한 애플리케이션을 구축할 수 있게 한다. 예를 들어, 많은 웹 프레임워크가 SQL 인젝션이나 XSS(크로스 사이트 스크립팅)와 같은 보안 문제를 기본적으로 방지할 수 있는 기능을 제공한다.

 

4. 커뮤니티 및 지원 생태계 활용

인기 있는 프레임워크는 넓은 커뮤니티와 다양한 오픈 소스 라이브러리를 제공하므로 문제 해결이 더 쉽고, 재사용 가능한 모듈도 많이 제공한다. 또한 공식 문서와 많은 튜토리얼이 있어 학습과 문제 해결에 유리하다.

 

5. 테스트와 디버깅 용이

대부분의 프레임워크는 테스트와 디버깅 도구를 함께 제공하여, 개발자가 코드의 품질을 쉽게 검증할 수 있게 한다. 예를 들어, 유닛 테스트나 통합 테스트 기능이 내장된 프레임워크를 사용하면 애플리케이션의 신뢰성을 높일 수 있다.

 

6. 유지보수 및 확장성 향상

프레임워크는 모듈화된 구조를 지향하기 때문에 코드 유지보수가 쉽고, 새로운 기능을 추가할 때도 기존 코드에 영향을 주지 않도록 확장성을 제공한다. 이로 인해 프로젝트가 커지거나 복잡해져도 관리하기가 수월하다.

 


 

 

 

 

문제 2번

Spring의 특징 5개 단어를 작성하시오.

 

  1. 경량성
  2. 의존성 주입(DI)
  3. 제어의 역전(IoC)
  4. 관점 지향 프로그래밍(AOP)
  5. 트랜잭션 관리

 

 

 

 

문제 3번

Spring의 설정파일 중 외부 API, Plugin, Project Version, Security 등 설정을 할 수 있는 이 파일의 이름은 무엇인가?

 
Spring의 설정 파일 중 외부 API, 플러그인, 프로젝트 버전, 보안 등의 설정을 관리할 수 있는 파일은 build.gradle (Gradle 사용 시) 또는 pom.xml (Maven 사용 시)이다.
  • build.gradle: Gradle 빌드 도구를 사용하는 프로젝트에서 사용되며, 외부 API, 플러그인, 의존성, 프로젝트 버전 등을 설정할 수 있다.
  • pom.xml: Maven 빌드 도구를 사용하는 프로젝트에서 사용되며, 의존성 관리, 플러그인, 프로젝트 정보 및 빌드 설정을 포함한다.

 

 

 

 

문제 4번

FrontController의 역할을 수행하며 모든 Client의 요청을 처리하는 Spring 내부에 자체적으로 존재하는 Servlet의 이름은 무엇이며, Servlet의 설정을 담당하는 파일의 이름을 작성하시오.

 

 

Spring에서 FrontController 역할을 수행하며 모든 클라이언트 요청을 처리하는 서블릿의 이름은 DispatcherServlet이다.

  • Servlet 이름: DispatcherServlet
  • 설정 파일 이름: web.xml (서블릿 설정 시 사용) 또는 DispatcherServlet을 Java Config로 설정하는 경우는 @Configuration 클래스에서 설정

 

 

 

 

문제 5번

Context Path란 무엇인가에 대해서 서술하시오.

 

Context Path는 웹 애플리케이션이 웹 서버 내에서 위치하는 경로를 의미한다. 웹 서버에서 여러 애플리케이션을 호스팅 할 때, 각 애플리케이션을 구분하기 위해 사용하는 경로이다.

예를 들어, http://example.com/myapp/home이라는 URL에서 myapp이 Context Path이다. 이 경로는 웹 애플리케이션의 루트 디렉토리를 지정하며, 이를 통해 서버는 클라이언트 요청을 적절한 애플리케이션으로 라우팅 할 수 있다.

 

주요 특징

  • 애플리케이션 식별: 동일한 서버에서 여러 애플리케이션을 구분하고 식별하기 위해 사용된다.
  • 기본값: 일반적으로 Context Path의 기본값은 /로, 루트 디렉토리를 의미한다. 이 경우 URL에 추가 경로가 없어도 기본 애플리케이션으로 연결된다.
  • Spring Boot 설정: Spring Boot에서는 application.properties 파일에서 server.servlet.context-path=/myapp과 같은 설정으로 Context Path를 변경할 수 있다.

예시

  • URL: http://example.com/myapp/home
  • Context Path: /myapp
  • 실제 경로: /home (Context Path 이후의 경로는 해당 애플리케이션 내부의 경로를 의미)

Context Path는 서버 환경에서 애플리케이션의 경로를 정의하여 접근성을 높이고, 여러 애플리케이션을 효과적으로 관리하는 데 중요한 역할을 한다.

 


 

 

 

 

문제 6번

MyBatis에서 SqlSessionFactoryBean에게 JDBC로 구현하고 싶은 기능을 추상메소드로 정의하는 파일을 Mapper라고 하는데 추상클래스가 아닌 Interface로 작성하는 이유에 대해서 서술하시오.

 

 

MyBatis에서 Mapper를 추상 클래스가 아닌 인터페이스로 작성하는 이유는 다음과 같다.

1. SQL과의 직접적인 연관성

  • MyBatis의 Mapper 인터페이스는 SQL 매핑 파일(XML) 또는 어노테이션을 통해 SQL 쿼리와 직접 매핑된다. 따라서 데이터베이스 연동을 위한 메서드의 정의만 필요하며, 구체적인 구현은 XML 파일이나 어노테이션으로 처리된다. 인터페이스는 이러한 구현체 없이 메소드 정의만을 제공하므로, Mapper와 SQL 매핑의 목적에 부합한다.

2. 코드 간결성과 유지보수성 향상

  • 인터페이스는 메소드메서드 시그니처만 정의하기 때문에 불필요한 코드가 줄어들고, 유지보수가 쉬워진다. 개발자는 SQL 매핑에 필요한 메서드 정의만 집중하여 작성할 수 있어 코드가 간결해지고 유지보수가 용이하다.

3. 다형성 지원

  • 인터페이스를 사용하면 MyBatis가 프록시 객체를 생성하여 Mapper의 구현체 역할을 수행한다. 이 덕분에 MyBatis는 런타임에 Mapper 인터페이스를 기반으로 SQL 세션을 생성하고, 메서드 호출을 SQL 쿼리에 바인딩하여 실행할 수 있다. 다형성을 통해 Mapper가 실제 JDBC 구현을 자동으로 관리하도록 하는 것이다.

4. 추상 클래스와의 차이점

  • 추상 클래스는 일부 구현을 포함할 수 있어 MyBatis의 Mapper 기능에는 불필요한 요소가 될 수 있다. 반면 인터페이스는 메소드의 정의만 제공하므로, MyBatis가 동적으로 SQL과 매핑하고 프록시 객체를 생성하는 데 최적화되어 있다.

따라서 MyBatis에서 Mapper를 인터페이스로 작성하면, 간결한 메소드 정의, 다형성 활용, 프록시 객체 생성의 용이성 등의 장점이 있어 JDBC와의 연동이 보다 효과적으로 이루어진다.


 

 

 

 

문제 7번

MyBatis에서 사용자가 만든 Mapper Interfaceimplement하여 해당 요청에 맞게 JDBC를 구현하는 클래스 명을 작성하시오.

 

MyBatis에서 사용자가 만든 Mapper Interface를 구현하는 클래스를 직접 작성하지는 않는다. 대신, MyBatis는 동적으로 프록시 객체를 생성하여 Mapper Interface를 구현하는 역할을 한다.

MyBatis의 Mapper 프록시 클래스

MyBatis는 사용자가 정의한 Mapper 인터페이스에 대해 동적으로 프록시를 생성하는 내부 클래스를 자동으로 사용한다. 이 프록시 클래스의 이름은 MapperProxy이다.

  • 클래스명: MapperProxy
  • 위치: MyBatis 라이브러리 내부 (org.apache.ibatis.binding.MapperProxy)

MapperProxy는 MyBatis에서 Mapper 인터페이스의 구현체로 동작하며, SQL 세션과의 연결을 통해 메서드 호출을 적절한 SQL로 매핑하여 실행한다. 따라서, MyBatis에서 Mapper Interface를 구현하는 실제 클래스 이름은 MapperProxy이다.


 

 

 

 

문제 8번

Controller가 요청에 대해서 기능을 수행 후 View Name을 돌려주게 되는데 View Name에 앞뒤로 해당 경로 문자열을 붙여 완성시키는 클래스 명을 작성하시오.

 

Spring MVC에서 Controller가 반환한 View Name에 앞뒤 경로를 붙여서 최종 View의 경로를 생성하는 역할을 하는 클래스는 InternalResourceViewResolver이다.

클래스명

  • InternalResourceViewResolver

역할

InternalResourceViewResolver는 Controller가 반환한 View Name에 대해 접두사(prefix)와 접미사(suffix)를 붙여서 최종적인 뷰 경로를 생성한다. 예를 들어, prefix가 /WEB-INF/views/이고 suffix가 .jsp인 경우, Controller가 "home"이라는 View Name을 반환하면 최종 뷰 경로는 /WEB-INF/views/home.jsp가 된다.

 

설정 예시 (Spring 설정 파일에서)

@Bean
public InternalResourceViewResolver viewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    return resolver;
}

 

이와 같이 InternalResourceViewResolver는 View Name에 접두사와 접미사를 자동으로 붙여서 최종 View 경로를 설정하는 역할을 한다.


 

 

 

 

문제 9번

DataBase Connection의 개수와 자원할당을 관리하는 것을 DBCP(DataBase Connection Pool)라고 한다. 그렇다면 MyBatis에서 사용하는 대표 DBCP API의 이름을 작성하시오.

 

 

MyBatis에서 사용할 수 있는 대표적인 DBCP (DataBase Connection Pool) API로는 Apache Commons DBCPHikariCP가 있습니다. 이들은 MyBatis와 함께 자주 사용되는 연결 풀 API이다.

 

대표적인 MyBatis DBCP API

  1. HikariCP
    • 빠른 성능높은 안정성으로 인해 최근 MyBatis에서 가장 많이 사용되는 DBCP이다.
    • 설정이 간단하고, 효율적이며, 경량화되어 있어 MyBatis와의 호환성이 좋다.
  2. Apache Commons DBCP
    • 전통적으로 많이 사용되던 DBCP API로, 다양한 설정을 제공하며 안정적인 성능을 보장한다.
    • commons-dbcp2라는 이름으로 제공된다.

 

예시 (HikariCP 설정)

Spring 환경에서 HikariCP를 MyBatis와 함께 사용할 때 설정 예시는 다음과 같다.

@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource dataSource() {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
        dataSource.setUsername("username");
        dataSource.setPassword("password");
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        return dataSource;
    }
}

 

따라서 MyBatis에서 자주 사용하는 대표적인 DBCP API는 HikariCP와 Apache Commons DBCP이다.

 


 

 

 

시험을 마치고

이론 시험 문제가 5문제 더 남아있지만 여기까지 끊고 다음 포스트에 이어서 시험 문제를 풀어보겠다. 이론 문제는 그래도  찾아보면 내용이 대부분 나오니 풀기는 괜찮았다. 하지만 실습 문제가 문제다. 과연 한 문제라도 풀 수 있을지 모르겠다.