회고록(면접 준비 포함)/기술 면접

Java & Spring 이론 정리

세기루민 2022. 8. 28. 22:17
728x90

현재는 준비를 하지 않으며 예전에 준비했을 때 정리했던 내용을 공유하려고 합니다. 


우선 모든 내용은 다른 블로그들을 참조하여 기술 이론을 정리한 점 참고바랍니다. 

또한 내용 중 틀린 내용이 존재할 수 있다는 점도 양해부탁드립니다.

(추가)실제 기술 면접 봤을 때 질문했던 내용도 아래 정리하도록 하겠습니다. -> 빨간색 표시


1. Spring

  • 스프링 : 자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 개발 프레임 워크

2. 프레임워크

  • 특정 프로그램을 개발하기 위한 여러 요소들과 메뉴얼인 룰을 제공하는 프로그램
  • 뼈대가 되는 클래스, 인터페이스, 메서드 등을 미리 구현
  • 중요한 이유는 프로젝트에 투입되는 개발자가 늘어남에 따라 전체 시스템의 통합성, 일관성이 부족하고 개발 스킬의 차이가 큰 경우 이해하기 힘든 경우 발생하면서 코드의 품질이 떨어질 수 있다.
  • 이는 장단점이 될 수 있는데 미리 구현해둔 코드를 사용하기 때문에 개발속도는 빠르더라도 익숙해지는데 시간이 걸릴 수 있으며 의존성이 커지면서 언어를 배우는 것이 아니라 프레임워크를 배우게 된다.

2.1 스프링 프레임워크

  • 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크를 말한다.
  • 하드웨어적인 구성이 필요 없는 경량 프레임워크를 말한다.
  • 자바 개발을 위한 프레임워크로 종속 개체를 생성해주고 조립해주는 기구로 개발자는 자신의 코드에 필요한 객체는 스프링을 통해서 주입받는 구조로 작성된다.

2.2. 특징(요약)

  • 크기와 부하의 측면에서 경량
  • 제어 역행이라는 기술을 통해 애플리케이션의 느슨한 결합을 도모한다.
  • 관점지향 프로그래밍(AOP)을 위한 풍부한 지원
  • 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너라고 함
  • 간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정할 수 있음

2.3 특징(상세)

  • 경량 컨테이너로서 자바 객체를 직접 관리
    • 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.
  • 스프링은 POJO(일반적인 getter, setter 방식) 방식의 프레임워크
    • 일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다.
  • 스프링은 제어의 역행(IoC)을 지원한다.
    • 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.
  • 스프링은 의존성 주입(DI)를 지원한다.
    • 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
  • 스프링은 관점 지향 프로그래밍(AOP)을 지원한다.
    • 트랜잭션, 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리가 가능하다.
  • 스프링은 영속성과 관련된 다양한 서비스를 지원한다.
    • iBatis, Hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결 할 수 있는 인터페이스를 제공한다.
  • 스프링은 확장성이 높다.
    • 스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.

3. MVC 구조

  • 모델-뷰-컨트롤러 약자로 디자인 패턴의 하나이다.
    • 비즈니스 처리 로직과 사용자 인터페이스를 구분시켜 서로 영향없이 개발이 가능
    • 모델 : 어플리케이션이 무엇을 할 지 정의(데이터)
    • 뷰 : 사용자에게 보여지는 영역(JSP 등)
    • 컨트롤러 : 뷰와 모델 사이를 연결하는 역할을 한다.
  • 컨테이너 : 컨테이너는 인스턴스의 생명주기를 관리, 생성된 인스턴스들에게 추가적인 기능 제공
  • dispatcher servlet : 어플리케이션으로 들어오는 모든 request를 받는 관문
    • request를 실제로 처리할 controller에게 전달하고 그 결과값을 받아서 view에게 전달하여 적절한 응답을 생성할 수 있도록 흐름을 제어함

4.IoC 컨테이너

  • 객체의 생성과 관계설정, 사용, 제거 등의 전체 라이프 사이클을 관리해주는 작업을 하는 컨테이너
  • BeanFactory를 상속하는 ApplicationContext를 사용하는 추세
  • ApplicationContext는 BeanFactory 뿐만 아닌 메세지 다국화, 이벤트 발행 기능, 리소스 로딩 기능 등 여러 기능을 명세하고 있습니다.

5. Spring Ioc Container의 Bean 등록 방법

  • @SpringBootApplication에서 다양한 기능들을 동시에 실행해 줌
    • @configuration : 스프링설정으로 사용하겠다는 의미를 가짐
    • @EnableAutoConfiguration : 지정해둔 설정값들을 자동으로 설정하는 기능을 키는 것을 의미
    • @ComponenetScan, @Component 또는 @Configuration 붙은 클레스들을 빈으로 등록

6. MVC 실행 순서

  • request → dispatcherServlet(web.xml) → controller → 로직처리 → view 전달 → response

7.DI(의존성 주입)

  • 특정 객체에 필요한 객체를 외부에서 결정해서 연결하는 것을 의미한다.
  • 설정파일로 객체간의 의존관계 설명 → 직접 객체를 생성하지 않고 스프링에서 생성한 뒤에 사용할 객체를 주입시켜 사용하게 하는 것을 말함

8. Model 1 vs Model 2

  • Model 1 : 컨트롤러와 뷰를 같이 구하는 방식
  • Model 2 : 컨트롤러와 뷰를 분리해서 구현하는 방식
    • 웹 브라우저의 요청을 하나의 서블릿이 받게 되며 서블릿은 웹 브라우저의 요청을 알맞게 처리한 뒤 그 결과를 jsp로 포워딩함
    • 디자이너와 개발자의 분업이 가능해서 유지보수에 유리하지만 설계에서 어려움을 느낄 수 있음
  • Spring MVC Model 2 : DI, AOP를 쉽게 사용 가능하며 DispatcherServlet이 mvc에서 컨트롤러 부분을 처리

9. Bean, Vo, Dto, Dao, Dl

  • Bean : 스프링 컨테이너에서 생성된 객체로 설정파일을 통한 생명주기, 종속성 등 메타데이터를 가짐
  • Vo : Value Object로 값을 가지고 있는 객체
  • DTO : Data Transfer Object로 Vo와 같이 값을 가지고 있는 객체이지만 데이터 핸들링에 사용되는 객체이다. → DTO를 통해 데이터 전달 가능
  • DAO : Data Access Object의 줄인말로 실제 DB에 접속하는 객체이다.
  • AOP : 관점지향 프로그래밍으로 비즈니스 로직과 공통 모듈로 분리, 핵심 로직 사이사이 공통 모듈을 잘 끼워 넣는 것을 말함.
    • 이때 공통 모듈을 코드 밖에서 설정된다는 것이 핵심.
    • 인증, 로깅, 트랜잭션 처리에 용이하다.
  • Dl : 저장소에 저장되어 있는 Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 Look up
  • DI : 각 클래스간의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결된다.
    • 의존관계가 필요하다는 정보만을 작성하면 되고 동적으로 의존관계가 형성됨
      • 주입방법
        • 생성자 주입, 필드 주입, setter 주입(수정자)

10. Spring과 Spring Boot의 차이

  • Spring은 web.xml, servlet.xml 등 다양한 설정 및 버전 설정을 개발자가 직접 해야 함
  • Spring Boot는 의존성 및 설정을 자동으로 해줌
    • 또한 내장형 톰캣을 가지고 있어 별도의 톰캣 설정이 필요없어서 환경설정 및 인프라적인 요소에서 자유로움
  • 즉 Spring은 컴포넌트, 빈, 뷰리졸버 등 다양한 설정들이 필요하지만 Spring boot는 초기 개발 환경 세팅에 걸리는 리소스를 많이 절약할 수 있다는 장점을 가진다.

11. Annotation

  • 메타데이터의 일종을 말한다.
    • Controller : 특정 클래스를 Controller로 등록하는 어노테이션
    • RequestMapping : 컨트롤러로 등록된 클래스 내에 특정 메서드를 요청되는 URL과 매칭시키는 어노테이션
    • Autowired : Spring에서 자동으로 의존성 주입을 하기 위한 어노테이션
    • ResponseBody : 비동기 처리, Json 형태 데이터 주고 받은 경우
    • RequestParam : 단일 파라미터를 전달 받았을 때 사용한다.

12. Reqeust vs Response

  • Request : 클라이언트에서 넘어오는 데이터를 받기 위한 객체
  • Response : 서버에서 클라이언트로 데이터를 전달하기 위한 객체

13. Maven

  • 프로젝트 관리 도구
  • Settings.xml 또는 Pom.xml 파일에 필요한 라이브러리만 적으면 Maven 다운로드 하고 설치 후 경로까지 지정해 줌
  • Maven은 프로젝트 관리 도구로 프로젝트의 모든 단계에 사용하는 개발도구
  • 프로젝트에 필요한 라이브러리를 자동으로 관리해주는 빌드 도구

14. 쿠키와 세션

  • 통신 시 연속적으로 이어질 수 있도록 함
    • 비연결성 : 클라이언트가 서버의 요청했을 때 그 요청에 맞는 응답을 보낸 후 연결을 끊는 처리 방식
    • 비상태성 : 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식. 첫번째 통신에서 클라이언트와 데이터를 주고 받았다고 해도, 두번째 통신에서는 데이터 유지하지 않음
  • 쿠키 : 서버가 사용자의 웹 브라우저에 저장하는 데이터
    • Key, Value로 구성되며 String 형태로 이루어짐
    • 브라우저마다 저장되는 쿠키는 다르고 서버에서는 브라우저가 다르면 다른 사용자로 인식
  • 세션 : 일정 시간동안 같은 사용자로부터 들어오는 일련의 요구사항을 하나의 상태로 보고 그 상태를 유지시키는 기술
    • 웹 브라우저 당 1개씩 생성되며 웹 컨테이너에 저장되며 브라우저 종료시 소멸됨
    • 저장 데이터에 제한이 없고 각 클라이언트에 고유 Session ID를 보유

15. Mybatis, ORM

  • Mybatis : JDBC 방식과 달리 Xml 파일에 쿼리를 작성함
    • 이는 유지보수와 가독성이 좋음
    • 제어문 및 반복문 처리가 가능하여 동적으로 변경이 가능하다.
  • ORM : 객체와 관계형 데이터베이스의 데이터를 자동으로 연결해주는 개념
    • JPA는 자바 ORM 기술에 대한 API 표준 명세를 의미한다.

16. 생명주기

  • 스프링에서 객체를 관리하는 건 필요한 곳에 주입하는 것 뿐만 아니라 객체의 생성, 소멸 등 생명 주기를 관리한다는 것을 말함
  • 스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸 전 콜백 → 스프링 종료의 단계를 가짐
  • InitializingBean : 초기화 - afterPropertiesSet 콜백 메서드
  • DisposableBean : 소멸 - destory 콜백 메서드

17. Jpa

  • ORM 기술 표준인 객체지향 기술 중 하나
    • 반복적인 CRUD SQL 작성과 객체를 SQL에 맵핑하는 코드를 작성하는데 시간적으로 비효율적
    • 또한 DAO의 CRUD 코드와 SQL 대부분을 변경해야 함으로 SQL에 의존적인 형태
  • JPA는 JDBC API의 역할을 대신 해줌으로 시간 단축에 효율적이다.
  • 필드 삭제 및 추가가 되어도 SQL을 직접 다룰때보다 현저히 줄어듬
  • 상속, 연관관계, 객체그래프 탐색등의 패러다임의 불일치 문제를 해결
  • JPA는 애플리케이션과 데이터베이스 사이에 다양한 성능 최적화 기능을 제공
  • 에플리케이션과 DB 사이에 추상화된 데이터접근 계층을 제공하여 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 도와줌

18. Annotation

  • Entity : 클래스를 테이블과 매핑하기 위해 사용 (엔티티 클레스)
  • Table : 엔티티클래스에 매핑할 테이블 정보를 알려줌
  • ID : 엔티티클래스의 필드를 테이블의 기본키에 매핑
  • Column : 필드를 컬럼에 매핑한다.
  • Transient : DB에 필요없는 속성인 경우 사용하지 않겠다고 정의
  • EmbeddedId : 복합키로서 정의된 값을 정의하고자 할 때 사용
  • Generated Value : Auto increment 컬럼과 동일
  • Sequence Generator : Sequence를 사용하여 호출할 시 기존 값의 +1이 된 값을 반환해주기 위해 사용

19. 웹 서비스

  • 웹 서비스는 네트워크 상에서 서로 다른 종류의 컴퓨터들 간에 상호작용을 하기 위한 소프트웨어 시스템

20. RestFul API 요약 

  •  두 컴퓨터 시스템간 정보를 안전하게 교환하기 위해 사용되는 인터페이스
  •  클라이언트에 포함된 메서드로는 GET, POST, PUT, DELETE 가 존재

참조 : https://life-with-coding.tistory.com/417?category=951786

728x90