์ด๊ธฐ ์ ํ ์ ๊ฒ๋จน์ด์ ๋ฐ ๋ ์ ์ ์๋ ์ฑ ์ฑํฐ 1์์ ๋ฉ์ถ ์ํ๋ก ์์๋๋ฐ, ๋๋์ด ๋ค์ ํด๋ณด๊ธฐ๋ก ํ๋ค. ์บก๋์์ ์คํ๋ง์ผ๋ก ๊ฐ๋ฐํ๊ฒ ๋ค๋ ๋ชฉํ๋ก 2์ฃผ ๋์ ์ฑ ์ค์ต ์น ๋ฐ๋ผ๊ฐ๊ธฐ๊ฐ ๋ชฉํ๋ค.
์ฌ์ฉํ๋ ์ฑ
์ ๊ตฌ๋ฉ๊ฐ๊ฒ ์ฝ๋ฉ๋จ์ '์คํํธ ์คํ๋ง ๋ถํธ'์ด๋ค.
๋ด์ฉ์ด๋ ๋ฐฐ์ด์ ์ ์์ฑํ๊ธฐ ๋ณด๋จ, ์ด๊ธฐ ์
ํ
์ ํ๋ฉด์ ๊ฒช์ ์ํ์ฐฉ์ค๋ฅผ ๋ธ๋ก๊ทธ์ ๊ธฐ๋กํ๋ฉด์ ํ๋ฉด ๋์ค์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ธ๋ฐฉ ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ์์ ์ ์ผ๋ฌ ์๋ค!
๋ฌธ์ ์ ์ ๋๋ก ๋ ํด๊ฒฐ์ฑ
์ ์๊ณ ๊ณ์ ์ด ๊ธ์ ์ฝ๋ ๋ถ๋ค์ ๋ถ๋ ์๋ ค์ฃผ์๊ธธ..
์คํ๋ง ๋ถํธ๋ ์ฌ์ค Ruby on Rails๋ Django์ ์๊ฐ์ ์ป์ด ๋ง๋ค์ด์ง ์คํ๋ง์ ์๋ธ ํ๋ก์ ํธ๋ผ๊ณ ๋ณผ ์ ์๋ค. ์ด๊ฒ ์ ๊ฒ ์ค์ ์ด๋ ์ถฉ๋๋ก ์ธํด ์์ํ๋ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ํ๊ฒฝ์ ์๋์ผ๋ก ์ ๊ณตํ๋ค.
์ฌ์ค ์คํ๋ง์ ํด๋ณด์ง ์๊ณ ์คํ๋ง ๋ถํธ๋ฅผ ํด๋ ๊ด์ฐฎ์๊น?์ ๋ํ ์๋ฌธ์ด ์์ด์ ๊ฒ์์ ์ข ํด๋ดค๋ค.
๋ค๋ค ๊ธฐ์ด ๋ค์ง๊ธฐ์ ๋น์ฐํ ์คํ๋ง์ด ๋ง์ง๋ง, ๊ทธ๋๋ ํ๋ฒ์ ๋๋ฌด ๋ง์ ๊ฒ์ ๋ฐฐ์์ผ ํ ์ง๋ ๋ชจ๋ฅด๋ ํ๋ก์ ํธ๋ฅผ ๋นจ๋ฆฌ ์งํํ๋ ค๊ณ ํ๋๊ฑฐ๋ฉด ์คํ๋ง ๋ถํธ๋ฅผ ๊ณต๋ถํ๋๋ค. ์ด๋ฐ ์ฐจ์์์ ์ด์ฐจํผ ๋ง๋ ๊ฒ ๊ฐ์๋ค. ์คํ๋ง์ ์บก๋ ์ดํ์ ๋ค์ ๊ณต๋ถํ์!
์ด ์ฏค ์ฑ
์ ์ฝ๋ค๊ฐ ์ฒ์ ๋ณด๋ ์ฉ์ด๊ฐ ๋ฑ์ฅํ๋ค.
๋ ๋จ์ด์ ๊ธฐ๋ฅ์ ๊ฐ์๋ฐ ๋งก์ ์ญํ ์ด ๋ค๋ฅด๋ค๊ณ ํ๋ค.
Serverlet์ Java์ฝ ๋ ์์ HTML ์ฝ๋๊ฐ ์กด์ฌ,
JSP๋ HTML ์ฝ๋ ์์ Java ์ฝ๋๊ฐ ์กด์ฌํ๋ ํํ์ด๋ค.
์ผ๋จ ์ด๊ฒ์ ๊ฒ ์ค์น๋ฅผ ํ๋ค. Intellij๊ฐ ์์ฆ์ ์ ํ์ด๋ผ์ง๋ง ์ด์ฌ์์๊ฒ๋ ์ฑ ๊ทธ๋๋ก๋ฅผ ๋ฐ๋ผ๊ฐ๋๊ฒ ๋์ ๊ฒ ๊ฐ์ ์ดํด๋ฆฝ์ค๋ก ์งํํ๋ค.
์ค์น ํ Spring Starter Project๋ฅผ ์ด์ฉํด ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ค, Run As Spring Boot App ํด๋ณด์๋ค.
์ง์ ์ด๊ธฐ ํ๋ฉด..
์ด ํ๋ฉด์ ๋ณด๊ธฐ๊น์ง ๊ฝค๋ ์ค๋ ๊ฑธ๋ ธ๋ค..
๋จ์ํ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ์คํํด ๋ณด๋ ๊ฒ ๋ฟ์ธ๋ฐ, Run As
์์ none applicable
์ด ๋ด๋ค
์ผ๋จ Eclipse Marketplace์์ Eclipse Web Developer Tools๋ฅผ ์ค์นํ๋ค.
๋ก๊ทธ๋ฅผ ๋ณด๋ pom.xml
์ด๋ผ๋ ํ์ผ์์ ์ค๋ฅ๊ฐ ๋๊ณ ์์๋ค.
๊ฒ์ ๊ฒฐ๊ณผ .m2 ํ์ผ์ ์น ๋ค ์ง์๋ผ ๋๋ https๋ก ํธ์ถ์ ๋ฐ๊ฟ๋ผ ๊ธฐํ ๋ฑ๋ฑ์ ์๊ตฌํ๋๋ฐ ํด๊ฒฐ๋ฐฉ๋ฒ์ ๊ทธ๊ฒ ์๋์๋ค.
Maven dependancy๋ฅผ ๋ฑ๋กํ๊ณ maven install -> refresh -> maven update project๋ฅผ ์งํํ๊ณ ํด๊ฒฐ๋์๋ค!
ํ์ฐธ์ ๋ค์ด๋ก๋ ๋์ ์ด๊ธฐ ํ๋ฉด์ด ์ฑ๊ณต์ ์ผ๋ก ๋ด๋ค!
์คํ๋ง ๋ถํธ ๋ฐฐ๋ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ๋ ๋ค์ํ๋ค๋๋ฐ, ์ค๊ฐ์ ํ ๋ฒ ํด๋ด์ผ๊ฒ ๋ค!
์ ์์ ์ผ๋ก ๋ก๋ฉ ๋์๋์ง 8080ํฌํธ์ ๋ง์ง๋ง Started ๋ก๊ทธ๊น์ง ํ์ธ!
SampleController๋ฅผ ์ด์ฉํด์ /hello์ ๋งตํ๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ด๋ ๊ฒ ๋ง๋ฌผ ๊ณตํต Hello World๋ฅผ ๋ก์ปฌ์์ ํ์ธํ ์ ์์๋ค.
์ฌ๊ธฐ์ ๋ณ๋ค๋ฅธ ๊ฐ๊ณต์์ด ๋จ์ํ ๋ฌธ์์ด๋ง ๋์ค๋ ์ด์ ๋ RestController๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํ๋ค.
์ฑ ์ด ์คํ๋ง์ ์กฐ๊ธ์ ํด๋ณธ ์ฌ๋์ ์ํ ๊ฒ ๊ฐ์์ ๋ ๊ฐ์ ์ฌ๋์๊ฒ๋ ์กฐ๊ธ ์ด๋ ค์ด ์ ๋ ์์์ง๋ง, ์์ฅ์์ฅ.. ์ฌ๋ฐ๋ค.. ๊ณต๋ถ๋ฅผ ์ด์ฌํ ํ์..
์ฑ
๊ทธ๋๋ก Lombok์ ์ค์นํ๋ค.
Eclipse ํด๋์ eclipse.ini์
-vm
C:\Program Files\Java\jdk-15.0.1\bin\javaw.exe
--launcher.library
C:\Users\๋น๋ฐ\.p2\pool\plugins\org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.400.v20211117-0650
์ด๋ฐ์์ผ๋ก ๊ฐ์ ํ๊ฒฝ์ ๋ง๊ฒ ์ถ๊ฐํ๋ฉด lombok.jar ํ์ผ์ด ์์์ ๋ฑ ๋ค์ด์ ์๋ค!
ํด๋์ค๋ฅผ ์์ฑํ๋๋ฐ ์์ด์ ์ฝ๊ฐ์ ์ฝ๋๋ง ์์ฑํ ์ ์๋๋ก ํด์ฃผ๋ ์ญํ ์ ํ๋ค.
2์ฅ์ ์ฑ
์ด๋ ๋ค๋ฅธ๊ฒ ๋ง์ ํ๋ค์๋ ์ฑํฐ๋ค...
ํ๋ก์ ํธ ์
ํ
์ ์์ ๋ฐ๋ฐ๋ฅ๋ถํฐ ์์ํ ๊ฑด ์ฒ์์ธ์ง๋ผ ๋ฐ๋ผํ๊ธฐ๋ง ๋ฐ๋นด๋๋ฐ, 2017๋
์ฑ
์ด ์งํ๋ ์ดํ์ ๋ง์ด ๋ฐ๋์ด์ ๋ฒ์ ๋ง์ถ๋๊ฒ ์ด๋ ค์ ๋ค. deprecated ๋ ๊ฒ๋ ๋ง์์ ๊ณ์ํด์ ๊ฒ์์ด ํ์ํ๋ค! ใ
๋จผ์ mysql ์์ฑํ๊ณ application.properties ์์ฑํ๋๋ฐ ์ด ๊ณผ์ ๋ถํฐ๊ฐ ๊ณ ๋์ ์์์ด์๋ค.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
๋ ์ดํ์๋ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์ด ์๋๋ฐ, ๊ทธ ๋๋ถํฐ๋ ์ ํ ์ ์ ๋๋ก ๋ ์ํ์๊ณ ๋ด ์ค์์๋ค! Annotation์ ์คํ๊ฐ ๋๊ฑฐ๋ ์ด๋ฆ์ ์๋ชป ์ด๋ค๊ฑฐ๋ import๋ฅผ ์๋ชปํ๊ฑฐ๋ ๋ญ ๊ทธ๋ฐ ์ค์๊ฐ ์์๋ค.
์ด ์ธ๊ฐ์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋๋ ์๋ฒ๋ ๋์๊ฐ๋ค.
๋ค๋ง ๋๋น ์ฐ๊ฒฐ์ด ๋์ง ์์๋ค. ๋จ์ ๋ฌธ์ ๋ค์ ์ ๋ถ ๊ฐ์ ์ค๋ฅ์๋ค.
Access denied for user 'jpa_user'@'localhost' (using password: YES)
๋น๋ฐ๋ฒํธ๊ฐ ๋ง๋๋ฐ ๊ณ์ํด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
root๋ก ์ ์ํด์ ์๋ก user๋ฅผ ์์ฑํ๊ณ ๊ถํ์ ์ค ๋ค flush privileges ํด๋ ์๋ฌด๋ฐ ๋ณํ๋ ์์๋คใ
๋น๋ฐ๋ฒํธ๊ฐ 8์ ์ด์์ด ๋ง๋์ง, ip์ ์ ๊ทผ ๊ถํ์ด ์๋๊ฑด์ง, ๋ฒ์ ์ด ๋ค๋ฅธ๊ฑด์ง
์ด๊ฒ์ ๊ฒ ๊ณ ๋ฏผํ๊ณ ๊ฒ์ํ๊ณ ์๋ํด๋ณด๋๋ผ ์๊ฐ์ ์์ฒญ ๋ณด๋๋๋ฐ.. ๊ฒฐ๊ณผ๋ ์ฐธํนํ๋ค.
๊ทธ๋ฅ ์ฝ์งX์ฝ์งX์ฝ์ง ํ๊ณ ์์๋ค ๋๋..
Bitnami WAMP ํ์ธ ํ๋ MySQL๊ณผ Apache ์๋ฒ๊ฐ ์ผ์ ธ ์๋๋ผ...
์๋ฒ๋ฅผ ๋ค ๋๊ณ ๋๋ ๋๋์ด ์ฐ๊ฒฐ์ด ๋์์ง๋ง, ํ
์ด๋ธ์ด ์๊ธฐ์ง ์์๋ค.
์ฌ๊ธฐ์ ๋ฐ์ํ ์๋ฌ๋
<์ต์ข application.properties>
spring.jpa.database=mysql
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/jpa_ex?useSSL=false&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true
spring.datasource.username=jpa_user
spring.datasource.password={๋น๋ฐ๋ฒํธ}
spring.jpa.hibernate.ddl-auto=create
spring.jpa.generate-ddl=false
spring.jpa.show-sql=true
logging.level.org.hibernate=info
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
๊ณ ๋๊ณผ ์ญ๊ฒฝ ๋์ ๋ฉ์ฉกํ๊ฒ ํ
์ด๋ธ ์๊ธด๊ฑฐ ํ์ธ! ์ฑ๊ณต!
์ฌ๊ธฐ์ ddl-auto=create
๋ ๊ธฐ์กด ํ
์ด๋ธ ์ญ์ ํ ๋ค์ ์์ฑ์ด๋ผ๊ณ ํ๋ค.
์ง๊ธ์ ์ฑ
๋ฐ๋ผ ์ด๋ ๊ฒ ์์ฑํ์ง๋ง ์ดํ์ update๋ก ๋ฐ๊พธ์ด ์ฃผ์๋ค.
์ฌ๊ธฐ์ ๋ฐ์ํ ๋ฌธ์ ๋ ๋ญ ์ฝ๋ ์ฐ๋๊ฑด ์ญ ๋ฐ๋ผํ์ง๋ง JUnit test ์คํ์ด ์๋๋ค.
dependancy ์ถ๊ฐํด๋, ์ ์ฒ๋ผ maven update project๋ ํด๋ดค๋ค.
์์ํ๊ฒ JUnit์ ๊ธฐ๋ก์ ์๋๋ฐ ์ด๋ก์ด๋ ๋นจ๊ฐ์ด๋ ์ฑ๊ณต/์คํจ ์ฌ๋ถ๊ฐ ์ ํ ์๋ฌ๋ค.
์ด์ฏค๋๋ฉด ๋น์ฐํ ๋ฒ์ ๋ฌธ์ ๊ฒ ๊ฑฐ๋ ํ์ง๋ง ์ด๋ป๊ฒ ํด๊ฒฐํ๋๋๊ฐ ๋ฌธ์ ์๋๋ฐ run as configuration๊ฐ์ Junit 5๋ก ๋์ด์๋๊ฑธ 4๋ก ๋ฐ๊พธ์ด์ค์ผ ํ๋ค.
๋ค์๊ณผ ๊ฐ์ด SQL์ด ์ํ๋๊ฑธ ํ์ธํ ์ ์์๋ค!
"์๋ ๊ทผ๋ฐ ๋งค๋ฒ ์ด๋ ๊ฒ ๋ฐ๊ฟ ์ค์ผํ๋? ๊ท์ฐฎ๋ค"๋ผ๋ ์๊ฐ์ด ๋ค๋ฉด์, ๊ทธ๋ฅ ํ๋ก์ ํธ ์์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ 5๋ก ๋ณ๊ฒฝํด์ฃผ๋๊น ๋งค๋ฒ ํ ํ์๋ ์์๋ค! ํธ-์
์ด ์์ ์์ ์ฌ๋ ค ํ ์คํธ๋ค์ ์คํํ๊ธฐ ์ํด ์์์ ์ธ๊ธํ ddl-auto๋ฅผ create -> update๋ก ๋ณ๊ฒฝํ๋ค.
Spring boot 2.x๋ถํฐ๋ findOne์ด ์์ด์ง๋ ๋ฐ๋์ boardRepo.findById(1L).get();
ํํ๋ก ๋ฐ๊พธ์ด ์ฃผ๋ฉด ๋๋ค.
์ด์ ๋ findById์ return type์ด Optional ์ด๊ธฐ ๋๋ฌธ!
๋ค ์์ฑํ๊ณ ์คํํ๋ ค๊ณ ํ๋ฉด pom.xml Qdomain ์ค์ ์์ execution ์๋ฌ๊ฐ ๋ฌ๋ค. ์๋์ ๊ฐ์ ๋ฉ์ด๋ธ ๋ฆฌ์์ค ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ๋ฉด ๋๋ค.
<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-resources-plugin -->
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</dependency>
๋๋ ํ๋ก์ ํธ ์ฐํด๋ฆญ ์ดํ RunAs -> Maven install(build), Maven -> update project ํด๋ ๊ฐ๋ฅํ๋ค.
๊ทธ๋๋ ๊ณ์ ํด๊ฒฐ์ด ์๋ผ์ ์์ ์ถ๊ฐํ๋ dependancy์ ๋ฒ์ ์ ๊ณ์ ์๋์ด ๋ด์๋๋ฐ ๊ทธ๊ฑฐ ์ง์ฐ๋๊น ํด๊ฒฐ๋๋ค.