스프링 부트(Spring Boot)란?

CONA·2023년 3월 11일
0

Backend-Spring

목록 보기
1/2
post-thumbnail

스프링 부트(Spring Boot)란?

Created: March 11, 2023 11:01 AM
Tags: 스프링, 스프링부트, 프레임워크
작성자: 이찬규, 김범준 (CONA 연구개발팀 - Backend)

스프링 프레임워크

[Spring] 스프링 프레임워크(Spring Framework)란?

  • 프레임워크(Framework): 소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합

  • 프레임워크는 전체적인 흐름을 스스로가 쥐고 있으며 사용자는 그안에서 필요한 코드를 짜 넣지만, 라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰는 것이라고 할 수 있습니다.
💡 자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 어플리케이션 프레임워크
  • 어플리케이션 프레임워크 어플리케이션 프레임워크는 소프트웨어 개발에서 특정 문제를 해결하기 위한 구조를 제공합니다. 이를 통해 개발자는 구체적인 구현에 집중할 수 있습니다. 프레임워크는 애플리케이션 개발을 더욱 빠르고 효율적으로 만들어주는 역할을 합니다.
  • 오픈소스 경량급 오픈소스 경량급이란, 소프트웨어 개발을 위한 프레임워크 중 상대적으로 가볍고 간단한 것을 의미합니다. 스프링 부트는 오픈소스 경량급 어플리케이션 프레임워크 중 하나입니다.

스프링 프레임워크의 특징

  • 경량 컨테이너
    • 자바 객체의 생성과 관리를 담당하는 런타임 환경 제공
    • 컨테이너: 작성한 코드의 처리과정을 위임받은 독립적인 존재. 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 컨트롤해줌
  • 제어 반전(IoC, Inversion of Control)
    - 객체의 생성, 생명 주기 관리 등을 개발자가 직접하지 않고 프레임워크가 대신 처리
    - 컨테이너가 대신 처리해주는 방식이 제어가 반전된 방식임
  • 의존성 주입(DI, Dependency Injection)
    • 객체 간 의존성을 최소화하고 유연한 코드 작성 가능

IoC(제어의 역전), DI(의존성 주입) 이란?? - LINER

  • 관점 지향 프로그래밍(AOP, Aspect-Oriented Programming)
    • 로깅, 보안 등과 같은 공통된 기능을 별도의 클래스로 분리하여 코드 재사용성을 높임
  • MVC(Model View Controller) 웹 프레임워크 제공
    • 웹 애플리케이션 개발을 위한 기본적인 기능을 제공하며, 개발자는 이를 기반으로 웹 애플리케이션을 쉽게 개발할 수 있음
    • 모델: 앱이 포함해야할 데이터가 무엇인지 정의함
    • 뷰: 앱의 데이터를 보여주는 방식을 정의
    • 컨트롤러: 앱의 사용자로부터의 입력에 대한 응답으로 모델 또는 뷰를 업데이트하는 로직을 포함함

스프링 부트 vs 스프링 프레임워크

  • Spring Boot
    • 스프링 - REST API 개발에 주로 사용되는 기반 프레임워크
    • REST API : REST API는 Representational State Transfer(표현 상태 전이)의 약어로, 웹 상에서 사용되는 네트워크 아키텍처 중 하나입니다. REST API를 사용하면 클라이언트와 서버 간에 데이터를 주고받을 수 있으며, 이를 통해 다양한 애플리케이션과 서비스를 연결할 수 있습니다. REST API는 HTTP 프로토콜을 사용하며, URL과 HTTP 메서드(GET, POST, PUT, DELETE 등)를 이용하여 데이터를 전송합니다. REST API를 사용하면 간단하고 효율적인 API를 구현할 수 있으며, 다양한 클라이언트와 서버 간의 상호 작용이 가능합니다.
    • Embed Tomcat : 따로 톰켓 설치나 버전 관리 X
    • starter를 통한 dependency 자동화
    • XML 설정 X
    • XML : 문서 인코딩을 위한 일련의 규칙을 정의하는 마크업 언어
    • jar file을 이용해 쉬운 배포
  • Spring Framework
    • 경량 애플리케이션 프레임워크
    • Struts, JSP, Hibernate 등과 같은 프레임워크 지원 → 주로 애플리케이션 빌드에 사용
    • IOC - 제어 역행 : 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것, 서버 배포 후 직접 제어할 수 있는 방법x , 대신 컨테이너가 적절한 시점에서 서블릿 클래스의 객체를 만들고 메소드 호출
    • DI - 의존성 주입 : 객체 사이에 필요한 의존 관계에 대해서 스프링 컨테이너가 자동으로 연결해 주는 것, 스프링 컨테이너는 DI를 이용하여 빈(Bean) 객체를 관리하며, 스프링 컨테이너에 클래스 등록 시 스프링이 클래스의 인스턴스 관리

개발 기초 지식

서버간 통신

  • MSA: 마이크로 서비스 아키텍쳐 MSA는 마이크로서비스 아키텍처(Microservice Architecture)의 줄임말로, 소프트웨어 시스템을 작은 단위로 쪼개어 각각을 독립적으로 개발, 배포, 운영하는 것을 말합니다. 이 방식은 각 서비스마다 필요한 기술 스택을 적용할 수 있어 개발자들의 개발 자유도가 높아지고, 유연한 확장성을 가지게 됩니다. 또한, 각 서비스간의 의존성이 낮아져 시스템 전체의 안정성을 높일 수 있습니다.

스프링부트 동작 방식

  • 톰캣

    • *톰캣(Tomcat)**은 아파치 소프트웨어 재단에서 만든 오픈소스 서블릿 컨테이너입니다. 서블릿 컨테이너는 동적인 웹 페이지를 처리하기 위한 자바 표준 기술인 서블릿과 JSP를 실행할 수 있도록 지원하는 웹 서버의 일종입니다. 톰캣은 빠르고 안정적이며 다양한 운영체제와 플랫폼에서 사용할 수 있습니다.
    • JSP(JavaServer Pages)
      • HTML, XML, JSP 전용 태그 사용
      • 서버 측에서 동적인 웹 페이지를 생성하기 위한 기술
      • HTML 내부에 Java 코드를 삽입하여, 서버에서 코드를 실행한 결과를 클라이언트에게 반환하는 방식
    • 서블릿(Servlet)
      • 웹 애플리케이션 서버에서 동작하는 자바 클래스
      • 동적인 웹 페이지를 생성하거나, 데이터를 처리하는 등의 역할을 수행
      • JSP와 함께 웹 애플리케이션 개발에 널리 사용되는 기술
  • 내장 톰캣을 가짐.

    • 웹 서버 : 클라이언트가 요청하는 정적 컨텐츠를 전달하는 서버
    • 웹 컨테이너 : Servlet, jsp를 실행할 수 있는 소프트웨어, 서블릿 컨테이너라고도 한다. tomcat도 서블릿 컨테이너 중 하나이다.
      • 요청을 받을 시 서블릿 컨테이너(톰캣)가 request, response 객체를 생성한다. (톰캣에서 BufferedWriter, BufferedReader를 통해 요청으로부터 가변길이의 문자를 받고 request, response 객체를 생성)
      • 이후 요청에 매핑된 서블릿이나 프론트 컨트롤러로 전달
    1. 클라이언트가 어떤 동작을 함으로써 hello.jsp 를 요청.
    2. 클라이언트가 JSP 파일을 요청할 경우 제어권이 서블릿컨테이너(톰캣)로 넘어감
    3. JSP 컨테이너가 JSP 파일을 읽는다.
    4. JSP 컨테이너가 Generete (변환) 작업을 통해 Servlet ( .java ) 파일을 생성한다.
    5. .java 파일은 다시 .class 파일로 컴파일된다.
    6. Execute (실행) 을통해 HTML 파일을 생성하여 웹서버에게 전달한다.
    7. HTTP 프로토콜을 통해 HTML 페이지를 클라이언트 에게 전달한다.
  • FrontController 패턴 : 최초 앞단에서 request 요청을 받아서 컨트롤러를 통해 필요한 클래스에 넘겨준다.

    • FrontController는 공통 코드를 처리하고 요청에 맞는 컨트롤러를 매핑해주는 역할
    • 이 때 새로운 요청이 생기기 때문에 request, response가 새롭게 생성될 수 있다. 이 때 필요한 것이 RequestDispatcher
    • RequestDispatcher : 필요한 클래스 요청이 도달했을 때 FrontController에 도착한 request, response를 그대로 유지시켜준다.
  • DispatcherServlet 작동 방식

    • DispatcherServlet으로 요청이 들어오면 DispatcherServelet은 핸들러 매핑(Handler Mapping)을 통해 요청 URI에 매핑된 핸들러를 탐색. 여기서 핸들러는 컨트롤러를 의미함
    • 그리고 핸들러 어댑터(Handler Adapter)로 컨트롤러를 호출
    • 핸들러 어댑터에 컨트롤러의 응답이 돌아오면 ModelAndView로 응답을 가공해 반환함.
    • 뷰 형태로 리턴하는 컨트롤러를 사용할 떄는 뷰 리족버를 통해 뷰를 받아 리턴함

Spring Boot 동작원리

*DAO(Data Access Object)는 데이터베이스에 접근하여 데이터를 저장, 조회, 수정, 삭제하는 역할을 하는 객체입니다. 스프링에서 DAO는 JDBC, JPA 등 다양한 데이터베이스 접근 기술에서 사용됩니다. DAO는 데이터베이스와의 연결을 담당하며, 데이터베이스와의 연결을 통해 CRUD(Create, Read, Update, Delete) 작업을 수행합니다. 스프링에서는 일반적으로 DAO를 인터페이스로 선언하고, 구현체는 스프링 컨테이너가 생성합니다.

*VO(Value Object)는 계층 간의 데이터 교환을 위한 객체이다. 구조를 결정함으로서 알지 못하는 데이터가 들어오는 상황을 방지한다. 그러므로 DB를 사용한다면, DB의 테이블 요소들을 모두 포함하고 있어야 정상적으로 동작한다.

레이어드 아키텍처

레이어드 아키텍처는 개발자가 애플리케이션의 코드를 여러 개의 레이어로 나누어 개발하는 아키텍처입니다.

  • 프레젠테이션 레이어: 사용자 인터페이스를 처리합니다. 웹 앱에서는 뷰 파일 처리 등을 담당합니다.
  • 서비스 레이어: 비즈니스 로직을 처리합니다. 서비스를 제공하는 메소드를 포함합니다.
  • 데이터 액세스 레이어: 데이터베이스와의 상호작용을 처리합니다. 데이터 액세스 객체를 포함합니다.

레이어드 아키텍처는 각 레이어가 독립적으로 개발될 수 있기 때문에 유지 보수 및 개발이 용이하다는 장점이 있습니다. 또한, 각 레이어는 인터페이스를 통해 결합도를 낮추고 의존성을 분리할 수 있습니다.

디자인패턴

디자인 패턴은 소프트웨어 디자인에서 반복되는 문제들을 해결하기 위한 구조화된 해결책입니다. GoF(Gang of Four)는 23가지의 디자인 패턴을 정리하였습니다. 이 디자인 패턴들은 크게 생성 패턴, 구조 패턴, 동작 패턴으로 나눌 수 있으며, 각각의 패턴은 특정한 문제를 해결하기 위한 구조를 제공합니다.

  • 생성 패턴: 객체 생성과 관련된 패턴으로, 객체 생성 방법이나 객체 생성 시기 등을 다룹니다. 예를 들어, Singleton 패턴은 오직 하나의 인스턴스만을 생성하도록 보장합니다.
  • 구조 패턴: 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴으로, 클래스나 객체간의 관계를 다룹니다. 예를 들어, Composite 패턴은 객체들을 트리 구조로 구성하여, 객체 간의 계층적인 관계를 표현합니다.
  • 동작 패턴: 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴으로, 객체 간의 상호작용을 다룹니다. 예를 들어, Observer 패턴은 객체 간의 일 대 다의 관계를 해결하기 위한 패턴입니다.

디자인 패턴은 소프트웨어 개발에서 유용하게 적용될 수 있으며, 유지보수성, 재사용성, 확장성 등을 높일 수 있습니다. 하지만, 반드시 모든 문제에 대해 적용할 수 있는 해결책은 아니므로, 상황에 맞게 적절한 디자인 패턴을 선택하여 사용해야 합니다.

GoF의 디자인패턴 정리

REST API

REST(Representational State Transfer) API는 HTTP 프로토콜을 기반으로 한 네트워크 아키텍처입니다. REST API는 클라이언트-서버 모델을 따르며, 각 리소스가 고유한 URI를 갖고 있습니다. 또한, HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 리소스를 생성, 업데이트, 삭제할 수 있습니다.

REST API는 다양한 클라이언트와 서버 간에 통신하기 위해 사용됩니다. 이는 REST API가 언어나 플랫폼에 종속되지 않기 때문입니다. REST API를 사용하면 클라이언트와 서버 간의 통신이 단순화되며, 확장성이 높아지고 유지보수성이 개선됩니다.

REST API는 일반적으로 JSON 또는 XML 형식으로 데이터를 전송합니다. 이러한 데이터 형식은 클라이언트와 서버 간의 데이터 교환을 쉽게 만듭니다. 또한, REST API는 보안성을 높이기 위해 HTTPS 프로토콜을 사용할 수 있습니다.

REST API를 설계할 때는 URI 설계, HTTP 메서드 선택, HTTP 응답 코드, 데이터 형식 등에 대한 규칙을 따라야 합니다. 이를 통해 REST API의 일관성과 가독성을 유지할 수 있습니다. 또한, REST API를 설계할 때는 사용자가 필요한 데이터만 요청할 수 있도록 필요한 데이터만 전송하는 것이 좋습니다. 이를 통해 데이터 전송 시간과 대역폭을 절약할 수 있습니다.

profile
코드 깎는 나그네들: 다함께 성장하는 개발자 커뮤니티

0개의 댓글