๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ํšŒ๊ณ /โœ… 22๋…„ ํšŒ๊ณ 

[์ผ์ผํšŒ๊ณ ] 22.06.02 - "๊ฒ€์ฆ๋ฌธ ์‹คํŒจํ•ด๋„ ๊ณ„์†ํ•˜๊ธฐ, ํ†ตํ•ฉํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋”๋ฏธ๋ฐ์ดํ„ฐ ์„ธํŒ…, ์ฝ”๋“œ์Šค์ฟผ๋“œ ์„ ๋ฐฐ ๊ธฐ์ˆ˜์™€ ์˜จ๋ผ์ธ ๋งŒ๋‚จ"

by kukim 2022. 6. 2.

๐Ÿ“š ๋ฐฐ์šด ๊ฒƒ

AssertJ์˜ assertAll

JUnit5๋‚˜ AssertJ์˜ ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ(e.g. assertThat() ..)๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ๋•Œ ์•ž์˜ ํ•˜๋‚˜๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋’ค์˜ ๊ฒ€์ฆ๋ฌธ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ๋ฌถ์–ด์„œ ํ•œ ๋ฒˆ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธ€์ž‘์„ฑ : 2022.06.02 - [โœ… ํ…Œ์ŠคํŠธ์ฝ”๋“œ] - JUnit5์—์„œ ๊ฒ€์ฆ๋ฌธ์ด ์ค‘๊ฐ„์— ์‹คํŒจํ•ด๋„ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๊ฒ€์ฆ๋ฌธ ๋ชจ๋‘ ์‹คํ–‰ํ•˜๊ธฐ(AssertAll, AssertJ, SoftAssertions)

 

ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค  ํ…Œ์ŠคํŠธ, ๋”๋ฏธ๋ฐ์ดํ„ฐ ์„ธํŒ…

ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ดˆ๊ธฐ๊ฐ’, ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์—ˆ๋‹ค.

์ƒ๊ฐํ•ด๋ณธ ์„ธํŒ… ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

1. java ์ฝ”๋“œ๋กœ ์ง์ ‘ data ๋„ฃ๊ธฐ (ํ•˜๋‚˜์”ฉ ๋„ฃ๊ฑฐ๋‚˜ initDB() ์™€ ๊ฐ™์€ ๋งˆ๋” ํด๋ž˜์Šค๋กœ ํ•œ ๋ฒˆ์— ๋„ฃ๊ธฐ ๋“ฑ)

2. @Sql ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•ด ์ดˆ๊ธฐ .sql ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ํ•˜๊ธฐ

3. application-test.yml ํ…Œ์ŠคํŠธ์šฉ ํ™˜๊ฒฝ ์„ธํŒ…์œผ๋กœ ์ดˆ๊ธฐ์—. sql ์„ธํŒ…ํ•˜๊ธฐ

 

ํ…Œ์ŠคํŠธ์˜ ๋…๋ฆฝ์„ฑ์„ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ๋งˆ๋‹ค ๋™์ผํ•œ ํ™˜๊ฒฝ์ด ๊ฐ–์ถฐ์ ธ์•ผ ํ•œ๋‹ค. ์ด์ „ ํ…Œ์ŠคํŠธ์—์„œ update๋‚˜ delete ํ–ˆ๋‹ค๋ฉด rollback ํ•˜์—ฌ ๋‹ค์Œ ํ…Œ์ŠคํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉด ์•ˆ ๋œ๋‹ค.

 

1,2๋ฒˆ์˜ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์ดˆ๊ธฐ๊ฐ’์„ ๋„ฃ๊ณ  ๋‹ค์‹œ ์ง€์›Œ์ฃผ๋Š” ๊ธฐ๋Šฅ์ด ๋ณ„๋„๋กœ ํ•„์š”ํ•˜๋‹ค. ์•„๋‹ˆ๋ฉด ๋ชจ๋“  ๊ณผ์ •์„ ๋กค๋ฐฑํ•œ๋‹ค.

3๋ฒˆ์˜ ๊ฒฝ์šฐ ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์„ธํŒ…๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋กค๋ฐฑ์œผ๋กœ ๋…๋ฆฝ์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.

 

ํ˜„์žฌ 3๋ฒˆ์˜ ๊ฒฝ์šฐ๋กœ ์„ ํƒํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์ดˆ๊ธฐ ์„ธํŒ…ํ•˜๋Š” .sql์Šคํฌ๋ฆฝํŠธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค๋ฉด ํ…Œ์ŠคํŠธ ํšŒ๊ท€ ๋ฐฉ์ง€๊ฐ€ ๋˜์ง€ ๋ชปํ•œ๋‹ค. 

 

ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ DB ์„ธํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด์•„์•ผ๊ฒ ๋‹ค.

 

@PathVaribale, @RequestParam์—์„œ Optional๋กœ ๋ฐ›๊ธฐ

@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam Optional<String> id){
    return "ID: " + id.orElseGet(() -> "not provided");
}

@GetMapping(value = { "/api/employeeswithoptional", "/api/employeeswithoptional/{id}" })
@ResponseBody
public String getEmployeesByIdWithOptional(@PathVariable Optional<String> id) {
    if (id.isPresent()) {
        return "ID: " + id.get();
    } else {
        return "ID missing";
    }
}

// https://www.baeldung.com/spring-pathvariable
// https://www.baeldung.com/spring-request-param

@PathVariable, @RequestParam์˜ ๊ฐ’์„ Optional๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ ์Šค์ฟผ๋“œ ์„ ๋ฐฐ ๊ธฐ์ˆ˜์™€ ์˜จ๋ผ์ธ ๋ฏธํŒ…(ํ™ˆ์ปค๋ฐ ๋ฐ์ด)

์˜ค๋Š˜ ์ €๋… 7์‹œ๋ถ€ํ„ฐ ๊ฑฐ์˜ 10์‹œ๊นŒ์ง€ 3์‹œ๊ฐ„ ๋™์•ˆ ์ฝ”๋“œ ์Šค์ฟผ๋“œ ์„ ๋ฐฐ๋“ค๊ณผ ์คŒ์œผ๋กœ ๋งŒ๋‚˜ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆด๋‹ค.

 roach, jane, yeon, ๋งˆ๋ฅด์ฝ”, ์ฟ ํผ, K, ์ƒˆ๋ฆฌ, dong, Hiro, Dan, dion, ์šฐ๋”” ์„ ๋ฐฐ๋“ค์„ ๋งŒ๋‚ฌ๋‹ค. ๊ณต์‹ ์‹œ๊ฐ„์ด ๋งˆ์ณค์Œ์—๋„ ๋๊นŒ์ง€ ๋‚จ์•„์„œ ๊ฒฝํ—˜ ๊ณต์œ ํ•ด์ค€ ์„ ๋ฐฐ๋“ค์ด ์žˆ์–ด ํž˜์ด ๋งŽ์ด ๋๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

- ๋ฉ˜ํƒˆ๊ด€๋ฆฌ/์Šฌ๋Ÿผํ”„ : ์ž์ฃผ ์‰ฌ๊ธฐ, ํ‘น ์‰ฌ๊ธฐ, ์‰ฌ์–ด์•ผ ๊ณต๋ถ€๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ์Šคํ”„๋ง vs db vs ์ธํ”„๋ผ : ํšŒ์‚ฌ, ํŒ€๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒ ์ง€๋งŒ ์‹ ์ž… ์ž…์žฅ์—์„œ ์Šคํ”„๋ง/DB์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

- ํ”„๋กœ์ ํŠธ๋Š” ์–ด๋–ป๊ฒŒ?

    - ๊ธฐํš์ž,๋””์ž์ด๋„ˆ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹๋‹ค. view๊ฐ€ ์—†๋‹ค๋ฉด API ๋งŒ ์žˆ์–ด๋„ ์ฝ”๋“œ๊ฐ€ ์ข‹์€ ๊ฒƒ์€ ํ‹ฐ๊ฐ€ ๋‚œ๋‹ค.

    - ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค ์ž˜ํ•˜๊ธด ์–ด๋ ต๋‹ค. ํ•œ ๊ฐœ๋ฅผ ํ•˜๋”๋ผ๋„ ์™œ ์ด ๊ธฐ์ˆ ์„ ์„ ํƒํ–ˆ๊ณ  ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ  ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค.

...(์ƒ๋žต)

 

๋Œ“๊ธ€2