[Spring] λ‹¨μœ„ ν…ŒμŠ€νŠΈ, JUnit의 κ°œλ… 및 λ‹¨μœ„ ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„± 방법

[Spring] λ‹¨μœ„ ν…ŒμŠ€νŠΈ, JUnit의 κ°œλ… 및 λ‹¨μœ„ ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„± 방법

1. λ‹¨μœ„ ν…ŒμŠ€νŠΈ ν•˜λ‚˜μ˜ λͺ¨λ“ˆμ„ κΈ°μ€€μœΌλ‘œ λ…λ¦½μ μœΌλ‘œ μ§„ν–‰λ˜λŠ” κ°€μž₯ μž‘μ€ λ‹¨μœ„μ˜ ν…ŒμŠ€νŠΈμ΄λ‹€. 톡합 ν…ŒμŠ€νŠΈμ˜ 경우 μ‹œμŠ€ν…œμ„ κ΅¬μ„±ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ“€μ΄ 컀질수둝 ν…ŒμŠ€νŠΈ μ‹œκ°„μ΄ κΈΈμ–΄μ§€μ§€λ§Œ, λ‹¨μœ„ ν…ŒμŠ€νŠΈμ˜ 경우 ν•΄λ‹Ή λΆ€λΆ„λ§Œ λ…λ¦½μ μœΌλ‘œ ν…ŒμŠ€νŠΈν•˜κΈ°μ— μ½”λ“œμ˜ 변경이 μžˆμ–΄λ„ λΉ λ₯΄κ²Œ 문제 μ—¬λΆ€λ₯Ό 확인할 수 μžˆλ‹€. CleanCode 책에 μ˜ν•˜λ©΄ κΉ¨λ—ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” λ‹€μŒ 5κ°€μ§€ κ·œμΉ™μ„ 따라야 ν•œλ‹€. Fast -Β λΉ λ₯΄κ²Œ λ™μž‘ν•˜μ—¬ 자주 돌릴 수 μžˆμ–΄μ•Ό ν•œλ‹€. Independent -Β ν…ŒμŠ€νŠΈλŠ” 독립적이며 μ„œλ‘œ μ˜μ‘΄ν•΄μ„œλŠ” μ•ˆλœλ‹€. Repeatable -Β μ–΄λŠ ν™˜κ²½μ—μ„œλ„ 반볡이 κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€. Self-validating -Β ν…ŒμŠ€νŠΈλŠ” 성곡 λ˜λŠ” μ‹€νŒ¨λ‘œ κ²°κ³Όλ₯Ό λ‚΄μ–΄ 자체 κ²€μ¦λ˜μ–΄μ•Ό ν•œλ‹€. Timely -Β ν…ŒμŠ€νŠΈλŠ” μ μ‹œμ—, ν…ŒμŠ€νŠΈν•˜λ €λŠ” μ‹€μ œμ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜κΈ° 직전에 κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. ...

[PostgreSQL] λͺ…μ‹œμ  JOIN 절둜 ν”Œλž˜λ„ˆ(Planner) μ œμ–΄, μ„±λŠ₯ ν–₯상

[PostgreSQL] λͺ…μ‹œμ  JOIN 절둜 ν”Œλž˜λ„ˆ(Planner) μ œμ–΄, μ„±λŠ₯ ν–₯상

1. κ°œμš” PostgreSQL은 쿼리 Plannerκ°€ κ°€μž₯ 효율적인 쿼리 ν”Œλžœμ„ μ„Έμ›Œ 쿼리λ₯Ό μ‹€ν–‰μ‹œν‚¨λ‹€. 이번 ν¬μŠ€νŠΈλŠ” 쿼리 Plannerκ°€ ν”Œλžœμ„ κ²€μƒ‰ν•˜λŠ” 과정을 μ˜λ„μ μœΌλ‘œ μ œν•œν•˜μ—¬ ν”Œλžœ 검색 μ‹œκ°„μ„ λ‹¨μΆ•μ‹œν‚€λŠ” 방법에 λŒ€ν•œ λ‚΄μš©μ΄λ‹€. 쿼리 선택지λ₯Ό μ œν•œν•¨μœΌλ‘œμ¨ μ‹œκ°„μ„ μ€„μ΄μ§€λ§Œ, 그만큼 λͺ¨λ“  경우λ₯Ό λΉ„κ΅ν•˜λŠ” 것이기 μ•„λ‹ˆλΌμ„œ 졜고의 ν”Œλžœμ„ 찾을 수 없기에, ν…Œμ΄λΈ” scan 방식 및 인덱슀 λ“± 쿼리의 μž‘λ™λ°©μ‹μ„ λͺ…ν™•νžˆ μ΄ν•΄ν•œ ν›„ 섀정이 ν•„μš”ν•˜λ©°, μ„€μ •μ „ μ„±λŠ₯비ꡐ, μ„€μ • ν›„μ˜ 데이터 증감에 λ”°λ₯Έ 지속적인 λͺ¨λ‹ˆν„°λ§μ΄ ν•„μš”ν•˜λ‹€. 2. ν”Œλž˜λ„ˆμ˜ μž‘λ™ 2-1. JOIN Planner의 μž‘λ™λ°©μ‹μ„ 보기 μœ„ν•΄ κ°„λ‹¨ν•œ 쑰인 쿼리λ₯Ό 확인해 보자 ...

[Spring] μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ(Spring container)의 κ°œλ…

[Spring] μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ(Spring container)의 κ°œλ…

1. μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ(Spring container)λž€? μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ 핡심 μ»΄ν¬λ„ŒνŠΈμ΄λ©° μ£Όμš”ν•œ μš©λ„λŠ” λ‹€μŒκ³Ό κ°™λ‹€. 객체의 생λͺ…μ£ΌκΈ° 관리 μƒμ„±λœ κ°μ²΄λ“€μ˜ 좔가적인 κΈ°λŠ₯ 제곡 μŠ€ν”„λ§μ—μ„œλŠ” μžλ°” 객체λ₯Ό 빈(Bean)이라고 ν•˜λ©° μ»¨ν…Œμ΄λ„ˆλŠ” λ‚΄λΆ€μ˜ 빈 라이프사이클(생성, 제거 λ“±)을 ν•˜λ©° μΆ”κ°€ κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. κΈ°μ‘΄ μŠ€ν”„λ§μ—μ„œλŠ” xml 파일둜 μ„€μ •ν•˜λ‚˜ μŠ€ν”„λ§ λΆ€νŠΈμ—μ„œλŠ” μžλ°” ν΄λž˜μŠ€μ—μ„œ μ„€μ •κ°€λŠ₯ν•˜λ‹€. μ£Όμš” μ„€μ •μœΌλ‘œλŠ” [μˆ˜λ™] @Configuration - μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ성정보λ₯Ό 등둝 @Bean - λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ ν˜ΈμΆœν•˜μ—¬ λ°˜ν™˜λœ 객체λ₯Ό μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— 등둝 [μžλ™] @ComponentScan - ν•΄λ‹Ή 클레슀클래슀 νŒ¨ν‚€μ§€μ™€ ν•˜μœ„μ˜ @Component, @Service, @Repository, @Controller 클래슀λ₯Ό νƒμƒ‰ν•˜μ—¬ λΉˆλ“±λ‘Β ...

[Spring] IoC(μ œμ–΄μ˜ μ—­μ „) & DI(μ˜μ‘΄μ„± μ£Όμž…)의 κ°œλ…

[Spring] IoC(μ œμ–΄μ˜ μ—­μ „) & DI(μ˜μ‘΄μ„± μ£Όμž…)의 κ°œλ…

1. IoC (Inversion of Control) μ œμ–΄μ˜ μ—­μ „ IoCλž€ 메인 ν”„λ‘œκ·Έλž¨μ—μ„œ μ»¨ν…Œμ΄λ„ˆλ‚˜ ν”„λ ˆμž„μ›Œν¬λ‘œ 객체와 객체의 μ˜μ‘΄μ„±μ— λŒ€ν•œ μ œμ–΄λ₯Ό λ„˜κΈ°λŠ” 것을 λ§ν•œλ‹€. ν”„λ ˆμž„μ›Œν¬ 없이 κ°œλ°œν•  λ•ŒλŠ” 각 객체에 λŒ€ν•œ 라이프사이클 (생성, μ„€μ •, μ΄ˆκΈ°ν™”, 호좜 λ“±)을 κ°œλ°œμžκ°€ 직접 κ΄€λ¦¬ν•œλ‹€. ν•˜μ§€λ§Œ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λ©΄ 객체의 생λͺ…μ£ΌκΈ°λ₯Ό ν”„λ ˆμž„μ›Œν¬μ— μœ„μž„ν•˜μ—¬, ν”„λ ˆμž„μ›Œν¬κ°€ 개발자의 μ½”λ“œλ₯Ό ν˜ΈμΆœν•˜κ³  흐름을 μ œμ–΄ν•˜κ²Œ ν•  수 μžˆλ‹€. 이처럼, μ œμ–΄μ˜ 역전은 객체λ₯Ό 직접 μƒμ„±ν•˜κ±°λ‚˜ μ œμ–΄ν•˜λŠ” κ²ƒμ΄μ•„λ‹ˆλΌ μ™ΈλΆ€μ—μ„œ κ΄€λ¦¬ν•˜λŠ” 객체λ₯Ό κ°€μ Έμ™€μ„œ μ‚¬μš©ν•˜λŠ” κ²ƒμœΌλ‘œ, 클레슀 κ°„μ˜ 결합을 λŠμŠ¨ν•˜κ²Œ ν•˜μ—¬ ν…ŒμŠ€νŠΈμ™€ μœ μ§€κ΄€λ¦¬λ₯Ό 더 μ‰½κ²Œ μ„€κ³„ν•˜λŠ” 원칙이닀. ...

[WEB] JWT 토큰 인증의 κ°œλ…κ³Ό μž₯단점

[WEB] JWT 토큰 인증의 κ°œλ…κ³Ό μž₯단점

1. JWT의 κ°œλ… JWTλŠ” μ›Ήμ—μ„œ μ‚¬μš©μž 인증/인가에 μ‚¬μš©ν•˜λŠ” ν† ν°μœΌλ‘œ Json Web Token의 μ€„μž„λ§μ΄λ‹€. μ›Ήμ—μ„œ μ‚¬μš©λ˜λŠ” JSON ν˜•νƒœμ˜ 토큰 ν‘œμ€€ 규격이며 쿠킀와 μœ μ‚¬ν•˜μ§€λ§Œ, μ„œλͺ…λœ ν† ν°μ΄λΌλŠ” 차이점이 μžˆλ‹€. κ³΅κ°œν‚€, κ°œμΈν‚€μ˜ 쌍으둜 μ‚¬μš©ν•  경우 μ„œλͺ…λœ 토큰은 κ°œμΈν‚€λ₯Ό λ³΄μœ ν•œ μ„œλ²„μ—μ„œλ§Œ λ³΅ν˜Έν™”κ°€ κ°€λŠ₯ν•˜λ‹€. 보톡 Authorization HTTP 헀더λ₯Ό Bearer <토큰> ν˜•νƒœλ‘œ μ„€μ •ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„λ‘œ μ „μ†‘ν•œλ‹€. μ„œλ²„μ—μ„œλŠ” 토큰에 ν¬ν•¨λ˜μ–΄ μžˆλŠ” μ„œλͺ…μ •λ³΄λ‘œ μœ„λ³€μ‘°λ₯Ό κ²€μ¦ν•˜λ©° 토큰은 Base64 인코딩 λ˜μ–΄μžˆλ‹€. 2. JWT ꡬ쑰 header, payload, signatureκ°€ 각각 . 으둜 κ΅¬λΆ„λ˜μ–΄ μžˆλ‹€ ...