๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ–ฅ๏ธ ๋ฐฑ์—”๋“œ/SpringBoot22

[JPA] ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด - ๊ธฐ๋ณธ๋ฌธ๋ฒ• (2) ์กฐ์ธ ๋‚ด๋ถ€ ์กฐ์ธ SELECT m FROM Member m [INNER] JOIN m.team t ์™ธ๋ถ€ ์กฐ์ธ SELECT m FROM Member m LEFT [OUTER] JOIN m.team t ์„ธํƒ€ ์กฐ์ธ SELECT count(m) FROM Member m, Team t WHERE m.username = t.name ON ์ ˆ ON์ ˆ์„ ํ™œ์šฉํ•œ ์กฐ์ธ(JPA 2.1๋ถ€ํ„ฐ ์ง€์›) 1. ์กฐ์ธ ๋Œ€์ƒ ํ•„ํ„ฐ๋ง 2. ์—ฐ๊ด€๊ด€๊ณ„ ์—†๋Š” ์—”ํ‹ฐํ‹ฐ ์™ธ๋ถ€ ์กฐ์ธ(ํ•˜์ด๋ฒ„๋„ค์ดํŠธ 5.1๋ถ€ํ„ฐ) ์กฐ์ธ ๋Œ€์ƒ ํ•„ํ„ฐ๋ง ์˜ˆ) ํšŒ์›๊ณผ ํŒ€์„ ์กฐ์ธํ•˜๋ฉด์„œ, ํŒ€ ์ด๋ฆ„์ด A์ธ ํŒ€๋งŒ ์กฐ์ธ [JPQL] SELECT m, t FROM Member m LEFT JOIN m.team t on t.name = 'A' [SQL] SELECT m.*, t.* FROM Me.. 2023. 11. 26.
[JPA] ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด - ๊ธฐ๋ณธ๋ฌธ๋ฒ• (1) JPQL Java Persistence Query Language ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด. ํ…Œ์ด๋ธ” ๋Œ€์ƒX ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒO ์œผ๋กœ ์ฟผ๋ฆฌ SQL์„ ์ถ”์„ฑํ™”ํ•˜๋ฏ€๋กœ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค SQL์— ์˜์กดํ•˜์ง€ ์•Š์Œ ๊ฒฐ๊ตญ SQL๋กœ ๋ณ€ํ™˜ JPQL ๋ฌธ๋ฒ• select m from Member as m where m.age > 14 ์—”ํ‹ฐํ‹ฐ์™€ ์†์„ฑ์€ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ํ•จ O(Memeber, age ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ๊ฒƒ๊ณผ ๋Œ€์†Œ๋ฌธ์ž ๋™์ผํ•ด์•ผ) JPQL ํ‚ค์›Œ๋“œ๋Š” ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Œ(SELECT select FROM from WHERE where) ์—”ํ‹ฐํ‹ฐ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•œ๋‹ค(ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด ์•„๋‹˜) ๋ณ„์นญ์ด ํ•„์ˆ˜ m (as๋Š” ์ƒ๋žต ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ฐ€๊ธ‰์  ์“ฐ๋ฉด ์ข‹์Œ) ์ง‘ํ•ฉ, ์ •๋ ฌ ๋“ฑ ํ•จ์ˆ˜ ๊ฐ€๋Šฅ (COUNT, SUM, AVG, MAX, GROUP BY, ORDER.. 2023. 11. 26.
[์Šคํ”„๋ง๋ถ€ํŠธ ํ€ต์Šคํƒ€ํŠธ] ch.5 ์Šคํ”„๋ง๋ฐ์ดํ„ฐ JPA CrudRepository ์ธํ„ฐํŽ˜์ด์Šค ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ @Query ์• ๋„ˆํ…Œ์ด์…˜ Querydsl โ–ถ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ํ€ต์Šคํƒ€ํŠธ ์Šคํ”„๋ง๋ถ€ํŠธ๋Š” JPA ์—ฐ๋™์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๊ณผ ๋ณต์žกํ•œ XML์„ค์ •์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด JPA์Šคํƒ€ํ„ฐ๋ฅผ ์ œ๊ณตํ•จ โ€‹ โ–ท ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ์‚ฌ์šฉํ•˜๊ธฐ ๊ธฐ๋ณธ์„ค์ • : application.propertiesํŒŒ์ผ์—์„œ DataSource, JPA, Logging Setting Repository ์ธํ„ฐํŽ˜์ด์Šค๋“ค์˜ ์ƒ์† ๊ตฌ์กฐ ์ตœ๊ณ ์กฐ์ƒ, ๊ธฐ๋Šฅ ๊ฑฐ์˜ ์—†์Œ Repository Spring Data ๋ชจ๋“ˆ์—์„œ ์ œ๊ณต ๋Œ€๋ถ€๋ถ„ ์ด๊ฒƒ ๊ธฐ๋ณธ์ ์ธ CRUD ๊ธฐ๋Šฅ ์ œ๊ณต CrudRepository ๊ฒ€์ƒ‰๊ธฐ๋Šฅ + ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ PagingAndSortingRepository JpaRepository Spring Data JPA.. 2023. 11. 23.
[์Šคํ”„๋ง๋ถ€ํŠธ ํ€ต์Šคํƒ€ํŠธ] ch.4 JPA API persistence.xml EntityManagerFactory EntityManager โ–ถJPA ๊ฐœ๋… โ–ทJPA ๊ฐœ๋… ORM : ๊ฐ์ฒด-๊ด€๊ณ„-๋งคํ•‘์˜ ์•ฝ์ž. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜์„ ์ž๋™ํ™”ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ (Object-Relational-Mapping) JPA : ORM๋“ค์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ‘œ์ค€ํ™”์‹œํ‚จ ๊ฒƒ(Java Persistence API) ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA : ์Šคํ”„๋ง๋ถ€ํŠธ์—์„œ ์ด๋Ÿฐ JPA๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๋ชจ๋“ˆ. SpringData์˜ ํ•˜์œ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, XML ์„ค์ •์„ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋จ. โ€‹ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ๊ธฐ์ˆ  SQL์„ ์ง์ ‘ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  SQL์„ ์ง์ ‘ ๋‹ค๋ฃจ์ง€ ์•Š๋Š” ๊ธฐ์ˆ  SQL์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ XMLํŒŒ์ผ์— ๋“ฑ๋กํ•ด์„œ ์‚ฌ์šฉํ•จ ํ”„.. 2023. 11. 23.
[์Šคํ”„๋ง๋ถ€ํŠธ ํ€ต์Šคํƒ€ํŠธ] ch.3 ํ…Œ์ŠคํŠธ, ๋กœ๊น…, ๋นŒ๋“œ @SpringBootTest logging.level.com.rebypaper=trace โ€‹โ–ถํ…Œ์ŠคํŠธ @SpringBootTest ์• ๋„ˆํ…Œ์ด์…˜์„ ๋ถ™์ด๋ฉด ๋ณต์žกํ•œ ํ…Œ์ŠคํŠธ ์„ค์ •๋“ค์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ํ…Œ์ŠคํŠธ ๊ด€๋ จ ๊ฐ์ฒด๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค์คŒ ๊ด€๋ จ์†์„ฑ properties : ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  ์Šค๋กœํผํ‹ฐ๋“ค์„ k=yํ˜•ํƒœ๋กœ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ properties ํŒŒ์ผ์— ์„ค์ •๋œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์žฌ์ •์˜ํ•จ classes : ํ…Œ์ŠคํŠธํ•  ํด๋ž˜์Šค๋“ค์„ ๋“ฑ๋กํ•จ. ์ƒ๋žต์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ •์˜๋œ ๋ชจ๋“  ๋นˆ์„ ์ƒ์„ฑํ•จ webEnvironment : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋  ๋•Œ ์›น๊ณผ ๊ด€๋ จ๋œ ํ™˜๊ฒฝ์„ค์ • ๊ฐ€๋Šฅ โ€‹โ€‹ ๋ชจํ‚น : ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์‹ค์ œ ๊ฐ์ฒด์™€ ๋น„์Šทํ•œ ๋ชจ์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ ๋ชฉ์—… : ๋ชจํ‚นํ•œ ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์–ป์–ด๋‚ด๋Š” ๊ณผ์ • ๋ชจํ‚นํ•˜๋ ค๋ฉด @WebMvcT.. 2023. 11. 23.
[์Šคํ”„๋ง๋ถ€ํŠธ ํ€ต์Šคํƒ€ํŠธ] ch.2 ์˜์กด์„ฑ๊ณผ ์ž๋™์„ค์ • ๊ธฐ๋ณธ์ ์ธ ์„ค์ •์€ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ, ํ•„์š”ํ•œ ๋งŒํผ์˜ ๊ธฐ๋Šฅ๋งŒ ์žฌ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ โ–ท์Šคํ”„๋ง๋ถ€ํŠธ์˜ ํ•ต์‹ฌ์š”์†Œ โ‘ ์Šคํƒ€ํ„ฐ : ํŠน์ • ๋ชจ๋“ˆ ์‚ฌ์šฉ์‹œ ๊ด€๋ จ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ๋ฌถ์–ด์„œ ๋งˆ์น˜ ํŒจํ‚ค์ง€์ฒ˜๋Ÿผ ์ œ๊ณต. โ‘ก์ž๋™์„ค์ • : ๋นˆ ์„ค์ •์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•จ โ‘ข์•ก์ถ”์—์ดํ„ฐ : ์Šคํ”„๋ง๋ถ€ํŠธ๋กœ ๊ฐœ๋ฐœ๋œ ์‹œ์Šคํ…œ์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ โ€‹ โ–ถ์˜์กด์„ฑ๊ด€๋ฆฌ ์Šคํƒ€ํ„ฐ์˜ ์›๋ฆฌ : (๋ฉ”์ด๋ธ)์Šคํƒ€ํ„ฐ์— ์žˆ๋Š” POMํŒŒ์ผ์˜ ์ƒ์† ๊ตฌ์กฐ. ์—˜๋ฆฌ๋จผํŠธ ์‚ฌ์šฉ. ํ”„๋กœํผํ‹ฐ ์žฌ์ •์˜ ๋ฉ”์ด๋ธ(pom.xml) org.springframework.boot spring-boot-starter-web 2.5.4 ๊ทธ๋ ˆ์ด๋“ค(build.gradle) dependencies { // ๋‹ค๋ฅธ ์˜์กด์„ฑ๋“ค implementation 'org.springframework.boot:spring-b.. 2023. 11. 23.
[๋ณด์•ˆ] ์ฟ ํ‚ค์™€ ์„ธ์…˜ ๊ทธ๋ฆฌ๊ณ  JWT ์„ธ์…˜, ์ฟ ํ‚ค, JWT๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ธ์ฆ ๋ฐ ์„ธ์…˜ ๊ด€๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ์ค‘์š”ํ•œ ๊ธฐ์ˆ  ์ฟ ํ‚ค (Cookies) ์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก(๋ธŒ๋ผ์šฐ์ €)์— ์ €์žฅ๋˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ๋“ค ์žฅ์ : ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ์ถ”์ ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์„ธ์…˜ ๊ด€๋ฆฌ, ์‚ฌ์šฉ์ž ์ธ์ฆ, ์‚ฌ์šฉ์ž ์„ ํ˜ธ๋„ ๋“ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ : ์šฉ๋Ÿ‰ ์ œํ•œ(๋Œ€๋žต 4KB)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค HTTP ์š”์ฒญ๋งˆ๋‹ค ์ฟ ํ‚ค ๋ฐ์ดํ„ฐ๊ฐ€ ์„œ๋ฒ„๋กœ ์ „์†ก๋˜๋ฏ€๋กœ, ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. XSS(Cross-Site Scripting)์™€ ๊ฐ™์€ ๋ณด์•ˆ ์ทจ์•ฝ์ ์— ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•: ์ฟ ํ‚ค๋Š” Set-Cookie ํ—ค๋”๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋˜๋ฉฐ, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ดํ›„ ์š”์ฒญ์— Cookie ํ—ค๋”๋ฅผ ์ž๋™์œผ๋กœ ํฌํ•จ์‹œํ‚ต๋‹ˆ๋‹ค. HttpOnly, Secure, SameSite ๋“ฑ์˜ ์†์„ฑ.. 2023. 11. 23.