์๋ฒ๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ด์ ์ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ถ๋ฆฌํด์ฃผ๋ ์์
์ ์ํํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด ๋ก์ปฌ ๋๋ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ , ์ด์ ํ๊ฒฝ์์๋ MySQL์ ์ฌ์ฉํ๊ณ ์ถ์ ๋ ๊ฐ๊ฐ DB๋ฅผ ๋ค๋ฅด๊ฒ ์ง์ ํด์ค ์ ์๋ค.
๋ํ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ DB ์ ๊ทผ ํจ์ค์๋๋ฅผ ๊ณต๊ฐํ๊ณ ์ด์ ํ๊ฒฝ์์๋ ๋น๊ณต๊ฐ๋ก ์ง์ ํ ์๋ ์๋ค.
์ด์ฒ๋ผ ๊ฐ๊ฐ์ ํ๊ฒฝ์ ๋ฐ๋ผ ์ค์ ์ ๋ค๋ฅด๊ฒ ํ๋ ๊ฒ์ ํ๊ฒฝ ๋ณ์ ๋ถ๋ฆฌ๋ผ๊ณ ํ๋ค.
ํ ์ถ์ฒ์์ ์คํ ์ค์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ค๋ฅธ ์ถ์ฒ์ ์ ํํ ์์์ ์ ๊ทผํ๊ธฐ ์ํด์๋ CORS(Cross-Origin Resource Sharing)๋ฅผ ์ธํ
ํด์ผ ํ๋ค.
๋๋ ๋ค์๊ณผ ๊ฐ์ด WebMvcConfigurer
ํด๋์ค๋ฅผ ์์ ๋ฐ์ CORS๋ฅผ ์ธํ
ํ๋ค.
public class WebConfig implements WebMvcConfigurer {
private static final int MAX_AGE_SEC = 3600;
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // CORS๋ฅผ ์ ์ฉํ URL ํจํด ์ ์
.allowedOrigins("*") // ์์ ๊ณต์ ๋ฅผ ํ์ฉํ Origin ์ง์
.allowedMethods("GET", "POST", "PUT", "PATCH", "DELETE") //ํ์ฉํ HTTP method ์ง์
.maxAge(MAX_AGE_SEC); // 3000sec ๋งํผ pre-flight ์์ฒญ์ ๋ํ ์๋ต์ ๋ธ๋ผ์ฐ์ ์์ ์บ์ฑ
}
}
์ง์ ๋ง๋ ์ปค์คํ
์์ธ, @Valid
์ ๋ํ ์์ธ ๋ฟ๋ง ์๋๋ผ ์์์น ๋ชปํ ๊ณณ์์ ์์ธ๊ฐ ๋ฐ์ํ ์๋ ์๋ค.
์ด ๊ฒฝ์ฐ ๊ณตํต์ ์ผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ์ํํด์ฃผ์ด์ผ ํ๋ค.
๋๋ ๋ชจ๋ ์์ธ์ ์ต์์ ํด๋์ค์ธ Throwable
์ ๋ํ ExceptionHandler
๋ฅผ ๋ง๋ค์ด ์์์น ๋ชปํ ์ด๋ ํ ์์ธ๊ฐ ํฐ์ง๋๋ผ๋ ํด๋น ๋ฉ์๋๊ฐ ์คํ๋๋๋ก ํ๋ค.
@ExceptionHandler(Throwable.class)
public ResponseEntity<ErrorResult> handleGlobalException(Throwable e) {
ErrorResult errorResult = new ErrorResult(INTERNAL_SERVER_ERROR.getHttpStatus(), INTERNAL_SERVER_ERROR.getMessage());
return new ResponseEntity<>(errorResult, errorResult.getHttpStatus());
}
AWS์ Elastic Beanstalk๋ฅผ ํ์ฉํ ์๋น์ค ๋ฐฐํฌ๋ ์งํํ๋ค๊ฐ ์๋ฌ๊ฐ ๊ณ์ํด์ ๋ฐ์ํด ์ค๋จํ๋ค.
AWS์ ๋ํ ๊ฐ๋
์ ๋ ๊ณต๋ถํ๊ณ ๋ค์ ๋ฐฐํฌํด๋ด์ผ๊ฒ ๋ค.