RESTful API ๊ธฐ๋ฐ Web Application
- IntelliJ
- Springboot - 2.1.7
- Gradle - 4.10.2
- JUnit4
- Github
- H2
- lombok
- JPA
- OAuth2.0
- Mustache
- Bootstrap
- AWS EC2 (Amazon Linux AMI 2)
- AWS RDS (MariaDB 10.2.21)
- AWS S3
- Putty
- HeidiSQL
- Travis CI
- Nginx
- ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ฝ๊ฒํ๊ธฐ ์ํด์ Spring boot starter ์ฌ์ฉ
- ์์ง ๋ง์ ๊ธฐ์ ์์ JUnit4๋ฅผ ์ฌ์ฉํ๋ค๋ ์ , ๊ต์ฌ์ ๋ฐ๋ผ JUnit5๋์ JUnit4 ์ฌ์ฉ
- JUnit์ ๋ฒ์ ์ ๋ฐ๋ผ ๋น๋ ๋๊ตฌ๋ Gradle์ 4๋ฒ์
- ํ ์คํธ์ฉ Database๋ก ๋ฐฐํฌํ ๋๋ง๋ค ์ด๊ธฐํ๋๋ H2 ์ฌ์ฉ
- ์ฟผ๋ฆฌ๋ฌธ์ ์ ๊ฒฝ์ฐ์ง ์๊ณ , ๊ฐ์ฒด ์งํฅ์ ์ธ ์ฝ๋ฉ์ ์ํด JPA ์ฌ์ฉ
- ์ฌํํ๊ณ View์ ์ญํ ๊ณผ ์๋ฒ์ ์ญํ ์ ๋ถ๋ฆฌํ ์ ์๋ Mustache ์ฌ์ฉ
MVC ํจํด์ผ๋ก Dto, Service, Controller ํด๋์ค์ JpaRepository๋ฅผ ์์๋ฐ์ Repository๋ฅผ ํ์ฉ
- Domain ํจํค์ง
- Domain ํจํค์ง๋ Database์ ์ง์ ์ ์ผ๋ก ๊ด๋ จ๋ ํด๋์ค๋ค์ ๋ค๋ฃฌ๋ค. ์๋ฅผ ๋ค์ด Entity์ Repository๊ฐ ํด๋น๋๋ค.
- ๊ตณ์ด ํจํค์ง๋ฅผ ๋ถ๋ฆฌํ๋ ์ด์ ๋ Web Layer๋ณ๋ก ์ญํ ์ ์ฒ ์ ํ ๋๋๋ฉฐ ํ ์คํธ๋ฅผ ์ฝ๊ฒ ํ๊ธฐ ์ํด์์ ๋๋ค.
- ์์ฑ์๋ก Bean ์ฃผ์
- ์์ฑ์๋ก Bean์ ์ฃผ์ ํ๋ฉด ์ํ ์ฐธ์กฐ์ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ ๋, ์ฌ์ ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ ์ ์๋ค.
- ํด๋น ํด๋์ค์ ์์กด์ฑ ๊ด๊ณ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์์ฑ์ ์ฝ๋๋ฅผ ์์ ํ ํ์๊ฐ ์๋ค.
- ๋ค๋ฅธ ๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ ํ๋๋ฅผ final๋ก ์ ์ธํ ์ ์๋ค. ์ด๋ ๋ฐํ์ ํ๊ฒฝ์์ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋๋ ์ํฉ์ ์ฌ์ ์ ๋ฐฉ์งํ ์ ์์ผ๋ฉฐ, @RequiredArgsConstructor๋ก ์์ฑ์๋ฅผ ๋ง๋ค ์ ์๋ค.
- Dto๋ฅผ ์ญํ ์ ๋ฐ๋ผ ๋ถ๋ฆฌ
- Posts Dto๋ก API๋ฅผ ์ฒ๋ฆฌํ ์ ์์ง๋ง, request/response์ฉ Dto๋ฅผ ๋ฐ๋ก ๊ตฌํํ๋ค.
- Posts Dto๋ Entity ํด๋์ค๋ก Database๋ก ๋ง๋ฟ์ ์๋ค. ์ฆ, Entity ํด๋์ค๋ Database์ Table๊ณผ ๋งตํ๋๋ ์ญํ ์ ํ๋ฏ๋ก, Entity ํด๋์ค์ ์ฆ์ ๋ณ๊ฒฝ์๋ ๊ณ ๋ คํด์ผํ ์ ์ด ๋ง๋ค.
- ํ
์คํธ ์ฝ๋ ์์ฑ
- ๊ธฐ๋ฅ์ด ๋ง์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ํ ์คํธ ์ฝ๋๋ ํ๋ก์ ํธ์ ์๋ฒฝํจ์ ์ ์ฆํ๋ค.
- ๊ฐ๋ น, ํน์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ, ๊ธฐ์กด ์ฝ๋๋ค์ด ์ ์์ ์ผ๋ก ์๋ํ๋์ง ํ์ธํ๋ ค๋ฉด ์ดํ๋ฆฌ์ผ์ด์ ์ ์ง์ ๊ตฌ๋ํด์ ํ๋ํ๋ ์คํํด๋ด์ผ ํ๋ค.
- ํ์ง๋ง, ํ ์คํธ ์ฝ๋๋ ์ด๋ฌํ ๋ฒ๊ฑฐ๋ก์์ ํด๊ฒฐํ ์ ์์ผ๋ฉฐ, CI/CD๋ฅผ ํ์ฉํ๋ ๊ฒฝ์ฐ์๋ ํ๋ก์ ํธ์ ๋น๋๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๋ค๋ฃฌ๋ค.
-
OAuth2.0์ ๊ตฌํํ๊ณ , ์ฌ๋ฐฐํฌ์ ๋ก๊ทธ์ธ ์ํ๊ฐ ์ด๊ธฐํ๋๋ ์ํฉ์ ํด๊ฒฐํ๊ธฐ ์ํด Session์ ๋ก๊ทธ์ธํ ์ ์ ์ ์ ๋ณด๋ฅผ ์ ์ฅ. ๊ทธ๋ฌ๋ HttpSession์ getAttribute("user")ํ๋ ๊ณผ์ ์์ NullPointerException๋ฐ์
- ์์ธ: HttpSession์ด null๊ฐ์ผ๋ก ๋ด์ฅ ๋ฉ์๋๊ฐ ์คํ๋์ง ์์ ๊ฒ.
- HttpSession์ final ํค์๋๋ก ์ ์ธํ์ฌ ํด๊ฒฐ, ํด๋น Class์๋ @RequiredArgsConstructor๋ฅผ ์ ์ฉํ๋ค. ํด๋น Annotation์ final๋ก ์ ์ธ๋ ํ๋๋ค์ ์์ฑ์๋ ์๋ ์์ฑํ๊ธฐ ๋๋ฌธ์ final ํค์๋๋ก ํด๊ฒฐํ ์ ์๋ค.
-
๋ก๊ทธ์ธํ ์ ์ ์ ์ด๋ฆ์ด ํ๋ฉด์ ๋์ค์ง ์๊ณ , ๋ก์ปฌ ์ปดํจํฐ์ ์ด๋ฆ์ด ๋์ค๋ ๋ฌธ์ ๊ฐ ๋ฐ์
- ์์ธ: index.js์์ {{userName}}์ผ๋ก ํ์ํ๋๋ฐ, Window OS์ ํ๊ฒฝ๋ณ์์ธ %USERNAME%์ผ๋ก ์ธํด ๋ฐ์ํ ๋ฌธ์
- userName ๋์ loginUser๋ก ๋ณ๊ฒฝํ์ฌ ํด๊ฒฐ
-
IntelliJ์์ DB Brower๋ฅผ ์ด์ฉํ์ฌ AWS RDS ์ฐ๋ ๊ณผ์ ์์ Connection์ด ์๋๋ ๋ฌธ์ ๋ฐ์
- IntelliJ ๋์ HeidiSQL ํด๊ณผ AWS RDS๋ฅผ ์ฐ๋
- IntelliJ์ ์ค์ ๋ฌธ์ ๊ฐ์๋ฐ, ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํจ
- ๋์ฒด์ฌ๋ก MariaDB์ ํธํ๋๋ HeidiSQL์ ํ์ฉ, ์ ์์ ์ผ๋ก ์งํ ๊ฐ๋ฅ
-
Putty์์ EC2์๋ฒ์ hostname์ ๋ณ๊ฒฝํ์ง๋ง, ์ ์ฉ ์๋
-
ํ๋ก์ ํธ๋ช ๊ณผ hostname์ ๋๊ฐ์ด ํด๋ดค์ง๋ง ์คํจ
-
์ค์ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํ๋ ์ค, ๋ฒ์ ์ ๊ณ ๋ คํจ
-
์ง๊ธ๊น์ง ์๋น์ค๊ฐ ์ข ๋ฃ๋ Amazon Linux AMI์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ, ํด๋น ํ๋ก์ ํธ๋ Amazon Linux AMI 2 ๋ฒ์ ์ด๋ฏ๋ก AWS์ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ๋ฉฐ ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด ํด๊ฒฐ
sudo hostnamectl set-hostname webserver.mydomain.com(hostname)
-
-
Puttyํ๊ฒฝ์์ ํ๋ก์ ํธ์ EC2 ์๋ฒ ์ฐ๋๊น์ง ์๋ฃ, RDS๊น์ง ์ฐ๋ํ๋ ๊ณผ์ ์์ ์คํจ
- ์ธ๋ถ Security ์ฐ๋๊ณผ RDS๋ฅผ ์ฐ๋ํ๋ ๊ณผ์ ์์ AWS์ database๋ฅผ ์ธ์ํ์ง ๋ชปํจ
- EC2 ์๋ฒ์ application-real-db.properties ์คํ ๋ฐ๊ฒฌ
- [database๋ช ]๊ณผ [DB ์ธ์คํด์ค ๋ช ] ๊ตฌ๋ถํ๊ธฐ
-
ํ๋ก์ ํธ ๋ณ๊ฒฝ์ฌํญ์ ์ปค๋ฐ/ํธ์ฌํ์ ๋, EC2 ์๋ฒ์ ๋ฐ์๋์ง ์๋ ์ํฉ(๋ฐฐํฌ ์๋ํx)
- deployment-logs : ๊ธฐ์กด์ ์ด๋ ค์๋ PID๋ฅผ ์ฃฝ์ด์ง ๋ชปํ๊ณ , ์๋ก ๋ฐฐํฌ๊ฐ ์๋๋ ๋ฌธ์
- nohup.out : the port may already be in use or the connector may be misconfigured.
- ์ค์ ๋ 8080 port๊ฐ ์ฃฝ์ง์๋ ์ํฉ์์ ์ธ์งํ์๊ณ , ์ด๋ฅผ ๊ฐ์ ๋ก ์ข ๋ฃํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์
- ๋ช ๋ น ํ๋กฌํํธ ์ฐฝ์์ netstat -ano ๋ช ๋ น์ด๋ก ํ์ฌ pid๋ฅผ ํ์ธ, ํด๋น pid๋ฅผ ๊ฐ์ ์ข ๋ฃ์ํด