21.02.13 TIL48 면접스터디 2주차

서태욱·2022년 2월 13일
1

목차

  • Spring Framework
    • 프레임워크란?
    • 프레임워크와 라이브러리의 차이
    • 프레임워크의 장점
    • 스프링 프레임워크란?
    • 스프링 프레임워크의 특징
      • POJO 기반 구성
      • DI(의존성 주입)을 통한 객체간 관계 구성
      • AOP(Aspect - Oriented - Programming) 지원
      • MVC 구조
      • WAS에 종속적이지 않은 개발 환경
      • 트랜잭션 관리 용이
    • 스프링 프레임워크의 장점
  • 주요 개념
    • DI
    • IoC
    • Entity
    • Object
    • Class & Instance
    • Container
    • MVC Pattern
    • Bean 객체
    • DTO & DAO
    • Spring Filter & Interceptor
  • 스프링의 기본적인 동작 원리
    • Spring과 Spring Boot
    • Spring Boot와 Spring Framework
    • Spring Bean LifeCycle
  • 웹 서비스 동작 과정에서의 Spring Framework의 동작과정 및 역할



프레임 워크란?


**핵심답변**

프레임워크란 특정 소프트웨어 운영체제에서 구현되는 애플리케이션 설계를 위해 클래스와 라이브러리로 이루어진 표준적 구조입니다.


🤔 그렇다면 라이브러리란 무엇인가요?

라이브러리는 자주 사용되는 로직을 재사용하기 편하도록 정리한 코드들의 집합입니다.




프레임워크와 라이브러리의 차이?


**핵심 답변**

라이브러리와 프레임워크의 핵심적 차이점은 '애플리케이션의 흐름(Flow)를 만드는 제어권을 누가 가지고 있는가'입니다.
프레임워크는 작업을 호출할 수 있는 제어권을 그 자체로 가지고 있어 틀 안에 있는 기존 항목을 기준으로 필요한 리소스를 호출 합니다.
반면 라이브러리는 개발자가 Flow를 만들어나갈 수 있으며 핵심 로직에서 필요한 라이브러리를 가져다가 사용합니다.
이 차이는 스프링에서 중요한 제어의 역전(Inversion of Control)과 의존성 주입(Dependency Injection)의 개념과도 연결됩니다.




프레임워크의 장점


**핵심 답변**

개발에 필요한 구조를 이미 코드로 구조화했기 때문에, 개발자는 쉽고 빠르게 필요한 부분을 조립하는 형태로 개발할 수 있습니다.
또한 표준적 기준에 의해 여러명의 개발자들이 협업하여 만들어내는 결과물일지라도 일정한 품질을 보장해줄 수 있습니다.




스프링 프레임워크란?


**핵심 답변**

자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급(light-weight) 애플리케이션 프레임워크 입니다.


**🤔 자바 엔터프라이즈에 대해서 설명해보세요**

엔터프라이즈란 여러 사용자가 동시에 대규모 데이터 처리와 트랜잭션을 행하는 매우 큰 규모의 개발 환경을 말합니다.
따라서 자바 엔터프라이즈는 자바를 이용한 엔터프라이즈 환경을 뜻하는 것입니다.


**🤔 오픈소스 경량급의 의미에 대해서도 말해줄 수 있을까요?**

기존 EJB 프레임워크는 다루기 힘든 난해한 설정파일 구조, 까다로운 패키징, 불편한 서버 배치 등이 단점이었습니다.
따라서 스프링 프레임워크는 이러한 문제를 해결하고자 특정 기능 위주의 간단한 jar 파일을 이용해 개발을 할 수 있도록 구성되었습니다.
경량화된 컨테이너는 자바 객체의 생성, 소멸과 같은 라이프 사이클을 직접 관리할 수 있습니다.
더불어 소스가 공개되어 언제든 수정이 가능하고, 이슈를 제기하여 문제를 해결할 수 있습니다.




스프링 프레임워크의 특징


1.POJO 기반의 구성

"Plain Old Java Object" 오래된 방식의 간단한, 지극히 평범한 자바 객체라는 의미입니다. 특정 규약이나 환경에 종속되어서는 안되고 객체지향 설계를 잘 지켜야 한다는 조건이 있습니다

2.Dependency Injection(의존성 주입)을 이용한 객체 간 관계 구성

Dependency는 A 객체가 B 객체를 의존한다고 할 때, 의존의 대상이 되는 B 객체가 변하면 A 객체도 영향을 받는 관계를 말합니다.
그런데, 클래스와 클래스 사이에 직접적인 의존성을 갖게 만들면 결합도(coupling)가 높아집니다. 결합도가 높아지면 한 클래스의 수정 사항 발생 시 의존성이 있는 다른 클래스의 수정도 불가피하므로 코드의 재활용성과 유연함이 떨어집니다. 따라서 이를 해결하기 위해 class간의 직접적인 의존관계가 아닌 interface의 활용(생성자 혹은 setter 사용)을 통해 외부에서 생성된 객체를 주입합니다. 이렇게 하면 결합도는 낮추면서도 런타임시에 의존관계가 결정되기 때문에 유연한 개발이 가능합니다.

3.AOP(Aspect Oriented Programming) 지원

관점 지향 프로그래밍. 어떤 로직이 있을 때 핵심적인 관점과 부가적인 관점을 나누고 그 관점을 기준으로 각각 모듈화해 나가는 개발을 말합니다. 예컨대 소스 코드 중에서 자주 사용하고 반드시 필요하지만, 매번 하기 번거로운 반복적 코드가 있는데 이를 Crosscutting Concerns(횡단 관심사)라고 부릅니다.(ex. log 출력, 예외처리, transaction etc) AOP관점에서는 이를 모듈화 해 핵심적인 비즈니스 로직(종단 관심사)과 분리합니다. 이 경우 개발자는 핵심적인 비즈니스 로직에 더욱 집중하여 개발을 할 수 있게 됩니다.

profile
re:START

0개의 댓글