๋ณ๊ฒฝ๋ฐฉ๋ฒ 1. ๋ณํฉ(merge) -> ํ๋ผ๋ฏธํฐ๋ก ๋์ด์จ ์ค์์ ์ํ์ ์ํฐํฐ ํ๋๊ฐ์ผ๋ก ๋ชจ๋ ํ๋๋ฅผ ๋ณ๊ฒฝ -> ์ธํ ํด์ฃผ์ง ์์ ํ๋๊ฐ์ null๋ก ๋ณ๊ฒฝ๋๋ฏ๋ก ๊ต์ฅํ ์ํ 2. ๋ณ๊ฒฝ๊ฐ์ง -> ํจ์ฌ ๋์ ๋ฐฉ๋ฒ -> ๊ฐ์งํ DB์์ ์์์ ์ ๋ฐ์ดํธ ์ฒ๋ฆฌ ํด์ค / ์ํ๋ ์์ฑ๋ง ์ ํํด์ ๋ณ๊ฒฝ ๊ฐ๋ฅ -> ์ปจํธ๋กค๋ฌ์์ ํธ์ถํ ์๋น์ค ์์ญ ์์ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ ํจ์๋ฅผ ๋ง๋ ๋ค. +) ์ํฐํฐ ์์ญ์์์ ์ ๋ฐ์ดํธํจ์ ๋ง๋ค๊ณ ์๋น์ค์์ ์ ๋ฐ์ดํธ๋ฅผ ์ํด ํด๋น ํจ์ ๋ถ๋ฅด๋ ๊ฒ์ด ๋ซ๋ค. (์ ์ง๋ณด์,์ถ์ ์ํด) ์ํฐํฐ ํด๋์ค๋ด์์ ๊ฐ์ฒด ์์ฑ, ๋ณ๊ฒฝ, ์กฐํ๋ฑ์ ๋น์ฆ๋์ค ๋ก์ง ์์ฑํ๋ค. -> ์๋น์ค์์ ํธ์ถ -> ์ปจํธ๋กค๋ฌ๊ฐ ์๋น์ค ํธ์ถ
- ํ ์คํธ๋ ๋ฐ๋ก application.yml ์ค์ ํ์ผ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ด ์ข์ -๊ฐ ํ ์คํธ ํจ์์๋ @Test ์ด๋ ธํ ์ด์ ์ ๋ถ์ด๋ฉฐ ๋ง์ฝ ์์ธ๊ฐ ๋ฐ์ํ๋์ง ํ์ธํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ @Test(expected = IllegalStateException.class) ์ ๊ฐ์ด ํด๋น ์์ธ์ ๋ํ ์ด๋ ธํ ์ด์ ์ ๋ง๋ค์ด์ค๋ค. - ํ ์คํธ ์ฝ๋ ํ ์์ @RunWith(SpringRunner.class) @SpringBootTest @Transactional // ํ ์คํธ ๋๋ ๋ ๋ค์ rollback ํด๋ฒ๋ฆผ public class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test..
-์์กด๊ด๊ณ ์ฃผ์ ์ ๊ฒฝ์ฐ ์์ฑ์ ์ฃผ์ ์ ์งํฅ ํ์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ ์์ ํ ๊ฐ์ฒด ์์ฑ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ. - ์์ฑ์๊ฐ ํ๋๋ฉด @Autowired ์๋ต ๊ฐ๋ฅ - ๋ณ์์ final ๋ถ์ฌ์ ํ์ ์์ ๋ถ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ฒ์ด ์ข์ - Repository์์ ์ฌ์ฉํ๋ EntityManager๋ @PersistenceContext๋ฅผ ํตํด ์ฌ์ฉ๊ฐ๋ฅํ์ง๋ง SpringBoot์์๋ @Autowired๋ ๊ฐ๋ฅ - final์ ๋ถ์ธ ๋ณ์๋ฅผ Lombok์ @RequiredArgsConstructor ๋ฅผ ํตํด ์์ฑ์ ์์ฑ/์ฃผ์ ํด์ฃผ๋ฉด ์ผ๊ด์ฑ์๊ณ ๊น๋ํ๊ฒ ์ฝ๋ ์ ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค. ์์ฑ์ ์ฃผ์ ์ ์ ์ฉํ Repository ์์) @Repository @RequiredArgsConstructor public class MemberReposi..
1. ๊ฐ๊ธ์ ์ด๋ฉด setter ์ฌ์ฉํ์ง ๋ง์. - ๋ณ๊ฒฝ ํฌ์ธํธ๊ฐ ๋ง์์ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง 2. ๋ชจ๋ ์ฐ๊ด๊ด๊ณ๋ ์ง์ฐ๋ก๋ฉ์ผ๋ก ์ค์ - LAZY๋ก ์ค์ !!! EX) @ManyToOne(fetch = FetchType.LAZY) 3. ์ปฌ๋ ์ ๋ฐ๋ก๋ฐ๋ก ์ธํ (์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ) - null ๋ฌธ์ ๋ฐฉ์ง ์ํด 4. ์๋ฐฉํฅ ์ฐ๊ด์ผ๋๋ ์ฐ๊ด๊ด๊ณ ํธ์ ๋ฉ์๋๋ฅผ ํตํด ๊ฐ ์ธํ - ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ๋ง ๊ฐ์ ๊ฐ์ง๊ณ ์์ ์๋ ์์ผ๋ฏ๋ก (DB์๋ ์ฃผ์ธ๋ง ๊ฐ์ ธ๋ ok) 5. ์ต๋ํ ์ด๋์์ dependency์์ด ์์ํ๊ฒ ๋๋๊ธฐ(ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๋ง! ํ๋ฉด ๊ด๋ จ ๋ก์ง์ Form ๊ฐ์ฒด ๋๋ DTO ์ฌ์ฉ) +) manytomany๋ ์ ๋งํ๋ฉด ์ฌ์ฉx, ์ผ๋๋ค, ๋ค๋์ผ๋ก ๋๋๊ธฐ +) API ๋ง๋ค๋์๋ ์ ๋ ์ํฐํฐ๋ฅผ ์ธ๋ถ๋ก ๋ฐํ(๋ ธ์ถ)..
(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
/usr/local/opt/python@3.9/bin/python3.9 -m pip install --upgrade pip
๋ค๋ฅธ ํฌํธ๋ฒํธ๋ฅผ ์ฌ์ฉํ๋ ๋ ์๋ฒ๊ฐ ํต์ ์ ํ ๋ ์๊ธฐ๋ ๋ณด์์๋ฌ์ด๋ค. React์์ axios๋ก ํผ ์ ์ก์, React axios.defaults.withCredentials = true; Flask pip install flask_cors ๋ชจ๋ ์ค์น ํ app = Flask(__name__) CORS(app, supports_credentials=True) # ๋ค๋ฅธ ํฌํธ๋ฒํธ์ ๋ํ ๋ณด์ ์ ๊ฑฐ api = Api(app) ์์ ๊ฐ์ด ์จ์ฃผ๋ฉด ํด๊ฒฐ๋๋ค!! ๋ค๋ฅธ ํฌํธ๋ผ๋ฆฌ ํต์ ํ ๋ ์ฟ ํค๊ฐ์ด ์๋์ผ๋ก ์ถ๊ฐ๋์ง์์ ์๊ธฐ๋ ๋ฌธ์ ์๋ค.
flask ์น์๋ฒ์ aws s3๋ฒํท์ ์ฐ๊ฒฐ์ํค๊ธฐ ์ํด ํ์ด์ฌ ํ์ผ์ ๋ฐ๋ก ์์ฑํ๋ค. pip install boto3 config.py ์์ฑ (AWS ๋ด ๋ณด์ ์๊ฒฉ์ฆ๋ช ์์ ํค ์ป์ด์ค๊ธฐ) AWS_ACCESS_KEY = "์์ฑ" AWS_SECRET_KEY = "์์ฑ" BUCKET_NAME = "๋ฒํท์ด๋ฆ" AWS S3 bucket ํ์ผ ์ ๋ก๋ ๋ฐ url ๊ฐ์ ธ์ค๊ธฐ - upload_file ํจ์์ ๋งค๊ฐ๋ณ์ file_path๋ ๋ด ๋ก์ปฌ ํ๊ฒฝ ๋ด์ ๋ง๋ค์ด์ง ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋ ์๋๊ฒฝ๋ก ์ด๋ค. ํด๋น ๊ฒฝ๋ก์ ์ด๋ฏธ์ง๋ฅผ s3 bucket์ ์ฌ๋ ค image url์ ์ป์ด์ค๊ธฐ ์ํด ํจ์๋ฅผ ๋ฐ๋ก ๊ตฌํํ์๋ค. import boto3 from config import * from botocore.exceptions import Clien..
์ฐ๊ด๊ด๊ณ - Actor์ ์ ์ค์ผ์ด์ค๋ฅผ ์ฐ๊ฒฐ - ์ ์ค์ผ์ด์ค์ ์ ์ค์ผ์ด์ค๋ ์ฐ๊ฒฐํ ์ ์์ ์ผ๋ฐํ๊ด๊ณ - ๊ธฐ๋ณธ์ ์ธ ๋ชฉ์ ์ด ๊ฐ์ง๋ง ์ํ ๋ฐฉ๋ฒ์ด ์ฌ๋ฌ๊ฐ์ง์ผ ๊ฒฝ์ฐ ๊ด๊ณ ํํ ํฌํจ๊ด๊ณ - ๋ค์์ ์ ์ค์ผ์ด์ค๊ฐ ๊ณตํต์ ์ธ ํ๋์ ์ํํ๋ ๊ฒฝ์ฐ - ์ค๋ณต์ ํผํ๊ธฐ ์ํด์ ์ฌ์ฉ - ํ๋์ ์ ์ค์ผ์ด์ค๊ฐ ๋ค๋ฅธ ์ ์ค์ผ์ด์ค์ ์คํ์ ์ ์ ๋ก ํจ - ์ ์ค์ผ์ด์ค ๋ช ์ธ ์๊ฐํ์ ๋ ๊ผญ ํฌํจ๋๋ ๋ถ๋ถ๋ง ๋ํ๋ด๊ธฐ! - ๋ฐฉํฅ์ base usecase -> inclusion usecase ํ์ฅ๊ด๊ณ - ํ ์ ์ค์ผ์ด์ค์ ํ์ฅ ์ง์ ์ ์ก์ ์ถ๊ฐ -> ๋ค๋ฅธ ์ ์ค์ผ์ด์ค๋ก ํ์ฅ - "์ ํ์ ์ํ" - ๋ฐฉํฅ์ extension usecase -> base usecase โป ์ ์ค์ผ์ด์ค ๊ทธ๋ฆด ๋ ์ฃผ์ ์ฌํญ 1. ์ ์ค์ผ์ด์ค๋ฅผ ์งง๊ณ ๋จ์ํ๊ฒ ์ ์งํ๋ผ 2. ์ด๋ป๊ฒ(h..
1. ๊ธฐ๋ฅ์ ์๊ตฌ์ฌํญ ์์คํ ์ด ์ ๊ณตํ๋ ์๋น์ค, ์์คํ ์ด ๋ฌด์์ ํ์ฌ์ผ ํ๋๊ฐ๋ฅผ ๊ธฐ์ - ์ ๋ ฅ (์ ์ ๋ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ) - ์ถ๋ ฅ (ํ๋ฉด ๋์คํ๋ ์ด, ์ธ์, ๋ค๋ฅธ ์์คํ ์ ์ ๋ฌ๋๋ ์ ๋ณด) - ์ ์ฅ (์์คํ ์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๊ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ) - ์ปดํจํ (์ด๋ค ๊ณ์ฐ ๋๋ ์๋น์ค๊ฐ ์ด๋ฃจ์ด์ง๋๊ฐ) - ํ์ด๋ฐ๊ณผ ๋๊ธฐํ (ํ๋์จ์ด ์ฅ์น ์ ์ด, ๋ฆฌ์ผํ์์ผ๋ก ์์ ์ ์ํํ๋ ์์คํ ์์ ์ค์) 2. ๋น๊ธฐ๋ฅ์ ์๊ตฌ์ฌํญ ๋ฐ๋์ ์ง์ผ์ ธ์ผ ํ ์ ์ฝ์กฐ๊ฑด ์ธ๊ฐ์ง ์ฃผ์ ์ ํ 1) ์ํํธ์จ์ด ํ์ง ํน์ฑ ์ธก๋ฉด (์ฑ๋ฅ, ์ ๋ขฐ์ฑ, ๊ฐ์ฉ์ฑ, ์ฌ์ฉ์ฑ ๋ฑ) - ๋ฐ์์๊ฐ : ํ์ ๊ฒฐ๊ณผ๊ฐ 1์ด ์ด๋ด ๋์์ผ ํจ - ์ฒ๋ฆฌ๋ : ๋ถ๋น ํธ๋์ญ์ ์ฒ๋ฆฌ ์ - ์์ ์ฌ์ฉ๋ : ์์คํ ์ ์ต๋ ~ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํจ - ์ ๋ขฐ์ฑ : ์์คํ ์ด ๊ณ ์ฅ์์ด ๋์..
์ค์ํ ๋ชจ๋ธ - ํญํฌ์ ๋ชจ๋ธ - ํ๋กํ ํ์ ๋ชจ๋ธ - ์ ์ฆ์ ๋ชจ๋ธ - ๋์ ํ ๋ชจ๋ธ - ์งํ์ ๋ชจ๋ธ - ์ ์์ผ ๋ชจ๋ธ 1. ํญํฌ์ ๋ชจ๋ธ ํน์ง : ๊ฐ ๋จ๊ณ๊ฐ ๋ค์ ๋จ๊ณ ์์ ์ ์ ๋๋์ผ ํจ ์์์ : ๊ฐ ๋จ๊ณ ์ฌ์ด์ ์ค๋ณต์ด๋ ์ํธ์์ฉ์ด ์์ ๋ฐ๋ก ์ ๋จ๊ณ๋ก ํผ๋๋ฐฑ ๊ฐ ๋จ๊ณ์ ๊ฒฐ๊ณผ๋ ๋ค์ ๋จ๊ณ๊ฐ ์์๋๊ธฐ ์ ์ ์ ๊ฒ(V&V) ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ์ด ํ์ ์ ์ธ ์ํฉ์ ์ ํฉ (๋๊ท๋ชจ ์์คํ ๊ณตํ ํ๋ก์ ํธ์์ ์ฃผ๋ก ์ฌ์ฉ๋จ) Ex) ๊ตญ๋ฐฉ ์์คํ ๊ณผ์ : ์๊ตฌ์ฌํญ ์์ง ๋ฐ ์ ์ -> ์๊ตฌ์ฌํญ ๋ช ์ธ -> ์ค๊ณ -> ๊ตฌํ -> ํตํฉ ๋ฐ ๋ฐฐํฌ -> ์ ์ง๋ณด์ ์ฅ์ : ์ฒด๊ณ์ ์ธ ๋ฌธ์ํ ํ๋ก์ ํธ ์งํ์ํฉ ๋ช ํํ ํ์ ๊ฐ๋ฅ ๋จ์ : ํ๋ก์ธ์ค ์งํ ํ ๋ณ๊ฒฝ ์์ฉํ๊ธฐ ์ด๋ ค์ ์ด๊ธฐ๋จ๊ณ ์ง๋์น๊ฒ ๊ฐ์กฐํ๋ฉด ์ฝ๋ฉ, ํ ์คํธ๊ฐ ์ง์ฐ ์์ฉ์๋ ๋ค์์ ๋ฌธ์ ์์ฐํ ๊ฐ..
dependencies { ... //lombok implementation 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' ... } dependencies ๋ด๋ถ์ ์ ์ฝ๋๋ฅผ ๋ฐ๋์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค. (+ intellij lombok ํ๋ฌ๊ทธ์ธ ์ค์น) ๋์ค ์ ๋ถ ๊ผญ ์จ์ฃผ์ด์ผํ๋ค. ํนํ ๋๋ฒ์งธ ์ค ์ฝ๋๋ฅผ ๋นผ๋จน์ผ๋ฉด ์๋๋ค. ์ฒซ ์ค๋ง ์ ์ด๋ import๋ ๊ฐ๋ฅํ์ง๋ง ์ด๋ ธํ ์ด์ ์ ์ ๋๋ก ์ฌ์ฉํ ์ ์๋ค. (์ด๊ฒ๋๋ฌธ์ cannot find symbol ์๋ฌ๋์ ํ์ฐธ ํค๋งธ๋ค.)