[SpringBoot] 스프링부트 기초

한동근·2024년 6월 1일
0

SpringBoot

목록 보기
12/12
post-thumbnail

멋쟁이사자처럼 1주차 세션을 준비하면서 스프링부트 기초에 대해 다시 정리해보았다.

1. 스프링과 스프링부트

Spring

Java 기반 애플리케이션 개발을 지원하는 오픈소스 애플리케이션 프레임워크

많은 문제점 존재

  • 설정의 복잡성
  • 높은 초기 학습 난이도
  • 의존성 관리 문제
  • 별도 서버 구축 필요

SpringBoot


더 쉽고 빠르게 스프링 애플리케이션을 개발하도록 도와주기 위해 개발

스프링의 모든 문제점 해결

  • 간결한 설정
  • 내장 서버(Tomcat..)
  • 의존성 관리 간소화

2. MVC 패턴

  • Model (모델):

역할: 애플리케이션의 데이터와 비즈니스 로직을 관리한다. 데이터베이스와의 상호작용, 데이터 검증, 데이터 변환 등의 작업을 수행.
특징: 모델은 뷰나 컨트롤러에 대해 알지 못하며, 독립적으로 동작한다. 데이터의 상태가 변경되면, 모델은 그 변경 사실을 뷰나 컨트롤러에 통보할 수 있다.

  • View (뷰):

역할: 사용자에게 데이터를 보여주고, 사용자로부터 입력을 받는 역할. HTML, CSS, JavaScript 등을 사용하여 사용자 인터페이스를 구성. 프론트엔드라고 생각하면 된다.
특징: 뷰는 모델의 상태를 반영하여 데이터를 표시하며, 사용자가 상호작용할 수 있는 인터페이스를 제공한다. 뷰는 컨트롤러를 통해 모델과 상호작용한다.

  • Controller (컨트롤러):

역할: 사용자 입력을 처리하고, 모델을 업데이트하며, 그 결과를 뷰에 반영한다. 뷰와 모델 사이의 중개자 역할.
특징: 컨트롤러는 사용자로부터 입력을 받아 그에 따라 모델을 조작하고, 변경된 모델을 뷰에 반영.

MVC 패턴의 흐름

  1. 사용자가 뷰를 통해 애플리케이션에 요청을 보낸다.
  2. 컨트롤러가 이 요청을 받아 처리. (예: 버튼 클릭 이벤트 처리)
  3. 컨트롤러는 필요한 경우 모델을 업데이트하거나 데이터를 요청.
  4. 모델은 데이터베이스나 다른 데이터 소스로부터 데이터를 가져오거나 업데이트.
  5. 모델이 데이터를 변경하면, 뷰는 변경된 데이터를 반영하여 사용자에게 표시.

3. 스프링부트 패키지 구조

  • Controller
    Client의 요청을 DTO의 형태로 받아 Service의 기능을 호출하고, 적절한 응답을 DTO의 형태로 반환

  • Service
    DTO를 통해 받은 데이터를 이용해 비즈니스 로직을 처리하고, DAO를 통해 DB에 접근하여 데이터를 관리

  • DTO(Data Access Object)
    DB의 data에 접근하기 위한 객체

  • Repository/ DAO(Data Transfer Object)
    데이터를 Transfer(이동)하기 위한 객체

쉽게 말해 클라이언트가 회원가입을 하면 ID, PW 등등 정보를 입력하고 회원가입 버튼을 누르게 되면 정보들이 DTO에 담겨 Controller -> Service -> Repository/DAO -> DB 로 가게 된다.
DTO는 자바 객체로 데이터베이스에 저장할 수 없으니, Service에서 Entity로 변환하는 작업을 수행한 후, DB에 저장하게 된다.

4. Controller


전통적인 Spring MVC의 컨트롤러 어노테이션인 @Controller는 주로 View(화면)를 반환하기 위해 사용

요약해서 요청이 오면 그에 맞는 화면을 반환해준다.

5. @Controller + @ResponseBody


Spring MVC의 컨트롤러를 사용할 때 Data를 반환해야 하는 경우가 존재한다.
이 때 @ResponseBody 어노테이션을 활용해서 JSON 형태의 데이터를 반환할 수 있다.
가장 현대의 개발 방식.

6. @RestController


@Controller + @ResponseBody가 합쳐진 형태로 JSON 형태의 객체 데이터를 반환

과거에는 JSP, HTML과 같은 View를 전달해 주었기에 주로 @Controller를 사용.

현재는 프론트와 백을 나누어 개발하는 경우가 많고 백엔드에서 Rest API를 통해 JSON으로 데이터만 전달하기 때문에 @RestContoller를 사용한다. 

profile
와플대조교의 개발 블로그

0개의 댓글