๋๊ธฐํ ๋ฉ์๋์ ๋๊ธฐํ ๋ธ๋ก ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋จ์์๋ ์ค๋ ๋๋ค์ด ๊ฐ์ฒด๋ฅผ ๊ณต์ ํด์ ์์
ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ค๋ ๋a๊ฐ ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ฅผ b์ ์ํด ์ํ๊ฐ ๋ณ๊ฒฝ ๋ ์ ์์ด์ a๊ฐ ์๋ํ๋ ๊ฒฐ๊ณผ์ ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ค์ธ ์ค๋ ๋์ ์์
์ด ๋๋ ๋๊น์ง ๊ฐ์ฒด์ ์ ๊ธ์ ๊ฑธ์ด ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ฌ์ฉํ ์ ์๋๋ก ํด์ผ ํ๋ค. ๋จ ํ๋์ ์ค๋ ๋๋ฅผ ์คํํ๋ ์๊ณ ์์ญ์ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค. -> ์ค๋ ๋๊ฐ ๊ฐ์ฑ ๋ด๋ถ์ ๋๊ธฐํ ๋ฉ์๋ ๋๋ ๋ธ๋ก์ ๋ค์ด๊ฐ๋ฉด ์ฆ์ ๊ฐ์ฒด์ ์ ๊ธ์ ๊ฑธ์ด ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์์ญ์ ์๋ ์ฝ๋๋ฅผ ์คํํ์ง ๋ชปํ๋๋ก ํ๋ค. ๋ฉ์๋ ์คํ ์ข
๋ฃ ๋๋ฉด ์ ๊ธ์ด ํ๋ฆฐ๋ค. ์ฌ์ฉ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค public synchronized void method(){ // ์๊ณ ์์ญ } ์ผ๋ถ ๋ด์ฉ๋ง ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ๋ธ..
์ ์ฒด ๊ธ
๋ฉํฐ ํ๋ก์ธ์ค๊ฐ ์ ํ๋ฆฌ์ผ์ด์
๋จ์์ ๋ฉํฐ ํ์คํน์ด๋ผ๋ฉด ๋ฉํฐ ์ค๋ ๋๋ ์ ํ๋ฆฌ์ผ์ด์
๋ด๋ถ์์์ ๋ฉํฐ ํ์คํน์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. ๋ฉํฐ ์ค๋ ๋๋ ๋ค์ํ ๊ณณ์์ ์ฌ์ฉ๋๋ค. 1. ๋์ฉ๋ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํด์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ ๊ณณ์์ ์ฌ์ฉ 2. UI๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋คํธ์ํฌ ํต์ ์ ํ๊ธฐ ์ํด ์ฌ์ฉ 3. ๋ค์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์๋ฒ๋ฅผ ๊ฐ๋ฐํ ๋ - ๋ฉ์ธ ์ค๋ ๋ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์์
์ค๋ ๋๋ณด๋ค ๋จผ์ ์ข
๋ฃ๋๋๋ผ๋ ์์
์ค๋ ๋๊ฐ ๊ณ์ ์คํ ์ค์ด๋ฉด ํ๋ก์ธ์ค๋ ์ข
๋ฃ๋์ง ์๋๋ค. - ์์
์ค๋ ๋ ๋ช ๊ฐ์ ์์
์ ๋ณ๋ ฌ๋ก ์คํํ ์ง ๊ฒฐ์ ํ๊ณ ๊ฐ ์์
๋ณ๋ก ์ค๋ ๋๋ฅผ ์์ฑํ๋ค. (์์
1) (์์
2) (ํ๋ก๊ทธ๋จ์์ ๋ณ๋ ฌ๋ก ์คํํ ์์
์ ๊ฒฐ์ ) -> ๋ฉ์ธ์ค๋ ๋ ์ค๋ ๋1 ์ค๋ ๋2 Threadํด..
userState๋ณด๋ค ๋ ๋ค์ํ ์ปดํฌ๋ํธ ์ํฉ์ ๋ฐ๋ผ ๋ค์ํ ์ํ๋ฅผ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์
๋ฐ์ดํธ ํด ์ฃผ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ Hook ๋ฆฌ๋์๋ ํ์ฌ ์ํ, ๊ทธ๋ฆฌ๊ณ ์
๋ฐ์ดํธ๋ฅผ ์ํด ํ์ํ ์ ๋ณด๋ฅผ ๋ด์ ์ก์
๊ฐ์ ์ ๋ฌ๋ฐ์ ์๋ก์ด ์ํ๋ฅผ ๋ฐํํ๋ ํจ์์ด๋ค.(์๋ก์ด ์ํ๋ฅผ ๋ง๋ค ๋๋ ๋ฐ๋์ ๋ถ๋ณ์ฑ์ ์ง์ผ ์ฃผ์ด์ผ ํ๋ค) ์์ ๋ก ์ฌ๋ฌ ์ธํ์ ์ํ๋ฅผ ์ ์ฅํด๋ด
์๋ค! import React,{useReducer} from 'react'; function reducer(state,action){ retunr{ ...state, [action.name] = action.value }; } ์ฐ์ ์์ ๊ฐ์ด reducer ํจ์๋ฅผ ์์ฑํฉ๋๋ค. 1. ...state๋ ๊ธฐ์กด์ ์๋ state ๊ฐ๋ค์ ๋ณต์ฌ ์ํค๋๊ฒ๊ณผ ๊ฐ์ต๋๋ค. 2. actio..
import React, { Component } from 'react'; class LifeCycleSample extends Component{ state={ error:false, number:0, color:null, } myRef = null; // ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ๋ ์ฒ์์ผ๋ก ์คํ๋๋ค. // ์ด๊ธฐ state๋ฅผ ์ ํ๋ค. constructor(props){ super(props); console.log('constructor'); } // props๋ก ๋ฐ์ ์จ ๊ฐ์ state์ ๋๊ธฐํ์ํค๋ ์ฉ๋ // ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋, ์
๋ฐ์ดํธ๋ ๋ ํธ์ถ static getDerivedStateFromProps(nextProps,prevState){ console.log('getDerivedStateFrom..
ํ๋ก์ Team์ ์ํด์๋ Member ๋ฅผ ์กฐํํ ์ Team๊น์ง ์กฐํํ ํ์๊ฐ ์์๊น? ๋น์ง๋์ค ๋ก์ง์์ ํ์ํ์ง ์์ ๋๊ฐ ์๋๋ฐ ํญ์ Team์ ํจ๊ป ์กฐํํ๋ค๋ฉด ๋ญ๋น๊ฐ ๋ฐ์๋๋ค. ์ด ๋ญ๋น๋ฅผ ํ์ง ์๊ธฐ ์ํด ํ๋ก์๋ผ๋ ๊ฐ ๋ฉฐ์ผ๋ก ํด๊ฒฐํ๋ค. - ์ค์ ํด๋์ค๋ฅผ ์์ ๋ฐ์์ ๋ง๋ค์ด์ง๊ธฐ ๋๋ฌธ์ ๊ฒ ๋ชจ์์ด ๊ฐ๋ค - ์ฌ์ฉํ๋ ์
์ฅ์์๋ ์ง์ง, ๊ฐ์ง ๊ฐ์ฒด์ธ์ง ๊ตฌ๋ถํ์ง ์๊ณ ์ฌ์ฉํ๋ฉด ๋๋ค. - ํ๋ก์ ๊ฐ์ฒด๋ ์ค์ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๋ณด๊ด -> ํ๋ก์ ๊ฐ์ฒด๋ฅผ ํธ์ถํ๋ฉด ํ๋ก์ ๊ฐ์ฒด๋ ์ค์ ๊ฐ์ฒด์ ๋ฉ์๋ ํธ์ถ em.find() : ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํตํด์ ์ค์ ์ํฐํฐ ๊ฐ์ฒด ์กฐํ em.getReference() : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ๋ฅผ ๋ฏธ๋ฃจ๋ ๊ฐ์ง(ํ๋ก์) ์ํฐํฐ ๊ฐ์ฒด ์กฐํ // ํธ์ถํ ์๊ฐ ์ฟผ๋ฆฌ ์คํ Member findMember..
์์๊ด๊ณ ๋งคํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์ ๊ด๊ณ๊ฐ ์๋ค.(์ํผํ์
์๋ธํ์
๊ด๊ณ๋ผ๋ ๋ชจ๋ธ๋ง ๊ธฐ๋ฒ์ด ๊ฐ์ฒด ์์๊ณผ ์ ์ฌํ๋ค) ์ํผํ์
์๋ธํ์
๋
ผ๋ฆฌ ๋ชจ๋ธ์ ์ค์ ๋ฌผ๋ฆฌ ๋ชจ๋ธ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ 1. ๊ฐ๊ฐ ํ
์ด๋ธ๋ก ๋ณํ -> ์กฐ์ธ ์ ๋ต (์ ์) - ํ
์ด๋ธ ์ ๊ทํ - ์ธ๋ ํค ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด ํ์ฉ ๊ฐ๋ฅ - ์ ์ฅ๊ณต๊ฐ ํจ์จํ - ์กฐํ์ ์กฐ์ธ์ ๋ง์ด ์ฌ์ฉ -> ์ฑ๋ฅ ์ ํ, ์กฐํ ์ฟผ๋ฆฌ๊ฐ ๋ณต์กํจ - ๋ฐ์ดํฐ ์ ์ฅ์ INSERT ์ฟผ๋ฆฌ๊ฐ 2๋ฒ ํธ์ถ ๋๋ค. ๋น์ง๋์ค์ ์ผ๋ก ์ค์ํ๊ณ ๋ณต์กํ ๋ ์ ํ! ๋ถ๋ชจ ํด๋์ค ์ค์ @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn ์์ ํด๋์ค ์ค์ -> dtype์ ํ์๋ ์ด๋ฆ์ ์ ํด ์ค ๊ฒฝ์ฐ @DiscriminatorVa..
์ฐ๊ด๊ด๊ณ ๋งคํ์ ๊ณ ๋ ค์ฌํญ 3๊ฐ์ง 1. ๋ค์ค์ฑ 2. ๋จ๋ฐฉํฅ, ์๋ฐฉํฅ 3. ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ - ๊ฐ์ฒด ์๋ฐฉํฅ ๊ด๊ณ๋ ์ฐธ์กฐ๊ฐ 2๊ตฐ๋ฐ ์๊ธฐ ๋๋ฌธ์ ๋์ค ํ
์ด๋ธ์ ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌํ ๊ณณ์ ์ง์ ํด์ผํจ - ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌํ๋ ์ฐธ์กฐ - ์ฃผ์ธ์ ๋ฐ๋ํธ : ์ธ๋ ํค์ ์ํฅ์ ์ฃผ์ง ์์, ๋จ์ ์กฐํ ๋ค๋์ผ[N:1] ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํจ ๋จ๋ฐํฅ ์๋์ ๊ฐ์ด [N]์์ ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌํ๊ณ Team์ ์กฐํ ํ๊ณ ์ถ๊ฐํ ์ ์๋ค. Team์ ์๋ ์กฐํํ์ง ๋ชปํจ -> Team์์ Member์ ์กฐํํ๋์ผ์ด ๋น๋ฒํ๋ค๊ณ ํ๋ฉด -> ์๋ฐํฅ ์ผ๋ก ๋งคํํด์ฃผ๋๊ฒ ์ข์. ์๋ฐํฅ ๋จ๋ฐํฅ์์ TEAM์ด MEMBER๋ฅผ mapped by ๋ฅผ ์ถ๊ฐํ์ฌ MEMBER๋ฅผ ์กฐํํ ์ ์๋ค. (์ฝ๊ธฐ ์ ์ฉ) ์ผ๋๋ค[1:N] 1์ด ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ด๋ค. ๋จ๋ฐฉํฅ TEAM ์์..
๋ชฉํ - ๊ฐ์ฒด์ ํ
์ด๋ธ ์ฐ๊ด๊ด๊ณ์ ์ฐจ์ด๋ฅผ ์ดํด - ๊ฐ์ฒด์ ์ฐธ์กฐ์ ํ
์ด๋ธ์ ์ธ๋ ํค๋ฅผ ๋งคํ ๊ฐ์ฒด์ ํ
์ด๋ธ ์ฐ๊ด๊ด๊ณ์ ์ฐจ์ด๋ฅผ ์ดํด ๊ฐ์ฒด๋ฅผ ํ
์ด๋ธ์ ๋ง์ถ์ด ๋ชจ๋ธ๋ง ํ์ ๋ ๋ฌธ์ ์ (์ฐธ์กฐ ๋์ ์ ์ธ๋ ํค๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ) ํ๋ ฅ ๊ด๊ณ๋ฅผ ๋ง๋ค ์ ์๋ค. ํ
์ด๋ธ์ ์ธ๋ ํค๋ก ์กฐ์ธ์ ์ฌ์ฉํด์ ์ฐ๊ด๋ ํ
์ด๋ธ์ ์ฐพ๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ๋ฒ๊ฑฐ๋ก์ด ์ฝ๋๊ฐ ๋ฐ์๋๋ค. 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..