본문 바로가기
면접 대비

스프링 면접질문 대비

by Hyeongjun_Ham 2022. 8. 16.
  • 스프링이란
    • 스프링은 자바 엔터프라이즈개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크다.
    • 특징으로는 AOP, IoC/DI, POJO 등이 있다.
  • 스프링 AOP란
    • 관점 지향 프로그래밍의 약자로, 기존의 객체지향 프로그래밍에서 기능별로 클래스를 분리했음에도 불구하고,
      공통적으로 반복되는 중복코드가 발생하는데 이를 해결할 수 있도록 실행시 비즈니스 로직의 앞과 뒤에서 원하는 지점에 해당 공통 관심사를 수행할 수 있게 한다.
  • 필터 / 인터셉터 / AOP 차이점
    • Filter, Interceptor, AOP 세 가지 기능은 모두 무슨 행동을 하기전에 먼저 실행하거나, 실행한 후에 추가적인 행동을 할 때 사용되는 기능들이다.
    • Filter : 서블릿 필터는 DispatcherServlet 이전에 실행이 되는데 필터가 동작하도록 지정된 자원의 앞단에서 요청내용을 변경하거나,  여러가지 체크를 수행할 수 있다.
      또한 자원의 처리가 끝난 후 응답내용에 대해서도 변경하는 처리를 할 수가 있다.
    • Interceptor :  요청에 대한 작업 전/후로 가로챈다고 보면 된다. 필터는 스프링 컨텍스트 외부에 존재하여 스프링과 무관한 자원에 대해 동작한다. 하지만 인터셉터는 스프링의 DistpatcherServlet이 컨트롤러를 호출하기 전, 후로 끼어들기 때문에 스프링 컨텍스트(Context, 영역) 내부에서 Controller(Handler)에 관한 요청과 응답에 대해 처리한다. 스프링의 모든 빈 객체에 접근할 수 있다.
    • AOP : Interceptor나 Filter와는 달리 메소드 전후의 지점에 자유롭게 설정이 가능하다.Interceptor와 Filter는 주소로 대상을 구분해서 걸러내야하는 반면, AOP는 주소, 파라미터, 애노테이션 등 다양한 방법으로 대상을 지정할 수 있다.
  • 스프링 IoC/DI란
    • IoC : IoC는 제어의 역전으로 인스턴스의 생성부터 소멸까지 개발자가 아닌 컨테이너가 대신 관리해주는 것을 말한다
    • DI  : DI는 의존성 주입으로, 객체들 간의 의존성을 줄이기 위해 사용되는 스프링의 IoC 컨테이너의 구체적 구현 방식을 말한다.
  • DI의 방법 3가지
    • 필드 주입 : 의존성 주입이 쉽지만 의존관계를 파악하기 어려울 수 있다.
    • 세터 주입 : 세터 주입을 하면 해당 메소드가 열리게 되어 변경이 가능해서 좋지않다.
    • 생성자 주입 : 권장하는 방법으로 순환 참조 방지가 가능,final로 선언하여 불변성이 있다.
  • 스프링 POJO란(Plain Old Java Object)
    •  객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다. 
  • JPA란
    • JPA는 자바진영에서 ORM기술 표준으로 사용되는 인터페이스 모음이다.
    • ORM이란 객체와 관계형 데이터베이스를 연결한다는 의미다. 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 해결해줍니다. 
      • 패러다임 불일치
        • 상속 : 객체는 상속의 기능이 있지만 테이블은 없다. 테이블에 상속의 기능을 비슷하게 정의할 수 있지만 이렇게 하는 과정도 개발자의 소모되는 비용이다.
        • 연관관계 : 객체는 참조를 사용해 다른 객체와 연관관계를 가지고 참조에 접근해 연관된 객체를 조회합니다. 반면 테이블은 외래키를 가지고 조인을 사용해서 연관된 테이블을 조회합니다.
        • 객체 그래프탐색 : 객체는 마음껏 그래프를 탐색할 수 있어야합니다. 그런데 SQL을 직접다루면 처음 실행하는 SQL문에 따라 객체 그래프의 탐색이 한정됩니다.
        • 비교 : 테이블은 기본키의 값으로 각 로우를 구분합니다. 객체는 동일성 비교와 동등성비교라는 두가지 방법이 있습니다.
          • 동일성비교는 ==비교로 인스턴스 주소값을 비교하고 동등성비교는 .equals()비교로 객체 내부의 값을 비교합니다. JPA는 같은 트랜잭션일 때 같은 객체가 조회되는 것을 보장합니다.
  • JPA의 장점
    • JPA를 사용하면 Java 컬렉션의 객체를 조작하듯이 소통할 수 있다.
      그러면 ORM 프레임워크가 적절한 SQL문을 자동으로 생성해서 데이터베이스와 통신한다.
    • SQL을 직접 다루게 되면 요구사항 변경이 발생할 때, SQL과 맵퍼, 컨테이너 객체 모두에 수정이 가해져야 했다.
      그러나 JPA를 사용하면 수정해야할 코드가 줄어들고, 패러다임의 불일치 문제를 해결해주므로 자바의 객체지향적인 장점을 활용할 수 있다.
  • REST API란?
    • 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다.
      HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원(URI)에 대한 CRUD를 적용하는 것을 의미한다.
    • 특징
      • Server-Client(서버-클라이언트 구조)
      • Stateless(무상태)
      • Cacheable(캐시 처리 가능)
      • Layered System(계층화)
      • Uniform Interface(인터페이스 일관성)
  • HTTP/HTTPS 차이
    • HTTP(Hyper Text Transfer Protocol)란 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다. 
    • HTTP는 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜이였기 때문에, HTTP로 비밀번호나 주민등록번호 등을 주고 받으면 제3자가 정보를 조회할 수 있었다. 그리고 이러한 문제를 해결하기 위해 HTTPS가 등장하게 되었다.
    • HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜이다. 
      HTTPS는 HTTP와 다르게 443번 포트를 사용하며, 네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록 암호화를 지원하고 있다.
  • 쿠키 세션 캐시란?
    • 쿠키 : 사용자의 브라우저에 저장되고, 통신할 때 HTTP 헤더에 포함되는 텍스트 데이터 파일. 이름, 값 만료기간(지정 가능), 경로 정보가 있고 키와 값으로 구성되어 있다. 해당 사용자의 컴퓨터를 사용한다면 누구나 쿠키에 입력된 값을 쉽게 확인 가능 하여 보안성이 낮다.
    • 세션 : 사용자 로컬이 아닌 서버에 직접 저장되므로, 세션 내의 데이터를 탈취하는 것은 어려워 보안성이 비교적 높다. 브라우저를 종료할 때까지 유지 된다.
    • 캐시 : 리소스 파일들의 임시 저장소. 같은 웹 페이지에 접속할 때 사용자의 PC에서 로드하므로 서버를 거치지 않아도 된다. 이전에 사용되었던 데이터는 다시 사용될 가능성이 높다. 그래서 다시 사용될 확률이 있는 데이터들을 빠르게 접근 가능한 저장소에 저장한다.
  • 디스패쳐 서블릿 작동원리
    1. 클라이언트 요청 -> 디스패쳐 서블릿이 받음
    2. 요청 정보를 통해 요청을 위임할 컨트롤러를 찾음
    3. 요청을 컨트롤러로 위임할 핸들러 어댑터를 찾아서 전달
    4. 핸들어 어댑터가 컨트롤러로 요청을 위임
    5. 비즈니스 로직 처리
    6. 컨트롤러가 반환값을 반환
    7. 핸들러 어댑터가 반환값처리
    8. 서버의 응답을 클라이언트로 반환
  • CICD란?
    • CI는 지속적통합으로 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합히는 것을 의미한다.
      이러한 CI의 핵심 목표는, 버그를 신속하게 찾아 해결하고, 소프트웨어의 품질을 개선하고, 새로운 업데이트의 검증 및 릴리즈의 시간을 단축시키는 것에 있다.

      CD는 지속적인 서비스제공 or 지속적인 배포로 개발자의 변경 사항이 레포지토리를 넘어, 고객의 프로덕션(Production) 환경까지 릴리즈 되는 것이다.
  • TDD란 무엇인가 왜 해야하나 / 테스트코드는 왜 작성해야하는가
    • 테스트 주도 개발이다.
    • 장점
      • 보다 튼튼한 객체 지향적인 코드 생산이 가능하다.
      • 장기적으로 개발 비용을 절감할 수 있다.
      • 기존 코드에 추가적으로 구현하기가 용이하다.
  • JUnit이란?
    • JUnit이란 java의 단위테스트를 위한 프레임워크를 말한다.
      객체의 인스턴스를 생성하여 로직 수행후 결과값이 기대값과 일치하는지 비교하거나 파일이나 네트워크 상의 연결이나 데이터베이스 연동 테스트 등을 수행할 수 있다.
  • 로그 수집을 하는 이유
    • 에러가 발생한 경우 이슈해결하는 시간을 단축시킬 수 있다.
    • 로그를 통해 데이터를 축적하여 판매 및 마케팅의 효과를 증진시킬 수 있다.
  • Querydsl 이 무엇인가
    • 쿼리를 자바코드로 작성할 수 있게 도와주는 기술이다. Spring Data JPA로 해결하지 못하는 복잡한 쿼리/동적 쿼리를 해결할 수 있다. 자바코드로 작성하기 때문에 문법오류를 컴파일 시점에 잡아낼 수 있다.

 

'면접 대비' 카테고리의 다른 글

스프링 면접질문 대비(1.3)  (1) 2022.09.19
스프링 면접질문 대비(1.2)  (0) 2022.09.15
스프링 면접질문 대비(1.1)  (0) 2022.09.14
기본 CS 질문  (0) 2022.08.25
스프링이란?  (0) 2022.08.11