๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

Spring AOP

๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (AOP) ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ(core concern)๊ณผ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(cross-cuttin concern) ๊ธฐ์กด OOP (๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)์—์„œ๋Š” ๊ณตํ†ต๊ด€์‹ฌ์‚ฌํ•ญ์„ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์—์„œ ์ ์šฉํ•˜๋Š”๋ฐ ์žˆ์–ด ์ค‘๋ณต๋œ ์ฝ”๋“œ๋ฅผ ์–‘์ƒํ•˜๋Š” ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•จ. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด AOP๊ฐ€ ๋“ฑ์žฅ AOP๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ๊ณผ ์ „์ฒด์— ์ ์šฉ๋˜๋Š” ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ์„ ๊ธฐ์ค€์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•จ์œผ๋กœ์จ ๊ณตํ†ต ๋ชจ๋“ˆ์„ ์†์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ AOP๋Š” application์—์„œ์˜ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(๊ธฐ๋Šฅ์˜ ๋ถ„๋ฆฌ) ์ฆ‰, ํ•ต์‹ฌ์ ์ธ ๊ธฐ๋Šฅ์—์„œ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•จ. ๋ถ„๋ฆฌํ•œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์–ด์ŠคํŒฉํŠธ(Aspect) (=๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ) ๋ผ๋Š” ๋…ํŠนํ•œ ๋ชจ๋“ˆ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์„œ ์„ค๊ณ„ํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•. OOP๋ฅผ ์ ์šฉํ•˜์—ฌ๋„ ํ•ต์‹ฌ๊ธฐ๋Šฅ์—์„œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ..

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

SpringFramework - DI

SpringFramework๋ž€? Spring Framework ๋Š” ์ž๋ฐ”๋กœ Enterprise Application ์„ ๋งŒ๋“ค ๋•Œ ํฌ๊ด„์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” Programming ๋ฐ Configuration Model ์„ ์ œ๊ณตํ•ด ์ฃผ๋Š” Framework ๋กœ Application ์ˆ˜์ค€์˜ ์ธํ”„๋ผ ์ŠคํŠธ๋Ÿญ์ณ๋ฅผ ์ œ๊ณต. ์ฆ‰ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณต์žกํ•˜๊ณ  ์‹ค์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด Low Level ( ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด setting )์— ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  Business Logic๊ฐœ๋ฐœ์— ์ „๋…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค Spring Container ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์Šคํ”„๋ง์—์„œ ์ž๋ฐ” ๊ฐ์ฒด๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„์„ ๋งํ•จ. ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง์—์„  ๋นˆ(Bean)์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” ์ด ๋นˆ(Bean)์˜ ์ƒ์„ฑ๋ถ€ํ„ฐ ์†Œ๋ฉธ๊นŒ์ง€๋ฅผ ๊ฐœ๋ฐœ์ž ๋Œ€์‹  ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ณณ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ..

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

MVC Pattern, Session, Cookie

JSP๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” Web Application Architecture๋Š” ํฌ๊ฒŒ model1๊ณผ model2 ๋กœ ๋‚˜๋‰œ๋‹ค. Model1 : client์˜ ์š”์ฒญ์— ๋Œ€ํ•œ Logic์ฒ˜๋ฆฌ์™€ response page(view)์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๋ชจ๋‘ ํ•จ Model2 : ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ถ€๋ถ„๋งŒ ์ฒ˜๋ฆฌ (= MVCํŒจํ„ด์„ ์›น ๊ฐœ๋ฐœ์— ๋„์ž…ํ•œ ๊ตฌ์กฐ ) Model1 view์™€ logic์„ JSPํŽ˜์ด์ง€ ํ•˜๋‚˜์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ ์žฅ์  ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ , ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๋‹ค ๊ฐœ๋ฐœ ์‹œ๊ฐ„์ด ๋น„๊ต์  ์งง๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ๋น„์šฉ์ด ๊ฐ์†Œ ๋‹จ์  view์ฝ”๋“œ์™€ ๋กœ์ง์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ java์ฝ”๋“œ๊ฐ€ ์„ž์—ฌ ์žˆ์–ด์„œ JSP์ฝ”๋“œ ์ž์ฒด๊ฐ€ ๋ณต์žกํ•ด์ง„๋‹ค JSP์ฝ”๋“œ์— BE์™€ FE๊ฐ€ ํ˜ผ์žฌ๋˜์–ด ๋ถ„์—…์ด ํž˜๋“ค์–ด์ง ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ ธ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›€ ํ™•์žฅ..

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

[JSP]

JSP(Java Server Page) HTML๋‚ด์— ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ์›น ์„œ๋ฒ„์—์„œ ๋™์ ์œผ๋กœ ์›น ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋Œ๋ ค์ฃผ๋Š” ์–ธ์–ด ์‹คํ–‰ ์‹œ servlet์œผ๋กœ ๋ณ€ํ™˜๋œ ํ›„ ์‹คํ–‰ ๋จ (์ตœ์ดˆ ํ•œ ๋ฒˆ + JSP์ˆ˜์ • ์‹œ) ๋ณ€ํ™˜์€ WAS๊ฐ€ ํ•ด์ค€๋‹ค. JSP๊ฐ€ ๋น ๋ฅผ๊นŒ Servlet์ด ๋น ๋ฅผ๊นŒ? JSP๋Š” Servlet์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ •์ด ์žˆ๊ธด ํ•˜์ง€๋งŒ, ์ตœ์ดˆ ํ•œ ๋ฒˆ๊ณผ ์ˆ˜์ • ์‹œ์—๋งŒ ๋ณ€ํ™˜๋œ๋‹ค. JSP์—์„œ GET๊ณผ POST๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐฉ๋ฒ• request.getMethod() JSP ๋ฌธ๋ฒ• ์„ ์–ธ๋ฌธ ๋ฉค๋ฒ„๋ณ€์ˆ˜ ์„ ์–ธ์ด๋‚˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ์–ธํ•˜๋Š” ์˜์—ญ ์„ ์–ธ๋ฌธ ์•ˆ์— System.out.println("A"); ๊ณผ ๊ฐ™์€ ๋ช…๋ น์„ ๋„ฃ์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ฒ˜๋ฆฌ๋ฌธ - ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์‹œ ๋งค๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ์˜์—ญ. - Servlet์œผ๋กœ ๋ณ€ํ™˜ ์‹œ se..

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

[Servlet]

1. WebArchitecture page ์ด๋™๋ฐฉ๋ฒ• url ์ž…๋ ฅ (get๋ฐฉ์‹) link (get๋ฐฉ์‹) form (get๋ฐฉ์‹) get (get๋ฐฉ์‹) post ์ฆ‰ form์— post๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋‘ GET ๋ฐฉ์‹์ด๋‹ค. Persistence Login = ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋กœ์ง 2. Servlet Servlet = Java + HTML ์ž๋ฐ”์—์„œ ๋ฐฑ์•ค๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” api ๋‘ ๊ฐ€์ง€ servlet → ์ž๋ฐ”์•ˆ์— html์ด ํฌํ•จ jsp → html ์•ˆ์— ์ž๋ฐ”๊ฐ€ ํฌํ•จ ์ฒ˜์Œ์— servlet์ด ๋จผ์ € ๋‚˜์˜ด → ์Œ๋”ฐ์˜ดํ‘œ ์•ˆ์— html์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋„ฃ๋Š”๊ฒŒ ๋„ˆ๋ฌด ํž˜๋“ค์–ด → html์— ์ž๋ฐ” ๋„ฃ์œผ๋ฉด ์–ด๋–จ๊นŒ? → jsp ๋“ฑ์žฅ ์™ธํ˜• ์ž์ฒด๊ฐ€ .java ์„œ๋ธ”๋ฆฟ ํŒŒ์ผ์—์„œ ์ƒ์„ฑ์ž ์•ˆ ๋งŒ๋“ค์–ด๋„ ๋จ → init๋ฉ”์†Œ๋“œ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ ์›น์—์„œ ..

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

[SpringBoot ํ•˜๋ฉฐ ๋งˆ์ฃผ์นœ ์˜ค๋ฅ˜] Transaction silently rolled back because it has been marked as rollback-only

ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋˜ ์ค‘, ์ž˜ ๋˜๋˜ api์—์„œ Transaction silently rolled back because it has been marked as rollback-only ๋ผ๋Š” ์—๋Ÿฌ๋ฅผ ๋งˆ์ฃผํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋ฉฐ ์•Œ๊ฒŒ๋œ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜์˜€์Šต๋‹ˆ๋‹ค. 1. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๋ฌด์„ฑ์˜ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ๋ง์ž 1-1) ์˜ˆ์™ธ ๋ธ”๋ž™ํ™€์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ์˜ˆ์™ธ๋ฅผ ํก์ˆ˜ํ•ด๋ฒ„๋ฆฌ๊ณ  ๋‹ค์Œ ๋กœ์ง์ด ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋‹ค. try{ }catch(IOException e){ // ์˜ˆ์™ธ ๋ธ”๋ž™ํ™€ } ์œ„ ์ฝ”๋“œ์—์„œ IOException์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ๋ฅผ try/catch๋กœ ๊ฐ์‹ธ๋ฉด ๋‹ค์Œ ๋กœ์ง์ด ์ •์ƒ ์ˆ˜ํ–‰๋œ๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง์ด ์ •์ƒ ์ˆ˜ํ–‰๋˜์—ˆ๋‹ค๊ณ  ์ฐฉ๊ฐํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฒ„๊ทธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. 1-2) ๋ฌด์„ฑ์˜ํ•œ throws๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์œ„ ๋ฉ”์†Œ๋“œ..

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

[SpringBoot] dto์˜ ์œ„์น˜

DTO์˜ ์œ„์น˜๋Š” ํŒจํ‚ค์ง€ ์„ค๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ๊ฐ€๋Š”๊ฐ€์— ๋”ฐ๋ผ ์™„์ „ํžˆ ๋‹ฌ๋ผ์ง„๋‹ค ์–ด๋–ค ๊ฒฝ์šฐ๋Š” repository ๊ณ„์ธต์— ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ , service ๊ณ„์ธต์— ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€์—์„œ ๊ณต์œ ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ฉด ๋ณ„๋„์˜ dto ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋„ฃ์–ด๋‘ . ํŠน์ • ์„œ๋น„์Šค ๊ณ„์ธต๊นŒ์ง€๋งŒ ์‚ฌ์šฉ๋˜๋ฉด, ํ•ด๋‹น ์„œ๋น„์Šค ๊ณ„์ธต์— dtoํด๋ž˜์Šค๋ฅผ ํ•จ๊ป˜ ๋‘”๋‹ค. ํŠน์„ฑ repository ๊นŒ์ง€ ํ•ด๋‹น dto๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉด ํ•ด๋‹น repository ๊ณ„์ธต์— dtoํด๋ž˜์Šค๋ฅผ ํ•จ๊ป˜ ๋‘  ๊ถ๊ทน์ ์œผ๋กœ๋Š” ํŒจํ‚ค์ง€ ์‘์ง‘๋„์™€ ๊ฒฐํ•ฉ๋„๋ฅผ ๊ณ ๋ฏผํ•˜๋ฉด์„œ ๊ฐ€๊ธ‰์  ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์™€ ์—ฐ๊ด€์„ ์ค„์ด๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์ด ์ข‹์€ ๋ฐฉ์‹์ด๋‹ค ์ฐธ์กฐ : https://www.inflearn.com/questions/24222/dto-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC..

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

[SpringBoot] 2.7.13 ์—์„œ swagger ์˜ค๋ฅ˜

SpringBoot 2.7.13์—์„œ swagger๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด dependencies๋ฅผ ์ถ”๊ฐ€ํ•œ ๋’ค ์‹คํ–‰ํ•˜์˜€์œผ๋‚˜ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค ใ… ใ…  org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException ์ฐพ์•„๋ณด๋‹ˆ application.properties ์— ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ํ•œ๋‹ค spring.mvc.pathmatch.matching-strategy=ant_path_matcher 2.6 ๋ฒ„์ „ ์ดํ›„์— spring.mvc.pathmatch.matching-str..

mc.thd
'๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)