spring-interview

김종찬·2023년 4월 11일

기술면접 정리

목록 보기
7/7
  • 스프링 프레임워크란 무엇이며, 어떤 특징을 가지고 있는지 설명해주세요.

    1. 제어의 역전(IoC, Inversion of Control): 객체 생성 및 관리를 개발자가 아닌 프레임워크가 담당합니다. 이를 통해 객체 간의 결합도를 낮추고 유연성과 확장성을 높일 수 있습니다.

    2. 의존성 주입(DI, Dependency Injection): 객체 간의 의존성을 설정 파일이나 어노테이션을 통해 주입하는 방식을 사용합니다. 이를 통해 객체 간의 결합도를 낮출 수 있습니다.

    3. 관점 지향 프로그래밍(AOP, Aspect Oriented Programming): 프로그램의 로직과는 별개로 공통적으로 사용되는 기능을 모듈화하여 적용할 수 있도록 합니다. 이를 통해 코드 중복을 줄이고 유지보수성을 높일 수 있습니다.

    4. 트랜잭션 처리: 데이터베이스 연동 시 트랜잭션 처리를 지원합니다. 이를 통해 데이터 일관성을 유지할 수 있습니다.

    5. MVC 웹 프레임워크: 웹 애플리케이션 개발을 위한 MVC 아키텍처를 제공합니다. 이를 통해 개발 생산성을 높일 수 있습니다.

    6. 보안: 스프링 시큐리티(Spring Security)를 통해 보안 기능을 제공합니다.

  • 스프링 컨테이너의 역할은 무엇인가요?

    스프링 컨테이너(Spring Container)는 스프링 프레임워크에서 가장 중요한 역할을 담당하는 핵심 컴포넌트입니다. 스프링 컨테이너는 IoC(Inversion of Control)와 DI(Dependency Injection)를 기반으로 객체를 생성하고, 관리합니다. 즉, 스프링 컨테이너는 객체의 생명주기를 관리하고, 객체 간의 의존성을 해결하여 객체지향 프로그래밍을 쉽게 할 수 있도록 도와줍니다.

    1. 객체 생성: 스프링 컨테이너는 XML, 어노테이션 등의 설정 정보를 바탕으로 객체를 생성합니다. 개발자는 객체를 생성하는 코드를 작성하지 않아도 되며, 스프링 컨테이너가 객체를 생성하고 의존성을 해결합니다.

    2. 객체 관리: 스프링 컨테이너는 생성한 객체를 관리합니다. 객체를 필요로 하는 클래스에게 객체를 주입하며, 필요하지 않은 객체는 메모리에서 제거됩니다.

    3. 의존성 해결: 스프링 컨테이너는 객체 간의 의존성을 해결합니다. 객체가 필요로 하는 다른 객체를 스프링 컨테이너가 찾아서 주입해줍니다. 이를 DI(Dependency Injection)라고 합니다.

    4. 라이프사이클 관리: 스프링 컨테이너는 객체의 라이프사이클을 관리합니다. 객체 생성 시 초기화 메서드를 호출하고, 객체 소멸 시 소멸 메서드를 호출합니다.

  • 스프링에서 AOP (Aspect-Oriented Programming)이란 무엇이며, 어떻게 구현되는지 설명해주세요.

    AOP는 핵심 로직과 부가적인 로직(공통된 부분)을 분리하고, 부가적인 로직을 모듈화하여 코드의 재사용성을 높입니다. 스프링에서 AOP는 다음과 같이 구현됩니다.

  1. 공통된 부분을 모듈화한 객체(Aspect) 생성

    • 공통된 부분을 모듈화한 객체(Aspect)를 생성합니다.
    • Aspect는 일반적으로 로깅, 트랜잭션 관리, 보안 등과 같은 부가적인 기능을 수행합니다.
  2. 공통된 부분과 핵심 로직을 연결하는 지점(Poincut) 설정

    • Aspect가 적용될 메서드의 위치를 결정하는 지점을 설정합니다.
    • 메서드 실행 전, 실행 후, 예외 발생 시 등 다양한 지점에서 Aspect를 적용할 수 있습니다.
  3. Aspect 적용

    • 설정된 Poincut에서 결정된 메서드가 실행될 때, Aspect를 적용합니다.
    • Aspect는 Advice라는 메서드로 구현되며, Advice는 Poincut에서 결정된 메서드의 실행 전, 실행 후, 예외 발생 시 등 다양한 시점에서 적용됩니다.
  • 스프링에서 MVC (Model-View-Controller) 패턴이란 무엇이며, 어떻게 구현되는지 설명해주세요.

    MVC(Model-View-Controller) 패턴은 사용자 인터페이스와 비즈니스 로직을 분리하여 개발하는 소프트웨어 디자인 패턴입니다. 스프링에서도 MVC 패턴을 지원하며, 대표적으로 스프링 MVC라는 모듈을 제공합니다.

    1. Model

      애플리케이션의 비즈니스 로직을 처리합니다.
      비즈니스 로직 수행 결과를 View로 전달합니다.
      스프링에서는 Model 객체를 사용하여 데이터를 저장하고 View에 전달합니다.

    2. View

      사용자에게 보여지는 UI를 처리합니다.
      Model로부터 전달받은 데이터를 사용하여 사용자 인터페이스를 구성합니다.
      스프링에서는 JSP, Thymeleaf, Freemarker 등 다양한 View를 지원합니다.

    3. Controller

      사용자의 요청을 처리하고, Model과 View를 연결합니다.
      요청을 처리하기 위해 Service와 DAO 등의 비즈니스 로직을 호출합니다.
      Model과 View를 선택하여 결합시키는 역할을 합니다.

스프링 MVC에서는 DispatcherServlet이라는 컨트롤러가 사용자의 요청을 받고, 해당 요청을 처리하기 위해 Controller와 View를 선택하여 실행합니다. Controller는 비즈니스 로직을 처리하기 위해 Service, DAO 등과 같은 객체를 호출합니다. 처리 결과는 Model 객체에 저장되며, 이를 View에서 사용하여 사용자 인터페이스를 구성합니다.

  • 스프링에서 트랜잭션 처리 방법은 무엇이며, 어떻게 구현되는지 설명해주세요.

    트랜잭션은 데이터베이스의 일관성과 무결성을 유지하는 데 필수적인 요소입니다. 스프링은 트랜잭션 처리를 위해 다양한 방법을 제공하고 있습니다.

    1. Declarative Transaction Management

      스프링에서 가장 추천하는 방법입니다.
      트랜잭션을 선언적으로 처리하며, 메서드에 @Transactional 어노테이션을 추가하여 사용합니다.
      이 방법은 AOP를 사용하여 구현되며, 코드를 깔끔하게 유지할 수 있습니다.
      트랜잭션의 시작, 종료, 롤백 등을 자동으로 처리합니다.

    2. Programmatic Transaction Management

      트랜잭션 처리를 직접 구현하는 방법입니다.
      TransactionTemplate 클래스를 사용하여 트랜잭션의 시작, 종료, 롤백 등을 수동으로 처리합니다.
      트랜잭션 처리를 직접 구현하기 때문에 세밀한 제어가 가능합니다.

    3. JTA Transaction Management

      여러 개의 데이터베이스나 다른 리소스들을 사용하는 경우에 사용됩니다.
      JTA(Java Transaction API)를 사용하여 분산 트랜잭션 처리를 지원합니다.

  • 스프링에서 보안 처리를 위한 기능은 무엇이 있으며, 어떻게 구현되는지 설명해주세요.

스프링에서 보안 처리를 위한 기능으로는 크게 인증(Authentication)과 인가(Authorization)가 있습니다.

인증(Authentication)은 사용자가 시스템에 접근할 때, 해당 사용자가 누구인지 확인하는 과정입니다. 스프링에서는 다양한 인증 방식을 지원하며, 가장 많이 사용되는 방식으로는 아이디와 비밀번호를 입력받아 인증하는 폼 기반 인증(Form-based Authentication)과, 서드파티 인증 서비스를 이용하는 소셜 로그인(Social Login)이 있습니다.

인가(Authorization)는 인증된 사용자가 시스템 내에서 수행할 수 있는 작업에 대한 권한을 결정하는 과정입니다. 스프링에서는 인가 처리를 위해 AOP를 사용하며, 메서드나 URL 단위로 권한을 설정할 수 있습니다. 또한, 스프링 시큐리티(Spring Security)라는 보안 프레임워크를 제공하여 다양한 인증과 인가 방식을 지원합니다.

profile
봄이 오길

0개의 댓글