songining
JPA ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ด์œ 
BACKEND/Spring 2022. 1. 12. 12:25

๊ด€๊ณ„ํ˜• DB๊ฐ€ ์•„๋ฌด๋ž˜๋„ NoSQL๋ณด๋‹ค๋Š” ๋ฉ”์ธ! JPA-> ORM ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ค‘๊ฐ„์—์„œ ๋งคํ•‘(๊ฐ์ฒด์ง€ํ–ฅ๊ณผ ๊ด€๊ณ„ํ˜• DB์‚ฌ์ด) -> SQL ์ค‘์‹ฌ์ ์ธ ๊ฐœ๋ฐœ์—์„œ ๊ฐ์ฒด ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœ -> ์ƒ์‚ฐ์„ฑ (CRUD ๊ฐ„๋‹จ) - ์ €์žฅ(persist) ์กฐํšŒ(find) ์ˆ˜์ •(set) ์‚ญ์ œ (remove) - DB์— ๋‹ค์‹œ ์ง‘์–ด๋„ฃ๋Š” ์ž‘์—…์„ ํ•˜์ง€ ์•Š์•„๋„ ๋จ -> ์œ ์ง€๋ณด์ˆ˜ -> ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜ ํ•ด๊ฒฐ -> ์„ฑ๋Šฅ -> ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์ถ”์ƒํ™”์™€ ๋ฒค๋” ๋…๋ฆฝ์„ฑ -> ํ‘œ์ค€

์—”ํ‹ฐํ‹ฐ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ
BACKEND/Spring 2022. 1. 11. 20:58

๋ณ€๊ฒฝ๋ฐฉ๋ฒ• 1. ๋ณ‘ํ•ฉ(merge) -> ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜์–ด์˜จ ์ค€์˜์† ์ƒํƒœ์˜ ์—”ํ‹ฐํ‹ฐ ํ•„๋“œ๊ฐ’์œผ๋กœ ๋ชจ๋“  ํ•„๋“œ๋ฅผ ๋ณ€๊ฒฝ -> ์„ธํŒ…ํ•ด์ฃผ์ง€ ์•Š์€ ํ•„๋“œ๊ฐ’์€ null๋กœ ๋ณ€๊ฒฝ๋˜๋ฏ€๋กœ ๊ต‰์žฅํžˆ ์œ„ํ—˜ 2. ๋ณ€๊ฒฝ๊ฐ์ง€ -> ํ›จ์”ฌ ๋‚˜์€ ๋ฐฉ๋ฒ• -> ๊ฐ์ง€ํ›„ DB์—์„œ ์•Œ์•„์„œ ์—…๋ฐ์ดํŠธ ์ฒ˜๋ฆฌ ํ•ด์คŒ / ์›ํ•˜๋Š” ์†์„ฑ๋งŒ ์„ ํƒํ•ด์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ -> ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํ˜ธ์ถœํ•  ์„œ๋น„์Šค ์˜์—ญ ์•ˆ์— ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค. +) ์—”ํ‹ฐํ‹ฐ ์˜์—ญ์•ˆ์—์„œ ์—…๋ฐ์ดํŠธํ•จ์ˆ˜ ๋งŒ๋“ค๊ณ  ์„œ๋น„์Šค์—์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ํ•ด๋‹น ํ•จ์ˆ˜ ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค. (์œ ์ง€๋ณด์ˆ˜,์ถ”์  ์œ„ํ•ด) ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋‚ด์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ, ๋ณ€๊ฒฝ, ์กฐํšŒ๋“ฑ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ƒ์„ฑํ•œ๋‹ค. -> ์„œ๋น„์Šค์—์„œ ํ˜ธ์ถœ -> ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์„œ๋น„์Šค ํ˜ธ์ถœ

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ๋ฐฉ๋ฒ•
BACKEND/Spring 2022. 1. 7. 16:19

- ํ…Œ์ŠคํŠธ๋Š” ๋”ฐ๋กœ application.yml ์„ค์ •ํŒŒ์ผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Œ -๊ฐ ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜์—๋Š” @Test ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ด๋ฉฐ ๋งŒ์•ฝ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” @Test(expected = IllegalStateException.class) ์™€ ๊ฐ™์ด ํ•ด๋‹น ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์–ด๋…ธํ…Œ์ด์…˜์„ ๋งŒ๋“ค์–ด์ค€๋‹ค. - ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ํ‹€ ์˜ˆ์‹œ @RunWith(SpringRunner.class) @SpringBootTest @Transactional // ํ…Œ์ŠคํŠธ ๋๋‚ ๋•Œ ๋‹ค์‹œ rollback ํ•ด๋ฒ„๋ฆผ public class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test..

SpringBoot JPA ์ƒ์„ฑ์ž ์ฃผ์ž…
BACKEND/Spring 2022. 1. 7. 15:22

-์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์˜ ๊ฒฝ์šฐ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์ง€ํ–ฅ ํ›„์— ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์•ˆ์ „ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ. - ์ƒ์„ฑ์ž๊ฐ€ ํ•˜๋‚˜๋ฉด @Autowired ์ƒ๋žต ๊ฐ€๋Šฅ - ๋ณ€์ˆ˜์— final ๋ถ™์—ฌ์„œ ํ›„์— ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ - Repository์—์„œ ์‚ฌ์šฉํ•˜๋Š” EntityManager๋Š” @PersistenceContext๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜์ง€๋งŒ SpringBoot์—์„œ๋Š” @Autowired๋„ ๊ฐ€๋Šฅ - final์„ ๋ถ™์ธ ๋ณ€์ˆ˜๋ฅผ Lombok์˜ @RequiredArgsConstructor ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ์ž ์ƒ์„ฑ/์ฃผ์ž…ํ•ด์ฃผ๋ฉด ์ผ๊ด€์„ฑ์žˆ๊ณ  ๊น”๋”ํ•˜๊ฒŒ ์ฝ”๋“œ ์ •๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์ ์šฉํ•œ Repository ์˜ˆ์‹œ) @Repository @RequiredArgsConstructor public class MemberReposi..

Entity ์„ค๊ณ„์‹œ ์ฃผ์˜ํ•  ์ 
BACKEND/Spring 2022. 1. 4. 23:48

1. ๊ฐ€๊ธ‰์ ์ด๋ฉด setter ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž. - ๋ณ€๊ฒฝ ํฌ์ธํŠธ๊ฐ€ ๋งŽ์•„์„œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง 2. ๋ชจ๋“  ์—ฐ๊ด€๊ด€๊ณ„๋Š” ์ง€์—ฐ๋กœ๋”ฉ์œผ๋กœ ์„ค์ • - LAZY๋กœ ์„ค์ •!!! EX) @ManyToOne(fetch = FetchType.LAZY) 3. ์ปฌ๋ ‰์…˜ ๋ฐ”๋กœ๋ฐ”๋กœ ์„ธํŒ… (์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”) - null ๋ฌธ์ œ ๋ฐฉ์ง€ ์œ„ํ•ด 4. ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€์ผ๋•Œ๋Š” ์—ฐ๊ด€๊ด€๊ณ„ ํŽธ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ’ ์„ธํŒ… - ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ๋งŒ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ์ˆ˜๋Š” ์—†์œผ๋ฏ€๋กœ (DB์—๋Š” ์ฃผ์ธ๋งŒ ๊ฐ€์ ธ๋„ ok) 5. ์ตœ๋Œ€ํ•œ ์–ด๋””์—์„œ dependency์—†์ด ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๋†”๋‘๊ธฐ(ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งŒ! ํ™”๋ฉด ๊ด€๋ จ ๋กœ์ง์€ Form ๊ฐ์ฒด ๋˜๋Š” DTO ์‚ฌ์šฉ) +) manytomany๋Š” ์™ ๋งŒํ•˜๋ฉด ์‚ฌ์šฉx, ์ผ๋Œ€๋‹ค, ๋‹ค๋Œ€์ผ๋กœ ๋‚˜๋ˆ„๊ธฐ +) API ๋งŒ๋“ค๋•Œ์—๋Š” ์ ˆ๋Œ€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์™ธ๋ถ€๋กœ ๋ฐ˜ํ™˜(๋…ธ์ถœ)..

[Mac] IntelliJ SpringBoot ๋‹จ์ถ•ํ‚ค ์ •๋ฆฌ
BACKEND/Spring 2021. 12. 24. 23:18

(Mac) getter/setter ์ƒ์„ฑ -control + enter ์„ธ๋ฏธ์ฝœ๋ก  ์ž๋™์ƒ์„ฑ command + shift + enter ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ import option + enter ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ - ํ•ด๋‹น ํด๋ž˜์Šค์—์„œ command + shift + t ์ด์ „ ๋™์ž‘ ๋‹ค์‹œ ์‹คํ–‰ - control + R ์ด์ „์— ๋“ค์–ด๊ฐ”๋˜ ํŒŒ์ผ ๋ชฉ๋ก - command + e ๊ฐ์ฒด ์ž๋™์ƒ์„ฑ - command + option + v ๋ฉ”์†Œ๋“œ ์ถ”์ถœ - ๋ฉ”์†Œ๋“œ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๋ถ€๋ถ€ ๋“œ๋ž˜๊ทธ ํ›„ command + option + M ์›ํ•˜๋Š” ์ฝ”๋“œ ํ–‰ ๋ณต์‚ฌ + ๋ถ™์—ฌ๋„ฃ๊ธฐ - ๋ณต์‚ฌ์›ํ•˜๋Š” ํ–‰ ์ปค์„œ ์˜ฌ๋ฆฐ ํ›„ , command + d

SpringBoot build.gradle lombok ์„ค์ •
BACKEND/Spring 2021. 8. 26. 00:25

dependencies { ... //lombok implementation 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' ... } dependencies ๋‚ด๋ถ€์— ์œ„ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. (+ intellij lombok ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜) ๋‘์ค„ ์ „๋ถ€ ๊ผญ ์จ์ฃผ์–ด์•ผํ•œ๋‹ค. ํŠนํžˆ ๋‘๋ฒˆ์งธ ์ค„ ์ฝ”๋“œ๋ฅผ ๋นผ๋จน์œผ๋ฉด ์•ˆ๋œ๋‹ค. ์ฒซ ์ค„๋งŒ ์ ์–ด๋„ import๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. (์ด๊ฒƒ๋•Œ๋ฌธ์— cannot find symbol ์—๋Ÿฌ๋‚˜์„œ ํ•œ์ฐธ ํ—ค๋งธ๋‹ค.)

SpringBoot ์™€ mongoDB์—ฐ๋™ํ•˜๊ธฐ - swagger-ui ์‚ฌ์šฉ
BACKEND/Spring 2021. 8. 22. 15:00

์ผ๋‹จ ๋‚œ gradle project๋กœ ์ง„ํ–‰ํ•˜์˜€๋‹ค. https://start.spring.io/ ๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ ํ›„, build.gradle์•ˆ์— implementation('org.springframework.boot:spring-boot-starter-data-mongodb') ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ๋˜ํ•œ swagger์™€ swagger ui๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด //swagger //https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2' implementation group: 'io.spr..