5 분 소요

[공지사항] [해당 내용은 인프런 김영한의 ‘‘스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술’’ 강의 입니다.] 강의를 듣고 이해한 내용을 바탕으로 직접 필기한 내용입니다. 인프런 : 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술



강의 소개

  • 초급자를 위해 준비한 [웹 개발, 백엔드] 강의입니다.

    스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다.

  • 해당 강의 파트는 무료 강의이며, 수강하며 직접 정리한 내용을 포스팅 해보겠습니다!!

    • 뒤의 유료 강의 파트는 코드에 있어서 간단 예제를 제외하면 비공개 하도록 하겠습니다.



김영한 로드맵

spring 완전 정복 코스 -> 스프링 부트와 jpa실무 완전 정복 로드맵

  • spring 완전 정복
    • 스프링 기본(스프링 입문, 스프링 핵심원리)
      • 전체적인 코드와 감만 잡기
      • 대략적인 큰 입문
    • 스프링 웹(HTTP 스프링, MVC 1v편, 2편)
      • 간단한 웹페이지 만들기
    • 스프링 DB 접근(스프링 DB1편, 2편)
      • 스프링 DB
    • 스프링 고급
      • 스프링 부트



1. 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

  • 요즘에는 ‘스프링 부트’라는 걸 가지고 스프링 프로젝트를 만든다.

  • <순서도>
      1. http://start.spring.io<접속> 스프링에서 운영하는 스프링 부트 기반 사이트

      2. (maven, Gradle 중 Gradle - Groovy선택) 필요한 라이브러리를 가져오고 라이프사이클까지 관리해주는것이다. 과거에는 Maven을 썼지만 요즘에는 Gradle로 넘어오는 추세이다. 실무에서도

      3. language는 java 를 선택한다.

      4. spring boot 에서 버전선택 SNAPSHOT은 버전 업데이트 진행중인것.

      5. Group 에는 기업 도메인 명을 적음. Atrifact 는 build의 결과물 = 프로젝트 명
      6. Dependencies(2가지 필요)

        • Spring boot 기반으로 프로젝트 진행, 어떤 라이브러리를 쓸것이냐.. → 웹프로젝트 = Spring Web T

        • Thytmeleaf : html을 만들어주는 템플릿 엔진이 필요함 회사마다 다른것을 사용함.

      7. Generate



intelliJ 접속 후 , build.gradle

plugins {
  id 'java'
  id 'org.springframework.boot' version '3.2.1'
  id 'io.spring.dependency-management' version '1.1.4'
}
#버전

group = 'hello'
version = '0.0.1-SNAPSHOT'

java {
  sourceCompatibility = '17'
}
#자바 버전

repositories {
  mavenCentral()
}
#mavenCentral : dependencies 라이브러리 들을 다운로드 받기위한 사이트
#필요에 따라 원하는 url을 넣는것도 가능하다.

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
  implementation 'org.springframework.boot:spring-boot-starter-web'
  testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
#템플릿 엔진 : html을 생성하기 위한 thymeleaf

tasks.named('test') {
  useJUnitPlatform()
}



라이브러리 살펴보기

Gradle은 의존되어 있는 라이브러리를 다 가져온다.

스프링 부트 라이브러리

  • spring-boot-stater-web
    • spring-boot-starter-tomcat : 톰캣(웹서버)
    • spring-webmvc : 스프링 웹 MVC
  • spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진 (View)
  • spring-boot-starter(공통) : 스프링 부트 + 스프링 코어 + 로깅
    • spring-boot
      • spring-core
    • spring-boot-starter-logging
      • logback,slf4j → 거의 국룰이다.

테스트 라이브러리

  • spring-boot-starter-test
    • junit : 테스트 프레임워크, 거의 5버전을 쓰는 추세이다.
    • mockito : 목 라이브러리
    • assertj : 테스트 코드를 좀 더 편하게 작성하도록 도와주는 라이브러리
    • spring-test : 스프링 통합 테스트 지원



view 환경설정

  • Welcome Page
    • 도메인 누르고 들어왔을 때 첫 페이지
    • 접속 방법 : main → resources → static → new → Files(파일생성) → index.html
<!DOCTYPE HTML>
<html>
<head>
    <title>안녕 나는 문성준이야</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
안녕 문성준
<a href="/hello">hello</a>
</body>
</html>
  • 스프링 부트가 제공하는 Welcome Page 기능
    • static/index.html을 올려두면 Welcome page 기능을 제공한다.
  • 스프링의 기능은 너무 많기 때문에 필요한 기능을 직접 찾는 능력이 중요하다.
    • spring.io → project → spring boot → lean → reference → 접속 후 필요한 기능 찾아보기

thymeleaf 템플릿 엔진

  • static의 정적 페이지와는 달리 템플릿 엔진을 쓰면 원하는 내용으로 모양을 바꿀 수 있다.
  • 컨트롤러
    • 웹 어플리케이션의 첫번째 진입점
    • main -> java -> hello.hellospring -> controller패키지 생성 -> HelloController class 생성
      package hello.hellospring.controller;
      import org.springframework.stereotype.Controller;
      import org.springframework.ui.Model;
      import org.springframework.web.bind.annotation.
        
      GetMapping;@
      Controllerpublic class HelloController { 
      @GetMapping("hello") 
      public String hello(Model model){ 
      model.addAttribute("data","hello!!"); 
      return "hello";
        
       }
      }
    
    • Resources -> templates -> hello.html 파일 생성 후 해당 코드 입력
      - `<!DOCTYPE HTML>
      <html xmlns:th="http://www.thymeleaf.org">
      <head> 
      <title>Hello</title> 
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      </head>
      <body><p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 문성준님</p></body></html>`
    



스프링 웹 개발

웹 개발은 크게 3가지로 나뉜다.

  1. 정적 컨텐츠
    • 파일을 그대로 전달해주는것을 뜻한다.
  2. MVC와 템플릿 엔진
    • Model View Controller(컨트롤러와 모델 템플릿 엔진 화면)
    • 요즘에는 이방식을 많이 사용한다.
    • 서버에서 변형, html을 바꾸는 방식이다.
  3. API
    • 안드로이드나 아이폰 앱 개발시 json이란 데이터 포멧으로 클라이언트에게 전달.



정적 컨텐츠

스프링 부트는 정적 컨텐츠를 자동적으로 제공한다.

resources -> static 에 html 파일을 생성한다.

<!DOCTYPE HTML>
<html>
<head>
    <title>static content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>

http://localhost:8080/hello-static.html

주소를 들어가면 자동적으로 생성된다.



MVC와 템플릿 엔진

  • MVC : Model, View, Controller
  • 컨트롤러와 뷰를 쪼개는 것이 기본이다.
  • 뷰는 화면과 관련된 것만 비지니스 로직에 관련된 것은 컨트롤러에서만 한다. 모델에다가 담아서 뷰에다가 넘겨주는 패턴을 많이 사용한다.
  • 뷰를 찾아서 템플릿 엔진을 통해 화면을 렌더링해 Html을 웹 브라우저에 넘겨주는 방식이다.

Java -> controller 패키지 -> HelloController 클래스

  • Controller
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
    model.addAttribute("name",name);
    return "hello-template";

Resources -> templates -> 리턴 값과 동일한 파일 hello-template.html 생성 후

  • View
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello' + ${name}">hello! empty</p>
</body>
</html>
  • Controller에서 Param을 생성 했기때문에 웹페이지 접속 할 때 name = “ “ 을 입력해야 해당 페이지로 접속 할 수있다.
    • ex ) http://localhost:8080/hello-mvc?name=hello
  • ViewResolver는 Spring Framework에서 웹 애플리케이션에서 뷰(View)를 찾아주는 역할을 하는 인터페이스입니다. 주로 Spring MVC에서 사용되며, Controller에서 반환하는 뷰 이름을 실제 뷰 객체로 매핑하는 역할을 합니다. 이를 통해 개발자는 뷰 이름만을 신경쓰고, 실제 어떤 뷰 구현체가 사용될지는 ViewResolver에 의해 결정됩니다.



API

정적 컨텐츠 방식을 제외하면

@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){
    return "hello " + name;
}

@ResponseBody 는 html body 응답 부에 내용을 직접 넣어주겠다는 의미이다.

  • 다음 링크처럼 name에 값을 입력하면 자동으로 넣어지는 모습을 볼 수 있다.
  • MVC방식처럼 템플릿이 있는 상황에서 html을 넘겨주는 방식이 아니라 데이터 그 자체를 바로 넘기는 방식이다.

ex) http://localhost:8080/hello-string?name=hello

    @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) {
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }

    static class Hello {
        private String name;

        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
}

http://localhost:8080/hello-api?name=hello!!

코드에서 public Hello helloApi(@RequestParam("name") String name) 메서드는 Hello 객체를 생성하고 반환합니다. 이렇게 반환되는 객체를 클라이언트에게 전송할 때, 일반적으로 데이터를 표현하는 형식 중 하나로 JSON(JavaScript Object Notation)을 사용합니다.

JSON은 경량 데이터 교환 형식으로, 사람이 읽고 쓰기 쉽고 기계가 분석 및 생성하기도 용이한 형식입니다. 주로 웹 애플리케이션에서 데이터 교환의 목적으로 사용되며, 여러 언어에서 지원하고 있습니다.

여기서 코드에서의 관련은 다음과 같습니다:

  1. @ResponseBody 어노테이션: 이 어노테이션이 사용된 메서드는 HTTP 응답 본문으로 사용될 데이터를 반환하는 역할을 합니다. 반환된 데이터가 객체이면, Spring은 기본적으로 이를 JSON 형식으로 변환하여 클라이언트에게 응답합니다.
  2. Hello 클래스: Hello 클래스는 데이터를 담는 간단한 자바 객체입니다. 이 클래스의 인스턴스가 생성되고 데이터가 설정된 후에, 이를 반환하는 메서드에서 이 객체는 JSON으로 변환되어 클라이언트에게 응답됩니다.

클라이언트는 이 JSON 데이터를 수신하여 필요에 따라 해석하고 사용할 수 있습니다. 일반적으로 클라이언트는 JSON을 파싱하여 객체로 변환하거나, 웹 페이지에서 JavaScript를 사용하여 JSON 데이터를 처리합니다.

HttpMessageConverter는 Spring Framework에서 HTTP 요청 및 응답의 메시지를 변환하는 역할을 하는 인터페이스입니다. 이를 통해 서로 다른 미디어 타입 간에 데이터를 변환할 수 있습니다. 주로 Spring MVC에서 사용되며, 클라이언트와 서버 간의 데이터 전송 형식을 조정하는 데 사용됩니다.

태그:

카테고리:

업데이트:

댓글남기기