728x90

Springboot/lecture 11

[Springboot] ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ• ๋•Œ ์ƒ์„ฑ์ž,์ •์ ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ,Builder๋ฅผ์‚ฌ์šฉํ•œ๋‹ค. ๋ณดํ†ต ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋‹จ์ˆœํ•  ๋•Œ๋Š” ๋‹จ์ˆœํžˆ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋ณต์žกํ•˜๋ฉฐ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๋ฉด ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋‚˜ Builder ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด ์ƒ์„ฑ์ž๋ฅผ private์ฒ˜๋ฆฌํ•œ๋‹ค. ๊ทธ๋Ÿผ ์ƒ์„ฑ์ž๋Š” ๋‹ค๋“ค ์ž˜ ์•„๋‹ˆ๊นŒ ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ์™€ Builder์— ์ง‘์ค‘ํ•ด์„œ ์„ค๋ช…ํ•ด๋ณด๋ คํ•œ๋‹ค. ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ์ƒ์„ฑ์ž์™€ ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌ๋ณ„ํ•ด์„œ ์„ค๋ช…ํ•˜์ž๋ฉด public class Product{ private String name; public Product(String name){ this.name=name; } public static Product nameOf(String name){ return new Product(name); } ๐Ÿ˜€ ์žฅ์ ..

Springboot/lecture 2022.10.05

[springBoot] AOP

๐Ÿฅ‘ AOP๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ? - ๋ชจ๋“  ๋ฉ”์„œ๋“œ์˜ ํ˜ธ์ถœ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? - ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌํ•ญ(ํ˜ธ์ถœ ์‹œ๊ฐ„) vs ํ•ต์‹ฌ ๊ด€์‹ฌ์‚ฌํ•ญ (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง) - ํšŒ์› ๊ฐ€์ž… ์‹œ๊ฐ„, ํšŒ์› ์กฐํšŒ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? ์‹œ๊ฐ„ ์ธก์ •ํ•˜๋Š” ๋กœ์ง๊ณผ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์„ž์ด๋ฉด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค. > ๋‘๊ฐœ๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. > AOP (Aspect Oriented Programming) ๐Ÿฅ‘ AOP ์‹œ๊ฐ„ ์ธก์ • ๋กœ์ง์„ ์งœ๋†“๊ณ  ์›ํ•˜๋Š” ๊ณณ์— ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌํ•ญ(์‹œ๊ฐ„ ์ธก์ • ๋กœ์ง) ์ ์šฉ ํ•˜๋ฉด ๋˜๊ฒ ๋‹ค. TimeTraceAop ๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์œ„์— Aspect ์–ด๋…ธํ…Œ์ด์…˜์„ ์“ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์Šคํ”„๋ง bean์— ๋“ฑ๋กํ•ด์ค€๋‹ค. ๋นŒ๋“œํ• ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค๋ฉด SpringConfig์—์„œ ๋นˆ์„ ๋“ฑ๋กํ•˜์ง€ ๋ง๊ณ  TimeTraceAop์—์„œ ์ƒ๋‹จ์— Component ์–ด๋…ธํ…Œ์ด์…˜..

Springboot/lecture 2022.08.17

[jdbc] Row Mapper๋ž€ ??

jdbc Template์—์„œ ์œ ์ € ์ด๋ฆ„์„ ์กฐํšŒํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์งœ๋‹ค๊ฐ€ rs์™€ rowNum์ด๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ๊ณ  Row Mapper์— ๋Œ€ํ•ด ์ฐพ์•„๋ณด๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค! ์Šคํ”„๋ง ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐพ์•„๋ณด๋‹ˆ "๊ฒฐ๊ณผ ์ง‘ํ•ฉ์˜ ํ–‰์„ ํ–‰๋ณ„๋กœ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•ด JdbcTemplate์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์€ ๊ฐ ํ–‰์„ ๊ฒฐ๊ณผ ๊ฐ์ฒด์— ๋งคํ•‘ํ•˜๋Š” ์‹ค์ œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ˜ธ์ถœํ•˜๋Š” JdbcTemplate์— ์˜ํ•ด SQL ์˜ˆ์™ธ๊ฐ€ ํฌ์ฐฉ๋˜๊ณ  ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค." https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/core/RowMapper.html RowMappe..

Springboot/lecture 2022.08.06

[springboot] ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์ •๋ฆฌ

๐ŸŽ€ ํด๋” ๊ตฌ์กฐ src๋Š” ๋„๋ฉ”์ธ ๋ณ„๋กœ ํŒจํ‚ค์ง€๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. ํšŒ์›,๊ฒŒ์‹œ๊ธ€,๋Œ“๊ธ€,์ฃผ๋ฌธ๋“ฑ ์š”๊ตฌ์‚ฌํ•ญ ํ˜น์€ ๋ฌธ์ œ์˜์—ญ์„ ๋„๋ฉ”์ธ์ด๋ผ๊ณ  ํ•œ๋‹ค. config์™€ util ์€ src์—์„œ ํ•„์š”ํ•œ ๋ถ€์ฐจ์ ์ธ ํŒŒ์ผ์„ ๋ชจ์•„๋†“์€ ํด๋”์ด๋‹ค. ์ž๋ฐ”์ฝ”๋“œ๋กœ ์Šคํ”„๋ง ๋นˆ์„ ์ง์ ‘ ๋งŒ๋“ค๋•Œ config ํด๋”์—์„œ ์ž‘์—…ํ•˜๋ฉด ์ข‹๋‹ค. ๋ฉ”์ธ ์ฝ”๋“œ๋Š” src์— ๋‹ด๊ฒจ์žˆ๋‹ค! ์‹ค์ œ api๊ฐ€ ๋™์ž‘ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์„ ๋‹ด๋Š”๋‹ค. config๋Š” src์—์„œ ํ•„์š”ํ•œ SecretKey(git์— ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋˜๋Š”),์ƒ์ˆ˜ ํด๋ž˜์Šค util์—๋Š” JWT ์•”ํ˜ธํ™”,์ •๊ทœํ‘œํ˜„์‹๋“ค์„ ๋‹ด๋Š”๋‹ค. ๐ŸŽ€ Request์—์„œ Response๊นŒ์ง€์˜ ๊ณผ์ • (API ํ†ต์‹  ํ”„๋กœ์„ธ์Šค) Request -> Route -> Controller -> Service/Provider -> Dao ->DB DB-> Dao ->Servic..

Springboot/lecture 2022.08.05

[springboot] ์›น mvc๊ฐœ๋ฐœ

ํ™ˆ ํ™”๋ฉด ์ถ”๊ฐ€ HomeController๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค. return "home"์„ ํ•˜๋ฉด ์ด home์ด template์— ์žˆ๋Š” home.html๊ณผ ์—ฐ๊ฒฐ๋œ๋‹ค. ๋“ฑ๋ก ํ™”๋ฉด ์ถ”๊ฐ€ ํšŒ์› ๋“ฑ๋ก์€ MemberController์—์„œ ์ž‘์—…ํ•ด์ค„ ๊ฒƒ์ด๋‹ค. get๋ฐฉ์‹์œผ๋กœ mapping๋œ ์• ๋Š” createMemberForm.html๊ณผ ์—ฐ๊ฒฐ๋ผ์„œ ๊ฑฐ๊ธฐ์„œ ํšŒ์›๊ฐ€์ž… form์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์œ ์ €๊ฐ€ form์„ ๋‹ค ์ž‘์„ฑํ–ˆ๋‹ค๋ฉด ๊ทธ๋Ÿฐ ๊ฐœ์ธ์ •๋ณด๋“ค์€ post ๋ฐฉ์‹์œผ๋กœ ๋ฐ›์•„์„œ ๋‹ค์‹œ homeํ™”๋ฉด์œผ๋กœ redirect๋œ๋‹ค. ์•ž์„œ post๋ฐฉ์‹์—์„œ ํšŒ์›๋“ฑ๋ก์„ ํ•  ๋•Œ MemberForm์„ ๋ฐ›์•„์˜ค๋Š”๋ฐ ๊ทธ MemberForm์„ ๋งŒ๋“ค์–ด๋ณผ ๊ฒƒ์ด๋‹ค. ์–˜๋„ ์ปจํŠธ๋กค๋Ÿฌ์ด๊ณ  ํšŒ์›๋“ฑ๋ก์„ ํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์ด๋‹ค. getMapping์—์„œ createMemberForm์œผ๋กœ ๋ฆฌํ„ดํ•ด์ค€..

Springboot/lecture 2022.08.02

[springboot] ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„

๐ŸŒˆ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ• - ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™์˜์กด ๊ด€๊ณ„ ( @Controller - @Service - @Repository ์—ฐ๊ฒฐ) - ์ž๋ฐ”์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ํ™”๋ฉด์„ ๋ถ™์ด๋ ค๋ฉด ์ปจํŠธ๋กค๋Ÿฌ์™€ view template์ด ํ•„์š”ํ•˜๋‹ค. ์šฐ์„  ํšŒ์› ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ฒ ๋‹ค. ํšŒ์› ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด์„œ MemberService์™€ ์—ฐ๊ฒฐํ•ด์คฌ๋Š”๋ฐ, ์ด๋•Œ๋Š” new๋กœ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— bean์œผ๋กœ ๋“ฑ๋กํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์คฌ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ง€๊ณ  ๋ญ˜ํ• ๊ฑฐ๋ƒ ํ•˜๋ฉด ! Member Controller์™€ MemberService๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ์ค„๊ฑฐ๋‹ค. ๊ทธ๋ฆฌ๊ณ  MemberSerivce๋Š” Member Repository์™€ ์—ฐ๊ฒฐ์‹œ์ผœ์ค„ ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ฃผ์ž…์‹œ์ผœ์ฃผ..

Springboot/lecture 2022.08.02

[springboot] ํšŒ์› ์„œ๋น„์Šค ๊ฐœ๋ฐœ

++) ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— New์— ์ž๋ฐ” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๋ฉด ์šฐํด๋ฆญ -> ๋งจ ์•„๋ž˜ Mark directory as -> sources root ๋ˆ„๋ฅด๋ฉด ํ•ด๊ฒฐ๋จ https://mosei.tistory.com/entry/Intellij-%EC%9A%B0%ED%81%B4%EB%A6%AD-New%EC%97%90-Java-Class-%EA%B0%80-%EC%95%88%EB%B3%B4%EC%9D%BC-%EB%95%8C [Intellij] ์šฐํด๋ฆญ New์— Java Class ๊ฐ€ ์•ˆ๋ณด์ผ ๋•Œ ํ”„๋กœ์ ํŠธ ํด๋”์— ์šฐํด๋ฆญ -> New -> Java Class ๊ฐ€ ๋ณด์ด์ง€ ์•Š์„ ๋•Œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• ํ•ด๋‹น ์œ„์น˜๊ฐ€ ํ”„๋กœ์ ํŠธ root๋กœ ์ง€์ •์ด ๋˜์–ด์žˆ์ง€ ์•Š์•„์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์šฐํด๋ฆญ -> Mark Directory as -> Sources Roo..

Springboot/lecture 2022.08.01

[spring] ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

testํด๋” ์•ˆ์— ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ์ž๋ฐ” ํŒŒ์ผ ์ƒ์„ฑ์‹œ ํ…Œ์ŠคํŠธ ํ•ด๋ณผ ์ž๋ฐ”ํŒŒ์ผ์ด๋ฆ„ ๋’ค์— test๋ฅผ ๋ถ™์ด๋Š”๊ฒƒ์ด ๊ด€๋ก€์ด๋‹ค. ๋ฉค๋ฒ„์ด๋ฆ„์„ spring์ด๋ผ๊ณ  ๋„ฃ์–ด์ฃผ๊ณ  ์ด๊ฒƒ์„ repository์— ์ €์žฅํ•œ๋‹ค. ๋‚˜์ค‘์— ์ด ๋ฉค๋ฒ„๋ฅผ repository์—์„œ ์ฐพ์•˜์„ ๋•Œ member์˜ ๊ฐ’๊ณผ result์˜ ๊ฐ’์ด ๊ฐ™์€์ง€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. System.out.println์„ ํ†ตํ•ด์„œ ๋‘˜์ด ๊ฐ™์€์ง€ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ Assertions.assertEquals๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋‘˜์˜ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด saveํ•จ์ˆ˜ ์˜†์— ์ดˆ๋ก๋ถˆ์ด ๋œฌ๋‹ค! ๋˜๋Š” Assert.assertThat์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค. Assert.assertThat(member).isEqualTo(result)์„ ์“ฐ๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜ ๋๋‚ด๋ฉด..

Springboot/lecture 2022.07.26

[spring] ์ •์  ์ปจํ…์ธ  , MVC์™€ ํ…œํ”Œ๋ฆฟ ์—”์ง„ , API

์ •์  ์ปจํ…์ธ  resources -> static -> Hello-static.htmlํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๐ŸŒŠ ์ž‘๋™์›๋ฆฌ localhost:8080/hello-static.html์„ ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๋ฉด ๋‚ด์žฅ ํ†ฐ์บฃ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ๋ฐ›๊ณ  ์ด๊ฒƒ์„ ์Šคํ”„๋ง์— ๋„˜๊ธด๋‹ค. ์Šคํ”„๋ง์€ hello-static๊ด€๋ จ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์•„๋ณธ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฑฐ์™€ ๊ด€๋ จํ•ด์„œ mapping์ด ๋œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์—†๋‹ค. ๊ทธ๋ž˜์„œ resources์—์„œ hello-static.html์„ ์ฐพ๊ณ  ์ด๊ฒƒ์„ hello.static.html๋กœ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. MVC์™€ ํ…œํ”Œ๋ฆฟ ์—”์ง„ MVC๋Š” model view controller์ด๋‹ค. view : ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š”๋ฐ์—๋งŒ ์ง‘์ค‘ model,controller : ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์•„๊นŒ ์ •์  ์ปจํ…์ธ ๋Š” resources-> static์œผ๋กœ ..

Springboot/lecture 2022.07.26

[spring] ์ •์ ํŒŒ์ผ๊ณผ ํ…œํ”Œ๋ฆฟ์—”์ง„์˜ ๋™์ž‘ ์•Œ์•„๋ณด๊ธฐ

src -> main -> static ์—์„œ htmlํŒŒ์ผ์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ์ค„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด localhost:8080 ์œผ๋กœ ์ ‘์†ํ•˜๋ฉด hello๊ฐ€ ๋œฌ๋‹ค. +) 80ํฌํŠธ๋Š” http์›น์„œ๋ฒ„ ํฌํŠธ์ด๊ณ , ๋ณดํ†ต 80๋ฒˆ ํฌํŠธ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒฝ์šฐ 8080์„ ์“ด๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์“ด ๊ฒƒ ๊ทธ๋Œ€๋กœ ์„œ๋ฒ„์— ์˜ฌ๋ฆฌ๊ณ  ์‹ถ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๋™์ ์œผ๋กœ ์›นํŽ˜์ด์ง€๊ฐ€ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์จ์•ผ ํ•œ๋‹ค. Thymeleaf๋ผ๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์จ๋ณผ ๊ฒƒ์ด๋‹ค. https://www.thymeleaf.org/ Thymeleaf Integrations galore Eclipse, IntelliJ IDEA, Spring, Play, even the up-and-coming Model-View-Controller API for Java EE 8...

Springboot/lecture 2022.07.26