Language & Framework/Spring2022. 12. 21. 17:31[μŠ€ν”„λ§ 핡심 원리] μ˜μ‘΄κ΄€κ³„ μžλ™ μ£Όμž… (1)

μŠ€ν”„λ§ 핡심 μ›λ¦¬μ˜ κ°•μ˜ λ‚΄μš©μ„ μ •λ¦¬ν•œ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. μ˜μ‘΄κ΄€κ³„ μ£Όμž… 방법 μƒμ„±μž μ£Όμž… μƒμ„±μžλ₯Ό 톡해 의쑴 관계λ₯Ό μ£Όμž…λ°›λŠ” λ°©λ²•μœΌλ‘œ, μƒμ„±μž 호좜 μ‹œμ μ— λ”± ν•œ 번만 호좜되며 λΆˆλ³€ ν˜Ήμ€ ν•„μˆ˜μ μΈ 의쑴 관계 μ£Όμž… μ‹œ μ‚¬μš©λœλ‹€. μƒμ„±μžκ°€ ν•œ 개만 μžˆμ„ 경우 μŠ€ν”„λ§ λΉˆμ— ν•œν•΄μ„œ @Autowiredλ₯Ό μƒλž΅ν•΄λ„ μžλ™μœΌλ‘œ 의쑴 관계가 μ£Όμž…λœλ‹€. @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepositor..

Language & Framework/Spring2022. 12. 20. 01:29[μŠ€ν”„λ§ 핡심 원리] 싱글톀 μ»¨ν…Œμ΄λ„ˆ

μŠ€ν”„λ§ 핡심 μ›λ¦¬μ˜ κ°•μ˜ λ‚΄μš©μ„ μ •λ¦¬ν•œ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. 싱글톀 νŒ¨ν„΄ 클래슀의 μΈμŠ€ν„΄μŠ€κ°€ 1개만 μƒμ„±λ˜λŠ” 것을 보μž₯ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄μ΄λ‹€. μŠ€ν”„λ§μ΄ μ—†λŠ” μˆœμˆ˜ν•œ DI(Dependency Injection) μ»¨ν…Œμ΄λ„ˆλ₯Ό μ΄μš©ν•œλ‹€κ³  κ°€μ •ν•΄λ³΄μž. DI μ»¨ν…Œμ΄λ„ˆμΈ AppConfigλŠ” μƒˆλ‘œμš΄ μš”μ²­μ΄ λ“€μ–΄μ˜¬ λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ 객체λ₯Ό μƒμ„±ν•˜μ—¬ λ°˜ν™˜ν•˜λŠ”λ°, νŠΈλž˜ν”½μ΄ μ¦κ°€ν• μˆ˜λ‘ μƒμ„±λ˜λŠ” 객체가 λ§Žμ•„μ§μ— 따라 λ©”λͺ¨λ¦¬ 낭비도 μ‹¬ν•΄μ§„λ‹€λŠ” 단점이 μ‘΄μž¬ν•œλ‹€. μ΄λŸ¬ν•œ ν•΄κ²°λ°©μ•ˆμœΌλ‘œμ¨ 같은 κ°μ²΄λŠ” λ”± 1개만 μƒμ„±λ˜λ„λ‘ ν•˜μ—¬ 객체λ₯Ό κ³΅μœ ν•˜κ²Œλ” μ„€κ³„ν•˜λŠ” 방법을 μ΄μš©ν•  수 μžˆλŠ”λ°, ν•΄λ‹Ή 방법이 싱글톀 νŒ¨ν„΄μ„ μ΄μš©ν•˜λŠ” 것이닀. public class SingletonService { private static final SingletonService ..

Language & Framework/Spring2022. 11. 14. 01:44[μŠ€ν”„λ§ 핡심 원리] μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ™€ μŠ€ν”„λ§ 빈

μŠ€ν”„λ§ 핡심 μ›λ¦¬μ˜ κ°•μ˜ λ‚΄μš©μ„ μ •λ¦¬ν•œ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ 생성 μ•„λž˜ μ½”λ“œλŠ” μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒμ„±ν•˜λŠ” μ˜ˆμ‹œ μ½”λ“œμ΄λ‹€. ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContextλ₯Ό μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλΌκ³  ν•œλ‹€. μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ§Œλ“œλŠ” λ°©λ²•μ—λŠ” λŒ€ν‘œμ μœΌλ‘œ 두 가지가 μžˆλ‹€. XML 기반 μ• λ…Έν…Œμ΄μ…˜ 기반 μžλ°” μ„€μ • 클래슀 μœ„μ—μ„œμ˜ μ˜ˆμ‹œ μ½”λ“œκ°€ 2번 방법을 μ΄μš©ν•œ κ²ƒμœΌλ‘œ, new μ—°μ‚°μžλ₯Ό 톡해 μƒμ„±λœ AnnotationConfigApplicationContextλŠ” ApplicationContext μΈν„°νŽ˜μ΄μŠ€μ˜ κ΅¬ν˜„μ²΄μ΄λ‹€. μ—„λ°€νžˆ 따지면 μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ—λŠ” ..

Language & Framework/Spring2022. 11. 14. 01:32[μŠ€ν”„λ§ 핡심 원리] 예제 섀계 및 객체 지ν–₯ 원리 적용

μŠ€ν”„λ§ 핡심 μ›λ¦¬μ˜ κ°•μ˜ λ‚΄μš©μ„ μ •λ¦¬ν•œ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. 예제 섀계 λΉ„μ¦ˆλ‹ˆμŠ€ μš”κ΅¬μ‚¬ν•­κ³Ό 섀계 νšŒμ› νšŒμ›κ°€μž… 및 쑰회 κ°€λŠ₯ 일반, VIP λ“±κΈ‰ ꡬ뢄 νšŒμ› λ°μ΄ν„°λŠ” 자체 DBλ₯Ό ꡬ좕할지 μ™ΈλΆ€ μ‹œμŠ€ν…œκ³Ό 연동할지 미확정인 μƒνƒœ μ£Όλ¬Έκ³Ό 할인 μ •μ±… νšŒμ›μ€ μƒν’ˆμ„ μ£Όλ¬Έν•  수 있음 νšŒμ› 등급에 따라 λ‹€λ₯Έ 할인 μ •μ±… 적용 ν˜„μž¬ 할인 정책은 λͺ¨λ“  VIP λ“±κΈ‰μ˜ νšŒμ›μ—κ²Œ 1000원을 ν• μΈν•΄μ£ΌλŠ” κ³ μ • κΈˆμ•‘ 할인을 λ…Όμ˜ν•˜κ³  μžˆμœΌλ‚˜ μ°¨ν›„ 변경될 κ°€λŠ₯성이 λ†’μœΌλ©°, 상황에 따라 할인을 μ•„μ˜ˆ μ μš©ν•˜μ§€ μ•Šμ„ 수 있음 νšŒμ› 도메인 섀계 νšŒμ› 도메인 ν˜‘λ ₯ 관계 (κ°„λž΅ν•œ 관계도) νšŒμ› 클래슀 λ‹€μ΄μ–΄κ·Έλž¨ (κ΄€κ³„λ„μ˜ 각 μš”μ†Œλ₯Ό 클래슀/μΈν„°νŽ˜μ΄μŠ€ν™” ν•œ 것) νšŒμ› 객체 λ‹€μ΄μ–΄κ·Έλž¨ (ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‹€μ œ 이용 μ‹œ 순차적으둜 μ—°κ²°λ˜λŠ” 관계도) νšŒμ› μ„œλΉ„μŠ€ ꡬ..

Language & Framework/Spring2022. 11. 14. 01:29[μŠ€ν”„λ§ 핡심 원리] 객체 지ν–₯ 섀계와 μŠ€ν”„λ§

μŠ€ν”„λ§ 핡심 μ›λ¦¬μ˜ κ°•μ˜ λ‚΄μš©μ„ μ •λ¦¬ν•œ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. μŠ€ν”„λ§μ΄λž€? μžλ°” μ–Έμ–΄λ₯Ό 기반으둜 ν•œ ν”„λ ˆμž„μ›Œν¬λ‘œ, 쒋은 객체 지ν–₯ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•  수 있게 λ„μ™€μ£ΌλŠ” 도ꡬ이닀. κ·Έλ ‡λ‹€λ©΄ 쒋은 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€ λ¬΄μ—‡μΌκΉŒ? 객체 지ν–₯은 λ„€ 가지 νŠΉμ§•μ„ 가지고 μžˆλ‹€. 좔상화 세뢀사항은 μƒλž΅ν•˜κ³  객체의 속성 쀑 핡심적인 μš”μ†Œλ§Œμ„ λͺ¨λΈν™” ν•˜λŠ” 것 μΊ‘μŠν™” νŠΉμ •ν•œ ν΄λž˜μŠ€μ™€ κ΄€λ ¨λœ λ°μ΄ν„°μ˜ μΌλΆ€μ—λ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜κ²Œ ν•˜κ³ , ν΄λž˜μŠ€κ°€ μž‘λ™ν•˜λŠ” 방식에 λŒ€ν•œ μ‹€μ œ κ΅¬ν˜„ 정보λ₯Ό μˆ¨κΈ°λŠ” 것 상속 μƒμœ„ κ³„μΈ΅μ˜ 클래슀λ₯Ό λ¬Όλ €λ°›μ•„ λ‹€λ₯Έ νŠΉμ§•λ“€μ„ μΆ”κ°€μ μœΌλ‘œ κ΅¬ν˜„ν•  수 μžˆλ„λ‘ ν•˜λŠ” 것 λ‹€ν˜•μ„± μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받은 객체가 μ—¬λŸ¬κ°€μ§€ νƒ€μž…μ„ κ°€μ§ˆ 수 μžˆμ–΄ 객체의 μœ μ—°ν•œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ„λ‘ ν•˜λŠ” 것 λ‹€ν˜•μ„±μ€ μ—­ν• κ³Ό κ΅¬ν˜„μœΌλ‘œ ꡬ뢄이 κ°€λŠ₯ν•˜λ‹€λŠ” μž₯점..

Language & Framework/Spring2022. 8. 9. 21:43Could not resolve placeholder 'cloud.aws.credentials.access-key' μ—λŸ¬

ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ 사진, λ™μ˜μƒκ³Ό 같은 λ―Έλ””μ–΄ νŒŒμΌλ“€μ„ AWS의 S3에 μ €μž₯ν•˜κΈ° μœ„ν•˜μ—¬ application.yml νŒŒμΌμ— S3에 κ΄€λ ¨λœ 인증 정보듀을 μΆ”κ°€ν–ˆλ‹€. S3 μ €μž₯μ†Œμ— νŒŒμΌμ„ μ €μž₯ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•œ λ’€ ν…ŒμŠ€νŠΈλ₯Ό μ‹œλ„ν–ˆλŠ”λ°, λΉŒλ“œλŠ” μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆμ§€λ§Œ μŠ€ν”„λ§μ΄ 가동될 λ•Œ Could not resolve placeholder 'cloud.aws.credentials.access-key' in value "${cloud.aws.credentials.access-key}" λΌλŠ” μ—λŸ¬μ™€ ν•¨κ»˜ κ°•μ œ μ’…λ£Œλ˜μ—ˆλ‹€. 즉, application.yml νŒŒμΌμ— 좔가해놓은 S3의 μ •λ³΄λŠ” 물둠이고 IAM의 ν‚€ 값을 읽어듀이지 λͺ»ν•˜λŠ” κ²ƒμ΄μ—ˆλ‹€. ν•˜μ§€λ§Œ ν•΄λ‹Ή νŒŒμΌμ—λŠ” RDS에 κ΄€ν•œ 정보도 μžˆμ—ˆλŠ”λ° DB에 κ΄€ν•œ 이슈..

image