23. Back-end/23. JAVA

Cannot set error status - response is already committed ์—๋Ÿฌ / JSON ์ง๋ ฌํ™” ์ˆœํ™˜ ์ฐธ์กฐ

keemzeehae 2024. 5. 23. 21:16

์ด๋ฒˆ ๋ฐ˜์˜์—๋Š” ๋ฐฐ์น˜๋ฅผ ๋Œ๋ ค์„œ ํ…Œ์ŠคํŠธ ํ•ด๋ด์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค์ด ์žˆ์—ˆ๋‹ค. 

๋˜ ์–ด๋–ค ใ…‹ ์‹œ๋ จ์ด ๋‹ค๊ฐ€์˜ฌ๊นŒ.. ๋‘๊ทผ ๊ฑฐ๋ฆฌ๋ฉฐ 

์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ์ ‘๊ทผํ•ด์„œ ์ฐฝ์„ ์ผœ๋†“๊ณ  ๋ฐฐ์น˜๋ฅผ ๋Œ๋ ธ๋‹ค.

 

๊ทผ๋ฐ.. ์—ญ์‹€ 

Cannot set error status - response is already committed

์ด๋Ÿฐ ์—๋Ÿฌ๋ฅผ .. ๋งŒ๋‚ฌ๋‹ค.

 

์ฒ˜์Œ ๋ณด๋Š” ์—๋Ÿฌ์˜€๋‹ค. (์‚ฌ์‹ค ๊ฐœ๋ฐœ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ดค์„๋•Œ ๊ทธ๋ƒฅ ๋ฐ์ดํ„ฐ์— ๋ฌธ์ œ ์—†์œผ๋‹ˆ๊นŒ ~ ๋กœ๊ทธ๋„ ๋„์–ด๋†จ์ง€๋งŒ 

๋งˆ์ง€๋ง‰ ๋ฌธ์žฅ์€ ์•ˆ์ฝ๊ณ  ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐ”๋˜ ์ .. ใ…  ์ด ๋‹นํ™ฉ์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ค์–ด์„œ ์ด๊ฒŒ ๋ชจ์•ผ.. ์ด๋Ÿฌ๋ฉด์„œ ์ฐพ์•„๋ดค๋˜ ๊ฒƒ ๊ฐ™๋‹ค.)

 

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด, ์ € ์—๋Ÿฌ๋Š” ๋‹ค๋ฅธ ๋ฐฐ์น˜๋ฅผ ๋Œ๋ ธ์„๋•Œ๋„ ๋œจ๊ณ  ์žˆ๊ณ 

ํฐ์ด์Šˆ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋‹จํ•˜๊ณ  ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐ€์ž๊ณ  ํ•˜์…”์„œ ํ  ๊ธ€์ฟค,, ํ•˜๊ณ  ๋„˜์–ด๊ฐ”

 

์„ ์ค„ ์•Œ์•˜๊ฒ ์ง€๋งŒ ์ข€ ๊ถ๊ธˆํ•ด์„œ 

 

๋ฐ”๋กœ ๊ฒ€์ƒ‰์„ ๊ฐˆ๊ฒผ๋Š”๋ฐ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธ€๋“ค์ด ์žˆ์—ˆ๋‹ค.. 

๋ณธ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด ์ € ์—๋Ÿฌ๋Š” Entity์—์„œ ๋‚˜์˜ค๋Š” ๋ฌธ์ œ์ด๋‹ค.

Spring Data JPA๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋“ฑ์žฅํ•œ ๋ฌธ์ œ์ด๋‹ค.

์ˆœํ™˜ ์ฐธ์กฐ๋ผ๋Š” ์›์ธ์ธ๋ฐ


๐ŸŒ€JSON ์—์„œ ์ˆœํ™˜์ฐธ์กฐ ๋ฌธ์ œ

JPA ์—์„œ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ JSON ํ˜•ํƒœ๋กœ ์ง๋ ฌํ™”ํ•˜๋Š” ๊ณผ์ •์—์„œ, ์„œ๋กœ์˜ ์ •๋ณด๋ฅผ ๊ณ„์† ์ˆœํ™˜ํ•˜๋ฉฐ ์ฐธ์กฐํ•˜์—ฌ StackOverFlowError ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ํ˜„์ƒ์ด๋‹ค.

Spring boot ์—์„œ๋Š” @ResponseBody ๋ฅผ ๊ตฌํ˜„ํ•  ์‹œ Object ๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š”๋ฐ,

์ด๋•Œ Jackson ์€ entity์˜ getter ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•„๋“œ์— ์ ‘๊ทผํ•˜๊ณ , ์ง๋ ฌํ™”๋ฅผ ์ด์šฉํ•ด Object๋ฅผ JSON ํ˜•ํƒœ๋กœ ๊ฐ์ฒด๋ฅผ ๋ณ€ํ™”์‹œ์ผœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

๋ฌธ์ œ๋Š” getter ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ณผ์ •์—์„œ๋ถ€ํ„ฐ ์ˆœํ™˜์ฐธ์กฐ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜์–ด stackoverflow ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

โ—๏ธ์ง๋ ฌํ™” : ๊ฐ์ฒด/๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ดํŠธ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์†ก์ˆ˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ

 

 

์˜ˆ๋ฅผ ๋“ค์–ด Review ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์žˆ๊ณ  Photo ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ์น˜์ž.

Review์˜ PK๋ฅผ Photo๊ฐ€ FK๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ƒํƒœ์ด๋‹ค.

 

Review Photo

 

 

Photo ์˜ Review

Response๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด JSON ํ˜•ํƒœ๋กœ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ

์ด ๋•Œ Photo๋Š” Review๋ฅผ ์ฐธ์กฐํ•˜๊ณ  Review๋Š” Photo๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๊ณ„์† ๋Œ๊ณ  ๋Œ๋ฉฐ ์ฐธ์กฐ๋ฅผ ํ•ด ๊ฒฐ๊ตญ Overflow๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ๊ฒƒ์ด์—ˆ๋‹ค.

 

 

ํ•ด๊ฒฐ

ํ•ด๊ฒฐ์ฑ…์€ @JsonManagedReference์™€ @JsonBackReference๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

1:N์˜ ๊ด€๊ณ„์—์„œ 1์— @JsonManagedReference๋ฅผ, N์— @JsonBackReference๋ฅผ ๋ถ™์—ฌ์ค€๋‹ค.

์• ์ดˆ์— ์—”ํ‹ฐํ‹ฐ๋กœ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ  DTO๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์œ„์—๊ฐ™์ด ์•ˆ์จ๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

(์ถ”๊ฐ€ ์ˆ˜์ • ํ•˜๊ธฐ)

 

ํ•ด๊ฒฐ ํ›„ ํฌํ† 

 

ํ•ด๊ฒฐ ํ›„ ๋ฆฌ๋ทฐ

https://layton0-0.tistory.com/49

 

Cannot set error status - response is already committed ์˜ค๋ฅ˜

์ง„์งœ ๊ตฌ์„ฑ์„ ์™„๋ฒฝํ•˜๊ฒŒ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๊ฐ‘์ž๊ธฐ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š” ์—๋Ÿฌ๊ฐ€ ์ƒ๊ฒผ๋‹ค. Cannot set error status - response is already committed ์ด ์—๋Ÿฌ๋‹ค. ์•„์ง๋„ ๊ณต๋ถ€ํ•  ๊ฒƒ๋“ค์ด ํ•œ์ฐธ ๋งŽ์€ ๊ฒƒ ๊ฐ™๋‹ค. ๋ณธ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž

layton0-0.tistory.com

https://blogshine.tistory.com/436

 

[JPA] JSON ์ง๋ ฌํ™” ์ˆœํ™˜ ์ฐธ์กฐ ํ•ด๊ฒฐํ•˜๊ธฐ

์˜ค๋Š˜๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋˜ ๋„์ค‘์— ๊ฑฐ์˜ ๋งค๋ฒˆ ๋งŒ๋‚˜์™”๋˜ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋ฒˆ์ด ์ฒ˜์Œ์€ ์•„๋‹ˆ์ง€๋งŒ, ํ•œ๋ฒˆ์ฏค ์ •๋ฆฌํ•ด๋ณผ๋งŒํ•œ ๋‚ด์šฉ์ธ๊ฒƒ ๊ฐ™์•„ ์ •๋ฆฌํ•ด๋‘”๋‹ค. 1. JSON์—์„œ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฌธ์ œ

blogshine.tistory.com