이제 데이터베이스와 연동해서 로그인 기능을 구현해보자
1. WSL Ubuntu 업데이트
sudo apt update
sudo apt upgrade -y
2. MYSQL 서버 설치
sudo apt install mysql-server -y
3. MYSQL 상태 확인 및 시작
sudo service mysql status # 상태 확인
sudo service mysql start # 시작 (필요 시)
active (running) 이면 정상 실행
4. MYSQL 접속
sudo mysql

위 그림처럼 mysql>로 바뀌면 성공 나오고 싶으면 quit 나 exit
5. 사용자 및 데이터베이스 생성
-- 새 데이터베이스 생성
CREATE DATABASE chat_app CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 새 사용자 생성
CREATE USER 'chatuser'@'localhost' IDENTIFIED BY 'your_password';
-- 권한 부여
GRANT ALL PRIVILEGES ON chat_app.* TO 'chatuser'@'localhost';
-- 변경 사항 적용
FLUSH PRIVILEGES;
chatuser와 password는 자신이 설정 가능
6. spring boot 연동 설정
application.properties에서 아래 코드 작성
spring.datasource.url=jdbc:mysql://localhost:3306/chat_app
spring.datasource.username=chatuser
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.show-sql=true
7. MySQL JDBC 드라이버 추가
프로젝트의 빌드 파일 (build.gradle)에 추가
dependencies {
implementation ("mysql:mysql-connector-java:8.0.33")
}
8. Gradle 동기화 (의존성 반영)
spring 프로젝트로 이동해서 동기화 실행
./gradlew build
연동 테스트
1. REST Client 확장 프로그램 설치
2. 프로젝트 루트 (demo/)에 새로운 파일 생성
user-api-test.http
반드시 확장자는 http로 해야한다.
3. POST / GET 테스트 작성 (user_api_test.http)
### 유저 생성
POST http://localhost:8080/user/create
Content-Type: application/json
{
"username": "taemin123",
"password": "pass123",
"nickname": "태민"
}
### 유저 조회
GET http://localhost:8080/user/taemin123
작성을 완료하고 저장하면 Send Request 버튼이 뜨고 클릭하면 응답창이 뜸

4. 데이터베이스에 저장된 데이터를 보고싶으면
sudo mysql
SHOW DATABASES; // 실행할 데이터베이스 선택
USE chat_app;
SHOW TABLES;
SELECT * FROM user;

사용한 예시 코드
1. UserController.java
package com.example.demo.controller;
import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserRepository userRepository;
@PostMapping("/create")
public String createUser(@RequestBody User user) {
userRepository.save(user);
return "User created!";
}
@GetMapping("/{username}")
public User getUser(@PathVariable String username) {
return userRepository.findByUsername(username);
}
}
2. User.java
package com.example.demo.model;
import jakarta.persistence.*;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
private String username;
private String password;
private String nickname;
// 기본 생성자
public User() {}
public User(String username, String password, String nickname) {
this.username = username;
this.password = password;
this.nickname = nickname;
}
// Getter & Setter 생략 가능 (롬복 쓰면 @Data)
// 아래 필요 시 직접 작성해도 됨
public Long getId() { return id; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
public String getNickname() { return nickname; }
public void setNickname(String nickname) { this.nickname = nickname; }
}
3. UserRepository.java
package com.example.demo.repository;
import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
코드에 대한 분석은 다음 로그인 기능 구현에서 보자
