Create
Read
Update
Delete
๋จผ์ ํ๋ก์ ํธ๋ฅผ ๋๋ฆฌ๊ณ
Postman์ผ๋ก ์์ฒญ์ ๋๊ฐ์ง ๋ณด๋ธ ํ์
h2 ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ์ธํ๋ฉด ์ ๋ค์ด๊ฐ์๋ ๊ฒ์ ๋ณผ ์ ์๊ณ
์น ์์ผ๋ก๋ ๊ทธ ์ ๋ณด๊ฐ ์ ์ ๋ฌ๋์ด ๋ค์ด๊ฐ ๊ฒ์ ๋ณผ ์ ์๋ค !!
์ฌ๊ธฐ์ todo๋ฅผ ์๋ฃํจ์ผ๋ก ์ฒดํฌํ๊ฒ ๋๋ฉด
๋ค์ h2 ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํด๋น todo์ ์ํ๊ฐ TRUE๋ก ๋ฐ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค !!
Controller ํ
์คํธ ์ฝ๋๋ ๋ชจ๋ ์๋ฃ !
===============================================================
JRE ์ค์น ํ, ํ๊ฒฝ๋ณ์ ์ค์
ํฐ์บฃ ๊ณต์ ์ฌ์ดํธ์์ ์ค์น
( ๋๋ c๋๋ผ์ด๋ธ์ ์ค์นํจ ! )
- bin
โ ํฐ์บฃ์ ์คํ / ์ข ๋ฃ๊ฐ ๊ฐ๋ฅํ ์คํฌ๋ฆฝํธ ํ์ผ์ด ๋ค์ด์์- conf
โ ์๋ฒ ์ค์ ํ์ผ ๋ค์ด์์- webapps
โ ํฐ์บฃ ์์์ ์คํํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ ์ ์ฅ ๊ฒฝ๋ก
โ.war
ํ์ผ์ ์ด ๊ณณ์ ์ด๋์ํค๊ฑฐ๋, ์ค์ ํ์ผ์์ ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ์ฌ ์คํ ๊ฐ๋ฅ
์ค์นํ๊ณ cmd ํฐ๋ฏธ๋์์ startup.bat
๋ช
๋ น์ด๋ก tomcat์ ์คํ์ํจ ํ,
localhost:8080
์ผ๋ก ๋ค์ด๊ฐ๋ฉด ์๋์ ๊ฐ์ด tomcat ํ๋ฉด์ ๋ณผ ์ ์์ !
( ๊ทธ๋ฆฌ๊ณ ์ผ๋จ .\shutdown.bat
๋ช
๋ น์ด๋ก tomcat ์ข
๋ฃํ๊ณ )
ํ๋ก์ ํธ์ build.gradle
์ plugins ๋ถ๋ถ์ ์๋ ์ค์ ์ถ๊ฐ ํ refresh
plugins { ... id 'war' // ์ถ๊ฐ }
~~Application
ํ์ผ์ extends SpringBootServletInitializer
ํด์ฃผ๊ณ
config๋ฅผ Override ํด์ฃผ๊ธฐ
@SpringBootApplication
public class Todo1Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Todo1Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { // (2)
return builder.sources(Todo1Application.class);
// return๋๋ ๊ฐ์ ํด๋์ค ์ด๋ฆ == ๋ด ~~Application ํด๋์ค ์ด๋ฆ์
}
}
ํ๋ก์ ํธ ๋น๋ ํ, ํ๋ก์ ํธ ํ์ผ ๋ด์ build/libs
ํด๋์ ๋ค์ด๊ฐ๋ฉด .war
๋ก ์์ฑ๋ build ํ์ผ์ด ์์!
ํด๋น ํ์ผ์ tomcat์ด ์ค์น๋ ๊ฒฝ๋ก์ webapps ํด๋ ๋ด๋ก ๊ฐ์ ธ์ด
war ํ์ผ์ ์ด๋ฆ์ด ROOT์ธ ๊ฒฝ์ฐ ๋ณ๋์ ๋ณ๊ฒฝ ์์ด ์คํ ๊ฐ๋ฅํ๋ฐ,
์ฐ๋ฆฌ๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ conf/server.xml
ํ์ผ์ ์ถ๊ฐ ์ค์ ์ถ๊ฐ
( + tomcat ์คํ ํฌํธ๋ 8090์ผ๋ก ๋ณ๊ฒฝํด์ฃผ๊ธฐ ( ํ๋ก์ ํธ๋ ํฌํธ๊ฐ ๊ฐ์ผ๋๊น ))
... <Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> // ํฌํธ ๋ณ๊ฒฝ ... <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="/" docBase="todo1-0.0.1-SNAPSHOT" reloadable="false" > </Context> // docBase ๋ถ๋ถ์ ๋ด .war ํ์ผ ๋ช โ <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> ...
webapps
ํด๋ ๋ด์ ๋ด .war
ํ์ผ์ ์์ถํด์ ํ์ฌhttp://localhost:8090
์ผ๋ก ์ ์ํ๋ฉดwebapps
๋๋ ํ ๋ฆฌ์ ์ฎ๊ฒจ๋์ .war
ํ์ผ์ด ์คํ๋์์์ ํ์ธ ๊ฐ๋ฅ !!( ๋ํ๋ ํ๋ฉด์ด ์๋ฌ๊ฐ์ด ์๊ฒผ์ง๋ง, ๋ด๊ฐ ๋ฐ๋ก ํ์ด์ง์ ๋ํ๋ ๊ฒ๋ค์ ์์ ํด์คฌ๊ธฐ ๋๋ฌธ ! )
=======================================================================
โ๏ธ Ngrok
- ๋คํธ์ํฌ ์ค์ ์ ํ์ง ์์๋ ๋ฐฉํ๋ฒฝ์ ๋์ด ์ธ๋ถ์์ ๋ก์ปฌ ํ๊ฒฝ์ ์ ๊ทผํ ์ ์๊ฒ ํด์ฃผ๋ ํฐ๋๋ง ํ๋ก๊ทธ๋จ
โ - ๋ฌด๋ฃ ํ๋์ ๊ฒฝ์ฐ ์ฐ๊ฒฐ ์ธ์ ์ด ์ฝ 2์๊ฐ๊ฐ๋ ์ ์ง๋จ
( AuthToken ๋ฑ๋ก์ ์๊ฐ ์ ํ ์์ด ์ฌ์ฉ ๊ฐ๋ฅ )
โ ๊ฐ๋ฐ ๋ชฉ์ ์ผ๋ก ์์ ๋๋ฉ์ธ์ ๋ฐ๊ธ๋ฐ์ ํ ์คํ ํ๊ธฐ์ ์ ์ฉ
โ - ๊ฐ๋ฐ ์์ญ์ด ๋๋์ด์ ธ์๋ ํ๊ฒฝ์์ ํต์ ํ ์คํธ ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ
โ
๐ ํ๋ก์ ํธ ๋ ๋ค๋ฅธ ์ฌ๋์ด ์์ ๋๋ฉ์ธ์ผ๋ก ๋ด ๋ก์ปฌ ํ๊ฒฝ์ ์ ์ํ์ฌ ํต์ ํ ์คํธ๋ฅผ ํด๋ณผ ์ ์์ !
โ
[์ฐธ๊ณ ] https://ngrok.com/docs/secure-tunnels#what-are-ngrok-secure-tunnels
๊ณต์ ํํ์ด์ง์์ ngrok ์ค์น !
์์ถ ํด์ ํ์ ngrok.exe
์คํ
ngrok http 8080
ํ๋ฉด ์๋์ ๊ฐ์ด Forwarding ๋ถ๋ถ์ ๊ฐ์ ์ฃผ์๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ ํ์ธํ ์ ์์
์ดํ postman์์ ํด๋น ์ฃผ์๋ก ์ฌ๋ฌ ๋ช
๋ น์ ๋ด๋ ค์ค ์ ์์ ! ใ
ใ
( ์ธํฐ๋ท์ผ๋ก ์ฃผ์๋ฅผ ์น๊ณ ๋ค์ด๊ฐ๋ ๊ฐ๋ฅ ! )
๊ทธ๋ฆฌ๊ณ ngrok ํฐ๋ฏธ๋์ ๋ณด๋ฉด ๋ด๊ฐ ๋ณด๋ธ ์์ฒญ๋ค์ ์ํ ๊ฒฐ๊ณผ๊ฐ ์ด๋ป๊ฒ ๋ํ๋ฌ๋์ง ํ์ธ ๊ฐ๋ฅ
๐ฅ ngrok ์ฌ์ฉ ์ CORS ์๋ฌ
โ ngrok ์ด์ฉํด์ ๋ด ํ๋ก์ ํธ๋ฅผ ์น์์ ๋์ฐ๊ณ post ์์ฒญ์ ํ๋๋ฐ CORS ์๋ฌ๊ฐ ๋ฌ๋ค !
ํ ๋๋ ๋ถ๋ช @CrossOrigin ์ ๋ํ ์ด์ ๋ ๋ฃ๊ณ WebConfig ํด๋์ค๋ ์์ฑํ๋๋ฐ ์ ๋ง ์ด์ํ ์ผ์ด์๋ค..!!
โ ๐ก ํด๊ฒฐ ๋ฐฉ๋ฒ )
โ ํํ์ด์ง ๋ก๊ทธ์ธํด์ ํ ํฐ์ ๋ฐ๊ธ ๋ฐ๊ณ ,
ngrok config add-authtoken ๋ดํ ํฐ
๋ช ๋ น์ด๋ก ํ ํฐ์ ์ถ๊ฐํด์ค ํ์,
ngrok http --host-header=rewrite 8080
์ด ๋ช ๋ น์ด๋ก 8080 ํฌํธ์ ๊ฐ์ ์๋ฒ ์ฃผ์ ๋ฐ๊ธฐ !
์ด ํ ๋์ค๋ ์ฃผ์๋ก ๋ค์ด๊ฐ๋ฉด CORS ์๋ฌ๊ฐ ๋์ง ์๊ณ ์์ฒญ/์๋ต์ด ์ ์จ๋ค.
๋์ถฉ ngrok๊ฐ ์์ฒญ์ ๋์ ๋ฐ๋๋ฐ ๋ง์์ ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ผ๊ณ ํ๋ค !
.gradle
โ gradle ์ด ์ฌ์ฉํ๋ ํด๋
โ task ๋ก ์์ฑ๋ ํ์ผ์ด ์ ์ฅ๋จ
โ ๊ฐ๋ฐ์๊ฐ ํธ์งํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์
.idea
โ ๋ก์ปฌ IntelliJ IDE ๊ตฌ์ฑ์ด ํฌํจ๋ ํด๋
gradle
โ gradle ์ด ์ฌ์ฉํ๋ ํด๋
โ gradle ํ๊ฒฝ์ ์ ๋ฆฌํ wrapper ํ์ผ์ด ์ ์ฅ๋์ด ์์
src
โ ํ๋ก์ ํธ ํด๋๋ก ๊ฐ์ข
์์ค์ฝ๋์ ๋ฆฌ์์ค ํ์ผ์ด ๋ค์ด๊ฐ ์์
main
โ java ์์ค ์ฝ๋๊ฐ ๋ค์ด ์์
test
โ test ํ์ผ์ด ๋ค์ด ์์
.gitignore
โ git ์ด ๋ฌด์ํ ํ์ผ๋ค์ ๋ช
์ํ ๊ฒ
build.gradle
โ gradle ์ ๋น๋ ์ค์ ํ์ผ
โ groovy ์ธ์ด๋ก ์์ฑ๋์ด ์์
โ ์ฌ๊ธฐ์ dependency ๋ช
์
gradlew
โ gradle ์ ๋ช
๋ น ํ์ผ ( macOS / Linux ์ฉ )
gradle.bat
โ gradle ์ ๋ช
๋ น ํ์ผ ( windows ์ฉ )
setting.gradle
โ ํ๋ก์ ํธ ์ค์ ์ ๋ณด ํ์ผ
์ด๋ฒ์๋ ๋ด๊ฐ ์ง์ To-Do App์ ์ฒ์๋ถํฐ ๋(์๋ง๋ ๋ ใ
)๊น์ง ๋ง๋ค์ด๋ดค๋๋ฐ
์ฌ์ค ์ฒ์์๋ ์ด๊ฑธ ์ด์ผํด.. ์ด๋ ๊ฒ ์๊ฐํ์๋๋ฐ
์๊ฐ๋ณด๋ค ์ง๊ธ๊น์ง ๋ฐฐ์ด ๊ฒ๋ค์ ์จ๋จน์ผ๋๊น ์ด๋ ๊ฒ ํ๋ ๊ฑฐ๊ตฌ๋ ~ ํ๋ ๊ฐ์ด ์กํ๋ค !!
๊ทธ๋์ ๋ฌผ๋ก ์์ ์๋ณด๊ณ ๋ด ์๊ฐ๋๋ก๋ง ํ ๊ฑด ์๋์ง๋ง
๊ทธ๋๋ ์ด๋ป๊ฒ ํด์ผํ๋ค๋ ๊ฐ์ ์ก์๋ค!!
์ฌ์ค ์ด๊ฒ postman / h2 / ์น ์์์๋ ์์ฒญ ์๋ต์ด ์ ์ค๊ธด ํ๋๋ฐ
์์ง๊น์ง๋ h2์ ๋ฐ์ดํฐ๊ฐ ์น ์์ผ๋ก ๋ค์ด๊ฐ์ ๋ ๋จ์์์ง ์๊ณ , ์น ์์์ ์ถ๊ฐ๋ฅผ ํด๋ h2์ ๋ค์ด๊ฐ์ง๋ฅผ ์์์ ๋ ๋ฆฌํฉํ ๋ง ํ ๊ฒ์ด๋ค ใ
ใ