자바 스프링 부트 1일차 b01

2026. 4. 1. 21:08대우개발원 수업 내용/spring boot, framework

반응형

1. 스프링 부트 이해 및 특징

  • 실행 편의성: 복잡한 설정 없이 단독 실행 가능한 생산 등급의 애플리케이션 제작 가능.
  • 도구 역할: 스프링 프레임워크를 편리하게 사용하도록 돕는 도구로, 현재 개발 방식의 주류로 자리 잡음.
  • 주요 기능: 자동 설정(Auto Configuration), 내장 WAS(Tomcat), 강력한 개발 도구 지원.

2. 프로젝트 생성 및 설정

  • 생성 도구: Spring Initializr 및 IntelliJ, Eclipse, VSCode 등 IDE 지원 활용.
  • DB 연결: application.properties에 MariaDB 접속 정보를 설정하여 HikariCP 기반의 DB 연동 완료.
  • 로그 제어: 패키지별 로그 레벨(INFO, DEBUG) 설정을 통해 콘솔 출력 정보량 조절.

3. 테스트 환경 및 의존성 주입

  • 연결 검증: DataSourceTests 클래스 생성 및 @SpringBootTest를 이용한 DB 연결 상태 확인.
  • 코드 효율: @Log4j2를 이용한 로그 기록 및 @Cleanup 어노테이션으로 리소스 자동 반납 처리.
  • 검증 로직: Assertions를 사용하여 Connection 객체의 생성 여부 확정.

4. JPA 및 하이버네이트 설정

  • ddl-auto=update: 엔티티 클래스 변경 시 DB 테이블 구조 자동 갱신.
  • SQL 가시성: show-sql 및 format_sql 설정을 통해 실행되는 쿼리를 콘솔에서 가독성 있게 확인.

5. 웹 개발 컨트롤러 구현

  • 뷰 렌더링: @Controller와 Model 객체를 사용하여 Thymeleaf 템플릿에 데이터 전달 및 화면 출력.
  • JSON 처리: @SampleJSONController를 활용하여 별도 변환 설정 없이 자바 배열 데이터를
    JSON 형식으로 브라우저에 전송.
  • 템플릿 엔진: JSP 대신 타임리프(Thymeleaf)를 사용하여 HTML 내 동적 데이터 표현.

 


 

SpringBoot 
• Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".
• 스프링 프레임워크을 더 편리하게 사용할 수 있도록 하는 도구의 역할
• ‘스프링 프레임워크’ == ‘스프링 부트’ 로 인식되는 과정중
• 점차 스프링기반의 개발방식에서 스프링 부트를 이용하는 형식으로 변화 중
• 편리한 기능들
• 자동 설정 기능
• 내장 WAS
• 개발 도구의 지원 등

 

프로젝트의 생성방식
• Spring Initializr 
• 개발도구 지원
• eclipse
• Intellij
• VSCode
• web상에서 프로젝트 생성후 다운로드  https://start.spring.io/
• Maven/Gradle

 

프로젝트 생성


스프링 부트 프로젝트의 설정 파일(application.properties) 화면
현재 상황은 프로젝트가 생성만 되고 DB에 어떻게 접속할지에 대한 정보가 전혀 없는 상태.

 

spring.application.name=b01

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/webdb
spring.datasource.username=webuser
spring.datasource.password=1234

• HikariCP가 실행되고

DB도 연결되서 정상적으로 실행된다

 


boot에서는 자동으로 실행되지 않기 때문에

자동 리로딩을 설정해 줘야한다

edit – configuration


각 패키지별로 출력할 로그의 상세 수준(단계)을 설정하여 콘솔에 찍히는 정보의 양을 조절하는 코드

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

spring boot에서는 db가 자동으로 연결 됨

Password 입력 후

Test Connection 


테스트 환경과 의존성 주입

B01ApplicationTests.java가 자동으로 생성되어 있음

하지만 다른 테스트를 하기 위해  DataSourceTests.java를 만듬

import javax.sql.를 불러와야함

java.sql.Connection

package com.example.b01;


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 DataSourceTests {
    @Autowired
    private DataSource dataSource;

    @Test
    public void testConnection() throws SQLException {
        @Cleanup // close() 메서드를 자동으로 호출 해주는 어노테이션
        Connection con = dataSource.getConnection();
        log.info(con);
        Assertions.assertNotNull(con); // connction 객체가 NotNull인지 확인
        // 데이터베이스 연결이 성공적으로 이루어졌는지 확정 짓는 코드
    }
}

 


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

 

1. spring.jpa.hibernate.ddl-auto=update

  • 역할: 자바 엔티티(Entity) 클래스의 변경 사항을 분석하여 데이터베이스 테이블 구조를 자동으로 갱신
  • 상세: 기존 테이블은 유지하면서 새로운 컬럼이 추가되면 자동으로 반영하며, 데이터는 삭제하지 않음.
    (주로 개발 단계에서 사용)

2. spring.jpa.properties.hibernate.format_sql=true

  • 역할: 콘솔창에 출력되는 SQL 쿼리문을 보기 좋게 줄 바꿈 및 들여쓰기하여 정렬
  • 상세: 한 줄로 길게 출력되어 읽기 힘든 SQL 문을 가독성 있게 포맷팅해 줌.

3. spring.jpa.show-sql=true

  • 역할: JPA가 실행하는 모든 SQL 쿼리문을 시스템 콘솔(로그)창에 출력하도록 설정
  • 상세: 실제 데이터베이스로 어떤 쿼리가 날아가는지 실시간으로 확인하여 디버깅할 수 있게 함.

요약

JPA가 생성한 SQL을 콘솔에 찍고(show), 이를 읽기 좋게 정렬하며(format),

코드 변화에 맞춰 **DB 테이블을 자동 업데이트(ddl-auto)**하도록 만드는 개발 편의용 설정임.

 


스프링부트에서의 웹 개발
• web.xml이나 servlet-context.xml이 없는 환경에서 개발
• 설정을 위한 @Configuration이나 상속등을 사용
• 스프링부트는 기본적으로 JSP를 지원하지 않음

 

controller 패키지 추가

 

SampleController.java 추가

사진에 있는 model import

package com.example.b01.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");
    }
    
}

 

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1 th:text="${msg}"></h1>
    <!-- 타입리프식 표현식 -->
</body>
</html>

 

실행하면


SampleJSONController.java 생성

 

1. @ SampleJSONController의 역할

  • 기존 @Controller는 리턴값으로 JSP나 Thymeleaf 파일 이름을 찾아 화면을 보여주지만, @ SampleJSONController는
    리턴하는 데이터 자체를 브라우저에 전송함.
  • 별도의 @ResponseBody를 붙이지 않아도 모든 메서드에 자동으로 적용된 것과 같음.

2. 메서드 동작 분석

  • public String[] helloArr(): 리턴 타입을 문자열 배열(String[])로 설정함.
  • 동작: 사용자가 브라우저에서 /helloArr 주소로 접속하면, 스프링 내부의 변환기(Jackson 라이브러리)가
    자바 배열을 JSON 배열 형태(["AAA", "BBB", "CCC"])**로 변환하여 화면에 출력함.

3. 실행 결과 (브라우저 화면)

서버 실행 후 localhost:8080/helloArr에 접속하면 다음과 같은 텍스트가 보임.

["AAA","BBB","CCC"]


요약

자바의 문자열 배열 데이터를 JSON 형식의 텍스트로 변환하여 브라우저나
호출한 대상에게 그대로 던져주는 REST API용 컨트롤러 코드임.

package com.example.b01.controller;
import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Log4j2

public class SampleJSONController {
    @GetMapping("/helloArr")
    public String[] helloArr() {
        log.info("helloArr..................");
        return new String[]{"AAA", "BBB", "CCC"};
    }
}