๋์ ๋๋ฒ์งธ ํด์ปคํค์ด ๋๋ฌ๋ค.
์ด๋ฒ ๋ํ์์๋ ๊ฐ์ธ์ ์ผ๋ก ๋ชฉํํ๋ ๊ฒ๋ค์ ๋ด ํ์ผ๋ก ์ด๋ค๋ธ ๊ฒ ๊ฐ์์ ์ข์๊ณ ,
๋ฌด์๋ณด๋ค ์์์ด๋ผ๋ ๊ฐ์์ ์ธ ์ฑ๊ณผ๊ฐ ์์ด ๊ธฐ๋ปค๋ค ๐ค
์ค๋น ๊ณผ์ ๊ณผ ์ํ์ฐฉ์ค๋ค์ ๋ณต๊ธฐํ๋ฉฐ ๋ํ ํ๊ธฐ๋ฅผ ๊ธฐ๋กํด๋ณธ๋ค.
๐ Notion ๋ํ ๊ณต๊ณ
๊ตญ๋ฏผ๋ํ๊ต ์ํํธ์จ์ด์ตํฉ๋ํ ํํ Koss์ ์๋ช
์ฌ์๋ํ๊ต IT๊ณตํ์ ๊ณต ํํ Code-it์์ ๊ฐ์ตํ ํด์ปคํค์ด๋ค.
2022๋
12์ 28์ผ๋ถํฐ ๊ตญ๋ฏผ๋ํ๊ต ๋ฏธ๋๊ด ์์จ์ฃผํ์คํ๋์ค์์ ๋ฌด๋ฐ 2์ผ๊ฐ ์งํ๋๋ค.
์ ์ฒญ ๋์์ ์๋ ํ๊ณผ ์์ ์ฌํ์์ผ๋ก ์ ํ๋๋ค.
๋ ๊ทธ๋ ๋ฏ ๋๋ ๋ฐฑ์๋๋ก ์ฐธ์ฌํ๋ค.
๋ฌด๋ฐ์ผ๋ก ์งํ๋๊ธฐ ๋๋ฌธ์ ํ๋ค๊ธด ํด๋ ์ ํ๋ ์๊ฐ๋์ ์ด๋ง์ด๋งํ ์ง์ค๋ ฅ์ ๋ฝ์๋ผ ์ ์์ด ์ข์ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ๋๊ตฌ๋ ํ์ด ๋ ์ง ๋ชจ๋ฅด๋ ๊ฒ๋ ์ฌ๋ฐ๋ค.
(๋ฌผ๋ก ์ด์ ๊ฒฝ๋ ฅ 20๋
์ง๋ฆฌ ๊ธฐ์ฌ๊ฐ ๋ชจ๋ ๋ฒ์ค์ ํ๊ฒ ๋ ์๋ ์์ง๋ง,
์ง์ ์ด์ ๋๋ฅผ ์ก๊ฒ ๋ ์๋ ์๋ค ๐...)
์ฆ์์์ ๊ฐ๋ฐํ๋ ๊ฒ์ด ํด์ปคํค์ ์ ์์ด๊ธด ํ์ง๋ง,
๊ทธ๋๋ ๋๋ฌด ์๋ฌด๋ฐ ์ค๋น ์์ด ๊ฐ๋ค๊ฐ๋ ํ๋ก์ ํธ ์ธํ
๋์ค์ ํด๊ฐ ์ง๋ ๊ฑธ ๊ฒฝํํ๊ฒ ๋ ์ง๋ ๋ชจ๋ฅธ๋ค.
ํ๋ก์ ํธ ์์กด์ฑ์ด๋ DB ์ธํ
์ ๋ฏธ๋ฆฌ ํด๊ฐ๊ณ , ํ๋ก ํธ์์ ์ฐ๋์ ์ํ ์ค๋น๋ ํด๊ฐ๋ ๊ฒ ์ข๋ค.
์ฌ์ ๊ฐ ๋๋ค๋ฉด ๊ฐ๋จํ CRUD๋ฅผ ๋ด์ ERD์ ์ํฐํฐ ์ฝ๋๋ ์ค๊ณํด๊ฐ๋ ๊ฑธ ์ถ์ฒํ๋ค.
ํ์๋ ์ง๋ ๋ํ์์์ ๊ฒฝํ์ ํ ๋๋ก ์ ๋ ์ ๋ชจ๋ ์ค๋นํด๋๊ณ ๊ฐ๋ค.
๋๋ถ์ ๋ค๋ฅธ ํ์์ ERD ์ค๊ณ๋ก ๊ณ ๋ฏผํ ๋ ๋ฐ๋ก ๊ฐ๋ฐ์ ์์ํ ์ ์์ด์ ์๊ฐ์ ๋ง์ด ์ ์ฝํ ์ ์์๋ค.
Gradle
RDBMS์ธ MySQL
๊ณผ ์คํ๋ง์ JPA
๋ฅผ ๋งคํํ๋ ค๋ฉด MySQL Connector
์ด๋ผ๋ ๋๋ผ์ด๋ฒ๊ฐ ํ์ํ๋ค.
๋ฏธ๋ฆฌ ์ค์นํ๊ณ ์ค์ ํ์ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
์ ๊ดํ ์ ๋ณด๋ฅผ ๊ธฐ๋กํด๋๋ฉด ์ข๋ค.
API ์๋ฒ๋ฅผ EC2์ ๋ฐฐํฌํด์ ํด๋ผ์ด์ธํธ์ ์ฐ๋ํ ๊ณํ์ด์๋ค.
๋ฐ๋ผ์ EC2 ์ธ์คํด์ค์ RDS ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฏธ๋ฆฌ ์ด์ด๋๊ณ ๊ฐ๋ค.
์์์๋ ์ธ๊ธํ๋ฏ ๋ง์ด ์ฐ๋ ๊ธฐ๋ฅ๋ค์ ๋ํด์๋ ๊ฐ๋จํ๊ฒ ERD๋ ๊ทธ๋ ค์ ๊ฐ๋ค.
ERD ์์ฑ์ ๐ERD Cloud ๋ผ๋ ์ฌ์ดํธ๋ฅผ ์ด์ฉํ๊ณ ,
์ฌ์ดํธ ๋ฉ์ธ์ ์๋ OKKY
๋ผ๋ ์ปค๋ฎค๋ํฐ์ ERD๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ด ๊ณผ์ ์์ PK ๋งคํ๊ณผ ๋ค๋๋ค ๊ด๊ณ ๋ค๋์ผ๋ก ํ๊ธฐ ๋ฑ JPA์ ๋ํ ๊ณต๋ถ๋ ๋ง์ด ํ๋ค.
ํ๋น๋ฉ์ ๋๋ค์ธ ๊ฒ ๊ฐ์๊ณ , 5์ธ 1ํ์ด์๋ค.
ํ์ง๋ง ์ธ ๋ช
์ด ์น ๊ฐ๋ฐ ๊ฒฝํ์ด ์์๊ณ ,
๊ทธ์ค ํ๋ช
์ ๋ชธ์ด ์ ์ข์์ ์ค๋ํฌ๊ธฐ ํ๊ณ ์ง์ ๊ฐ์
จ๋ค (...)
๋คํํ ๋๋จธ์ง ํ ๋ถ์ ํฌ์ง์
์ด ํ๋ก ํธ์๊ณ ๋๋ ํผ์์ ์ปค๋ฒ๊ฐ ๊ฐ๋ฅํด์ ๋์ด์ ๊ฐ๋ฐ์ ์ง์คํ๊ธฐ๋ก ํ๋ค.
์ฃผ์ ๋ ์ฒญ์ถ
์ด์๋ค.
ํ ์ฃผ๊ฐ์ ๋ฌธํ์ํ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ฒํด์ฃผ๋ ์น ์ฌ์ดํธ๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค๋ ์๊ฒฌ์ด ๋์๋ค.
์ข์ ์์ด๋์ด๋ผ๊ณ ์๊ฐํด์ ๋ฐ๋ก ๊ฐ๋ฐ์ ์์ํ๋ค.
๊ณต์ฐ ์ ๋ณด๋ ์ธ๋ค์ผ์ ์ธํฐํํฌ ๊ฐ์ ์๋งค ์ฌ์ดํธ์ ๋ฐ์ดํฐ๋ฅผ ํฌ๋กค๋งํด์์ ๋ณด์ฌ์ฃผ๊ธฐ๋ก ํ๊ณ ,
์๊ฒฌ์ ๋๋ ์ ์๋ ๊ฐ๋จํ ์ปค๋ฎค๋ํฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ๋ก ํ๋ค.
๊ฐ๋จํ ๊ธฐ๋ฅ์ด๊ธด ํ์ง๋ง ์ด๊ฒ์ ๊ฒ ๋ญ๊ฐ ๋ง์ด ๋ค์ด๊ฐ๋ค.
๋๋ API ์๋ฒ ๋ฐฐํฌ๊ฐ ์ฒ์์ด์๊ณ , ํ๋ก ํธ ์น๊ตฌ๋ ํ
์ผ์๋๋ฅผ ์ฒ์ ์จ๋ณธ๋ค๊ณ ํ๋ค.
Postman
์ผ๋ก ํ
์คํธ์ ๋ฌธ์ํ๋ฅผ ๋์์ ํ๋ค.
ํ
์คํธ ์ ํ์ง์ ํฌ์คํธ๋งจ ๋ง๊ณ ๋ Swagger
๊ฐ ์๊ธด ํ๋๋ฐ ์จ๋ณธ ๊ฒ ํฌ์คํธ๋งจ ๋ฟ์ด๋ผ ์ต์ํ ๊ฑธ๋ก ํ๋ค.
๊ธฐ๋ณธ์ ์ธ API ์๋ต์ ApiResponse ํด๋์ค์ ์๋ต ๊ฐ์ฒด๋ฅผ ๋ฌ์์ฃผ๋ ๊ฒ์ผ๋ก ํ๋ค.
์์ฒญ๊ณผ ์๋ต ๋ชจ๋ dto
๋ฅผ ๋ง๋๋ ๊ฒ ์ข๋ค๊ณ ๋ค์๋๋ฐ,
API๋ง๋ค ์๋ต ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์๊ฐ์ด ์์ด์ ์ผ๋ถ๋ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์๋ต์ผ๋ก ๋ณด๋๋ค.
๋์ค์ ๋ฆฌํฉํ ๋งํ๋ฉด์ ์์ ํด๋ด์ผ์ง.
๐จ ๊ฐ๋ฐ ์ค ๊ฒช์ ์๋ฌ (1)
nullable=true
๋ก ์ค์ ํ ์ปฌ๋ผ์์ null๊ฐ์ด ๋ฆฌํด๋๋ ๊ฒฝ์ฐ (e.g. ๋ค๋ฅธ ์ํฐํฐ์ ์กฐ์ธํ ์ปฌ๋ผ) ์๋ต์ด ์ ์ก๋์ง ์๋ ๋ฌธ์ ๊ฐ ์์๋ค.
์กฐ์ธํ ์ปฌ๋ผ์@JsonIgnore
์ด๋ ธํ ์ด์ ์ ๋ถ์ฌ์ ํด๊ฒฐํ๋ค.
Travis CI๋ S3 + CodeDeploy๋ฅผ ํตํด ๋ฐฐํฌ์๋ํ ๋ก์ง์ ๊ตฌ์ถํ๊ณ ์ถ์๋๋ฐ ๊ทธ๊ฑด ๋๋ฌด ์ธ๋ฐ์๋(..) ์์ฌ์ด์๋ ๊ฒ ๊ฐ๊ณ ,
ํ
์คํธ๊ฐ ๋๋ API ์๋ฒ๋ฅผ ๊นํ๋ธ์ ํธ์ํ๊ณ EC2์ ํด๋ก ํด์์ ๋น๋ํ๋ ๋ฐฉ์์ ์๋ ๋ฐฐํฌ๋ฅผ ํ๋ค.
๐จ ๊ฐ๋ฐ ์ค ๊ฒช์ ์๋ฌ (2)
๋ถ๋ช ํ ์๋ฒ๋ ๋ฐฐํฌ๊ฐ ๋๋๋ฐ, ์ฐ๊ฒฐํด๋ ๋ด DB ์์ ๋ฐ์ดํฐ๊ฐ ๋จ์ง ์์๋ค.
์์ธ๋ ๋ชจ๋ฅด๊ณ ์๊พธ ์ ์ด๋ฌ๋ ํ๋ฅ์ง๋ฅ ๋์๊ฐ๋์ ํค๋งธ๋๋ฐ,
์์ธ์.ignore
์ฒ๋ฆฌํ ์ค์ ํ์ผ(application.yml
)์ด ๊นํ๋ธ์ ํธ์๋์ง ์์๊ธฐ ๋๋ฌธ์ด์๋ค.
๊ธํ๊ฒ gitignore ํด์ ํ application.yml ํ์ผ์ ํธ์ํด์ ํด๊ฒฐํ๋๋ฐ,
๊ทธ ๊ณผ์ ์์ ๋์ ์์คํ ๊ฐ์ธ์ ๋ณด๊ฐ ํจ๊ป ํธ์๋๋ ์ฌํ๊ฐ ๋ฐ์ํ๋ค.
ํด๋น ๋ฌธ์ ๋ ์ด๋ ๊ฒ ํด๊ฒฐํ๋ค.
๐จ ๊ฐ๋ฐ ์ค ๊ฒช์ ์๋ฌ (3)
์ง์ด ์๋ ๊ณณ์์ ๋ฐฐํฌํ๋ ์ํฉ์ด๋ผ AWS์ํ๋ ฅ์ ip ํ ๋น
์ ์ฌ์ฉํ๋๋ฐ,
๋ฌธ์ ๋ ํ๋ฆฌํฐ์ด์ ๊ฒฝ์ฐ ํ๋ ฅ์ ip ํ ๋น์ด ๋ฑ ํ์๊ฐ๊น์ง ๋ฌด๋ฃ์ฌ์ 0.2๋ฌ๋ฌ ์ ๋๊ฐ ๊ณผ๊ธ๋๋ค.
ํ๋ ฅ์ ip ํ ๋น์ ์ฌ์ฉํ ํ์๋ ๊ผญ๊ผญ ํด์ ํ๋ ๊ฒ์ ์์ง ๋ง ๊ฒ...
(EC2 ์ฝ์ ์์์ ํ๋ ฅ์ ip ์ฐ๊ฒฐ ํด์ ํ ๋ฆด๋ฆฌ์คํ๋ฉด ๋๋ค.)
๋ ๊ทธ๋ ๋ฏ CORS๋ฅผ ๋ง๋ฌ๋ค.
๋๋ถ๋ถ์ CORS ๋ฌธ์ ๋ ์๋ฒ ๋จ์์ ํด๊ฒฐํด์ผ ํ๋ค๊ณ ์๊ณ ์๊ณ ,
์ด๋ฏธ ์ด์ ํ๋ก์ ํธ์์ ์ฌ๋ฌ๋ฒ ํด๊ฒฐํด๋ดค๊ธฐ์ Configuration ์ถ๊ฐ๋ก ํด๊ฒฐํ๋ค.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("์ ์์ ํ์ฉํ url");
}
}
๐ ๊ฒฐ๊ณผ๋ฌผ ๋ ํฌ์งํ ๋ฆฌ ๋ฐ๋ก๊ฐ๊ธฐ
์ด๋ฒ์๋ ํํ ์์ด ์ด์ฌํ ๋ถํ์ฐ๊ณ ์๋ค~!
์ด์ ์์ฑ ์ด์ฌํ ์ค๋นํ ๊ฒ์ ๐