Dev/Spring

Spring Boot (Spring boot, 프로젝트 생성방식, 프로젝트 생성, 프로젝트 실행, Spring Data JPA를 위한 설정, 스프링부트에서 웹개발, Thymeleaf)

Walker_ 2024. 5. 7. 10:55

1. Spring boot 

 - 다양한 설정이 내장돼있음

 - 스프링과 기존 개념이 거의 그대로 넘어옴

 

2. 프로젝트 생성방식

 - spring Intializr를 이용한 자동 생성

 - Maven이나 Gradle을 이용한 직접생성

 

하지만 거의 대부분 spring Intializr에서 생성

 

3. 프로젝트 생성

 - 인텔리제이 New project 클릭

 

 - 위처럼 설정 후 Next

 

 - 오른쪽 칸에 항목들 추가 후 Create

 - 메인 함수있는 파일에 파일들, 생성해야 함

 

4. 프로젝트 실행

 - 스프링 부트는 이미 서버를 내장한 상태에서 만들어지기 때문에 따로 서버 설정 안 해도 됨

 

 - 실행 버튼 클릭 후 에러 확인

 - 데이터베이스 설정이 안돼서 임

 - application.properties에 설정 추가

 

 - 다른 프로젝트에서 8080을 사용할 때, 포트 번호를 변경 가능

 

 - run editConfigurations > Modify options

 

 

 - 위에 두 항목에서 Update classes and resources를 추가하고 OK

 - 프로젝트 재실행 시간 감소, 자동으로 업데이트 지원

// lombok을 테스트 환경에서도 사용
testCompileOnly('org.projectlombok:lombok')
testAnnotationProcessor('org.projectlombok:lombok')

 

 - build.gradle에 lombok 테스트 환경 시 코드 추가 후 > 코끼리 버튼

logging.level.org.springframework=info
logging.level.com.example.spring_boot_project=debug

 

 - 스프링부트는 기본적으로 Log4j2가 있기에 라이브러리 추가는 안해도 되고

 - application.properties에 위 코드 두줄 추가

 

 - DB 위에 적은 설정에 맞게 DB 연동

 - Test에 DataSourceTest 클래스 파일 추가

package com.example.spring_boot_project;

import lombok.Cleanup;
import lombok.extern.log4j.Log4j2;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@Log4j2
@SpringBootTest
public class DataSourceTest {
    @Autowired
    private DataSource dataSource;

    @Test
    public void conncetion() throws SQLException {
        @Cleanup Connection connection = dataSource.getConnection();

        log.info(connection);
        Assertions.assertNotNull(connection);
    }
}

 - DataSourceTest 파일에 위 코드 추가

 - 위처럼 나오면 데이터베이스 설저이 제대로 잡혔다는 뜻

 

5. Spring Data JPA를 위한 설정

spring.jpa.hibernate.ddl-auto=update
spirng.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true

 - applicatiion.properties에 위 코드 3줄 추가

 

6. 스프링부트에서 웹 개발

 - 메인 파일있는 위치에 controller 패키지 생성 후 파일 생성

package com.example.spring_boot_project.controller;

import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
@Log4j2
public class SampleController {
    @GetMapping("/hello")
    public void hello(Model model) {
        log.info("hello...");
        model.addAttribute("msg", "Hello World");
    }
}

 - controller 파일에 위 코드 추가

 

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1 th:text="${msg}"></h1>
</body>
</html>

 

 - 생성한 html 파일에 위 코드 추가

 - 프로젝트 실행 > localhost:8080/hello 접속해서 화면 확인

 - controller 폴더에 SamplerJSONController 파일 생성

 

package com.example.spring_boot_project.controller;

import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Log4j2
public class SampleJSONControlloer {
    @GetMapping("/helloArr")
    public String[] helloArr() {
        log.info("HelloArr...");

        return new String[] {"AAA", "BBB", "CCC"};
    }
}

 

 - 생성된 파일에 위 코드 추가 

 

 - localhost:8080/helloArr에 접속 후 JSON 파일 출력 확인 

 

7. Thymeleaf

 - 스프링과 마찬가지로 스프링 부트도 다양한 뷰 view 관련 기술을 적용할 수 있음

 - Thymeleaf는 JSP를 대신하는 목적을 작성된 라이브러이므로, JSP에서 필요한 기능들을 Thymeleaf로 구성해 봄.

 

 - 1) 인텔리제이 설정

 

 - Settings > Thymeleaf 검색 후 > 3번째 체크 해제 

 

8. Thymeleaf 출력

package com.example.spring_boot_project.controller;

import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.Arrays;
import java.util.List;

@Controller
@Log4j2
public class SampleController {
    @GetMapping("/hello")
    public void hello(Model model) {
        log.info("hello...");
        model.addAttribute("msg", "Hello World");
    }

    @GetMapping("/ex/ex1")
    public void ex1(Model model) {
        List<String> list = Arrays.asList("AAA", "BBB", "CCC", "DDD");

        model.addAttribute("list", list);
    }
}

 

 -  SampleController에 위 코드 추가

 - templates 패키지에 ex 패키지와 ex1.html 생성 

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!-- inlining 사용 -->
    <h4>[[${list}]]</h4>
    <hr>
    <!-- 'th:' 속성 사용 -->
    <h4 th:text="${list}"></h4>
</body>
</html>

 

 - 생성 ex1 파일에 위 코드 추가

 - URL 접속해서 출력 확인 

 

 


공부 과정을 정리한 것이라 내용이 부족할 수 있습니다.

부족한 내용은 추가 자료들로 보충해주시면 좋을 것 같습니다.

읽어주셔서 감사합니다 :)