[Spring] 김영한 스프링 강의 씹어먹기1

송병훈·2022년 9월 12일
post-thumbnail

강의 링크


스프링 시작

우선적으로 java JDK를 다운받아야 한다.
강의에서는 11 version으로 다운받았다.

start.spring.io
스프링 프로젝트를 만들어주는 사이트

Maven과 Gradle
개발에 필요한 라이브러리들을 가져오고
빌드하는 라이프사이클까지 관리해주는 Tool이다.
요즘에는 Gradle을 많이 쓴다.

사이트에서 생성한 파일의 압축을 풀고
인텔리제이에서 Open을 눌러 build.gradle 파일을 클릭하여
Open as Project로 연다.
처음에 열면, 외부에서 라이브러리를 다운받느라 시간이 걸린다.


프로젝트 내부를 보면

  • .idea: 인텔리제이가 사용하는 설정파일
  • gradle/wrapper: gradle과 관련된 폴더
  • src/main: java폴더 밑에 실제 패키지와 소스파일들이 있다.
  • src/main/resources: 실제 자바 코드파일 외에 .xml이나 .properties, .html 같은 파일들이 들어있다.
  • src/test: 테스트코드와 관련된 소스들이 있다.
    main폴더와 test폴더가 기본으로 나뉘어 있다. 즉 테스트가 중요하다는 것이다.
  • build.gradle: gradle 설정이 어떻게 되어있나 나와있다.
    스프링버전, java버전, 가져온 라이브러리들, JUnit 등..
  • gitignore: git에 올라가면 안 되는 파일들 관리


main메서드를 실행하면
SpringApplication.run()에 HelloSpringApplication 클래스를 넣고,
이 클래스가 실행되어 @SpringBootApplication 어노테이션에 따라
SpringBootApplication이 실행된다.
이것이 실행되면서 Tomcat 웹서버를 내장하고 있어서 편하게 실행 가능하다.


File - Settings > Build, Execution, Deployment > Build Tools > Gradle 에서
run 설정이 Gradle로 되어있으면 IntelliJ IDEA로 바꿔서
Gradle을 통하지 않고 실행시켜 속도를 높일 수 있다.


라이브러리 살펴보기

External Libraries에 가져온 라이브러리들이 나온다.
근데 bulid.gradle에서 확인했던 라이브러리는 3개밖에 없는데,
여기서 라이브러리들을 확인해보면 엄청 많다.

그 이유는 Maven이나 Gradle같은 라이브러리를 관리해주는 Tool에서
의존관계 라이브러리들을 관리해주기 때문인데,
예를들어 spring-boot-starter-web 라이브러리를 가져오면,
이와 연관(의존)된 라이브러리들도 같이 가져온다.

사진에서 보듯이 Tomcat 웹서버도 라이브러리로 포함되어있다.
그래서 Tomcat 서버를 따로 다운받을 필요가 없다.
logback, junit, assertj, spring-test 등도 있다.


View 환경설정

resources/static에 index.html을 넣어두면 이것을 기본 페이지로 삼는다.

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

// Controller 패키지와 클래스를 만들었다.
// Controller면 기본적으로 @Controller 어노테이션을 달아줘야 한다.

@Controller
public class HelloController {

    // " /hello 로 URL이(Get방식) 들어오면 이 메소드를 호출한다."
    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data", "hello!!");
        // 이 hello!! 라는 값은 변수를 넣어 DB에서 가져오도록 할 수도 있다.

        return "hello";
        // 여기서 hello를 문자로 반환하는데 텍스트가 아니다.
        // viewResolver가 resources/templates 안에 있는 hello.html을 찾아서 렌더링한다.
        // 렌더링이란 서버로부터 html파일을 받아 브라우저에 뿌려주는 과정이다.

        // 스프링 부트 템플릿엔진 기본 viewName 매핑이
        // resources:templates/ + {viewName} + .html 로 되어있다
    }
}
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<!-- thymeleaf 템플릿이 선언되어 있다. -->
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
<!-- 여기서 th는 thymeleaf를 의미한다. -->
<!-- ${data}는 Controller에서 model.addAttribute에서 Key값으로 넣었던 data와 연결된다. -->
<!-- 그래서 web을 실행하면 안녕하세요 hello!! 가 출력된다. -->
</body>
</html>



스프링 웹 개발 기초

  • 정적컨텐츠: 파일을 그대로 웹 브라우저에 내려받는 것
  • MVC와 템플릿엔진: 서버에서 데이터가 변경되어 동적으로 주고받는 것
  • API: JSON 같은 데이터구조 포맷으로 클라이언트한테 데이터를 전달하는 것

정적 컨텐츠

스프링부트 정적컨텐츠 기능:
스프링에서는 정적컨텐츠를 /static 폴더에 위치시켜, 실행시킨다.
URL에 localhost:8080/hello-static.html을 입력하여 get방식으로 웹 페이지를 띄우려 할 때
hello-static 관련 controller가 없으면(우선순위) 스프링부트가 static폴더에서 .html 파일을 찾아 직접 띄운다.


MVC와 템플릿엔진

Model과 Contoller는 비즈니스로직(소스)에 집중을, View는 화면구현에 집중을 시킨 것이다.



API - 문자


@ResponseBody 어노테이션을 통해
html파일 없이 문자만 나온다.


API - 객체


JSON방식으로 출력된다.
스프링에서 @ResponseBody를 사용하면 JSON형식으로 반환하는 것이 기본 설정값이다.

profile
성실하고 꼼꼼하게

0개의 댓글