스프링 부트(Spring Boot) 기본 개념

유필선·2024년 5월 8일
1

스프링 부트

목록 보기
1/4

스프링 부트(Spring Boot)란 ?

스프링 부트는 스프링을 더 쉽게 이용하기 위한 도구로, 개발을 할 때, 셋팅을 해야 될 요소들을 스프링 부트로 간단하게 프로젝트를 설정할 수 있께 하여 스프링 개발을 조금 더 쉽게 만들어주는 역할을 한다.

스프링(Spring)

스프링은 자바 기반의 웹 어플리케이션을 만들 수 있는 프레임워크 이다.

스프링의 특징

  • 스프링은 자바 객체와 라이브러리들을 관리해주며, 톰캣과 같은 WAS가 내장되어 있어 자바 웹 어플리케이션을 구동할 수 있다.
  • 경량 컨테이너로 자바 객체를 직접 스프링 안에서 관리하고, 객체의 생성 및 소멸과 같은 생명 주기를 관리하며, 컨테이너에서 필요한 객체를 가져와 사용한다.
  • 스프링의 특징중 IOC와 DI가 가장 대표적이다.

제어의 역전(IOC : Inversion Of Control)

  • IOC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡긴다. 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체가 다른 주체가 된다.
    즉 사용자의 제어권을 다른 주체에게 넘기는 것을 IOC이라고 한다.
    • 스프링의 IOC란, 스프렝에게 제어를 위임하여 스프링이 만든 객체를 주입 -> 의존성 객체의 메서드를 호출하는 구조이다.
      스프링에서는 모든 의존성 객체를 스프링이 실행될 때 만들어주고 필요한 곳에 주입한다.

의존성 주입(DI: Dependency Injection)

  • 어떤 객체(B)를 사용하는 주체(A)가 객체(B)를 직접 생성하는게 아니라, 객체를 외부(spring)에서 생성해서 사용하려는 주체 객체(A)에 주입시켜주는 방식이다.
    사용하는 주체가 사용하려는 객체를 직접 생성하는 경우 의존성이 높아지지만, 외부에서 직접 생성하여 관리하는 경우에는 주체와 객체의 의존성이 줄어든다.

컨트롤러(Controller)

스프링 프레임워크의 컨트롤러는 사용자가 화면단에서 입력이나 어떤 이벤트를 했을 경우, 그 이벤트에 맞는 화면이나 비즈니스 로직을 실행할 수 있도록 업데이트 해주는 역할을 한다.

  • model과 view를 연결해주는 다리 역할

서버에서 기능별 UTL이라는 API를 개설해 놓았꼬, 클라이언트는 필요한 정보를 얻기 위해 적절한 API에 요청한다.
컨트롤러는 이런 창구 역할을 하는 API들을 모아놓은 클래스라고 할 수 있다.

  • Front-end에서 들어오는 클라이언트 측의 요청이 가장 먼저 서버 측과 맞닿는 부분
  • client의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 Sercive 호출
  • 클라이언트가 보낸 데이터가 있다면 Service를 호출할 때 전달하기 쉽게 데이터의 가공
  • 모델의 업무 수행이 완료되면 그 결과를 바탕으로 화면을 구성하도록 화면에 전달

서비스(Service)

  • Service : Controller의 요청을 받아 알맞은 정보를 가공 Controller에게 재전달 한다.
  • Repository에서 얻어온 정보를 바탕으로 자바 문법을 이용하여 가공 후 다시 Controller에게 정보를 보낸다.
  • Controller 쪽에서 바로 데이터베이스에 접근하여 정보를 얻고 가공해서 가져가는 것은 위험하다.(정보를 직접 CRUD하고 가공하는 과정에서 테이블에 저장된 원본의 정보가 손상될 우려가 크기 때문)
  • 정보 변동의 위험이 큰 로직은 Service에서 진행
  • 이때 원본의 데이터를 사용하는 것이 아니라 데이터베이스에서 추출한 정보의 복사본인 DTO를 만들어서 로직을 조작한다.

리포지터리(Repository)

  • Repository는 '저장소'로 데이터베이스와 깊은 견관이 있다.
  • 데이터단에 직접 매칭되는 Entity라는 것이 있는데, 이 Entity를 통해 데이터 테이블이 생성이 되면, 받아온 정보를 데이터베이스에 저장하고 조회하는 기능을 수행한다.
  • Repository : Entity에 의해 생성된 DB에 접근하는 메서드를 사용하기위한 interface이다.
  • JPA를 상속받음으로써 기본적인 CRUD의 동작이 가능하다.

컨트롤러 : @Controller (프레젠테이션 레이어, 웹 요청과 응답을 처리함)
로직 처리 : @Service (서비스 레이어, 내부에서 자바 로직을 처리함)
외부I/O 처리 : @Repository (퍼시스턴스 레이어, DB나 파일같은 외부 I/O 작업을 처리함)

DAO, DTO, VO

DAO

  • DAO(Data Access Object)는 데이터베이스의 data에 접근하기 위한 객체
  • 데이터베이스에 접근하기 위한 로직, 비지니스 로직을 분리하기 위해 사용한다.

DTO

  • DTO(Data Transfer Object)는 계층 간 데이터 교환을 하기 위해 사용하는 객체로, DTO는 로직을 가지지 않는 순수한 데이터 객체(getter,setter만 가진 클래스)이다.
    • 유저가 입력한 데이터를 DB에 넣는 과정
    1. 유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송
    2. 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 넣는다.

VO

  • VO(Value Object) 값 오브젝트로써 값을 위해 쓰인다. red-Only 특징(사용하는 도중에 변경 불가능하며 오직 읽기만 가능)을 가진다.
  • DTO와 유사하지만, DTO는 setter를 가지고 있어 값이 변할 수 있다.

엔티티(Entity)

데이터베이스는 엑셀처럼 2차원 테이블이라고 생각하면 되는데, 이 테이블에 서비스에서 필요한 정보를 다 저장하고 활용하게 된다.
엑셀의 세로의 열 부분이 Column 이고, 가로의 행 부분이 Entity 객체가 된다.
이 테이블 전체가 엔티티 이고, 각 1개의 행들이 엔티티 객체가 되는 것이다.

  • 실제 DB에 저장되는 내용들을 구현하는 class이다.
  • 테이블에 대응하는 하나의 클래스
  • 하나의 객체가 DB의 하나의 Column처럼 작용

애너테이션(Annotation)

자바에서 애너테이션은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다.

  • 프로그램에게 추가적인 정보를 제공해주는 메타데이터
  • 메타데이터(meta data): 데이터를 위한 데이터
    ageConverter로 읽을 때 사용하거나 POJO 형태의 데이터 전체로 받는 경우에 사용

JPA

자바 진영에서 ORM(Object-Relatonal Mapping) 기술 표준으로 사용하는 인터페이스 모음

  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
    (인터페이스이기 때문에 Hibernate, OpenJPA등이 JPA를 구현함)
  • JPA는 수정 메소드를 제공하지 않는다.
    (하지만 당연히 수정은 필요하기 때문에 JPA는 데이터 수정 시, 매핑된 객체를 조회해서 값을 변경 후 커밋하면 DB서버에 UPDATE문을 전송하여 수정한다.
  • 스프링에서 흔히 사용하는 것으로 알고 있는 JPA는 JPA를 이용하는 spring-data-jpa 프레임워크이지 JPA는 아니다.

출처: 탑팀의 코딩 성장기

profile
이해해버려라!

0개의 댓글