[๐ป์๊ณ ๋ฆฌ์ฆ] Time Complexity(์๊ฐ ๋ณต์ก๋)
์ทจ์ ์ ์ํด ์ฝ๋ฉํ ์คํธ๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ค๋นํ๊ธฐ ์ , "ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ"์ด๋ ๋ฌด์์ธ๊ฐ์ ๋ํ ๊ณ ๋ฏผ์ ํด๋ณด์๋ค. ์๋ ๊ธ์ ์ฌ๋ฌ ๋ธ๋ก๊ทธ์ ์ธํ๋ฐ์ 'Do it! ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉํ ์คํธ with JAVA' ๊ฐ์๋ฅผ ๋ณด๊ณ ๋ด๋ฆฐ ๋ต์ด๋ค. ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ๋ค๋ ๊ฒ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ ๋ฏผํ๋ค๋ ๊ฒ๊ณผ ๊ฐ์ ๋ง์ด๋ค. ๐์๊ฐ๋ณต์ก๋ "๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ก์ง์ ์ฝ๋๋ก ๊ตฌํํ ๋, ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ๋ค๋ ๊ฒ"์ ๋ฌด์จ ์๋ฏธ์ผ๊น? ์ ๋ ฅ๊ฐ์ ๋ณํ์ ๋ฐ๋ผ ์ฐ์ฐ์ ์คํํ ๋ ์ฐ์ฐ ํ์์ ๋นํด ์๊ฐ์ด ์ผ๋ง๋งํผ ๊ฑธ๋ฆฌ๋๊ฐ๋ฅผ ๊ณ ๋ คํ๋ค๋ ์๋ฏธ๋ผ๊ณ ํ์๋ ์๊ฐํ๋ค. ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ์๋ค๋ ๊ฒ์ ๋ค์ ๋งํด ์ ๋ ฅ ๊ฐ์ด ์ปค์ง์ ๋ฐ๋ผ ์ฆ๊ฐํ๋ ์๊ฐ์ ๋น์จ์ ์ต์ํํ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌ์ฑํ์๋ค๋ ์ด์ผ๊ธฐ์ด๋ค. ๐B..
PRG(POST-Redirect-GET) ํจํด
๐ก PRG ํจํด์ด๋? ์น MVC ๊ตฌ์กฐ์์ ํํ๊ฒ ์ฌ์ฉํ๋ ํจํด์ผ๋ก, HTTP POST ์์ฒญ์ ๋ํ ์๋ต์ด ๋ ๋ค๋ฅธ URL๋ก์ GET ์์ฒญ์ ์ํ Redirect์ฌ์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ค์ ๋งํด, POST ๋ฐฉ์์ผ๋ก ์จ ์์ฒญ์ ๋ํด์ GET ๋ฐฉ์์ ์นํ์ด์ง๋ก Redirect ์ํค๋ ํจํด์ ๋งํ๋ค. ๐ก PRG ํจํด์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ฐ์ํ๋ ๋ฌธ์ ์ ์๋ก๊ณ ์นจ์ผ๋ก ์ธํ ๋์ผํ ์์ฒญ์ด ์ฐ์์ ์ผ๋ก ๋ณด๋ด์ง๋ ์ด์๊ฐ ๋ฐ์ํ๋ค. ๋ง์ฝ ์ด ์ด์๊ฐ ์ค์ํ์ง ์์ ๋ก์ง์ด ์๋ ๋ถ๋ถ์ด๋ผ๋ฉด ์๊ด์๊ฒ ์ง๋ง ๊ฒฐ์ ๊ฐ์ ์ค์ํ ๋ก์ง์์๋ ์ค๋ณต ๊ฒฐ์ ๊ฐ ์ผ์ด๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. POST ์์ฒญ์ URL์ ๋ณต์ฌํ๋๋ผ๋ ๋ค๋ฅธ ์ฌ๋๊ณผ ๊ณต์ ํ ์ ์๋ค. POST ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ฉด Parameter ๊ฐ๋ค์ด URL์ ๋จ๊ฒจ์์ง ์๊ธฐ์ ํน์ Par..
[โํผ์์ ์คํ๋ง ๊ณต๋ถํ๊ธฐ] 3์ผ์ฐจ - ์น MVC ๊ฐ๋ฐ(ํ์ ๊ด๋ฆฌ ์์ )
์์ ๊ตฌ์ฑํ MVC ํจํด์ ๋ง๊ฒ ํ์ ๊ฐ์ ๊ณผ ์กฐํ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ์๋ค. https://github.com/jiholee0/hello-spring GitHub - jiholee0/hello-spring: SPRING ๊ณต๋ถ ๋ ํฌ์งํ ๋ฆฌ SPRING ๊ณต๋ถ ๋ ํฌ์งํ ๋ฆฌ. Contribute to jiholee0/hello-spring development by creating an account on GitHub. github.com Controller (controller/MemberController.java) package hello.hellospring.controller; import hello.hellospring.domain.Member; import hello.hellospring.service.Mem..
[โํผ์์ ์คํ๋ง ๊ณต๋ถํ๊ธฐ] 3์ผ์ฐจ - ์คํ๋ง ๋น๊ณผ ์์กด๊ด๊ณ
https://github.com/jiholee0/hello-spring GitHub - jiholee0/hello-spring: SPRING ๊ณต๋ถ ๋ ํฌ์งํ ๋ฆฌ SPRING ๊ณต๋ถ ๋ ํฌ์งํ ๋ฆฌ. Contribute to jiholee0/hello-spring development by creating an account on GitHub. github.com [์คํ๋ง ๋น์ ๋ฑ๋กํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ] 1. ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์ 2. ์๋ฐ ์ฝ๋๋ก ์ง์ ์คํ๋ง ๋น ๋ฑ๋ก ์ค๋ฌด์์๋ ์ฃผ๋ก ์ ํํ๋ ์ปจํธ๋กค๋ฌ, ์๋น์ค, ๋ฆฌํฌ์งํ ๋ฆฌ ๊ฐ์ ์ฝ๋๋ ์ปดํฌ๋ํธ ์ค์บ์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํํ ๋์ง ์๊ฑฐ๋, ์ํฉ์ ๋ฐ๋ผ ๊ตฌํ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ฉด ์ค์ ์ ํตํด ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ค. 1. ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ..
์๋ธ๋ฆฟ(Servlet)๊ณผ JSP(Java Server Pages)์ ๊ฐ๋ ๋ฐ ์ฐจ์ด
Servlet๊ณผ JSP๋ Java EE์ ์ฌ๋ฌ ๊ธฐ์ ์ค ํ๋์ด๋ค. Java EE(Enterprise Edition)๋? ๊ธฐ์ ์์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๋ฐ ์ ํฉํ ์๋ฐ ๊ฐ๋ฐ ๋ฒ์ ์ ์๋ฏธํ๋ฉฐ, Java EE์ ์คํ์๋ Servlet, JSP, EJB(Enterprise Java Beans) ๋ฑ์ด ์๋ค. ์ฐธ๊ณ : https://doozi316.github.io/java/2020/07/01/WEB20/ 1. Servlet ์๋ธ๋ฆฟ์ ์๋ฒ์์ ์นํ์ด์ง ๋ฑ์ ๋์ ์ผ๋ก ์์ฑํ๊ฑฐ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํํ๊ธฐ ์ํด ์๋ฐ๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ด๋ค. ์ฆ, ์๋ฒ์์ ๋์ ์ผ๋ก ์์ฒญ๊ณผ ์๋ต์ ์ฒ๋ฆฌํ ์ ์๋ API๋ค์ด๋ผ๊ณ ํ ์ ์๋ค. ๊ฐ์ฅ ํฐ ํน์ง์ Java ์ฝ๋ ์์ HTML ํ๊ทธ๊ฐ ์ฝ์ ๋๋ฉฐ, ์๋ฐ ์ธ์ด๋ก ๋์ด์๋ค๋ ๊ฒ์ด๋ค. ์..
[โํผ์์ ์คํ๋ง ๊ณต๋ถํ๊ธฐ] 2์ผ์ฐจ - ํ์ ๊ด๋ฆฌ ์์ ๋ก ๋ฐฑ์๋ ๊ฐ๋ฐํด๋ณด๊ธฐ
https://github.com/jiholee0/hello-spring GitHub - jiholee0/hello-spring: SPRING ๊ณต๋ถ ๋ ํฌ์งํ ๋ฆฌ SPRING ๊ณต๋ถ ๋ ํฌ์งํ ๋ฆฌ. Contribute to jiholee0/hello-spring development by creating an account on GitHub. github.com 1. ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ ์ ๋ฆฌ 2. ํ์ ๋๋ฉ์ธ๊ณผ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ง๋ค๊ธฐ 3. ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ ํ ์คํธ ์ผ์ด์ค ์์ฑ 4. ํ์ ์๋น์ค ๊ฐ๋ฐ 5. ํ์ ์๋น์ค ํ ์คํธ 1. ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ ์ ๋ฆฌ - ๋ฐ์ดํฐ : ํ์ ID, ์ด๋ฆ - ๊ธฐ๋ฅ : ํ์ ๋ฑ๋ก, ์กฐํ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต ๊ตฌ์กฐ - ์ปจํธ๋กค๋ฌ : ์น MVC์ ์ปจํธ๋กค๋ฌ ์ญํ - ์๋น์ค : ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง ๊ตฌํ ..
[โํผ์์ ์คํ๋ง ๊ณต๋ถํ๊ธฐ] 2์ผ์ฐจ - ์คํ๋ง ์น ๊ฐ๋ฐ ๊ธฐ์ด(์ ์ ์ปจํ ์ธ , MVC์ ํ ํ๋ฆฟ ์์ง, API)
1. ์ ์ ์ปจํ ์ธ : Welcome Page์ฒ๋ผ ์๋ฒ์์ ๋ณ๋์ ๋์ ์์ด ํ์ผ์ ์๋ ๊ทธ๋๋ก ์ ์ก 2. MVC์ ํ ํ๋ฆฟ ์์ง : ๋์ ์ปจํ ์ธ ๋ฅผ ์ ์ก 3. API : JSON ๋ฐ์ดํฐ ํฌ๋งท์ผ๋ก ์ ์ก 1. ์ ์ ์ปจํ ์ธ ๋ง ๊ทธ๋๋ก ์์ HTML๋ก ์ด๋ฃจ์ด์ง ํ์ผ์ ์๋ฒ๊ฐ ๋ฐ๋ก ๋ ๋๋ง ์์ด ์ฌ์ฉ์์๊ฒ ์น๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด๋ค. Spring์์๋ ์ ์ ์ฝํ ์ธ ๋ฅผ /static ํด๋์์ ๋ค๋ฃฌ๋ค. 1. ์ฌ์ฉ์๊ฐ ์ ์ ํ์ด์ง(hello.html)๋ฅผ ์์ฒญ 2. Spring Boot์ ๋ด์ฅ ํฐ์ผ ์๋ฒ๊ฐ ์ด๋ฅผ Spring Container์๊ฒ ์ ๋ฌ 3. Spring Container๋ ํ์ด์ง์ ํด๋นํ๋ Controller๊ฐ ์๋์ง ํ์ธ 4. ์๋ค๋ฉด resources ํด๋์ static/hello.html์ด ์๋์ง ์ฐพ๊ณ ..
HTTP์ HTTPS
๋ธ๋ผ์ฐ์ ์ ์์ฒญ๊ณผ ์๋ฒ์ ์๋ต ์ฌ์ด์ ๋ฐ์ดํฐ ๊ตํ ๊ท์ฝ์ 'ํ๋กํ ์ฝ(protocol)'์ด๋ผ๊ณ ํฉ๋๋ค. ์น์์๋ HTTP(Hyper Text Transfer Protocol), HTTPS์ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ต๋๋ค. (HTTPS๋ HTTP์ ๋ณด์ ๊ฐํ ๋ฒ์ ์ ๋๋ค.) ํ๋กํ ์ฝ์ ๋ํด ์์ธํ ์๊ณ ์ถ๋ค๋ฉด? ํ๋กํ ์ฝ ์ ์, ๊ธฐ๋ณธ ์์, ์ข ๋ฅ, ๊ธฐ๋ฅ ๐ ํ๋กํ ์ฝ์ด๋? ํ๋กํ ์ฝ(Protocol)์ ์ปดํจํฐ๋ ๋คํธ์ํฌ ์ฅ๋น๊ฐ ์๋ก ํต์ ํ๊ธฐ ์ํด ๋ฏธ๋ฆฌ ์ ํด ๋์ ์ฝ์ ๋๋ ๊ท์ฝ์ ๋งํ๋ค. ๐ ํ๋กํ ์ฝ์ ๊ธฐ๋ณธ ์์ ๊ตฌ๋ฌธ(Syntax) : ์ ์กํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ easyhomputer.tistory.com ๐ HTTP(Hyper Text Transfer Protocol) HTTP(Hyper Text Transfer P..
[โํผ์์ ์คํ๋ง ๊ณต๋ถํ๊ธฐ] 1์ผ์ฐจ - ์คํ๋ง ํ๋ก์ ํธ๋ฅผ ์๋์ฐ cmd ์ฐฝ์์ ๋น๋ํ๊ณ ์คํํ๊ธฐ
ํ์๋ Window๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์คํ๋ง ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ณ ์คํํด๋ณด๊ธฐ ์ํด์ Window PowerShell์ ์ฌ์ฉํ๋ค. ๋จผ์ cd ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ๋ ฅํ๋ค. ./gradlew build # ๋น๋ cd build/libs java -jar hello-spring-0.0.1-SNAPSHOT.jar # jar ํ์ผ ์คํ ๊ทธ๋ฌ๋ฉด ์จ์~
[โํผ์์ ์คํ๋ง ๊ณต๋ถํ๊ธฐ] 1์ผ์ฐจ - View ์ค์
์คํ๋ง ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ๋ ์งํ์๋ ํ๋ก์ ํธ๋ฅผ ์คํํ ํ localhost์ ์ ์ํ๋ฉด Error ํ์ด์ง๋ง ๋ฌ๋ค. (์ด์ ๊ฒ์๋ฌผ ์ฐธ๊ณ ) ์ด๋ฒ์๋ ์๋ฌ ํ์ด์ง๊ฐ ์๋ ์ค์ ๋ด๊ฐ ์์ฑํ ํ์ด์ง๋ฅผ ๋์๋ณด๋ ค๊ณ ํ๋ค. ์คํ๋ง ๋ถํธ์์๋ Welcome Page ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ, src/main/resources/static/index.html์ ์ํ๋ html ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋๋ค. ๊ณต์ ๋ฌธ์๋ฅผ ์ฝ์ด๋ณด๋ฉด, http://localhost:8080์ผ๋ก ์ ์ํ ๋ static์์ ์๋์ผ๋ก index.html์ ์ฐพ์ ๋์์ค๋ค๊ณ ํ๋ค. (https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-fea..
[โํผ์์ ์คํ๋ง ๊ณต๋ถํ๊ธฐ] 1์ผ์ฐจ - ์คํ๋ง ํ๋ก์ ํธ ์์ฑ
์คํ๋ง ๊ณต๋ถ๋ฅผ ์ํด์ ์คํ๋ง ๋ถํธ ์คํํฐ๋ฅผ ํ์ฉํ์ฌ ์คํ๋ง ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค. https://start.spring.io ์ฌ์ดํธ๋ก ๊ฐ์ ๋ณธ์ธ์๊ฒ ๋ง๋ ํ๋ก์ ํธ ํ๊ฒฝ์ ์ ํํ๊ณ ์ํ๋ dependencies๋ฅผ ์ถ๊ฐํ ํ "GENERATE" ๋ฒํผ์ ๋๋ฅด๋ฉด ๋์ด๋ค. ์ง์ง ๋๋ฌด ๊ฐ๋จํ๋ค.. > Project: Gradle - Groovy Project > Spring Boot: 2.7.10 > Language: Java > Packaging: Jar > Java: 8 > Dependencies: Spring Web, Thymeleaf ๐ ํ์๋ ๋น๋ ๋๊ตฌ๋ก Gradle์ ์ ํํ๋ค. ๊ธฐ์กด์๋ maven์ ๋ ๋ง์ด ์ฌ์ฉํ๋ค๊ณ ๋ค ํ๋๋ฐ, ํ์๊ฐ spring์ ๊ณต๋ถํ ๋์ฏค์๋ ์ด๋ฏธ gradle์ด ์๋๊ฐ ๋น ๋ฅด๋ค๋ ์ด์ ..
๋ธ๋ผ์ฐ์ ์ ์๋ฒ์ ๊ด๊ณ - ์์ฒญ๊ณผ ์๋ต, GET/POST ๋ฐฉ์, ์ ์ /๋์ ๋ฐ์ดํฐ
๐ Request(์์ฒญ)์ Reponse(์๋ต) ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๋ ์์ฒญ๊ณผ ์๋ต์ด๋ผ๋ ๋์์ผ๋ก ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ด๊ณ์ ๋๋ค. Request : ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ์๊ฒ ํน์ ํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์๊ตฌํ๋ ๊ฒ. Reponse : ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด์ ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ณด๋ด๋ ๊ฒ. ๐ GET/POST ๋ฐฉ์ ์ฃผ๋ก ๋ธ๋ผ์ฐ์ ๋ GET/POST ๋ฐฉ์์ ์ด์ฉํ์ฌ Request(์์ฒญ)ํฉ๋๋ค. GET ๋ฐฉ์ : ์ฃผ์์ฐฝ์ ์ง์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐ๋ ๋งํฌ๋ฅผ ํด๋ฆญํด์ ํธ์ถ ์ํ๋ ์น์ ์ฃผ์๋ฅผ ํธ์ถํ ๋ ํ์ํ ๋ฐ์ดํฐ๋ฅผ "?"์ "&,="๋ฅผ ์ด์ฉํด์ ๊ฐ์ด ์ ์กํ๋ ๋ฐฉ์์ ๋งํฉ๋๋ค. ์ฃผ์์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๊ฐ์ด ๋ณด๋ด๋ฏ๋ก ๋จ์ ๋งํฌ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๋ค์ ๋งํด, ์ฃผ์ ์์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์๋ค๋ ์๋ฏธ์ ๋๋ค. GET๋ฐฉ์์ ์ฃผ๋ก ํน์ ํ..