기술면접 연습 기록(4) - 2024.6.19

동준·2024년 6월 19일
0

11. 스프링 시큐리티의 원리와 동작 방식 설명해주세요.

스프링 시큐리티(Spring Security)는 애플리케이션 보안을 제공하는 프레임워크로, 사용자의 신원을 확인하는 과정인 인증(Authentication)과 인증된 사용자가 애플리케이션의 특정 리소스에 접근할 수 있는 권한이 있는지 확인하는 인가(Authorization)를 처리합니다.

스프링 시큐리티는 요청 내용이 DispatcherServelet을 지나 Controller 단계로 넘어가기 전의 Filter 단계에서 이뤄지는데 기본적으로 인증 필터를 통해 로그인 정보를 UsernamePasswordAuthenticationFilter 기반으로 인증 매니저가 확인 후, SecurityContextHolder에 인증 정보를 담아 저장하면서 인가 단계에서 권한 확인 과정을 거칩니다.

12. Spring 스프링 빈이라는 게 어떤 역할을 하는지 설명해주세요.

스프링 빈(Spring Bean)은 스프링 IoC 컨테이너가 관리하는 자바 객체입니다. 빈은 스프링 컨테이너에 의해서 생성되고, 관리되며, 필요할 때마다 주입되면서 객체 간 관계를 맺습니다. 주로 서비스, 리포지토리, 컨트롤러 등 애플리케이션의 주요 구성 요소를 나타냅니다.

13. Spring 스프링 로컬 캐시 쓰면 되는데 redis를 쓰는 이유는 무엇일까요?

로컬 캐시 역시 앱 내부 메모리에 데이터를 저장하여 빠르게 접근할 수 있지만, 메모리 용량이 한정되며 앱의 재부팅 이슈에 손실될 수도 있습니다. redis는 인메모리 데이터베이스로 매우 빠른 입출력 성능을 나타내며 디스크에 데이터를 저장하므로 앱의 재부팅 이슈에 영향을 크게 받지 않고 또한 문자열 외에도 hash, set, sorted set 등의 다양한 자료구조를 지원합니다.

14. Spring MVC 패턴이 요청을 주고 받을 때 어떤 흐름인지 설명해보세요.

Spring MVC는 Model, View, Controller 패턴을 기반으로 웹 요청과 응답을 처리합니다. 클라이언트가 URL을 통해 서버에 요청을 보내면 스프링의 DispatcherServlet이 요청을 가로채서 HandlerMapping을 활용해 컨트롤러에 배분합니다.

컨트롤러는 모델 데이터를 생성하고 비즈니스 로직을 실행하며, 이를 뷰와 함께 다시 DispatcherServlet에 반환하고 ViewResolver를 바탕으로 뷰의 위치를 선택해서 HTML을 파싱, 클라이언트에 응답으로써 반환합니다.

15. Spring @Component랑 @Bean 차이 에 대해서 설명해주세요

@Component 어노테이션은 클래스 수준에서 사용되며 스프링 컨테이너가 해당 클래스를 빈으로 등록할 수 있게 합니다. 이것이 특화돼서 @Controller, @Service, @Repository 어노테이션 등으로 분화돼 활용될 수 있습니다.

@Bean 어노테이션은 메소드 수준에서 사용되며 개발자가 수동으로 빈을 등록해야 할 때 사용됩니다. 주로 @Configuration 어노테이션이 할당된 클래스 내의 메소드들에게 부여합니다.

16. Spring 의 작동하는 흐름에 대해 설명해주세요

스프링 기반 앱이 시작되면 컨테이너가 초기화되고 설정 파일에서 빈 정의를 로드해서 의존성 주입을 수행하고 생명주기를 관리합니다. 주요 비즈니스 로직들은 빈들이 수행하고 관리하며 컨트롤러, 서비스, 레포지토리 등이 등록되어 해당 역할을 맡습니다. 웹 앱의 경우, DispatcherServelet에서 요청을 받아 컨트롤러에 전달하고 응답을 클라이언트에 반환합니다.

17. 오버로딩과 오버라이딩 차이가 무엇인가요?

오버로딩은 동일 클래스 내의 동일 명칭의 메소드를 매개변수의 타입, 개수, 순서를 달리하여 여러 개를 구현할 수 있으며 대표적인 예시로는 클래스의 생성자가 있습니다.

오버라이딩은 주로 상속 혹은 인터페이스 구현에서 등장하며 상위 클래스의 메소드를 하위 클래스에서 메소드에서 명칭, 매개변수, 리턴 타입을 동일시하면서 재정의하는 것입니다.

두 방법 전부 자바의 객체지향 특성 중 다형성을 메소드 단위에서 극대화할 수 있습니다.

18. Spring 에서 주입을 하는 이유가 무엇인가요?

스프링에서 의존성 주입(DI)을 사용하는 이유는, 우선 객체 간의 결합도를 줄임으로써 추후 객체 유지보수의 효율성과 객체 자체의 확장성을 높일 수 있습니다. 이는 관심사 분리(AOP)를 실현시키며 객체지향 프로그래밍의 원칙들을 준수하는 코드 설계로 이어질 수 있습니다.

19. Spring MVC 패턴에서 모델1과 모델2의 차이가 무엇인가요?

몰랐던 내용

  • 모델1(Model 1) 아키텍처: 모든 요청 처리가 JSP(또는 다른 뷰 기술)에서 이루어집니다. JSP는 요청을 받고, 비즈니스 로직을 수행하며, 결과를 출력합니다.

    • 장점: 구현이 간단합니다.
    • 단점: 비즈니스 로직과 뷰 로직이 혼합되어 유지보수가 어렵습니다.
  • 모델2(Model 2) 아키텍처: MVC 패턴을 따릅니다. 요청 처리는 컨트롤러가 담당하고, 비즈니스 로직은 모델에서 처리하며, 결과는 뷰에 전달됩니다.

    • 장점: 역할이 분리되어 코드가 명확하고, 유지보수가 용이합니다.
    • 단점: 구조가 복잡해질 수 있습니다.

20. Spring 테스트 어노테이션을 사용하면 좋은 점을 설명해보세요.

스프링 테스트와 관련된 어노테이션은 다양합니다. 그 중, 몇 가지를 예시로 설명드리겠습니다.

대표적인 어노테이션인 @SpringBootTest는 앱 전체를 로드하는 통합 테스트를 수행하며, 동일 컨텍스트를 공유합니다. 또한 @MockBean과 같은 모킹(Mocking) 관련 어노테이션을 활용하면 특정 클래스의 예측 불가능한 인스턴스 결과를 하나로 고정하는 등의 테스트 흐름에 맞춰 제어할 수 있으며 @Transactional 어노테이션은 테스트 코드 내에서는 자동으로 롤백 설정이 가능합니다.

profile
scientia est potentia / 벨로그 이사 예정...

0개의 댓글