이제까지 배운 내용을 바탕으로, Spring Boot와 MySQL을 연동하여 데이터베이스 CRUD 작업과 RESTful API를 구현한 전체 코드를 정리하겠습니다. 이 코드는 실습 및 프로젝트 개발의 참고 자료로 사용할 수 있습니다.
8.1 프로젝트 구조
Spring Boot 프로젝트의 디렉토리 구조는 다음과 같습니다:
8.2 application.properties
MySQL과의 연결 설정과 기본 옵션을 추가합니다.
# MySQL 데이터베이스 연결 설정 spring.datasource.url=jdbc:mysql://localhost:3306/my_database spring.datasource.username=app_user spring.datasource.password=password123 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # Hibernate 설정 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect # UTF-8 설정 (한글 처리) spring.datasource.hikari.connection-init-sql=SET NAMES utf8mb4 |
8.3 AppConfig.java
JdbcTemplate과 데이터 소스를 설정합니다.
package com.example.demo.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; import javax.sql.DataSource; @Configuration public class AppConfig { @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/my_database"); dataSource.setUsername("app_user"); dataSource.setPassword("password123"); return dataSource; } @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } } |
8.4 User.java
사용자 데이터를 나타내는 모델 클래스입니다.
package com.example.demo.model; import java.time.LocalDateTime; public class User { private Long id; private String name; private String email; private LocalDateTime createdAt; // Getter & Setter public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public LocalDateTime getCreatedAt() { return createdAt; } public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; } } |
8.5 UserRepository.java
데이터베이스와의 상호작용을 담당합니다.
package com.example.demo.repository; import com.example.demo.model.User; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; @Repository public class UserRepository { private final JdbcTemplate jdbcTemplate; public UserRepository(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public int addUser(String name, String email) { String sql = "INSERT INTO user (name, email) VALUES (?, ?)"; return jdbcTemplate.update(sql, name, email); } public List<User> getAllUsers() { String sql = "SELECT * FROM user"; return jdbcTemplate.query(sql, new RowMapper<User>() { @Override public User mapRow(ResultSet rs, int rowNum) throws SQLException { User user = new User(); user.setId(rs.getLong("id")); user.setName(rs.getString("name")); user.setEmail(rs.getString("email")); user.setCreatedAt(rs.getTimestamp("created_at").toLocalDateTime()); return user; } }); } public int updateUser(Long id, String name, String email) { String sql = "UPDATE user SET name = ?, email = ? WHERE id = ?"; return jdbcTemplate.update(sql, name, email, id); } public int deleteUser(Long id) { String sql = "DELETE FROM user WHERE id = ?"; return jdbcTemplate.update(sql, id); } } |
8.6 UserService.java
비즈니스 로직을 처리하는 서비스 계층입니다.
package com.example.demo.service; import com.example.demo.model.User; import com.example.demo.repository.UserRepository; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public int addUser(String name, String email) { return userRepository.addUser(name, email); } public List<User> getAllUsers() { return userRepository.getAllUsers(); } public int updateUser(Long id, String name, String email) { return userRepository.updateUser(id, name, email); } public int deleteUser(Long id) { return userRepository.deleteUser(id); } } |
8.7 UserController.java
RESTful API를 제공하는 컨트롤러 계층입니다.
package com.example.demo.controller; import com.example.demo.model.User; import com.example.demo.service.UserService; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/users") public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } @GetMapping public List<User> getAllUsers() { return userService.getAllUsers(); } @GetMapping("/{id}") public User getUserById(@PathVariable Long id) { return userService.getAllUsers().stream() .filter(user -> user.getId().equals(id)) .findFirst() .orElse(null); } @PostMapping public String addUser(@RequestBody User user) { userService.addUser(user.getName(), user.getEmail()); return "User added successfully"; } @PutMapping("/{id}") public String updateUser(@PathVariable Long id, @RequestBody User user) { userService.updateUser(id, user.getName(), user.getEmail()); return "User updated successfully"; } @DeleteMapping("/{id}") public String deleteUser(@PathVariable Long id) { userService.deleteUser(id); return "User deleted successfully"; } } |
결론
이 코드는 Spring Boot와 MySQL을 연동하여 데이터베이스 CRUD 작업과 RESTful API를 구현한 완전한 예제입니다. 다음과 같은 작업을 학습할 수 있습니다:
- 데이터베이스와 연결 설정.
- JdbcTemplate을 사용한 데이터 처리.
- RESTful API를 통한 데이터 관리.
이 예제를 참고하여 더 복잡한 비즈니스 로직과 기능을 구현해보세요.
'Spring Boot & MySQL' 카테고리의 다른 글
1.9. 확장과 개선 방향 (0) | 2024.12.26 |
---|---|
1.10. 결론 (0) | 2024.12.25 |
1.7. 자주 발생하는 문제와 해결 방법 (0) | 2024.12.25 |
1.6. 데이터 타입 변환과 오류 처리 (0) | 2024.12.25 |
1.5. REST API와 연동 (1) | 2024.12.22 |