본문 바로가기

일기

2023-03-02

면접 스터디를 시작하고 매주 받는 과제들로부터 조사한 내용들의 정리

 

 

 

 

@ComponentSacn

이는 @Component 어노테이션이 붙어있는 Class 들을 자동으로 Scan 하여 Bean 으로 등록해주는 어노테이션 입니다. @Component 어노테이션만 사용하는 경우도 있지만 일반적으로 많이 사용하는 @Service, @Repository, @Controller 등 에도 기본적으로 포함되어 있기에 해당 어노테이션을 사용해도 Bean 으로 등록해줍니다.

보통 직접 사용할 일은 없지만, 만약 사용한다면 아래와 같은 형태로 사용이 가능합니다.

 

// CarService 라는 클래스를 Bean 으로 등록합니다.
@Service
public class CarService {
	...
}
// @ComponentScan을 사용하면 스프링 컨테이너가 "com.carproject" 패키지를 스캔하는데
// 해당 경로를 포함하는 하위 패키지를 모두 스캔합니다. 이후에,
// @Component 어노테이션이 적용된 모든 클래스를 빈으로 등록합니다.
@Configuration
@ComponentScan(basePackages = "com.carproject")
public class AppConfig {
	...
}

 

또한, 기존에도 항상 사용하고 있었는데 이는 스프링 부트 애플리케이션을 실행하는데 사용되는 @SpringBootApplication 어노테이션 안에 @ComponentScan 이 기본적으로 들어가 있습니다.

 

이렇듯 스프링 부트를 사용하면 항상 기본적으로 사용중이였습니다.

 

@SpringBootApplication

이는 스프링 부트 프레임워크에서 제공하는 어노테이션으로, 스프링 어플리케이션의 기본적인 설정을 자동으로 수행해주는 역할을 합니다.
위의 코드 기준으로 PracticeSpringApplication 클래스를 실행하는데 필요한 구성 요소를 자동으로 구성합니다.
이후 SpringApplication.run() 메서드를 이용해 어플리케이션을 시작합니다.
SpringApplication.run() 메서드는 어플리케이션 컨텍스트를 생성하고, 컴포넌트 스캔을 수행, 자동 구성을 수행합니다.

 

 

MVC 패턴이란 무엇인지? MVC1과 MVC2에 차이는 뭔지?

소프트웨어 디자인 패턴 중의 하나입니다. 어플리케이션을 세 가지 역할로 구분하여 개발하는 방법론입니다.

  • Model
    어플리케이션의 데이터와 비즈니스 로직을 담당합니다.
  • View
    사용자가 보게되는 화면을 말합니다. 이는 Model 로 부터 정보를 가져와 표시합니다.
  • Controller
    데이터와 사용자 인터페이스 요소들을 잇는 다리역할을 합니다.
    즉, Model 과 View 를 통제해서 Model 과 View 가 서로 직접적인 상호 소통을 하지 않도록 합니다.

MVC 1

View 와 Controller 를 모두 JSP 가 담당하는 형태를 가집니다.

이는 JSP 하나로 유저의 요청을 받고 응답을 처리하기에 구현 난이도가 쉽습니다.

 

단순한 프로젝트에는 유리하지만, 프로젝트가 복잡하고 커질수록 불리해집니다.

JSP 하나에서 MVC 가 모두 이루어지다 보니 재사용성도 매우 떨어지고, 읽기도 힘들어집니다.

즉, 유지보수에 있어서 좋지 않습니다.

 

 

MVC 2

이 패턴이 가장 널리 표준으로 사용되는 패턴입니다.

요청을 하나의 컨트롤러(Servlet) 가 먼저 받습니다. 즉, MVC1 과 다르게 Controller, View 가 분리되어 있습니다.

이러한 구조로 인해서 MVC1 패턴의 단점을 보완할 수 있습니다.(역할의 분리)

 

MVC1 보다 구조가 좀 더 복잡해지지만, 필요한 부분에서만 수정이 가능하기 때문에 유지보수에 있어서 훨씬 더 유리합니다.

또, 세부적인 구성은 신경쓰지 않도록 다양한 프레임워크들이 많이 등장하고 발전해왔기에 난이도가 그렇게까지 어렵지는 않습니다. 그중에서도 대표적인 것은 스프링 프레임워크 입니다.

 

 

JSP 란?

Java Server Page, 동적 웹 페이지를 만들기 위한 웹 프로그래밍 언어 중 하나입니다.
HTMLJava 코드를 결합하여 웹 페이지를 생성합니다.

이는 Servlet 기술을 기반으로 하기에 구조 또한 Servlet 과 비슷합니다. JSP 파일은 HTML 태그와 JSP 태그를 포함하고 있으며, JSP 태그를 사용하여 Java 코드를 추가해서 사용이 가능합니다.

JSP 파일은 서버에서 실행될 때, JSP 엔진에 의해 Servlet 으로 변환되며, 이후 컴파일과 실행되어 HTML 문서로 생성됩니다.

JSP 를 활용하면 동적 웹 페이지 생성에 높은 유연성과 편리성을 제공합니다.

이에 대한 예로, JSP 를 사용해 웹 페이지에서 DB 정보를 조회하고 이 결과를 HTML 페이지에 출력하는 것이 가능합니다. 또한, Java 코드와 같이 다양한 라이브러리와 프레임워크를 사용해 다양한 기능을 추가 할 수 있습니다.

 

 

스프링의 MVC2

기본적인 패턴은 비슷하지만 여기서 중점적으로 봐야 할 부분은 DispathcerServlet 입니다. Front Controller 의 역할을 맡는데, 여기서 클라이언트의 모든 요청을 받고 해당 요청을 분석하여 적절한 컨트롤러들에게 각각 작업을 전달합니다.

  • DispatchServlet
    클라이언트의 요청을 전달받아 이에 맞는 컨트롤러가 리턴한 결과물을 VIew 에 전달합니다
  • HandlerMapping
    클라이언트의 요청(URL)을 어떤 컨트롤러가 처리할지 결정합니다
  • Controller
    클라이언트의 요청을 처리한 뒤, 결과를 DispatchServlet 에 전달합니다
  • ModelAndView
    컨트롤러가 처리한 결과 및 뷰 선택에 따른 필요한 정보를 가지고 있습니다
  • ViewResolver
    컨트롤러의 처리 결과를 생성하게 될 뷰를 결정합니다
  • View
    컨트롤러의 처리 결과 화면을 생성해줍니다

 

 

Spring을 사용하는 이유

 

우선 프레임워크란 ?

단어 그대로 뼈대나 근간을 이루는 코드들의 묶음을 의미합니다.
개발을 더 쉽고, 빠르고, 효율적으로 할 수 있도록 제공되는 소프트웨어 개발 도구 입니다.
반복적인 작업을 줄여주며, 코드의 유지보수와 확장성을 높여주는 등의 기능을 제공합니다.

 

프레임워크 사용 이유

  1. 빠른 구현 시간
    아키텍처에 해당하는 뼈대가 되는 코드를 제공해줌으로써 개발자가 비즈니스 로직 구현에만 집중할 수 있습니다.
  2. 관리의 편안함
    같은 프레임워크에 적용된 어플리케이션들은 아키텍처가 같기 때문에 관리하기가 쉽습니다.
    이로 인해 유지보수에 들어가는 인력과 시간을 줄일 수 있습니다.
  3. 개발자 진입 장벽 낮추기
    주니어 개발자도 프레임워크를 이용함으로써 좀 더 쉽고 효율적인 코드의 작성이 가능합니다.
    이는 관리자 입장에서 개발 인력을 더 효율적으로 구성할 수 있습니다.
  4. 검증된 아키텍처의 재사용과 일관성 유지
    제공되는 아키텍처를 이용함으로 인해 아키텍처에 대한 별도의 고민이나 검증의 시간을 줄일 수 있습니다.
    또한, 이후 시간이 지나도 유지보수 과정에서 아키텍처가 왜곡되거나 변형되지 않습니다.

 

 

스프링 프레임워크

스프링 프레임워크는 프로그램의 기본 흐름이나 구조를 정하고, 모두가 스프링 프레임워크라는 구조에 개발자 개개인 코드를 추가하는 방식으로 개발하는 것입니다.

타 프레임워크들과 비교되는 특출난 강점인 DI 와 IOC 그리고 AOP 가 있는데 이 기술들로 인해 사용하기가 훨씬 간단하고 유연한 아키텍처를 가지고 있습니다. 또 트렌드도 잘 반영합니다.

 

위와 같은 특징들로 인해서 프레임워크는 굉장히 대중화 되었고, 이로 인해 스프링을 사용한 무수히 많은 레퍼런스들이 존재합니다.

 

이러한 유저들의 경험들이 쌓이고 공유되며, 스프링과 관련된 라이브러리들도 많이 생겨나고 점점 검증된 프로그램으로써 강점이 강해져 현재는 가장 많이 사용하는 프레임워크가 되었습니다.

 

스프링의 사용이유 요점정리

  • POJO 기반의 구성
    Plain Old Java Object, 관계를 구성할 때 별도의 API 등을 사용하지 않는 POJO 만의 구성만으로 가능합니다.
    코드를 개발할 때, 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않음을 의미합니다. 자바 코드를 이용해서 객체를 구성하는 방식을 그대로 스프링에서도 적용이 가능해서 생산성에 유리하고 코드에 대한 테스트 작업 역시 좀 더 유연해집니다.
  • DI, IOC
    (제어의 역행)메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아닌 IOC Container 에서 즉, 외부에서 이뤄지며 의존성 주입을 통해 스프링이 내부에 있는 객체(Bean) 들 간의 관계를 쉽게 관리가 가능합니다.
    이러한 과정을 어노테이션 만으로 쉽게 처리가 가능해서 코드의 가독성 및 유지보수성을 훨씬 올려줍니다.
  • AOP 코드에서 각각의 관점을 핵심적인 관점과, 부가적인 관점으로 나누어보고 그 관점을 기준으로 각각 분리하는 것을 말합니다.
    보통 횡단 관심사를 분리해서 모듈성을 향상시킨다고 합니다.
    핵심적인 기능이 아닌 중간중간 삽입되어야 할 기능들을 횡단 관심사라고 합니다.

 

 

 

AOP란? 횡단 관심사? 흩어진 관심사?

AOP가 뭐지? AOP는 Aspect Oriented Programming, 즉 관점 지향 프로그래밍이란, 횡단 관심사(흩어진 관심사)(cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다

willseungh0.tistory.com

 

'일기' 카테고리의 다른 글

2023-03-04  (0) 2023.03.04
2023-03-03  (0) 2023.03.03
2023-03-01  (0) 2023.03.02
2023-02-28  (0) 2023.02.28
2023-02-27  (0) 2023.02.27