๐ŸŒ Backend

๋‹จ๊ณ„๋ณ„๋กœ ์„ฑ์žฅํ•˜์ž!
์ธ์ฆ์˜ ํ•„์š”์„ฑ HTTP ํ†ต์‹ ์€ ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ์ข…๋ฃŒ๋˜๋ฉด ์—ฐ๊ฒฐ์„ ๋Š๋Š” Connectionless ํŠน์„ฑ๊ณผ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋ฉด ์–ด๋– ํ•œ ์ƒํƒœ๋„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” Statelessํ•œ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด๋‹ค. ๋”ฐ๋ผ์„œ, ๋กœ๊ทธ์ธ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฟ ํ‚ค, ์„ธ์…˜, ํ† ํฐ์„ ์‚ฌ์šฉํ•œ๋‹ค. Connectionless ํ”„๋กœํ† ์ฝœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ›์œผ๋ฉด ์—ฐ๊ฒฐ์„ ๋Š๋Š” ์ฒ˜๋ฆฌ ๋ฐฉ์‹ Stateless ํ”„๋กœํ† ์ฝœ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” ์„œ๋ฒ„ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด๋‹ค. 1. ์ฟ ํ‚ค ๐Ÿช ์ฟ ํ‚ค๋Š” Key-Value ํ˜•์‹์˜ ๋ฌธ์ž์—ด๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งก๊ฒจ๋„ ๋˜๋Š” ๊ณต๊ฐœ ๊ฐ€๋Šฅํ•œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ์‹œํ‚จ๋‹ค. ์ฟ ํ‚ค ๋™์ž‘ ๋ฐฉ์‹ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋กœ๊ทธ์ธ ์š”์ฒญ์— ๋Œ€ํ•ด ์‘๋‹ตํ•  ๋•Œ, ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ž‘์€ ์ •๋ณด๋ฅผ Response Header์˜ set-cooki..
๋ณดํ˜ธ๋˜์–ด ์žˆ๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค.
1. ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์—์„œ ์ง€์›๋˜๋Š” ํ‚ค์›Œ๋“œ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ดํŽด๋ณด์•˜๋‹ค. public interface MemberRepository extends JpaRepository { List findByGenderAndAgeGreaterThan(String gender, int age); } ์œ„์™€ ๊ฐ™์ด Member ๊ฐ์ฒด์˜ gender state๊ฐ€ ์ž…๋ ฅ๋œ gender์™€ ๊ฐ™๊ณ  age ์ƒํƒœ๊ฐ€ ์ž…๋ ฅ๋œ age๋ณด๋‹ค ํฐ Member๋ฅผ ์ฐพ๋Š” ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. Method Name์€ ๋งŒ์•ฝ ์—”ํ‹ฐํ‹ฐ์˜ ๋ณ€์ˆ˜ Name์ด ๋ฐ”๋€Œ๋ฉด ๊ฐ™์ด ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค! (์•ˆํ•˜๋ฉด ์—๋Ÿฌ๋‚จ) 2. ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ ๊ธฐ๋Šฅ ์นด์šดํŒ…(COUNT): count~By ๋ฐ˜ํ™˜ํƒ€์ž…์€ long ํƒ€์ž… ์กด์žฌ์—ฌ๋ถ€(EXISTS): exists~By ๋ฐ˜ํ™˜ํƒ€์ž…์€ boolean ํƒ€..
1. EntityManagerFactory์™€ EntityManager๋ฅผ ๋จผ์ € ์•Œ์•„๋ณด์ž EntityManager๋ž€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ๋Œ€ํ•˜์—ฌ ์ปค๋„ฅ์…˜ ํ’€์—์„œ ์ปค๋„ฅ์…˜์„ ์–ป๊ณ  DB์— ์ ‘๊ทผํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. EntityManagerFactory๋ž€ ๋ง ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ๋งˆ๋‹ค EntityManger๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ณต์žฅ์ด๋‹ค. 2. ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋ญ˜๊นŒ ๊ทธ๋ž˜์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์—”ํ‹ฐํ‹ฐ์˜ Life Cycle์„ ๊ด€๋ฆฌํ•˜๋Š” ์ €์žฅ์†Œ์ด๋‹ค. EntityManager๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ PersistenceContext๊ฐ€ ๊ฐ™์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค. 3. Entity Life Cycle ๋น„์˜์†(new/transient): ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ๊ด€๊ณ„์—†๋Š” ์ƒˆ๋กœ์šด ์ƒํƒœ ์˜์†(managed): ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ ์ค€์˜์†(detached): ์›..
์ด๋ฒˆ์— ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ด์„œ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. 1. ๋‘ ๊ฐ€์ง€ ์ „์†ก ๋ฐฉ์‹ HTML Form์˜ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ์‹์€ ํฌ๊ฒŒ 1. x-www-form-urlencoded Http Body์— bookname=jpabook&quantity=31 ์™€ ๊ฐ™์ด key-valueํ˜•์‹์„ &๋กœ ์—ฐ๊ฒฐ์ง€์–ด ๋ฌธ์ž๋ฅผ ์ „์†กํ•œ๋‹ค. 2. multipart/form-data ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ์™€ ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. multipart/form-data์— ๋Œ€ํ•ด์„œ ๋” ์•Œ์•„๋ณด์ž. 2. multipart/form-data ํผ ๋ฐ์ดํ„ฐ๊ฐ€ ์„œ๋ฒ„๋กœ submit ๋  ๋•Œ ์ธ์ฝ”๋”ฉ ๋˜๋Š” ๋ฐฉ์‹์„ ์ง€์ •ํ•˜๋Š” enctype(encryptiontype)์„ ํ•ด๋‹น ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ H..
1. ๊ธฐ๋ณธ ํ‚ค ํ• ๋‹น ๋ฐฉ๋ฒ• (1) ์ง์ ‘ ํ• ๋‹น์˜ ๊ฒฝ์šฐ @Id private Long id; (2) ์ž๋™ ์ƒ์„ฑ ํ• ๋‹น์˜ ๊ฒฝ์šฐ @Id @GeneratedValue(strategy = GenerationType.IDENTITY OR AUTO OR SEQUNCE OR TABLE) private Long id; 2. ์ž๋™ ์ƒ์„ฑ ํ• ๋‹น ์ „๋žต (1) IDENTITY PK ์ƒ์„ฑ์„ DB์— ์œ„์ž„ํ•œ๋‹ค. DB๊ฐ€ ์•Œ์•„์„œ AUTO INCREMENT๋กœ ๊ด€๋ฆฌํ•ด์ค€๋‹ค. entityManger.persist()๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ์ ์— ์ฆ‰์‹œ INSERT ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜์–ด DB์— ๋ฐ˜์˜๋˜๊ณ  DB์—์„œ PK๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ž๋™ ํ• ๋‹นํ•˜๋ฉฐ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ 1์ฐจ ์บ์‹œ์— ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค. ์ด๊ฑธ ์•Œ๋ฉด ๊ฐ™์€ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ๋„ persist()์ดํ›„์—๋Š” SELECT ์ฟผ๋ฆฌ๋กœ ID..
DevPoong
'๐ŸŒ Backend' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)