기술면접 - 백엔드(스프링)

개나뇽·2025년 1월 7일

기술면접

목록 보기
7/8

WS와 WAS의 차이

WS

  • 즈니스 로직 작성 불가
  • 주로 정적 데이터 처리
  • Nginx, Apache 등

WAS

  • 비즈니스 로직 작성 가능
  • 웹 서버에서 처리하지 못한 동적 데이터 처리
  • 정적 데이터 처리도 가능하나 느림
  • Tomcat

아파치 톰캣

  • 톰캣의 편의를 위해 아파치의 일부 기능을 제공(톰캣 == 아파치 톰캣)
  • 로드 밸런싱 같은 특수 상화에서는 아파치 서버를 앞에 두고 톰캣을 연결하는 경우도 존재

대용량 트랙픽 대처

  • 스케일 업 : 서버의 하드웨어적인 스펙을 향상 시키는 방식
  • 스케일 아웃 : 서버를 여러 대 추가해 시스템을 증가 시키는 방식

CORS?

  • 도메인이 다른 2개의 사이트가 데이터 통신시 발생하는 문제
  • 서버 내에서 요청이 허락된 도메인에만 데이터를 주기 위해서 존재
  • 요청 허락을 위해서는 응답 헤더에 Access-Control-Allow -xxx 같은 내용을 추가 해야 함

서블릿과 디스패처 서블릿

서블릿

  • HTTP 통신을 위해 사용되는 자바의 웹 기술
  • 공통의 기능을 각각의 서블릿이 처리 해야 함

디스패처 서블릿

  • 서블릿의 단점을 해결하기 위해 프론트 컨트롤러 패턴으로 만들어졌으며 스프링에서 제공하는 기술

DI, IoC, AOP

  • DI : 외부에서 객체 간의 관계를 결정하는것으로 객체를 직접 생성하는 것이 아닌 외부에서 생성 후 주입 시키는 방식으로 IOC 컨테이너를 구현하는 방법 중 하나
  • IoC : 스프링 컨테이너로 불리며, 제어의 역전 즉 객체의 생성과 소멸, 조립및 구성 관리, 의존 관계 주입의 주체가 개발자가 아닌 프레임 워크가 가져가는 것을 의미
  • AOP : 관점 지향 프로그래밍으로 공통 부가 기능을 비즈니스 로직에서 추출해 원하는 곳에 적용하는 기술

VO, DTO, DAO, ENTITY

  • VO : 실제 데이터를 저장하는 클래스(식별자가 없으며, 불변), 독립적이지 않은 라이프 사이클을 가짐
  • DTO : 데이터를 주고 받기 위해 사용되는 클래스
  • DAO : DB에 접근해 실제 데이터를 조회 또는 조작하는 클래스(Repository 또는 Mapper)
  • ENTITY : JPA에서 테이블과 매핑되는 클래스로 식별자가 존재하며, 독립적인 라이프 사이클을 지님

Spring 에서의 싱글톤

  • 스프링에서는 bean 생성 시 기본적으로 싱글톤이 적용되며 스프링 컨테이너에 의해 관리
  • 요청이 들어올 때마다 객체를 재생성하지 않고, 만들어진 객체를 공유해 효율적인 사용 가능
  • static 메서드나 private 생성자 등을 사용하지 않아 객체지향적 개발 가능
  • 테스트가 용이합니다.

@SpringBootApplication?

  • 스프링 부트에서 애플리케이션을 실행하는 역할

구성

  • @SpringBootConfiguration : 애플리케이션의 구성을 제공하는 애노테이션
    • Configuration : 빈을 생성하고 스프링 컨테이너에 등록
    • Indexed : 빈을 컨테이너에 등록 시 색인화와 스테레오 타입으로 설정
  • @EnableAutoConfiguration : 베이스 패키지로 정의된 경로의 모든 빈을 자동으로 구성하기에 최상위 패키지에 선언
  • @ComponentScan : Component 애노테이션이 명시된 클래스를 스프링 컨테이너에 빈으로 등록

MVC 패턴과 Spring MVC

MVC 패턴

  • 아키텍쳐 설계를 위한 디자인 패턴
  • 모델 : 데이터 저장 역할
  • 뷰 : 사용자 인터페이스 역할
  • 컨트롤러 : 사용자 요청 처리와 모델과 뷰의 중개 역할

Spring MVC

  • 웹 애플리케이션 개발을 위한 MVC 패턴과 멀티스레드 기반의 웹 프레임워크
  • 스레드 재사용을 위한 스레드 풀 사용
  • 뷰 : 사용자 인터페이스
  • 뷰 리졸버 : 뷰의 이름을 통해 알맞은 뷰를 찾음
  • 컨트롤러 : 사용자 요청을 받아 처리해 결과를 디스패처 서블릿에 전달
  • 핸들러 매핑 : 요청이 어떤 컨트롤러에 온 요청인지 검사
  • 디스패처 서블릿 : 사용자 요청을 먼저 받는 서블릿, 요청에 맞는 컨트롤러에 요청을 전달

스레드 로컬

  • 각 스레드에 할당되는 공간
  • 멀티스레드 환경에서 스레드 로컬에 값 저장후 해제하지 않으면 스레드의 재사용으로 원치않은 동작이 발생 가능
  • 대표적으로 Spring Security에서 사용되는 SecurityContextHolder는 스레드 로컬을 사용

SpringMVC 장단점과 SpringBoot

장점

  • 의존성 주입을 통해 컴포넌트 간의 결합도를 낮춰 단위테스트에 용이
  • 제어의 역전을 통해 빈의 생명주기에 관여하지 않고 개발에 집중

단점

  • xml 기반으로 프로젝트 설정에 많은 시간이 소요
  • 톰캣과 같은 was를 별도 설치

해결책(SpringBoot 도입)

  • 자주 사용되는 라이브러리들의 버전 관리 자동화
  • AutoConfig를 통한 복잡한 설정 자동화
  • Tomcat와 같은 내장 WAS 제공
  • 실행 가능한 Jar로 개발 가능

Spring @Bean, @Configuration,@Component 어노테이션

  • 스프링 컨테이너에 빈 관련 애노테이션.
  • Bean : 개발자가 직접 관리 불가한 외부 라이브러리 또는 설정을 위한 클래스를 수동으로 빈 등록 시 사용
  • Configuration : @Bean 애노테이션을 갖는 클래스의 경우 반드시 명시
  • Component : 개발자가 직접 개발한 클래스를 컴포넌트 스캔 방식으로 자동 빈 등록 시 사용

Spring AOP

  • JDK 동적 프록시를 이용
  • 자바의 인터페이스, 스프링 컨테이너 이외의 환경이나 기술이 필요 없음

단점

  • 프록시 적용을 위해 반드시 인터페이스를 생성
  • 구체 클래스로 빈을 주입 받을 수 없어 인터페이스로만 주입받아야 함

해결책

  • 클래스 상속 기반 프록시를 구현하는 CGLIB 프록시 등장
  • 상속을 기반으로 구현되어 final 클래스나 메서드의 프록시 생성이 불가능한 제약이 존재
profile
정신차려 이 각박한 세상속에서!!!

0개의 댓글