Setting Up Spring Boot Project

Database 의 기본적인 섀정을 마친 이후에 Spring Boot Project 에 본격적으둜 듀어가보도둝 ν•˜μž.

Automatic Data Source Configuration

Hibernate λŠ” Spring Boot 의 JPA default implementation μ΄λΌλŠ” 점을 μœ„μ—μ„œ μ‚΄νŽ΄λ³΄μ•˜λ‹€.

EntityManager λŠ” Hibernate 의 μΌλΆ€λΆ„μœΌλ‘œμ¨, query 의 생성 등을 λ‹΄λ‹Ήν•˜λŠ” main component 이닀. EntityManager, DataSource 듀은 λͺ…μ‹œμ μœΌλ‘œ @Component λ“±μ˜ annotation 이 μ„€μ •λ˜μ–΄ μžˆμ§€ μ•Šμ§€λ§Œ, Spring Boot 의 Auto-configuration 에 λ”°λΌμ„œ μžλ™μœΌλ‘œ Bean 이 μƒμ„±λœλ‹€.

이후에 이 Bean 듀을 Application 의 DAO 등에 injection ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€. DAO λŠ” Database 와 Application 의 μƒν˜Έμž‘μš©μ„ λ‹΄λ‹Ήν•˜λŠ” obejct 이닀. 더 μžμ„Έν•œ λ‚΄μš©μ€ λ‚˜μ€‘μ— μ•Œμ•„λ³΄μž.

Setting up Project with Spring Initializr

Spring Initializr μ—μ„œ λ‹€μŒ 두 개의 dependency λ₯Ό μΆ”κ°€ν•΄μ•Ό ν•œλ‹€.

  • MySQL Driver: mysql-connector-j
  • Spring Data JPA: spring-boot-starter-data-jpa
Spring Boot - Auto Configuration

Spring Boot λŠ” Maven POM file 을 기반으둜 automatic ν•˜κ²Œ data source λ₯Ό 섀정해쀄 것이닀.

DB connection 의 경우, application.properties νŒŒμΌμ„ ν†΅ν•˜μ—¬ μ„€μ •ν•  수 μžˆλ‹€. μ•„λž˜μ™€ 같이 μž‘μ„±ν•˜λ©΄ λœλ‹€.

spring.datasource.url=jdbc:mysql://localhost:3306/student_tracker
spring.datasource.username=springstudent
spring.datasource.password=springstudent

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver λ₯Ό ν†΅ν•˜μ—¬ JDBC driver class name 을 μ§€μ •ν•΄μ£Όμ§€ μ•Šμ•„λ„ Spring Boot κ°€ μ•Œμ•„μ„œ μžλ™μœΌλ‘œ URL 을 ν†΅ν•˜μ—¬ MySQL μž„μ„ νŒŒμ•…ν•œλ‹€.

Creating Spring Boot - Command Line App

μš°μ„  Hibernate / JPA 에 μ§‘μ€‘ν•˜κΈ° μœ„ν•˜μ—¬ Application 을 Command Line 기반으둜 μƒμ„±ν•΄λ³΄μž. 이후에 CRUD REST API λ₯Ό μ‚¬μš©ν•˜μ—¬ λ°œμ „μ‹œν‚¬ 것이닀.

λ‹€μŒ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄μž.

@SpringBootApplication
public class CrudDemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(CrudDemoApplication.class, args)
	}
 
	@Bean
	public CommandLineRunner commandLineRunner(String[] args) {
		return runner -> {
			System.out.println("Hello World");
		};
	}
}

CommandLineRunner λŠ” Application 이 μ‹œμž‘λœ 이후에 νŠΉμ • μ½”λ“œλ₯Ό μ‹€ν–‰ν•  수 μžˆλ„λ‘ μ œκ³΅λ˜λŠ” Interface 이닀. 이λ₯Ό implement ν•˜λ©΄ Spring Boot Application 의 ꡬ동 μ‹œμ μ— μ›ν•˜λŠ” μž‘μ—… 등을 μˆ˜ν–‰ν•  수 μžˆλ‹€.

run() method λŠ” Application 이 μ™„μ „νžˆ μ‹œμž‘λ˜κΈ° 전에 μ‹€ν–‰λœλ‹€. run() method 의 μ§„ν–‰ κ³Όμ •μ—μ„œ ApplicationContext κ°€ λ¨Όμ € μ΄ˆκΈ°ν™”λ˜κ³ , λͺ¨λ“  Bean 듀이 μƒμ„±λ˜κ³  μ΄ˆκΈ°ν™”λœ 이후에 CommandLineRunner 의 μ½”λ“œλ“€μ΄ μ‹€ν–‰λœλ‹€.