μ€νλ§ ν΅μ¬ μ리μ κ°μ λ΄μ©μ μ 리ν ν¬μ€ν μ λλ€. μμ‘΄κ΄κ³ μ£Όμ λ°©λ² μμ±μ μ£Όμ μμ±μλ₯Ό ν΅ν΄ μμ‘΄ κ΄κ³λ₯Ό μ£Όμ λ°λ λ°©λ²μΌλ‘, μμ±μ νΈμΆ μμ μ λ± ν λ²λ§ νΈμΆλλ©° λΆλ³ νΉμ νμμ μΈ μμ‘΄ κ΄κ³ μ£Όμ μ μ¬μ©λλ€. μμ±μκ° ν κ°λ§ μμ κ²½μ° μ€νλ§ λΉμ νν΄μ @Autowiredλ₯Ό μλ΅ν΄λ μλμΌλ‘ μμ‘΄ κ΄κ³κ° μ£Όμ λλ€. @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepositor..
μ€νλ§ ν΅μ¬ μ리μ κ°μ λ΄μ©μ μ 리ν ν¬μ€ν μ λλ€. μ±κΈν€ ν¨ν΄ ν΄λμ€μ μΈμ€ν΄μ€κ° 1κ°λ§ μμ±λλ κ²μ 보μ₯νλ λμμΈ ν¨ν΄μ΄λ€. μ€νλ§μ΄ μλ μμν DI(Dependency Injection) 컨ν μ΄λλ₯Ό μ΄μ©νλ€κ³ κ°μ ν΄λ³΄μ. DI 컨ν μ΄λμΈ AppConfigλ μλ‘μ΄ μμ²μ΄ λ€μ΄μ¬ λλ§λ€ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νμ¬ λ°ννλλ°, νΈλν½μ΄ μ¦κ°ν μλ‘ μμ±λλ κ°μ²΄κ° λ§μμ§μ λ°λΌ λ©λͺ¨λ¦¬ λλΉλ μ¬ν΄μ§λ€λ λ¨μ μ΄ μ‘΄μ¬νλ€. μ΄λ¬ν ν΄κ²°λ°©μμΌλ‘μ¨ κ°μ κ°μ²΄λ λ± 1κ°λ§ μμ±λλλ‘ νμ¬ κ°μ²΄λ₯Ό 곡μ νκ²λ μ€κ³νλ λ°©λ²μ μ΄μ©ν μ μλλ°, ν΄λΉ λ°©λ²μ΄ μ±κΈν€ ν¨ν΄μ μ΄μ©νλ κ²μ΄λ€. public class SingletonService { private static final SingletonService ..
μ€νλ§ ν΅μ¬ μ리μ κ°μ λ΄μ©μ μ 리ν ν¬μ€ν μ λλ€. μ€νλ§ μ»¨ν μ΄λ μμ± μλ μ½λλ μ€νλ§ μ»¨ν μ΄λλ₯Ό μμ±νλ μμ μ½λμ΄λ€. ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContextλ₯Ό μ€νλ§ μ»¨ν μ΄λλΌκ³ νλ€. μ€νλ§ μ»¨ν μ΄λλ₯Ό λ§λλ λ°©λ²μλ λνμ μΌλ‘ λ κ°μ§κ° μλ€. XML κΈ°λ° μ λ Έν μ΄μ κΈ°λ° μλ° μ€μ ν΄λμ€ μμμμ μμ μ½λκ° 2λ² λ°©λ²μ μ΄μ©ν κ²μΌλ‘, new μ°μ°μλ₯Ό ν΅ν΄ μμ±λ AnnotationConfigApplicationContextλ ApplicationContext μΈν°νμ΄μ€μ ꡬν체μ΄λ€. μλ°ν λ°μ§λ©΄ μ€νλ§ μ»¨ν μ΄λμλ ..
μ€νλ§ ν΅μ¬ μ리μ κ°μ λ΄μ©μ μ 리ν ν¬μ€ν μ λλ€. μμ μ€κ³ λΉμ¦λμ€ μꡬμ¬νκ³Ό μ€κ³ νμ νμκ°μ λ° μ‘°ν κ°λ₯ μΌλ°, VIP λ±κΈ κ΅¬λΆ νμ λ°μ΄ν°λ μ체 DBλ₯Ό ꡬμΆν μ§ μΈλΆ μμ€ν κ³Ό μ°λν μ§ λ―Ένμ μΈ μν μ£Όλ¬Έκ³Ό ν μΈ μ μ± νμμ μνμ μ£Όλ¬Έν μ μμ νμ λ±κΈμ λ°λΌ λ€λ₯Έ ν μΈ μ μ± μ μ© νμ¬ ν μΈ μ μ± μ λͺ¨λ VIP λ±κΈμ νμμκ² 1000μμ ν μΈν΄μ£Όλ κ³ μ κΈμ‘ ν μΈμ λ Όμνκ³ μμΌλ μ°¨ν λ³κ²½λ κ°λ₯μ±μ΄ λμΌλ©°, μν©μ λ°λΌ ν μΈμ μμ μ μ©νμ§ μμ μ μμ νμ λλ©μΈ μ€κ³ νμ λλ©μΈ νλ ₯ κ΄κ³ (κ°λ΅ν κ΄κ³λ) νμ ν΄λμ€ λ€μ΄μ΄κ·Έλ¨ (κ΄κ³λμ κ° μμλ₯Ό ν΄λμ€/μΈν°νμ΄μ€ν ν κ²) νμ κ°μ²΄ λ€μ΄μ΄κ·Έλ¨ (ν΄λΌμ΄μΈνΈκ° μ€μ μ΄μ© μ μμ°¨μ μΌλ‘ μ°κ²°λλ κ΄κ³λ) νμ μλΉμ€ ꡬ..
μ€νλ§ ν΅μ¬ μ리μ κ°μ λ΄μ©μ μ 리ν ν¬μ€ν μ λλ€. μ€νλ§μ΄λ? μλ° μΈμ΄λ₯Ό κΈ°λ°μΌλ‘ ν νλ μμν¬λ‘, μ’μ κ°μ²΄ μ§ν₯ μ ν리μΌμ΄μ μ κ°λ°ν μ μκ² λμμ£Όλ λꡬμ΄λ€. κ·Έλ λ€λ©΄ μ’μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ΄λ 무μμΌκΉ? κ°μ²΄ μ§ν₯μ λ€ κ°μ§ νΉμ§μ κ°μ§κ³ μλ€. μΆμν μΈλΆμ¬νμ μλ΅νκ³ κ°μ²΄μ μμ± μ€ ν΅μ¬μ μΈ μμλ§μ λͺ¨λΈν νλ κ² μΊ‘μν νΉμ ν ν΄λμ€μ κ΄λ ¨λ λ°μ΄ν°μ μΌλΆμλ§ μ κ·Ό κ°λ₯νκ² νκ³ , ν΄λμ€κ° μλνλ λ°©μμ λν μ€μ ꡬν μ 보λ₯Ό μ¨κΈ°λ κ² μμ μμ κ³μΈ΅μ ν΄λμ€λ₯Ό λ¬Όλ €λ°μ λ€λ₯Έ νΉμ§λ€μ μΆκ°μ μΌλ‘ ꡬνν μ μλλ‘ νλ κ² λ€νμ± μΈν°νμ΄μ€λ₯Ό μμλ°μ κ°μ²΄κ° μ¬λ¬κ°μ§ νμ μ κ°μ§ μ μμ΄ κ°μ²΄μ μ μ°ν μ¬μ©μ΄ κ°λ₯νλλ‘ νλ κ² λ€νμ±μ μν κ³Ό ꡬνμΌλ‘ ꡬλΆμ΄ κ°λ₯νλ€λ μ₯μ ..
νλ‘μ νΈλ₯Ό μ§ννλ©΄μ μ¬μ§, λμμκ³Ό κ°μ λ―Έλμ΄ νμΌλ€μ 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μ κ΄ν μ΄μ..