본문 바로가기

개발/Spring Boot

[Spring Boot] Spring Boot + MySQL 실습 환경 세팅

Step 1. 학습용 DB와 계정 만들기

MySQL에 접속한다.

mysql -u root

 

학습용 데이터베이스를 하나 만들고

CREATE DATABASE spring_study
    CHARACTER SET utf8mb4
    COLLATE utf8mb4_unicode_ci;

 

학습용 사용자도 하나 만든다.

CREATE USER 'spring'@'localhost'
IDENTIFIED BY 'spring1234';

 

그리고 권한을 준 다음

GRANT ALL PRIVILEGES
ON spring_study.*
TO 'spring'@'localhost';

spring 사용자에게 spring_study 데이터베이스 내 모든 테이블에 대한 전체 권한을 부여하는 명령

 

적용한다.

FLUSH PRIVILEGES;

 

다음 명령어를 실행했을 때

SHOW DATABASES;

spring_study가 보이면 성공이다.

 

이제 root 계정을 종료한 다음

exit;

 

그리고 학습용 새 계정으로 접속해보자.

mysql -u spring -p

 

비밀번호:

spring1234

 

다음 명령어를 입력했을 때

USE spring_study;

SELECT DATABASE();

 

spring_study가 출력되면 학습을 위한 MySQL 준비가 된 것이다.

 

Step 2. Spring Boot 프로젝트 만들기

VS Code에서 명령 팔레트(Cmd + Shift + P)를 열고

Spring Initializr: Create a Gradle Project...

를 누르고

 

다음과 같이 선택한다.

Spring Boot: 4.1.1
Language: Java
Group: com.example
Artifact: todolist
Package Name: com.example.todolist
Packaging: Jar
Java: 21

 

Dependency는 다음 네 개를 선택한다.

Spring Web
Spring Data JPA
MySQL Driver
Validation

 

Step 3. 프로젝트 구조 이해하기

생성된 프로젝트를 열면 대략 다음 구조가 보인다.

todolist
├── build.gradle
├── settings.gradle
├── gradlew
├── gradlew.bat
└── src
    ├── main
    │   ├── java
    │   │   └── com.example.todolist
    │   │       └── TodolistApplication.java
    │   │
    │   └── resources
    │       └── application.properties
    │
    └── test

 

지금은 딱 네 가지만 기억하도록 하자.

 

build.gradle

프로젝트에서 사용하는 라이브러리를 관리한다.

 

Node.js에서의 package.json과 비슷한 역할이라고 생각해도 좋다.

 

gradlew

Gradle Wrapper로 앞으로 프로젝트를 실행할 때

./gradlew

를 사용한다.

 

src/main/java

Java 코드를 작성하는 곳이다.

 

src/main/resources

설정 파일을 관리하는 곳이다.

 

대표적으로

application.properties

가 있다.

 

Step 4. DB 연결

먼저 Spring Boot에게 "어느 DB 서버로 접속해야 하는지"를 알려주기 위해 DB 연결을 설정한다.

 

src/main/resources/application.properties

spring.application.name=todolist

# MySQL
spring.datasource.url=jdbc:mysql://localhost:3306/spring_study
spring.datasource.username=spring
spring.datasource.password=spring1234

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

 

앞에서 만든 DB와 계정을 기준으로 하면

Database : spring_study
Username : spring
Password : spring1234
Port     : 3306

이다.

 

Step 5. 첫 API 만들어보기

src/main/java/com/example/todolist/HelloController.java

package com.example.todolist;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello Spring Boot!";
    }
}

 

MySQL 서버가 꺼져있다면 다음 명령어를 통해 실행한다.

brew services start mysql

 

이제 프로젝트 루트에서 다음 명령어를 실행하여 서버를 실행한다.

./gradlew bootRun

 

터미널 로그에 다음과 같이 출력되면 

Tomcat started on port 8080

성공이다.

 

여기서 80% EXECUTING와 같이 나타나는 것은

 

./gradlew bootRun이 서버 프로세스를 계속 실행하고 있기 때문에 Gradle 작업이 끝나지 않은 상태라는 뜻으로 현재 상황에서는 정상이다.

 

이제 브라우저에서

http://localhost:8080/hello

로 접속한다.

 

화면에

Hello Spring Boot!

가 나오면 성공적으로 첫 Spring Boot API를 만든 것이다.

 

여기서 반드시 이해해야 할 3가지

@RestController

@RestController
public class HelloController {
    ...
}

Spring에게 말하는 것이다.

"이 클래스가 HTTP 요청을 처리할 Controller야."

 

 

@GetMapping

@GetMapping("/hello")

의 뜻은

GET /hello

요청이 들어오면 이 메서드를 실행하라는 것이다.

 

따라서

@GetMapping("/hello")
public String hello() {
    return "Hello Spring Boot!";
}

의 흐름은

브라우저
    ↓
GET /hello
    ↓
Spring Boot
    ↓
HelloController
    ↓
hello()
    ↓
"Hello Spring Boot!"
    ↓
브라우저

이다.

 

TodolistApplication

프로젝트를 생성하고 생긴 src/main/java/com/example/todolist/TodolistApplication.java 파일의 이 클래스도 중요하다.

@SpringBootApplication
public class TodolistApplication {
	public static void main(String[] args) {
		SpringApplication.run(TodolistApplication.class, args);
	}
}

여기가 프로그램의 시작점이다.

 

Java 프로그램의

public static void main(...)

에서 Spring Boot가 시작된다.

 

그리고

SpringApplication.run(...)

이 실행되면서 Spring이 필요한 객체들을 찾아서 생성하고 웹 서버도 시작한다.

 

Controller
Service
Repository

도 여기서부터 Spring이 관리하게 된다.

 

현재 단계에서의 전체 그림

             Spring Boot
                  │
Client ─────→ Controller
 Browser          │
                  ↓
               Response

 

앞으로 이것을

Client
  ↓
Controller
  ↓
Service
  ↓
Repository
  ↓
MySQL

까지 확장할 것이다.

 

이 구조가 사실 Spring Boot 입문에서 가장 중요한 뼈대이다.