[JSCODE] 6ํšŒ์ฐจ

Hanjmoยท2023๋…„ 5์›” 28์ผ
0

๐ŸŽฏ ๋ชฉํ‘œ

  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ถ„๋ฆฌ
  • CORS ์„ธํŒ…
  • ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์—๋Ÿฌ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ
  • AWS์˜ Elastic Beanstalk๋ฅผ ํ™œ์šฉํ•œ ์„œ๋น„์Šค ๋ฐฐํฌ

โœ๏ธ ๋‚ด์šฉ

1. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ถ„๋ฆฌ

์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์ด์ „์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋ถ„๋ฆฌํ•ด์ฃผ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ์ปฌ ๋˜๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” MySQL์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๊ฐ๊ฐ DB๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
๋˜ํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” DB ์ ‘๊ทผ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๊ณต๊ฐœํ•˜๊ณ  ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋น„๊ณต๊ฐœ๋กœ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
์ด์ฒ˜๋Ÿผ ๊ฐ๊ฐ์˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์„ค์ •์„ ๋‹ค๋ฅด๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ถ„๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค.

2. CORS ์„ธํŒ…

ํ•œ ์ถœ์ฒ˜์—์„œ ์‹คํ–‰ ์ค‘์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์„ ํƒํ•œ ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 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 ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์บ์‹ฑ
    }
}

3. ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์—๋Ÿฌ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ

์ง์ ‘ ๋งŒ๋“  ์ปค์Šคํ…€ ์˜ˆ์™ธ, @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์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ๋” ๊ณต๋ถ€ํ•˜๊ณ  ๋‹ค์‹œ ๋ฐฐํฌํ•ด๋ด์•ผ๊ฒ ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€