본문 바로가기
Today I Learned 2024. 5. 14.

(24.05.14)[5주차] Spring 입문 강의 01

 Spring 입문에 대해서 배우고 있는데 다뤄야하는 부분이 너무 방대해서 Java처음 배운 것과 거의 맞먹는다곤 느껴진다.

괜히 기업들이 취업 요건에 Java언어 활용자 중 Spring / Spring Boot  경험 여부를 따로 확인을 하려고 하는지 알수 있다.

하지만,  SQL을 하기도 했었고 DB 활용을 나름대로 해보고 싶기 때문에 쉽지는 않지만 재밌게 학습을 진행한듯

 

일단 블로그에는 간단하게 정리를 하면서 복습하려고 한다.


Spring 입문 강의 간단정리

  • 이를 기반으로 하여 두번째 강의 내용은 JPA 중심이기 때문에 이를 유의 하여 학습
  • 모든 Spring 내용은 처음 학습이므로 자세하게 Notion의 DB화와 블로그의 정리를 통하여 학습을 복습
더보기

그레이들 Gradle

  • 빌드 자동변환 시스템

build.gradle

  • Gradle 기반의 빌드 스크립트
  • 소스 코드를 빌드하고 라이브러리들의 의존성을 쉽게 관리
  • 외부 라이브러리들을 dependencies 부분에 작성하면 Gradle이 해당 라이브러리들을 Maven Repository 와 같은 외부 저장소에서 자동으로 다운로드

 

API

  • API(application programming interface)는 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙, 약속

RESTful API

  • REST(Represnetational State Transfer) API 로 HTTP 에 의거하여 API가 잘 설계된 API

WAS

  • Web server은 정적 데이터(html 문서)를 브라우저로 전송하는 역할

Apache Tomcat

  • Web server + WAS 를 합친 서비스
  • 정적 데이터 처리 + 동적인 데이터 처리가 효율적으로 가능하게 함

SpringBoot & Spring

Spring Framework

  • AOP, IoC/DI 등과 같은 아주 강력한 핵심 기능을 활용할 수 있지만 엄청난 양의 xml 설정이 필요 → SpringBoot의 등장

SpringBoot

  • xml 대신 annotation을 통해 간편하게 설정
  • 기본 설정 값을 default로 자동 설정
  • 외부 라이브러리, 하위 프레임워크 의존성 관리 쉬워짐
  • 내장 Apache Tomcat
    • Spring에서는 직접 넣어야하나, SpringBoot에서는 기본 내장형이 있기 때문에 굳이 Setting 없이 바로 사용 가능

 

MVC 디자인 패턴

  • Model-View-Controller 소프트웨어 디자인 패턴
  • 구성 요소를 분리해 코드 재사용, 유지보수성 향상
  • 개발자간 협업 용이한 패턴
  • Model
    • Date , Business Logic
  • View
    • User Interface
  • Controller
    • Model-View 사이에서 조정 및 제어

 

Spring Web MVC

  • Spring에서 DispatcherServlet이 MVC 디자인 패턴을 통해 HTTP 요청을 처리하는 것
    • 개발할 때마다 HTTP 구조를 가져올 수 없기 때문에 Servlet이 분석해서 객체에다가 넣어주는 것

Servlet 서블릿

  • SpringBoot에서 annotation으로 설정한 것 중에 해당 Servlet에 대한 정보를 찾아서 매칭을 시켜 Serlvet 해당 서비스를 실행

Front Controller의 DispatcherServlet

  • API마다 각각 Servlet 클래스를 맞춰서 구현해야하나 이것을 효율적으로 해결하기 위한 Front Conrtroller 패턴 방식
  • 직접 Servlet을 구현하지 않아도 DispatcherServlet에 의해 간편하게 HTTP 요청을 처리
  • 유사 API를 묶어서 하나 Controller로 묶어서 처리

RestConroller

  • @Controller + @ResponseBody
  • 단, html의 View를 반환해야할 때는 Conroller를 사용해야

 

Server 에서 JSON → String

직접 변환 : text/html 타입

  • 알아서 똑같이 바뀜

JAVA 내부 변환 기능 : application/json 타입

  • new 객체로 만들어서 반환을 해줘도 알아서 Jason으로 바꿔서 응답

Jackson

  • JSON 데이터 구조 처리 라이브러리
  • Object ↔ JSON String

Object → JSON

  • **ObjectMapper 를 활용**
  • getter가 반드시 필요
  • writeValueAsString 메서드 활용

JSON → Object

  • **ObjectMapper 를 활용**
  • ***해당 클래스 데이터에 대해 기본생성자, getter/setter 필요
  • readValue 메서드를 활용
  • **필드명을 반드시 일치 시켜서 매핑 해줘야하는 것

 

Client로 부터 JSON을 가지고 오는 방식

Path Variable

Path Variable 방식

  • 서버에 보내려는 데이터를 URL 경로에 추가해서 JSON을 @PathVariable을 통해 가지고 오는 것
  • 직접 데이터를 JSON을 가져오는 방식

Request Param

Request Param 방식

  • 쿼리 스트링 방식
  • ?로 구분해서 JSON을 가지고 오는 것을 @RequestParam으로 바꿔서 가지고 오는 것

form 태그 POST 방식

  • POST 방식으로 넘어올 때 사용
    • body 부분이 templates의 html에 form 으로 지정이 되어 있음

 

HTTP 데이터를 객체로 처리

@ModelAttribute

form 태그 POST 방식

  • 원래 쿼리 스트링 body로 들어온 값을 객체(위에서는 Star)에 매핑을 해서 객체로 가지고 오는 방식

Query String 방식

  • 만약 여러개의 ?달고 넘어가게 오면 힘들기 때문에 객체로 한번에 받아오기 위한 방식
  • 단, 객체내에 들어온 값을 등록하게끔 하는 Setter 또는 오버로딩 생성자가 존재 해야만 하기 때문에 반드시 확인

@RequestBody

  • body 부분에 JSON 방식으로 데이터가 넘어오는 경우에 객체로 변환
  • JSON일 때는 꼭 @RequestBody 써줘야