๋ชฉํ - ๊ฐ์ฒด์ ํ
์ด๋ธ ์ฐ๊ด๊ด๊ณ์ ์ฐจ์ด๋ฅผ ์ดํด - ๊ฐ์ฒด์ ์ฐธ์กฐ์ ํ
์ด๋ธ์ ์ธ๋ ํค๋ฅผ ๋งคํ ๊ฐ์ฒด์ ํ
์ด๋ธ ์ฐ๊ด๊ด๊ณ์ ์ฐจ์ด๋ฅผ ์ดํด ๊ฐ์ฒด๋ฅผ ํ
์ด๋ธ์ ๋ง์ถ์ด ๋ชจ๋ธ๋ง ํ์ ๋ ๋ฌธ์ ์ (์ฐธ์กฐ ๋์ ์ ์ธ๋ ํค๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ) ํ๋ ฅ ๊ด๊ณ๋ฅผ ๋ง๋ค ์ ์๋ค. ํ
์ด๋ธ์ ์ธ๋ ํค๋ก ์กฐ์ธ์ ์ฌ์ฉํด์ ์ฐ๊ด๋ ํ
์ด๋ธ์ ์ฐพ๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ๋ฒ๊ฑฐ๋ก์ด ์ฝ๋๊ฐ ๋ฐ์๋๋ค. Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("member1"); // ์ธ๋ํค ์๋ณ์๋ฅผ ์ง์ ๋ค๋ฃฌ๋ค. member.setTeamId(team.getId()); em.persist(member); // ๋ฉค๋ฒ์ ..
๊ฐ์ฒด์ ํ
์ด๋ธ ๋งคํ @Entity - @Entity๊ฐ ์ ์๋์ด์๋ ํด๋์ค๋ JPA๊ฐ ๊ด๋ฆฌํ๋ค. - ๊ธฐ๋ณธ ์์ฑ์๊ฐ ๊ผญ ์์ด์ผ ํ๋ค. - ์์ฑ: name ->JPA์ ์ฌ์ฉํ ์ํฐํฐ ์ด๋ฆ์ ์ง์ ํ๋ค, ๊ธฐ๋ณธ๊ฐ : ํด๋์ค ์ด๋ฆ์ ๊ทธ๋๋ก ์ฌ์ฉ @Table - name, catalog, schema ๋ฑ๋ฑ. . ํ๋์ ์ปฌ๋ผ ๋งคํ @Column ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปฌ๋ผ๋ช
์ ์ค์ ํด์ค ์ ์๋ค. unique(์ค๋ฌด์์ ์ ์ฌ์ฉํ์ง ์๋๋ค -> ์ ๋ํฌ ์ ์ฝ์กฐ๊ฑด ์ด๋ฆ์ ์ค์ ํ ์ ์๋ค ๋์ @Table(uniqueCons.. ์ฌ์ฉ), length ๋ฑ ์ค์ ํ ์ ์๋ค. @Temporal ๋ ์ง ํ์
๋งคํ ํ์ง๋ง LocalDate, LocalDateTime์ ์ฌ์ฉํ ๋๋ ์๋ต ๊ฐ๋ฅํ๋ค. @Enumerated enum ํ์
๋งคํ default..
JPA์์ ๊ฐ์ฅ ์ค์ํ 2๊ฐ์ง - ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋งคํํ๊ธฐ - ์์์ฑ ์ปจํ
์คํธ ์์์ฑ ์ปจํ
์คํธ๊ฐ ๋ญ๊น? JPA๋ฅผ ์ดํดํ๋๋ฐ ๊ฐ์ฅ ์ค์ํ ์ฉ์ด์ด๋ค. "์ํฐํฐ๋ฅผ ์๊ตฌ ์ ์ฅํ๋ ํ๊ฒฝ"์ด๋ผ๋ ๋ป. -> EntityManager.persist(entity); - persist๋ ์ฌ์ค DB์ ์ ์ฅํ๋๊ฒ ์๋๊ณ Entity๋ฅผ ์์์ฑ ์ปจํ
์คํธ์ ์ ์ฅํ๋ค๋ ๋ป์ด๋ค. - ๋
ผ๋ฆฌ์ ์ธ ๊ฐ๋
์ผ๋ก ๋์ ๋ณด์ด์ง ์๋๋ค. EntityManager๋ฅผ ํตํด์ ์์์ฑ ์ปจํ
์คํธ์ ์ ๊ทผํ๋ค. - ์ฌ๋ฌ๊ฐ์ EntityManager๊ฐ ํ๋์ ์์์ฑ ์ปจํ
์คํธ๋ฅผ ๋ฐ๋ผ๋ณธ๋ค. ์ํฐํฐ์ ์๋ช
์ฃผ๊ธฐ๋ ์ด๋ป๊ฒ ๋ ๊น? ๋น์์ - ์์์ฑ ์ปจํ
์คํธ์ ์ ํ ๊ด๊ณ๊ณผ ์๋ ์๋ก์ด ์ํ ์์ - ์์์ฑ ์ปจํ
์คํธ์ ๊ด๋ฆฌ๋๋ ์ํ ์ค์์ - ์์์ฑ ์ปจํ
์คํธ์ ์ ์ฅ๋..
์๋์ ๊ฐ์ด ์์ฑํ์ ๋ ์ ์ฅ์ด ๋ ๊น? ์๋ฌ๊ฐ ์๊ธด๋ค. ์๋ํ๋ฉด JPA๋ ํธ๋ ์ ์
์ด๋ ๋จ์๊ฐ ๋งค์ฐ ์ค์ํ๊ธฐ ๋๋ฌธ์ JPA์ ๋ชจ๋ ๊ธฐ๋ฅ์ ํธ๋ ์ ์
์์์ ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); Member member = new Member(); member.setId(1L); member.setName("AE"); em.persist(member); em.close(); emf.close(); ํธ๋ ์ ์
์ ์ถ๊ฐํ ์ฝ๋ EntityManagerFactory emf = Persistence.createEntityMa..
www.inflearn.com/course/ORM-JPA-Basic/dashboard ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์ JPA๋ฅผ ์ฒ์ ์ ํ๊ฑฐ๋, ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ์กฑํ์ ๋ถ๋ค์ด JPA์ ๊ธฐ๋ณธ ์ด๋ก ์ ํํํ๊ฒ ํ์ตํด์ ์ด๋ณด์๋ ์ค๋ฌด์์ ์์ ์๊ฒ JPA๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค., ๋ณธ ๊ฐ์๋ ์๋ฐ ๋ฐฑ์ www.inflearn.com ์ธํ๋ฐ์ ์๋ ๊ฐ์๋ฅผ ๋ณด๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ์
๋๋ค! ๋ชฉํ : ๊ฐ์ฒด์ ํ
์ด๋ธ ์ค๊ณ ๋งคํ - ๊ฐ์ฒด์ ํ
์ด๋ธ์ ์ ๋๋ก ์ค๊ณํ๊ณ ๋งคํํ๋ ๋ฐฉ๋ฒ - ๊ธฐ๋ณธ ํค์ ์ธ๋ ํค ๋งคํ - 1:N, N:1, 1:1, N:M ๋งคํ - ์ค๋ฌด ๋
ธํ์ฐ + ์ฑ๋ฅ ๊ณ ๋ ค - JPA ๋ด๋ถ ๋์ ๋ฐฉ์ ์ดํดํ๊ธฐ - JPA๊ฐ ์ธ์ , ์ด๋ค SQL์ ๋ง๋ค์ด ์คํํ๋์ง ์ดํด J..
jsp๋ง ๋ฐฐ์ฐ๊ณ ์ฌ์ฉํ๋ฉด์ ์ต์ํด์ง ๊ฒ์ ๊ณ์ ์ฐ๊ณ ์ถ์์ง๋ง Spring Boot๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด์ Thymeleaf๋ฅผ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค. ์ฐ์ ์ ์ผ๋ก Spring boot์์ jsp ์ฌ์ฉ์ ๊ถ์ฅํ๊ณ ์์ง ์์ต๋๋ค. ์๋ง ๋ด์ฅํฐ์บฃ์ด๊ธฐ ๋๋ฌธ์ war๋ก ํจํค์ง์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ Spring boot๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ์
์ฅ์์๋ ์ฝ๊ฐ ๐คจ์
๋๋ค. Thymeleaf๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์์กด์ฑ์ ๋จผ์ ์ถ๊ฐ ํด์ค๋๋ค. build.gradle implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' application.yml์๋ ๊ด๋ จ ์ค์ ์ ํด์ฃผ์ด์ผ ํฉ๋๋ค. jsp๋ฅผ ์ฌ์ฉํ ๋ ์ฒ๋ผ ์์น์ ํ์ผํ์์ ์๋ ค์ค๋๋ค application.yml spri..
Jpa pageable์ ์๋ชจ๋ฅด์๋ ๋ถ์ ์๋์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์~! 2021/02/03 - [WEB/JPA] - JAP Pageable ์ฌ์ฉํ๊ธฐ JAP Pageable ์ฌ์ฉํ๊ธฐ Page๊น์ง ์๋ค๋๊ฑด... ๊ธฐ๋ณธ์ ์ธ CRUD๋ฅผ ์๊ณ ๊ณ์ ์ํ๋ก ์ดํดํ๊ณ ์์ฑํ๊ฒ ์ต๋๋ค! ํ ์ผ : ๊ฐ๋จํ ๋ฆฌ์คํธ ๋ฐ์ดํฐ์ Page, Sort ๊ตฌํํ์ฌ API๋ฅผ ๊ตฌํํ๋ค. Service Entity์์ฒด๋ฅผ ๋ฐํํ๋๊ฑด ์ ๋๋ก ํ์ง ์ aejeong.com ์ค์ ์ธํ
๋ถํฐ ํด๋ณผ๊ฒ์ ~! 1. build.gradle implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' 2. application.yml spring: thymeleaf: prefix: classp..
Page๊น์ง ์๋ค๋๊ฑด... ๊ธฐ๋ณธ์ ์ธ CRUD๋ฅผ ์๊ณ ๊ณ์ ์ํ๋ก ์ดํดํ๊ณ ์์ฑํ๊ฒ ์ต๋๋ค! ํ ์ผ : ๊ฐ๋จํ ๋ฆฌ์คํธ ๋ฐ์ดํฐ์ Page, Sort ๊ตฌํํ์ฌ API๋ฅผ ๊ตฌํํ๋ค. Service Entity์์ฒด๋ฅผ ๋ฐํํ๋๊ฑด ์ ๋๋ก ํ์ง ์๊ธฐ ๋๋ฌธ์ Response dto๋ฅผ ๋ง๋ค์ด์ ๋ฐํํ๊ธฐ๋ก ํฉ๋๋ค. Repository์์ ๋ฐ์์จ Page UserEntity๋ฅผ Response์ ๋งตํํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฐํํ ๋ ์์ฑ์์ stream์ ์ฌ์ฉํ์ฌ ๊ฐ๊ฐ ๋งตํ ํด์ค๋๋ค! ์ฌ๊ธฐ์ finAny().orElse("") ๋ user์ ์ด๋ฏธ์ง๊ฐ ํ์๋ ์๋๊ธฐ ๋๋ฌธ์ NPE์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ null์ผ ๊ฒฝ์ฐ String ํ์
์ null์ ๋ฐํํ๊ฒ ํ์ต๋๋ค. ์ด๋ถ๋ถ์ ์ข๋ ์ฐพ์์ ์
๋ฐ์ดํธ ํ๋๋ก ํ๊ฒ ์ต๋๋ค! public Page..
์์ฃผ ๊ธฐ๋ณธ์ ์ธ ์ฝ๋๊น์ง ๋ชจ๋ ์์ต๋๋ค.. ์๋๋ฉด... ์ ๋ ๊ธฐ์ ๋ธ๋ก๊ทธ๋ค์ ๋ณด๋ฉด์ ๋น ์ ธ์๋ ๋ถ๋ถ์ ๋ณด๋ฉด ๋๊ฐ์ ์ด๋ณด๋ ์ด์ฉ๋ผ๊ณ ํ๋ฉฐ ์ฌํผํ๊ธฐ ๋๋ฌธ์,,, ์ฌ์ค Security์ ์ฌ๋ฌ๊ฐ์ง Filter๋ฅผ ์ฌ์ฉํ์ฌ JWT ๋ฐฉ์์ ์ด์ฉํ๋๊ฒ ๋ง์ง๋ง ํ๋ก์ ํธ ํฌ๊ธฐ,, ๊ธฐ๊ฐ์ ๋ถํ์ํ๋ค ํ๋จํ๊ฒ ๋์ด์ JWT ๋ง์ ์ฌ์ฉํ์ฌ ๊ตฌํํ์๋ค. ๋์ค์ Security๋ ๊ฐ์ด ๊ตฌํํ์ฌ ์ฌ๋ฆฌ๋๋ก ํ๊ฒ ์! ์ด๋ฒ์๋ git์ ์ฌ๋ ค ์ฝ๋๊น์ง ๊ณต์ ํ๊ธฐ๋ก ํ๋ค! ์ฒ์๋ณด๋ฉด ์ฝ๊ฐ ๋ณต์กํ๋ค๊ณ ์๊ฐ๋๊ณ ๋๋ํ ๊ทธ๋ฌ๋ค ใ
ใ
,, (๋ถ๋๋ฌ์ด) ๊ตฌํ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์ดํดํ๊ณ ํน์ ์ด์ํ๊ณณ์ PRํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค...(๊ฐ์ ,,) git ์ฃผ์ (์ค๋ฌด์์ ์ค์ ๋ก ์ฌ์ฉํ๋ฉด์ ์์ ํ๊ณ ์์ต๋๋ค ~!) git clone https://github.com/ae..
๊ตฌ์กฐ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด resources์ ๊ฐ์ ๊ฒฝ๋ก์ webapp์ ๋ง๋ค์ด ์ฃผ์๋ฉด ๋ฉ๋๋ค. ์์ WEB-INF๋ ๋๊ฐ์ด ๋ง๋ค์ด์ฃผ์๊ณ application.yml์ ์ค์ ์ ๋ฐ๋ผ ์์ ์๋ ํด๋ ์ด๋ฆ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. application.yml spring: mvc: view: prefix: /WEB-INF/jsp/ suffix: .jsp build.gradle // JSTL implementation 'javax.servlet:jstl:1.2' // JASPER implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' springboot์์ jps๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ธ์ฅํฐ์บฃ์ ์์กด์ฑ์ผ๋ก ์ถ๊ฐํด์ค๋๋ค. jsp๋ ๊ทนํ์ด๋ jstl๋ ์ถ๊ฐํด์ค๋๋ค. ๊ธฐ๋ณธ ํฌํ๋ฆฟ ..
์ธํ๋ฐ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์
๋ฌธ - ์ต๋ฒ๊ท ๋ฅผ ๊ณต๋ถํ๋ฉฐ ์ ์ํ๊ธฐ ๋
ธํธ์
๋๋ค. ์ง์ ์ค์ ์์ Java๋ฅผ ์ฐ๊ฒ ๋๋ฉด์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ค์์ฑ์ด ๋ผ๋ฅผ ๊ฐํํ๋ค... ๊ณต๋ถํ์! "Software maintenance is not keep it working like before it is keep being useful in a changing world" - Jessica Kerr ์ ์ง๋ณด์๋ ๊ทธ๋๋ก๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ์ ์ฉํ๊ฒ ๋ณ๊ฒฝํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ถ์๊ณผ ์์ ์ด ๋น ๋ฅด๊ฒ ๋์ด์ผ ํ๋ค. ๋น์ฉ๊ณผ ๋ณํ ๋ฎ์ ๋น์ฉ์ผ๋ก ๋ณํํ ์ ์์ด์ผ ํ๋ค. 1. ํจ๋ฌ๋ค์ ๊ฐ์ฒด ์งํฅ, ํจ์ํ, ๋ฆฌ์กํฐ๋ธ ๋ฑ 2. ์ฝ๋, ์ค๊ณ, ์ํคํ
์ฒ DRY, TDD, SOLID, DDD, ... ํด๋ฆฐ ์ํคํ
์ฒ, MSA, ... 3. ..
์ด๋ฒ์ ์คํํธ์
์ ์ทจ์
ํ๋ฉด์ ๋ง์ ๊ฑธ ๋ฐฐ์ฐ๋ ๋์์ ๋ง์ ๊ฒ ์ซ์ด์ก๋ค. ํ์ง๋ง ๋ฒํฐ๊ณ ๋๋ฉด ์ถ์ต์ด๊ณ ๋์ ๊ฒฝ๋ ฅ์ด ๋๊ฒ ์ง ... ใ
๊ฟป ์ฐ์ ์ฒ์ ํ๋ก์ ํธ๋ฅผ ๋ค์ด๊ฐ์ ์ฒ์์ผ๋ก ์ฌ์ฉํด ๋ดค๋ค. ํ์์์ ๋ง์ด ์ฌ์ฉํ์ง ์๋๋ค๊ณ ๋ฐฐ์ ์ง๋ง ์ด๋ฒ์ ์ฌ์ฉํ๋ฉด์ ๊ฐ๋
์ฑ๋ฉด์์ ๋งค์ฐ ์ข๋ค๊ณ ๋๊ผ๊ธฐ ๋๋ฌธ์ ๋์ค์ ์ํด ์ ๋ฆฌํ๋ค! Spring Boot ์์ api ์ค๊ณ ์ค ๋ฐฐ์ก ๊ธฐ๋ฅ์ ๋ง๋ค๋ฉด์ ๋ฐฐ์ก์ํ ๊ด๋ฆฌ๋ฅผ ํ๋๋ฐ 1,2,3... ๋ฑ ์ซ์๋ก ํํ๋์ด 1์ด ๋ฌด์์ธ์ง 2๊ฐ ๋ฌด์์ธ์ง ์ผ์ผ์ด ์ฐพ์๋ณด๊ธฐ ๋ฒ๊ฑฐ๋ก์ ๋ค. ๋ํ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ ์ด๋ค ๊ฑด์ง ํท๊ฐ๋ฆด ๊ฑฐ ๊ฐ์ Enumํ์
์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค. @Getter public enum SomethingStatus { PAYMENT_COMPLETE(0), PREPARING(1), CANCEL(..