# Spring Boot ์
๋ฌธ ๊ฐ์ด๋
## ํ์ต ๋ชฉํ
Spring Boot๋ก Java ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํฉ๋๋ค.
## 1. Spring Boot๋?
Java ๊ธฐ๋ฐ ์น ํ๋ ์์ํฌ์
๋๋ค.
- ์ค์ ์๋ํ
- ๋ด์ฅ ํฐ์บฃ ์๋ฒ
- ์์กด์ฑ ๊ด๋ฆฌ ๊ฐ์ํ
- ํ๋ก๋์
๋ ๋
## 2. ํ๋ก์ ํธ ์์ฑ
Spring Initializr:
https://start.spring.io
- Project: Maven ๋๋ Gradle
- Language: Java
- Dependencies: Spring Web, Spring Data JPA, MySQL Driver
IDE์์ ์์ฑ:
IntelliJ: New Project > Spring Initializr
VS Code: Spring Boot Extension
## 3. ํ๋ก์ ํธ ๊ตฌ์กฐ
src/main/java/
com/example/demo/
DemoApplication.java
controller/
service/
repository/
model/
src/main/resources/
application.properties
static/
templates/
pom.xml (Maven) / build.gradle (Gradle)
## 4. ๊ธฐ๋ณธ ์ ํ๋ฆฌ์ผ์ด์
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
## 5. REST Controller
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/users")
public List<User> getUsers() {
return userService.findAll();
}
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
@PostMapping("/users")
public User createUser(@RequestBody User user) {
return userService.save(user);
}
@PutMapping("/users/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
return userService.update(id, user);
}
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) {
userService.delete(id);
}
}
## 6. Entity
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(unique = true)
private String email;
@CreationTimestamp
private LocalDateTime createdAt;
// Getters and Setters
}
## 7. Repository
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name);
Optional<User> findByEmail(String email);
List<User> findByNameContaining(String keyword);
@Query("SELECT u FROM User u WHERE u.createdAt > :date")
List<User> findRecentUsers(@Param("date") LocalDateTime date);
}
## 8. Service
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List<User> findAll() {
return userRepository.findAll();
}
public User findById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new RuntimeException("User not found"));
}
public User save(User user) {
return userRepository.save(user);
}
@Transactional
public User update(Long id, User userData) {
User user = findById(id);
user.setName(userData.getName());
user.setEmail(userData.getEmail());
return userRepository.save(user);
}
public void delete(Long id) {
userRepository.deleteById(id);
}
}
## 9. application.properties
์๋ฒ ์ค์ :
server.port=8080
๋ฐ์ดํฐ๋ฒ ์ด์ค:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
JPA:
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
## 10. ์์กด์ฑ ์ฃผ์
์์ฑ์ ์ฃผ์
(๊ถ์ฅ):
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
Lombok ์ฌ์ฉ:
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
}
## 11. ์์ธ ์ฒ๋ฆฌ
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
public ResponseEntity<String> handleRuntimeException(RuntimeException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage());
}
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Server error");
}
}
## 12. ์คํ ๋ฐ ๋น๋
์คํ:
./mvnw spring-boot:run
./gradlew bootRun
๋น๋:
./mvnw clean package
./gradlew build
JAR ์คํ:
java -jar target/demo-0.0.1-SNAPSHOT.jar
java -jar -Dspring.profiles.active=prod app.jar
## ์ถ์ฒ ํ์ต ์์
1. ๊ธฐ๋ณธ REST API ์์ฑ
2. JPA Entity์ Repository
3. Service ๊ณ์ธต ๊ตฌํ
4. ์์ธ ์ฒ๋ฆฌ
5. ๋ณด์ ๋ฐ ๋ฐฐํฌ