๊ฐœ๋ฐœ์ž HOON
๐Ÿ› HOON DEVLog
๊ฐœ๋ฐœ์ž HOON
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๐Ÿ˜Ž ์ „์ฒด ์นดํ…Œ๊ณ ๋ฆฌ (137)
    • ๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„ (7)
    • ๐Ÿฆ” ์ทจ์—…์ค€๋น„ ๊ธฐ๋ก (7)
    • โ˜• ์ž๋ฐ” : JAVA (5)
    • ๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS (80)
    • ๐ŸŒฑ ๋ฐฑ์—”๋“œ : Backend (13)
    • ๐Ÿงช ์ปดํ“จํ„ฐ๊ณผํ•™ : CS (11)
    • ๐Ÿ—‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค : DB (1)
    • ๐Ÿƒ‍โ™‚๏ธ DEVLOG (8)
    • โš™๏ธ Trouble Shooting (5)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • GitHub
  • Resume

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
๊ฐœ๋ฐœ์ž HOON

๐Ÿ› HOON DEVLog

[DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (3) DTO์— ๋”ฐ๋ฅธ ์‘๋‹ต ์ƒ์„ฑ ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ
๐Ÿƒ‍โ™‚๏ธ DEVLOG

[DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (3) DTO์— ๋”ฐ๋ฅธ ์‘๋‹ต ์ƒ์„ฑ ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ

2022. 12. 16. 20:23

 

๐Ÿ˜Ž 0. ์ด์ „ ๊ธ€

 

[DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (1) ๋ณ€์ˆ˜ ์ž‘๋ช…, Optional, Enum ํ™œ์šฉ

๐Ÿ 0. ์„œ๋ก  ์กธ์—…์ž‘ํ’ˆ์œผ๋กœ ํƒˆ๋ชจ ์ง„๋‹จ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ธ '์ œ๋ฐœ๋ชจ๋ฐœ'์„ ๊ฐœ๋ฐœํ•˜๊ณ , 'ํ•ด๋‹น ํ”Œ๋žซํผ์„ ์ž์‹ ์˜ ํšŒ์‚ฌ์— ์ด์ „ํ•ด ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค'๋ผ๋Š” ์–ด๋А ๊ต์ˆ˜๋‹˜์„ ๋งŒ๋‚˜ AWS ์ƒํƒœ๊ณ„์—์„œ ์‚ฌ๋‚ด ์„œ๋ฒ„ ์ปดํ“จํ„ฐ๋กœ

hoons-dev.tistory.com

 

[DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (2) ๊ณตํ†ตํ•„๋“œ๊ฐ€ ๋งŽ์€ DTO ๋งŒ๋“ค๊ธฐ

๐Ÿ 0. ์ง€๋‚œ ๊ธ€ [DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (1) ๋ณ€์ˆ˜ ์ž‘๋ช…, Optional, Enum ํ™œ์šฉ ๐Ÿ 0. ์„œ๋ก  ์กธ์—…์ž‘ํ’ˆ์œผ๋กœ ํƒˆ๋ชจ ์ง„๋‹จ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ธ '์ œ๋ฐœ๋ชจ๋ฐœ'์„ ๊ฐœ๋ฐœํ•˜๊ณ , 'ํ•ด๋‹น ํ”Œ

hoons-dev.tistory.com

 

 


 

๐Ÿ 1. ์„œ๋ก 

 

์ง€๋‚œ ๋ฒˆ DTO๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ๋‚˜์„œ, ์‘๋‹ต์„ ์–ด๋–ค ์‹์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ์ง€ ์ƒ๊ฐํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

 return ResponseEntity.ok()
	.contentType(MediaType.APPLICATION_JSON)
	.body(JBMBResponseObject.<T>builder()
		.resultCode(...)
		.resultMessage(...)
		.hasError(...)
		.errorMessage(...)
		.errorSource(...)
		.requestURL(...)
		.responseAt(...)
		.responseBody(...)
		.build()
);

์‘๋‹ต์„ ๋งŒ๋“ค์–ด ๋‚ผ ๋•Œ๋งˆ๋‹ค ์œ„์— ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ƒํ™ฉ์— ๋งž๊ฒŒ ๊ณ„์†ํ•ด์„œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— '์žฌ์‚ฌ์šฉ์„ฑ์ด ์ข‹๊ณ , ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋„ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•œ ์‘๋‹ต ์ƒ์„ฑ๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž' ๋ผ๋Š” ์ƒ๊ฐํ•˜์— responseCreator๋ฅผ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ œ๊ฐ€ ๊ณ ๋ คํ•œ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1) ์„œ๋น„์Šค์˜ ํ•œ ๋ฉ”์†Œ๋“œ์—์„œ๋Š” ๋ณดํ†ต ํ•œ ์‘๋‹ต๋งŒ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค.
: ํ•œ ๋ฉ”์†Œ๋“œ ๋‚ด์— ์„ฑ๊ณตํ–ˆ์„ ๋•Œ์˜ ์‘๋‹ต, ์‹คํŒจํ–ˆ์„ ๋•Œ์˜ ์‘๋‹ต, ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ์œ ํšจํ•˜์ง€ ์•Š์€ ์‘๋‹ต, ์ผ๋ถ€๋งŒ ์„ฑ๊ณตํ–ˆ์„ ๋•Œ์˜ ์‘๋‹ต ๋“ฑ, ์กฐ๊ฑด ๋ถ„๊ธฐ์— ๋”ฐ๋ฅธ ๋‹ค์–‘ํ•œ ์‘๋‹ต์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋•Œ๋งˆ๋‹ค ์ €๋Ÿฐ ๋นŒ๋” ํŒจํ„ด์œผ๋กœ ๊ธธ๊ฒŒ ์ด์–ด์ง„ ์‘๋‹ต์„ ๊ณ„์†ํ•ด์„œ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๊ฐ’์— ๋”ฐ๋ผ responseCreator๊ฐ€ ๋งž์ถฐ์„œ ์‘๋‹ต์„ ๋ณด๋‚ด์ฃผ๋ฉด ์–ด๋–จ๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

2) ์„œ๋น„์Šค์˜ ๋ฉ”์†Œ๋“œ ๋งˆ๋‹ค '๊ฒฐ๊ณผ ์ฝ”๋“œ'์˜ ์ •์˜์™€ '๊ฒฐ๊ณผ ๋ฉ”์‹œ์ง€'๊ฐ€ ๋‹ค๋ฅด๋‹ค.
: ๋”ฐ๋ผ์„œ ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜จ ์‘๋‹ต์ธ์ง€ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์•ผ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ์š”.

3) responseBody๋Š” ๊ฐ™์€ ์„œ๋น„์Šค์˜ ๋ฉ”์†Œ๋“œ๋กœ๋ถ€ํ„ฐ ํ˜ธ์ถœ๋˜์–ด๋„ ๋งค๋ฒˆ ๋‹ค๋ฅด๋‹ค.
: ๋”ฐ๋ผ์„œ responseBody์— ๋“ค์–ด๊ฐˆ ๊ฐ’์€ ์ธ์ž๋กœ ์ „๋‹ฌํ•ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.

4) ๋ณด๋‚ด๋Š” ์‘๋‹ต์˜ ์ข…๋ฅ˜๋Š” ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ง€ ์•Š๋‹ค.
: ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ฑ๊ณตํ•œ ์‘๋‹ต, ์„ฑ๊ณตํ–ˆ์ง€๋งŒ ๊ตฌ์ฒด์ ์ธ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” ์‘๋‹ต, ์ผ๋ถ€ ์„ฑ๊ณตํ•œ ์‘๋‹ต, ์‹คํŒจํ•œ ์‘๋‹ต, ์‹คํŒจํ–ˆ์œผ๋‚˜ ๊ตฌ์ฒด์ ์ธ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” ์‘๋‹ต ๋“ฑ์œผ๋กœ ์ขํž ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 

 


 

๐Ÿค” 2. ์‘๋‹ต ์ƒ์„ฑ๊ธฐ ๋งŒ๋“ค๊ธฐ : ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋กœ ๋“ค์–ด์˜จ ์‘๋‹ต์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๊ธฐ

 

์˜ˆ๋ฅผ ๋“ค์–ด ์‘๋‹ต๊ธฐ์— successfulResponse๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ์‹œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, ์–ด๋–ค ์„œ๋น„์Šค ๋ ˆ์ด์–ด์˜ ์–ด๋–ค ๋ฉ”์†Œ๋“œ์—์„œ ํ•ด๋‹น successfulResponse๋ฅผ ํ˜ธ์ถœํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ์š”?

์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๊ธ‰์„ ๋ฌด์˜€์Šต๋‹ˆ๋‹ค.

 

์šฐ์„  ์œ„์˜ ๊ณ ๋ คํ•œ ์‚ฌํ•ญ 3๋ฒˆ์„ ๋ณด๋ฉด, responseBody๋ฅผ ์™ธ๋ถ€์—์„œ ๋งŒ๋“  ํ›„์— successfulResponse์˜ ์ธ์ž๋กœ ๋˜์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋กœ์จ successfulResponse์˜ ์ธ์ž๋กœ๋Š” DTO๊ฐ€ ๋“ค์–ด์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. DTO์˜ ํƒ€์ž…์€ ๋ชจ๋‘ ๋‹ค๋ฅด๋ฏ€๋กœ, ์ œ๋„ค๋ฆญ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

public static <T> ResponseEntity<JBMBResponseObject<T>> 
	successfulResponse(T responseBody){...}

 

 

 

ํ•œ ๊ฐ€์ง€ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. responseBody๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ƒ๊ฐํ•œ ๊ฒƒ์€, ๋“ค์–ด์˜จ responseBody๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฆฌํ”Œ๋ ‰์…˜(reflection)์„ ํ†ตํ•ด ํ•ด๋‹น T ํƒ€์ž…์˜ ์‹ค์ œ ํด๋ž˜์Šค ์ด๋ฆ„์„ ์–ป์–ด์˜ต๋‹ˆ๋‹ค.

๊ทธ ํ›„์—, ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์™”๋‹ค๋Š” ๊ฒƒ์„ ๊ทœ์ •ํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

String className = responseBody.getClass().getName();
// ๋ฉ”์†Œ๋“œ์™€ ํด๋ž˜์Šค ์ด๋ฆ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งคํ•‘ํ•ด๋†“์œผ๋ฉด, ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์™”๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ๋ฆฌํ”Œ๋ ‰์…˜(reflection)์˜ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

getClass๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด Class ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ์— ์‹œ๊ฐ„์„ ์†Œ๋ชจํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

ํ•ด๋‹น ๊ตฌ๋ฌธ์ด ๋งŽ์ด ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด, ์ข‹์€ ์„ ํƒ์ด์ง€๋งŒ ์ง„๋‹จ ์„œ๋น„์Šค ๋ ˆ์ด์–ด๋กœ๋ถ€ํ„ฐ ํ˜๋Ÿฌ๋“ค์–ด์˜จ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ์—์„œ responseCreator๋ฅผ ํ˜ธ์ถœํ•  ๊ฒƒ์ด๊ณ , ๊ทธ๋•Œ๋งˆ๋‹ค ์ˆ˜๋„ ์—†์ด ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด DTO ํด๋ž˜์Šค ์ด๋ฆ„์„ ์–ป์–ด์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์„ฑ๋Šฅ์ƒ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง€์–‘ํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํด๋ž˜์Šค์˜ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ์ •๋ณด๋Š” JVM์˜ Perm ์˜์—ญ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ Class ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์€ ํด๋ž˜์Šค๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์ผ์ด ๋ฒŒ์–ด์ง€๋ฉด Perm ์˜์—ญ์ด ๋”์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜์–ด OutOfMemoryError๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 
- ์ถœ์ฒ˜ : https://12bme.tistory.com/129

 

๋‘ ๋ฒˆ์งธ ์ƒ๊ฐํ•ด๋‚ธ ๋ฐฉ๋ฒ•์€, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•ด DTO์— getIdentifier()๋ผ๋Š” ๊ฐ DTO๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@Data
@Builder
@AllArgsConstructor
public static class ResponseForInitDiagnosis implements DiagnosisResponseDTO {
	private Long diagnosisID;

	@Override
	public JBMBDiagnosisServiceIdentifier getIdentifier() { 
    	return JBMBDiagnosisServiceIdentifier.INIT; 
    }
}

public interface DiagnosisResponseDTO {
	JBMBDiagnosisServiceIdentifier getIdentifier();
}

 

ResponseForInitDiagnosis ํด๋ž˜์Šค๋Š” DiagnosisResponseDTO๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ getIdentifier() ๋ฉ”์†Œ๋“œ๋ฅผ ์™„์„ฑ์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

๋˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ ์žฅ์ ์€,

/* before */
public static <T> ResponseEntity<JBMBResponseObject<T>> 
	successfulResponse(T responseBody){...}
    
/* after */
public static <T extends DiagnosisDTO.DiagnosisResponseDTO> ResponseEntity<JBMBResponseObject<T>>
	successfulResponse(T responseBody){...}

์ด๋ ‡๊ฒŒ T์— ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ๋Š” DTO๋งŒ ์ธ์ž๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋กœ์จ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์˜ DTO๋ฅผ responseBody์— ์ž˜๋ชป ๋„ฃ์„ ์ผ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋‹ˆ ๋ง์ด์ฃ .

 

JBMBDiagnosisServiceIdentifier serviceIdentifier = responseBody.getIdentifier();

์ด์ œ ์–ด๋–ค ๋ฉ”์„œ๋“œ๋กœ๋ถ€ํ„ฐ ์™”๋Š”์ง€ ๋ฐ”๋กœ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. getIdentifier์˜ ๋ฆฌํ„ด๊ฐ’์„ Enum(JBMBDiagnosisServiceIdentifier)์œผ๋กœ ๋งŒ๋“ค์–ด ๋”์šฑ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

๐Ÿค” 3. ์‘๋‹ต ์ƒ์„ฑ๊ธฐ ๋งŒ๋“ค๊ธฐ : ๋ฉ”์†Œ๋“œ์™€ ์ƒํ™ฉ์— ๋”ฐ๋ฅธ ์‘๋‹ต ๋งค์นญํ•˜๊ธฐ

 

์ด์ œ Enum ๊ฐ’์„ ํ†ตํ•ด ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋กœ๋ถ€ํ„ฐ ์™”๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

successfulResponse๋กœ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋ฉด, '์„ฑ๊ณต'ํ–ˆ์„ ๊ฒฝ์šฐ์˜ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

failedResponse๋กœ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋ฉด, '์‹คํŒจ'ํ–ˆ์„ ๊ฒฝ์šฐ์˜ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•˜์ฃ .

 

 

์ด ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ƒˆ๋กœ์šด Enum์„ 2๊ฐœ ๋” ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ „์— ๋งŒ๋“ค์—ˆ๋˜ JBMBDiagnosisServiceIdentifier๋Š”, ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” Enum ์ž…๋‹ˆ๋‹ค.

JBMBDiagnosisServiceResultCodeIdentifier๋Š”, ์„œ๋น„์Šค์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” Enum์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ JBMBDiagnosisServiceIdentifier์˜ ์ธ์Šคํ„ด์Šค๋Š” List<JBMBDiagnosisServiceResultCodeIdentifier>๋ฅผ ํ•„๋“œ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋„๋ก ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

 

์•„๋ž˜์™€ ๊ฐ™์€ ๋‚ด์šฉ์€ ๋ชจ๋‘ '์ง„๋‹จ ์ดˆ๊ธฐํ™”'์— ํ•ด๋‹นํ•œ๋‹ค๋Š” ๊ฒƒ์„ Enum์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด์ฃ .

- ์ง„๋‹จ ์ดˆ๊ธฐํ™” ์œ ํšจํ•˜์ง€ ์•Š์€ ์š”์ฒญ
- ์ง„๋‹จ ์ดˆ๊ธฐํ™” ์„ฑ๊ณต
- ์ง„๋‹จ ์ดˆ๊ธฐํ™” ์„ฑ๊ณต + ์ผ๋ถ€ ์ƒํƒœ Shutdown์œผ๋กœ ๋ณ€๊ฒฝ
- ์ง„๋‹จ ์ดˆ๊ธฐํ™” ์„ฑ๊ณต + Shutdown ๋Œ€์ƒ์€ ์žˆ์ง€๋งŒ ๋ณ€๊ฒฝ ์‹คํŒจ
- ์ง„๋‹จ ์ดˆ๊ธฐํ™” ์‹คํŒจ

 

 

JBMBDiagnosisServiceResultCodeIdentifier๋Š”, JBMBResultCodeLabel์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

JBMBResultCodeLabel์€, ์ƒ์„ฑ๊ธฐ์˜ ๋ฉ”์†Œ๋“œ์™€ ๋งค์นญ๋˜๋Š” ๊ฒƒ์„ ํ‘œํ˜„ํ•œ Enum์ž…๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด DTO๋กœ๋ถ€ํ„ฐ 'INIT'์ž„์„ ์•Œ์•„๋‚ด๊ณ  successfulResponse๋ฅผ ํ˜ธ์ถœํ–ˆ๋‹ค๋ฉด, INIT์— ํ•ด๋‹นํ•˜๋ฉด์„œ JBMBResultCodeLabel.SUCCESS๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” INIT_SUCCESS๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ ์—ญํ• ์„ ํ•ด๋‚ด๋Š” ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

public static JBMBDiagnosisServiceResultCodeIdentifier findResultCodeIdentifierByServiceIdentifierAndTypeLabel
(JBMBDiagnosisServiceIdentifier serviceIdentifier, JBMBResultCodeLabel resultCodeLabel) {
        return serviceIdentifier.getResultCodeIdentifierList().stream()
                .filter(resultCodeIdentifier -> resultCodeIdentifier.getResultCodeLabel() == resultCodeLabel)
                .findAny()
                .orElse(JBMBDiagnosisServiceResultCodeIdentifier.NOT_SUPPORTED_TYPE);
    }

 

์ด์ œ ๊ฐ Enum์— ๋งž๋Š” resultCode๋‚˜, resultCode์— ๋Œ€ํ•œ ์„ค๋ช…, requestURL ๋“ฑ์„ ํ•„๋“œ๋กœ ๋งŒ๋“ค์–ด ์ƒ์„ฑ์ž์—์„œ ์„ ์–ธํ•ด์ฃผ๋ฉด ์™„์„ฑ์ž…๋‹ˆ๋‹ค.

 

 

ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์˜๋„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ–ˆ๋”๋‹ˆ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์ž‘์„ฑํ•ด ์กฐ๊ธˆ ๋” ๊ฒ€์ฆํ•ด์•ผ๊ฒ ์ง€๋งŒ์š”.

 

์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋‚˜ error ๋ฐœ์ƒ ์ง€์ ์— ๊ด€ํ•ด์„œ๋Š” enum์— ๊ณ ์ •๋œ ๊ฐ’์œผ๋กœ ์ง€์ •ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•œ ํ›„์— ์ผ์ง€๋ฅผ ์ ์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋™์ผ์กฐ๊ฑด (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿƒโ€โ™‚๏ธ DEVLOG' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[DEVLOG] if(kakao) dev 2022 ๊ฐœ๋ฐœ์ž ์ปจํผ๋Ÿฐ์Šค ํ›„๊ธฐ - 1. ISFP์˜ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ๊ฐœ์„  ๊ฒฝํ—˜  (1) 2023.01.01
[DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (4) createdAt๊ณผ updatedAt, JPA AttributeConverter  (1) 2022.12.27
[DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (2) ๊ณตํ†ตํ•„๋“œ๊ฐ€ ๋งŽ์€ DTO ๋งŒ๋“ค๊ธฐ  (0) 2022.12.16
[DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (1) ๋ณ€์ˆ˜ ์ž‘๋ช…, Optional, Enum ํ™œ์šฉ  (0) 2022.12.15
[DEVLOG] if(kakao) ๊ฐœ๋ฐœ์ž ์ปจํผ๋Ÿฐ์Šค - (0) ์ปจํผ๋Ÿฐ์Šค์— ๋Œ€ํ•œ ๊ธฐ๋Œ€  (1) 2022.12.07
    '๐Ÿƒ‍โ™‚๏ธ DEVLOG' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [DEVLOG] if(kakao) dev 2022 ๊ฐœ๋ฐœ์ž ์ปจํผ๋Ÿฐ์Šค ํ›„๊ธฐ - 1. ISFP์˜ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ๊ฐœ์„  ๊ฒฝํ—˜
    • [DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (4) createdAt๊ณผ updatedAt, JPA AttributeConverter
    • [DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (2) ๊ณตํ†ตํ•„๋“œ๊ฐ€ ๋งŽ์€ DTO ๋งŒ๋“ค๊ธฐ
    • [DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (1) ๋ณ€์ˆ˜ ์ž‘๋ช…, Optional, Enum ํ™œ์šฉ
    ๊ฐœ๋ฐœ์ž HOON
    ๊ฐœ๋ฐœ์ž HOON
    ์ข‹์€ ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ก์„ ๋ชจ์•˜์Šต๋‹ˆ๋‹ค. # ์ฃผ๋‹ˆ์–ด # ๋ฐฑ์—”๋“œ # ๊ฐœ๋ฐœ์ž

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”