Back-end Skill/Springboot

면접 스터디 2주차 자바와 스프링 프레임워크

Sophie소피 2022. 2. 15. 17:49

자바란 무엇일까?

객체지향프로그래밍(OOP: Object Oriented Programming) 언어이다.

 

자바의 장점은? 

    - 그로인해 유지보수가 쉽고 직관적인 코드 분석이 가능하다.

   - 분산 네트워크 기술을 지원한다.

   -자바에는 TCP/IP 라이브러리가 기본적으로 포함되어있고, HTTP 프로토콜을 지원한다.

   -멀티쓰레딩을 지원한다.

       - 동일한 쓰레드를 동시에 수행할 수 있다.

       - 사용자 인터페이스 쓰레드와 장시간 계산이 필요한 쓰레드가 동시에 필요할 때 효과적이다.

   - 이식성이 높다.

  - 자바가상머신(JVM)에서 작동하기 때문에 운영체제 (ex. Window, Linux)의 종류에 상관없이 작동한다.

   - 자동 메모리 관리(Garbage Collecter)

        사용하지 않는 객체는 자동으로 메모리에서 체크하고 반환해준다.

  - 동적 로딩 지원

         프로그램 실행시 모든 클래스가 로딩되지 않고, 필요한 시점에 클래스를 로딩하여 사용할 수 있다.

         그러므로 애플리케이션의 변경사항도 비교적 적은 작업만으로 처리할 수 있다.

 

 

자바에서 Servlet과 JSP의 역할은?
JSP는 JSP기술의 장점을 최대한 활용 할 수 있는 웹에플리케이션 구조에서
사용자에게 결과를 보여주는 프리젠테이션 층을 담당하고 Servlet은 Servlet기술의 장점을
최대한 활용 할 수 있는 사용자의 요청을 받아 분석하고
비지니스 층과 통신하여 처리하고 처리한 결과를 다시 사용자에게 응답하는 컨트롤러 층을 담당한다.


JSP와 Servlet의 차이점은? 
Servlet
   - 자바코드로 구현하고 컴파일하고 배포해야 한다.
   - HTML태그로 문자열("")스크림으로 처리해야 한다.
   - 코드가 수정되면 다시 컴파일하고 배포해야 한다.

JSP
  - 키워드가 태그화 되어 서블릿에 비해 배우기 쉽다.
  -  자바코드를 <%%>태그 안에 처리해주어야 한다.
  - HTML처럼 태그를 사용하여 자바코드도 사용이 가능하다.

 

스프링 VS 스프링 부트
- 스프링부트는 Embed Tomcat을 사용하기 때문에, (Spring Boot 내부에 Tomcat이 포함되어있음
      => 따로 내장서버를 설치할 필요가 없음
- starter을 통한 dependency 자동화
       => starter가 대부분의 dependency를 관리해주기 때문에 이러한 걱정을 많이 덜게 되었다.
- XML설정을 하지 않아도 된다.
- jar file을 이용해 자바 옵션만으로 손쉽게 배포가 가능하다.
- Spring Actuaor를 이용한 애플리케이션의 모니터링과 관리를 제공한다.

Spring Java 기반 구성이란 무엇일까?
  - 유형이 안전한 방식으로 Spring 기반 애플리케이션을 구성하는 방법 중 하나이다. XML 기반 구성의 대안이다.
  - IoC와 AOP를 지원하는 경량의 컨테이너 프레임워크
  - 개발자가 직접 Servlet 클래스를 작성하지 않고, POJO 만으로
  - 웹 애플리케이션을 구축할 수 있다는 것이 스프링의 특징이다.

 

스프링 프레임 워크는 무엇일까?
- 오픈소스 애플리케이션 프레임워크
- 동적인 웹 사이트 개발하기 위한 여러 가지 서비스를 제공
- 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술


Spring 특징은 무엇일까?
DI (Dependency Injection) 의존성 주입
- 설정 파일이나 어노테이션을 통해 객체간의 의존 관계를 설정하여 개발자가 직접 의존하는 객체를 생성할 필요없다.

Spring AOP(Aspect Oriented Programming) 관점 지향 프로그래밍
- 트랜잭션, 로깅, 보안 등 여러 모듈, 여러 계층에서 공통으로 필요로 하는 기능의 경우 해당 기능을 분리해 관리한다.

POJO(Plain Old Java Object)
- 일반적인 J2EE 프레임워크에 비해 특정 라이브러리를 사용할 필요가 없어 개발이 쉽다.
- 기존 라이브러리의 지원이 용이하다.

IOC(Inversion of Control) 제어 반전
- 컨트롤의 제어권이 개발자가 아니라 프레임워크에 있다!
- 객체의 생성부터 모든 생명주기의 관리까지 프레임워크가 주도하고 있다.
- 객체를 생성하고, 직접 호출하는 프로그램이 아니라, 만들어둔 자원을 호출해서 사용한다.


컨테이너란?
  - 특정 객체의 생성과 관리를 담당하며 객체 운용에 필요한 다양한 기능을 제공한다.
  - 필요한 객체를 생성하고 객체 간의 의존관계를 관리한다는 점에서 스프링도 일종의 컨테이너라고 할 수 있다.

스프링 컨테이너의 종류는?
스프링에서는 BeanFactory와

이를 상속한 ApplicationContext 두 가지 컨테이너를 제공한다.


Spring IOC Container의 Bean 등록 방법은 ?
xml 설정파일을 이용해서 Bean 등록, @Annotation을 통해 Bean 등록하는 방법 등이 존재한다. 하지만 Anotation 기반의 Bean 등록 시 Component Scan을 필요로 하기에, Component Scan을 직접 등록해줄 수도 있지만, Spring Boot는 Component Scan 까지 자동으로 구성해준다

 

component-scan 이란?

빈으로 등록 될 준비를 마친 클래스들을 스캔하여, 빈으로 등록해주는 것이다.
빈으로 등록 될 준비를 하는 것이 무엇일까?
우리가 @Controller, @Service, @Component, @Repository 어노테이션을 붙인
클래스들이 빈으로 등록 될 준비를 한 것이다.



Spring AOP와 OOP의 차이점은?
- AOP?
    - Aspect Oriented Programming의 약자로, 관점 지향 프로그래밍이다.
      애플리케이션의 핵심적인 기능과 부가적인 기능을 분리해 Aspect라는 모듈로 만들어 설계하고 개발하는 방법
- OOP?
    - Object Oriented Programming의 약자로 객체 지향 프로그래밍이다.
      OOP와 AOP는 서로 상반되는 개념은 아니다.
      오히려 OOP를 더욱 OOP답사용할 수 있도록 하는 것이 AOP이다


다중 상속이 불가능한 JAVA 그래서 나타난 AOP
공통적 기능을 모든 모듈에 적용하기 위한 방법으로 상속을 이용하는데
그리고 기능 구현 부분에서 핵심 코드와 공통 기능 코드가 섞여있어서 보기에도 불편하고, 효율성이 떨어진다.


스프링의 생명주기는 무엇을 의미할까?
스프링 빈은 라이프 사이클을 가진다 . 객체 생성 - 의존 관계 주입



Spring MVC란 무엇인가?
- 데이터와 화면간의 의존관계를 벗어날 수 있게하는 개발 기법이다
Model
   - 논리적 데이터 기반 구조를 표현,
   - 사용자 인터페이스에 관한 어떠한 정보도 가지고 있지 않음 (data 처리와 접근을 담당)
View
   - 사용자 인터페이스 내의 구성요소들을 표현 (사용자에게 보여지는 화면)
Controller
   - Model과 View를 연결하고 있는 클래스를 대표 (Model과 View 내의 클래스들 간 정보교환)

Spring MVC 구조의 처리과정은?
DispatcherServlet: 어플리케이션으로 들어오는 모든 Request를 받는 관문이다.
Request를 실제로 처리할 Controller에게 전달하고 그 결과값을 받아서 View에게 전달하여

적절한 응답을 생성할 수 있도록 흐름을 제어한다.



Spring MVC 구성요소는?
Dispatcherservlet

  • 클라이언트의 요청을 전달 받아 컨트롤러에게 요청을 전달하고 컨트롤러가 리턴할 결과 값을 view에게 전달하여 알맞은 응답을 하도록 하는 것
  • 클라이언트의 요청을 중앙에서 처리하는 스프링 MVC의 핵심 구성 요소
  • web.xml에 한개 이상의 DispatcherServlet을 설정한다.

HandlerMapping

  • 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지를 결정

Controller

  • 클라이언트의 요청을 처리한 뒤 그 결과를 DispatcherServlet에게 알려준다.

ModelAndView

  • 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담아 놓는 세트

ViewResolver

  • 컨트롤러의 처리 결과를 생성할 뷰를 결정

View

  • 컨트롤러에서 리턴 받은 처리 결과를 화면에 출력한다.



Spring의 동작 방식



스프링 MVC의 구조 및 흐름

  1. 사용자의 모든 요청은 스프링 MVC의 Front Controller에게 전달
  2. 전달 된 요청은 적절한 컨트롤러를 찾아서 호출(개발자가 컨트롤러 작업 진행)
  3. 컨트롤러는 적절한 서비스 객체를 찾아서 호출
  4. 서비스는 데이터 베이스 작업을 담당하는 DAO(Data Access Object)를 이용해서 원하는 데이터를 요청
  5. DAO객체는 Mybatis를 이용하는 Mapper를 통해서 원하는 작업을 수행
  6. 서비스가 처리한 데이터를 컨트롤러에게 전달
  7. 컨트롤러는 스프링 MVC쪽으로 데이터를 전달

DAO?
 - Data Access Object의 약자로 간단히 Database의 data에 접근을 위한 객체이다.
 - Database에 접근을 하기위한 로직과 비즈니스 로직을 분리하기 위해서 사용한다.
 - DAO(Data Access Object)는 DB를 사용해 데이터를 조화하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.

DTO?
- DTO(Data Transfer Object)는 VO(Value Object)로 바꿔 말할 수 있는데 계층간 데이터 교환을 위한 자바빈즈를 말한다.
- 여기서 말하는 계층간의 Controller, View, Business Layer, Persistent Layer를 말하며

- 각 계층간 데이터 교환을 위한 객체를 DTO 또는 VO라고부른다.
-  VO는 DTO와 동일한 개념이지만 read only 속성을 가진다.



스프링 MVC 주요 쓰이는 애노테이션 종류는?

  • @Controller : 스프링 MVC 컨트롤러 객체임을 명시
  • @Service : 서비스 객체임을 명시
  • @RequestMapping : 특정 URI에 매칭되는 클래스 메소드 명시
  • @RequestParam : request에서 특정한 파라미터 값을 찾아낼 때 사용
  • @ResponseBody : 리턴 타입이 HTTP의 응답 메시지로 전송(ajax으로 json 데이터 전송 시 사용)
  • @Repository : DAO 객체









스프링 어노테이션 개념 정리 + 스프링 생명 주기 추가 정리하기 











출처: https://ktko.tistory.com/315 [KTKO 개발 블로그와 여행 일기]
https://cornswrold.tistory.com/483

 

[Spring] 스프링이란? Spring MVC 동작방식

Spring ⇒ IoC와 AOP를 지원하는 경량의 컨테이너 프레임워크 개발자가 직접 Servlet 클래스를 작성하지 않고, POJO 만으로 웹 애플리케이션을 구축할 수 있다는 것이 스프링의 특징이다. 컨테이너란?

cornswrold.tistory.com