Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Amenable
๐Ÿ“‚ ์Šคํ”„๋ง/๊ธฐ๋ณธ ๊ฐœ๋…

์˜์กด์„ฑ ์ฃผ์ž… - DI(Dependency Injection)

์˜์กด์„ฑ ์ฃผ์ž… - DI(Dependency Injection)
๐Ÿ“‚ ์Šคํ”„๋ง/๊ธฐ๋ณธ ๊ฐœ๋…

์˜์กด์„ฑ ์ฃผ์ž… - DI(Dependency Injection)

2023. 4. 18. 22:19

1. ๊ฐœ๋… ๐Ÿฆ—

  DI(Dependency Injection =  ์˜์กด์„ฑ ์ฃผ์ž… = ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…)๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„  IoC(Inversion of Control = ์ œ์–ด์˜ ์—ญ์ „)๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.

  IoC๋ž€ ๋ฉ”์„œ๋“œ๋‚˜ ๊ฐ์ฒด์˜ ํ˜ธ์ถœ ์ž‘์—…์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์™ธ๋ถ€์—์„œ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์™ธ๋ถ€๋ž€ Spring Framework๋ฅผ ๋œปํ•œ๋‹ค.

// ๊ธฐ์กด
public class DictionaryService {

    KoreanDictionary koreanDictionary = new KoreanDictionary();
}

// IoC ์ ์šฉ
public class DictionaryService {

    Dictionary dictionary;
}

  ๊ธฐ์กด์—๋Š” ๊ฐ์ฒด๋ฅผ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ–ˆ์ง€๋งŒ IoC๋ฅผ ์ ์šฉํ•˜๋ฉด ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด ๋†“์€ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…๋ฐ›์•„ ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ํด๋ž˜์Šค ๋ ˆ๋ฒจ์—์„œ ์˜์กด๊ด€๊ณ„๊ฐ€ ์„ค์ •๋˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋Ÿฐํƒ€์ž„ ์‹œ์— ๊ด€๊ณ„๊ฐ€ ๋™์ ์œผ๋กœ ์ฃผ์ž…๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์œ ์—ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

  ๊ทธ๋Ÿฌ๋ฉด DI๋ž€ ๋ฌด์—‡์ผ๊นŒ? DI๋Š” IoC์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค. (IoC์˜ ์œ ํ˜•์—๋Š” DI๋งŒ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ DL(Dependency Lookup)๋„ ์กด์žฌํ•œ๋‹ค.)

  • DI - ๊ฐ ํด๋ž˜์Šค ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ž์‹ ์ด ์•„๋‹Œ ์™ธ๋ถ€(์ปจํ…Œ์ด๋„ˆ)์—์„œ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ
  • DL - Bean์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์ด์šฉํ•˜์—ฌ Bean์„ Lookup ํ•˜๋Š” ๊ฒƒ

 

2. ์ปจํ…Œ์ด๋„ˆ(Container) ๐Ÿ›

  ์œ„์—์„œ DI๋ž€ ๊ฐ ํด๋ž˜์Šค ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ž์‹ ์ด ์•„๋‹Œ ์™ธ๋ถ€(์ปจํ…Œ์ด๋„ˆ)์—์„œ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•˜์˜€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ์ฒด๋“ค์„ ๊ด€๋ฆฌํ•˜๊ณ  ์ฃผ์ž…ํ•ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  ์ด ๋ถ€๋ถ„์„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ('IoC ์ปจํ…Œ์ด๋„ˆ' ๋˜๋Š” 'DI ์ปจํ…Œ์ด๋„ˆ'๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ)๊ฐ€ ๋‹ด๋‹นํ•ด ์ค€๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋นˆ(Bean)์ด๋ผ๊ณ  ํ•˜๊ณ , ๋นˆ๋“ค์˜ ์ƒ๋ช…์ฃผ๊ธฐ(Life-Cycle)๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋นˆํŒฉํ† ๋ฆฌ(BeanFactory)๊ฐ€ ์žˆ๋‹ค.

  ๊ฐ€์žฅ ์ค‘์š”ํ•œ 2๊ฐ€์ง€ ์ธํ„ฐํŽ˜์ด์Šค๋Š” BeanFactory์™€ ApplicationContext์ด๋‹ค. ApplicationContext๋Š” BeanFactory๋ฅผ ํ™•์žฅํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด๋‹ค.
  BeanFactory๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์œผ๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ApplicationContext๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•œ๋‹ค.

 

3. DI(IoC) ๐Ÿ

  DI๋ฅผ ์ ์šฉ๋œ ๋ชจ์Šต์„ ๊ธฐ์กด ์ฝ”๋“œ์—์„œ๋ถ€ํ„ฐ์˜ ๊ฐœ์„  ๊ณผ์ •์„ ํ†ตํ•ด ์•Œ์•„๋ณด์ž. ์˜ˆ์ œ๋Š” DictionaryService๋ผ๋Š” ๊ฒƒ์ด ์กด์žฌํ•˜๊ณ  showInformation()์ด๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” dictionary์˜ ์ •๋ณด(KoreanDictionary ๋˜๋Š” EnglishDictionary)๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ํ•˜์ž.

1. ๊ฐ์ฒด ๊ฐ„์˜ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ

public class DictionaryMain {

    public static void main(String[] args) {
        DictionaryService dictionaryService = new DictionaryService();

        dictionaryService.showInformation();
    }
}

----------

public class DictionaryService {

    KoreanDictionary koreanDictionary = new KoreanDictionary();
//    EnglishDictionary englishDictionary = new EnglishDictionary();

    public void showInformation(){
        System.out.println(koreanDictionary.info());
//        System.out.println(englishDictionary.info());
    }
}

----------

public class KoreanDictionary {
    public String info(){
        return "ํ•œ๊ตญ์–ด ์‚ฌ์ „์ž…๋‹ˆ๋‹ค.";
    }
}

----------

public class EnglishDictionary {

    public String info(){
        return "This is an English dictionary.";
    }
}

  ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋งŒ์•ฝ ํ•œ๊ตญ์–ด ์‚ฌ์ „(KoreanDictionary)์—์„œ ์˜์–ด ์‚ฌ์ „(EnglishDictionary)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํƒ€์ž…๊ณผ ์ƒ์„ฑ์ž๋ฅผ ๋ฐ”๊ฟ”์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

2. ์ธํ„ฐํŽ˜์ด์Šค ์ด์šฉ

๊ธฐ๋Œ€ํ–ˆ๋˜ ์˜์กด๊ด€๊ณ„
์‹ค์ œ ์˜์กด๊ด€๊ณ„

public class DictionaryMain {
    public static void main(String[] args) {
        DictionaryService dictionaryService = new DictionaryService();

        dictionaryService.showInformation();
    }
}

----------

public class DictionaryService {

    Dictionary dictionary = new KoreanDictionary();
//    Dictionary dictionary = new EnglishDictionary();

    public void showInformation(){
        System.out.println(dictionary.info());
//        System.out.println(dictionary.info());
    }
}

----------

public interface Dictionary {
    public String info();
}

----------

public class KoreanDictionary implements Dictionary{

    @Override
    public String info(){
        return "ํ•œ๊ตญ์–ด ์‚ฌ์ „์ž…๋‹ˆ๋‹ค.";
    }
}

----------

public class EnglishDictionary implements Dictionary {

    @Override
    public String info(){
        return "This is an English dictionary.";
    }
}

  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ํƒ€์ž…์€ ๋™์ผํ•˜๊ฒŒ ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋ฆผ์„ ํ†ตํ•˜์—ฌ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๊ธฐ๋Œ€ํ–ˆ๋˜ ์˜์กด๊ด€๊ณ„์™€ ๋‹ฌ๋ฆฌ ์‹ค์ œ ์˜์กด๊ด€๊ณ„๋Š” ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค์— ์˜์กดํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•„์ง ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ์ ์ด ๋‚จ์•„์žˆ๋‹ค.

  • DIP ์œ„๋ฐ˜
    DictionaryService๊ฐ€ Dictionary ์ธํ„ฐํŽ˜์ด์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ KoreanDictionary์ธ ๊ตฌ์ฒด ํด๋ž˜์Šค์—๋„ ํ•จ๊ป˜ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค
  • OCP ์œ„๋ฐ˜
    KoreadnDictionary๊ฐ€ ์•„๋‹Œ EnglishDictionary๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด DictionaryMain์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

3. AppConfig ์ด์šฉ (์ตœ์ข… ์™„์„ฑ)

@Configuration
public class AppConfig {

    @Bean
    public DictionaryService dictionaryService() {
        return new DictionaryService(dictionary());
    }

    @Bean
    public Dictionary dictionary() {
        return new KoreanDictionary();
    }
}

----------

public class DictionaryMain {
    public static void main(String[] args) {

        // ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

        DictionaryService dictionaryService = applicationContext.getBean("dictionaryService", DictionaryService.class);

        dictionaryService.showInformation();
    }
}

----------

public class DictionaryService {

    Dictionary dictionary;

    public DictionaryService(Dictionary dictionary) {
        this.dictionary = dictionary;
    }

    public void showInformation(){
        System.out.println(dictionary.info());
    }
}

----------

public interface Dictionary {
    public String info();
}

----------

public class KoreanDictionary implements Dictionary {

    @Override
    public String info(){
        return "ํ•œ๊ตญ์–ด ์‚ฌ์ „์ž…๋‹ˆ๋‹ค.";
    }
}

----------

public class EnglishDictionary implements Dictionary {

    public String info(){
        return "This is an English dictionary.";
    }
}

  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ , ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์Šคํ”„๋ง ๋นˆ์„ ์ฐพ์•„์„œ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜์˜€๋‹ค.

 

4. ์ปดํฌ๋„ŒํŠธ ์Šค์บ” & ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๐ŸŒ

  ์œ„์˜ ์˜ˆ์ œ์—์„œ๋Š” ๊ฐ์ฒด๊ฐ€ ๋ช‡ ๊ฐœ ์•ˆ ๋˜์–ด์„œ ๋“ฑ๋กํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์–ด ๋ณด์ธ๋‹ค. ํ•˜์ง€๋งŒ ์Šคํ”„๋ง ๋นˆ์ด ์ˆ˜์‹ญ, ์ˆ˜๋ฐฑ ๊ฐœ๊ฐ€ ๋˜๋ฉด ์ผ์ผ์ด ๋“ฑ๋กํ•˜๊ธฐ๋„ ์–ด๋ ต๊ณ , ์„ค์ • ์ •๋ณด๋„ ์ปค์ง€๊ณ , ๋ˆ„๋ฝํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์Šคํ”„๋ง์€ ์„ค์ • ์ •๋ณด๊ฐ€ ์—†์–ด๋„ ์ž๋™์œผ๋กœ ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

  AppConfig์— @ComponentScan์„ ๋ถ™์ด๊ณ , ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•  ๊ฐ์ฒด์— @Component๋ผ๊ณ  ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  KoreanDictionary์™€ EnglishDictionary ๋‘ ๊ตฐ๋ฐ์— ๋ชจ๋‘ @Component๋ฅผ ๋ถ™์ด๋ฉด ๋‹น์—ฐํžˆ ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜๋Š”๋ฐ ์šฐ์„ ์ˆœ์œ„๋กœ ์‚ฌ์šฉํ•  ๊ณณ์— @Primary๋ฅผ ๋ถ™์ด๋ฉด ๋œ๋‹ค. (@Qualifier๋ฅผ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ์ถ”๊ฐ€์ ์ธ ์„ค๋ช…์€ ์ƒ๋žตํ•œ๋‹ค.)

  ๋˜ํ•œ, ์˜์กด๊ด€๊ณ„๋„ @Autowired๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค (์˜์กด๊ด€๊ณ„ ์ฃผ์ž…๊ณผ ๊ด€๋ จํ•ด์„œ๋Š” ๋‹ค์Œ ๊ธ€์„ ์ฐธ๊ณ ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค.)

@Configuration
@ComponentScan
public class AppConfig {
}

----------

public class DictionaryMain {
    public static void main(String[] args) {

        // ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

        DictionaryService dictionaryService = applicationContext.getBean(DictionaryService.class);

        dictionaryService.showInformation();
    }
}

----------

@Component
public class DictionaryService {

    Dictionary dictionary;

    @Autowired
    public DictionaryService(Dictionary dictionary) {
        this.dictionary = dictionary;
    }

    public void showInformation(){
        System.out.println(dictionary.info());
    }
}


public interface Dictionary {
    public String info();
}

----------

@Component
@Primary
public class KoreanDictionary implements Dictionary {

    @Override
    public String info(){
        return "ํ•œ๊ตญ์–ด ์‚ฌ์ „์ž…๋‹ˆ๋‹ค.";
    }
}

----------

@Component
public class EnglishDictionary implements Dictionary {

    public String info(){
        return "This is an English dictionary.";
    }
}

 

ํ•ด๋‹น ๊ธ€์€ ๊น€์˜ํ•œ ๋‹˜์˜ '์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ'์„ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

'๐Ÿ“‚ ์Šคํ”„๋ง > ๊ธฐ๋ณธ ๊ฐœ๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

HTTP ์š”์ฒญ(ํ—ค๋”, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฉ”์‹œ์ง€) ์ฒ˜๋ฆฌ  (0) 2023.04.20
์Šคํ”„๋ง MVC  (0) 2023.04.19
๋กœ๊น… (SLF4J, Logback)  (0) 2023.04.09
์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์„ ํƒํ•˜๋ผ!  (0) 2023.04.07
์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ฐฉ๋ฒ•  (0) 2023.04.06
  • 1. ๊ฐœ๋… ๐Ÿฆ—
  • 2. ์ปจํ…Œ์ด๋„ˆ(Container) ๐Ÿ›
  • 3. DI(IoC) ๐Ÿ
  • 4. ์ปดํฌ๋„ŒํŠธ ์Šค์บ” & ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๐ŸŒ
'๐Ÿ“‚ ์Šคํ”„๋ง/๊ธฐ๋ณธ ๊ฐœ๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • HTTP ์š”์ฒญ(ํ—ค๋”, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฉ”์‹œ์ง€) ์ฒ˜๋ฆฌ
  • ์Šคํ”„๋ง MVC
  • ๋กœ๊น… (SLF4J, Logback)
  • ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์„ ํƒํ•˜๋ผ!
Amenable
Amenable
CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.