Backend๐Ÿ–ฅ๏ธ/Javaโ˜•(Spring๐Ÿƒ)

[Java]API ํ˜ธ์ถœํ•ด์„œ ๋ฌธ์ž ๋ณด๋‚ด๊ธฐ๐Ÿ“จ

JanuDev 2025. 6. 12. 13:56

๋ฌธ์ž ์ „์†ก์„ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ์›น์‚ฌ์ดํŠธ๋Š” ์•Œ๋ฆฌ๊ณ ์ด๋‹ค.

 

๊ทผ๋ฐ ์ด ์„œ๋น„์Šค์˜ ๋ฌธ์ œ๋Š” ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์ด UTF-8์ด ์•„๋‹Œ EUC-KR๋ผ๋Š” ๊ฒƒ์ด๋‹ค. 

์•„์˜ˆ spec์—์„œ "ํ†ต์‹ ์‚ฌ์˜ ์›น ๋ฌธ์ž ๋ฐœ์†ก ์‹œ์Šคํ…œ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ EUC-KR์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ๋”ฐ๋ฅด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ๋ชป์„ ๋ฐ•์•˜๋‹ค.

์ด๋ฒˆ์ด ์ฒ˜์Œ์œผ๋กœ API ํ†ต์‹  ๋กœ์ง์„ ์งœ๋Š”๊ฑฐ๋ผ ์ œ๋Œ€๋กœ ๋œ ์„ค๋ช…์˜ ํฌ์ŠคํŒ…์ด ํ•„์š”ํ–ˆ๋Š”๋ฐ ์—†์–ด์„œ...ใ…  

๋„์›€์„ ๋ฐ›์•„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ธฐ๋Šฅ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ๊นŒ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ์ž๋ฐ”๋กœ url์„ ๋งŒ๋“ค๊ณ  api๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ์ฒ˜์Œ์ด๋ผ... ์–ด์จŒ๋“  ๋ฌด์Šจ ์˜๋ฏธ์ธ์ง€ ๊ณต๋ถ€๋Š” ํ•ด์•ผ ํ•œ๋‹ค.

 

API ๊ธฐ๋ณธ ํ˜ธ์ถœ ์ˆœ์„œ

  1. URL ์„ค์ •
  2. ํ—ค๋”(Header)์„ค์ •
  3. ๋ฐ”๋””(Body)์„ค์ •
  4. ์š”์ฒญ ๋ณด๋‚ด๊ธฐ

์—ฌ๊ธฐ์„œ๋„ ์ž˜ ์ •๋ฆฌํ–ˆ์œผ๋‹ˆ ์—ฌ๊ธฐ์„  ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•œ๋‹ค.

 

1. ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ตฌ์„ฑ

    String url = "์›น์‚ฌ์ดํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ˜ธ์ถœ url"
    String response = "";

    // ๋ฐ”๋”” ์„ค์ •
    Map<String, String> params = new HashMap<>();
    params.put("key", ํ‚ค๊ฐ’);
    params.put("user_id", ์•„์ด๋””๊ฐ’);
    params.put("sender", ๋ฐœ์‹ ์ž);
    params.put("receiver", ์ˆ˜์‹ ์ž);
    params.put("msg", "์•„์ž‰๋ฟŒ์ž‰๋ฟŒ์ž‰@#$%^&*()_ไบž");
    params.put("msg_type", "SMS");
    params.put("testmode_yn", "Y");

์ž์„ธํ•œ ์‚ฌํ•ญ์€ ์•Œ๋ฆฌ๊ณ  ์ŠคํŽ™ ๊ทœ์•ฝ์„œ๋ฅผ ๋ณด๋ฉด ๋˜์ง€๋งŒ.. ์ผ๋‹จ ํ•„์ˆ˜ ๊ฐ’๋“ค์€ ์œ„์™€ ๊ฐ™๋‹ค.

์•Œ๋ฆฌ๊ณ ๋Š” msg_type๊ฐ€ ํ•„์ˆ˜๊ฐ’์€ ์•„๋‹ˆ์ง€๋งŒ ๋ช…์‹œํ•ด์„œ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋‹ค.

testmode_yn์€ ํ…Œ์ŠคํŠธ ๋ชจ๋“œ๋ฅผ ํ• ๊ฒƒ์ธ์ง€์˜ ์œ ๋ฌด์ธ๋ฐ, ์ด๊ฑธ ์•ˆํ•˜๋ฉด ๊ณผ๊ธˆ๋˜๋ฏ€๋กœ ๋งค์šฐ ์ฃผ์˜....

 

<Map>๊ณ„์—ด์€ key-value ํ•œ ์Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ด๋‹ค. <String, String>์ด๋ฏ€๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด

 

params.put("๊ณผ์ž", "ํ™ˆ๋Ÿฐ๋ณผ")

 

๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ ๊ตฌ์„ฑํ•  ๋•Œ ๊ฐœ์ธ์ ์œผ๋กœ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ๊ณ  ์žˆ๋‹ค.

๋ญ”๊ฐ€ ๋งต๊ณ„์—ด ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋”ฉ ๊ณ ์ˆ˜๊ฐ€ ๋˜๋Š” ๋А๋‚Œ.... Map์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ์˜ˆ์ „์— ์ •๋ฆฌํ•œ ์ด๊ฑธ ํด๋ฆญํ•ด์„œ ํ™•์ธํ•˜๋ฉด ๋ ๋“ฏ..

 

โž•์ฃผ์˜! HashMap๊ณผ LinkedHashMap์˜ ์ฐจ์ด์ : HashMap์€ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์ง€๋งŒ LinkedHashMap์€ ์ž…๋ ฅ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•œ๋‹ค.

2. URL ์ธ์ฝ”๋”ฉ ์ฒ˜๋ฆฌ

    StringBuilder formBody = new StringBuilder();
    try {
        for (Map.Entry<String, String> entry : params.entrySet()) {
            if (formBody.length() > 0) formBody.append("&");
            formBody.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
            formBody.append("=");
            formBody.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

 

(1) StringBuilder : ์ž๋ฐ”์—์„œ ๋ฌธ์ž์—ด์„ ํšจ์œจ์ ์œผ๋กœ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค. ๋ฌธ์ž์—ด์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋”ฐ.

 

(2) Map.Entry<String, String> entry : params.entrySet()

  • Map.Entry : Map์—์„œ ํ•œ ์Œ์”ฉ ๊บผ key-value(=Entry)  Map์•ˆ์— ์žˆ๋Š” ํ•œ ์Œ(=key์™€ value)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 

key-value ํ•œ ์Œ์„ ์•„์šฐ๋ฅด๋Š” ๊ฒƒ์ด "์—”ํŠธ๋ฆฌEntry"์ด๋‹ค.

  • entrySet() : Map์— ํฌํ•จ๋œ ๋ชจ๋“  Entry๋ฅผ ๋‹ด์€ Set(๋ฌถ์Œ)์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค. ๋”ฐ๋ผ์„œ Map์— ์žˆ๋Š” ๋ชจ๋“  ์—”ํŠธ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. "Map์˜ ์—”ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•œ๋‹ค!"

3. HTTP ํ—ค๋” ์„ค์ •

    // ํ—ค๋” ์„ค์ •
    Map<String,String> headers = new HashMap<String,String>();
    headers.put("Content-Type", "application/x-www-form-urlencoded; charset=EUC-KR");

์•Œ๋ฆฌ๊ณ ๋Š” json์ด ์•„๋‹Œ ํผ ํ˜•ํƒœ๋กœ ๋ณด๋‚ด๋ผ๊ณ  ์ง€์‹œํ•œ๋‹ค(๋‚˜๋„ ๋ชฐ๋ž๋‹ค๊ฐ€ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์•Œ๊ฒŒ๋จ)

๊ธ€๊ณ  SMS๋ฌธ์ž๋ฅผ ๋ณด๋‚ผ ๋• EUC-KR๋กœ ์ธ์ฝ”๋”ฉํ•˜๋ผ๊ณ  ํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ํ—ค๋”์˜ content-type์„ form-urlencoded, EUC-KRํƒ€์ž…์œผ๋กœ ์ธ์ฝ”๋”ฉํ–ˆ๋‹ค.

4. API ํ˜ธ์ถœ ๋ฐ ์‘๋‹ต ์ฒ˜๋ฆฌ

    try { 
        // context = @Autowired๋กœ ์„ ์–ธ๋œ private ApplicationContext context์ด๋‹ค.
        NetUtil.setApplicationContext(context);    
        Map<String, Object> res = NetUtil.requestWebClient(url, HttpMethod.POST, headers, formBody.toString(), NetUtil.REST_BASIC);
        String responseBody = String.valueOf(res.get("resStr"));

        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode root = objectMapper.readTree(responseBody);
        String resoibseData = root.path("message").asText();

    } catch(Exception ex) {
        log.error("[ERROR]API ํ˜ธ์ถœ ์‹คํŒจ, " + ex);
    }

 

 

์œ„ ์ฝ”๋“œ์—์„œ ์•Œ์•„์•ผํ•  ๊ฒƒ์ด ํฌ๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

(1) ๐Ÿ“Œ ApplicationContext๋ž€?

 

Spring์—์„  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ๊ณผ ๋นˆ(=๊ฐ์ฒด)์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ๊ฑธ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ์ด ApplicationContext์ด๋‹ค. 

์ง€ํ”ผํ‹ฐ ์„ ์ƒ๋‹˜ ์™ˆ, 


"์Šคํ”„๋ง์ด ๋งŒ๋“ค์–ด๋†“์€ ํฐ ๊ณต์žฅ(์ปจํ…Œ์ด๋„ˆ)"
๐Ÿ‘‰ ์ด ๊ณต์žฅ์ด ํ•˜๋Š” ์ผ: ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด(Bean)๋ฅผ ์ƒ์„ฑ, ๊ด€๋ฆฌ, ๋ณด๊ด€, ์ œ๊ณตํ•˜๋Š” ์—ญํ• .


์ด๋ผ ๋ง์”€ํ•˜์…จ๋‹ค. ApplicationContext์˜ ์—ญํ• ์€ BeanFactory๊ฐ€ ๋‹ด๋‹นํ•˜๋Š” Bean์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๊ณ„์„ค์ •๊ณผ ๊ฐ™์€ ์ œ์–ด์—ญํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„ค์ • ์ •๋ณด๋ฅผ ํ†ตํ•ด ์ œ์–ด๊นŒ์ง€ ๋‹ด๋‹นํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰ NetUtil.setApplicationContext(context)์€

  • setApplicationContext(context)๋Š” ApplicationContext๋ฅผ NetUtil ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.
  • ์ฆ‰, NetUtil ํด๋ž˜์Šค๊ฐ€ ์Šคํ”„๋ง์˜ ๋นˆ์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ context๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค = NetUtil ๋‚ด๋ถ€์—์„œ ๋นˆ(bean) ์กฐํšŒ๋‚˜ RestTemplate ๊ฐ™์€ ์Šคํ”„๋ง ๋นˆ์„ ๊บผ๋‚ด ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

์†”์งํžˆ ๋ฌด์Šจ ์†Œ๋ฆฌ์ธ์ง€ ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€๋Š”๋ฐ... ์ด๊ฑด ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€์ž. ApplicationContext๊ฐ€ ๋นˆ(Service, Controller ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฐ์ฒด)์„ Spring์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด NetUtil์— applicationContext๋ฅผ ๋“ฑ๋กํ•œ๋‹ค๋Š”๊ฑด ์•Œ์•˜๋‹ค.

์ฆ‰ NetUtil์—์„œ Spring์˜ Bean์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๊ณ  ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€๋ฅธ ์ฝ”๋“œ์ด๋‹ค!

 

Spring๊ตฌ์กฐ๊นŒ์ง€ ์•Œ์•„์•ผ ํ•˜๋Š”๋ฐ ๊ทธ๊ฑด ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ณ ... ์ด ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„ 

  • ๋นˆ(Bean) : Controller, Service, Repository์™€ ๊ฐ™์€ ๊ฐ์ฒด๋“ค์ธ๋ฐ, ํ‰๋ฒ”ํ•œ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ Spring ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด์ด๋‹ค(=๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ Spring ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์ฃผ์ž…ํ•˜๋Š” ๊ฐ์ฒด)
  • @Autowired : Spring์—์„œ ์˜์กด์„ฑ ์ฃผ์ž…์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์–ด๋…ธํ…Œ์ด์…˜. ์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ด๋ฉด ์Šคํ”„๋ง์ด ์ž๋™์œผ๋กœ ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜์—ฌ ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•œ๋‹ค(์ž๋ฐ”์—์„œ ์ƒ์„ฑ์ž๋ฅผ ์œ„ํ•ด new ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ž‘ ๋˜‘๊ฐ™๋‹ค) 
  • ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection) : ๊ฐ์ฒด(๋นˆ)์„ Spring์ด ์•Œ์•„์„œ ์ƒ์„ฑ, ์†Œ๋ฉธ์‹œํ‚ค๋Š” ํ–‰์œ„์ด๋‹ค.
Map<String, Object> res = NetUtil.requestRestTemplate(url, HttpMethod.POST, headers, formBody.toString(), NetUtil.REST_BASIC);

 

์ด์–ด์„œ ์œ„ ์ฝ”๋“œ๋Š” "์–ด๋–ค ์„œ๋ฒ„์— HTTP POST ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ๊ทธ ๊ฒฐ๊ณผ(JSON)๋ฅผ Map์œผ๋กœ ๋ฐ›์•„์˜ค๋Š” ์ฝ”๋“œ"์ด๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ๊ฐ€์ ธ์™€ ์ค€๋‹ค๊ณ  ํ•œ๋‹ค. ์ฆ‰, ์„œ๋ฒ„์—์„œ ์‘๋‹ตํ•œ JSON์„ Map ํ˜•ํƒœ๋กœ ํŒŒ์‹ฑํ•ด์„œ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋Š” 

  • url : ํ˜ธ์ถœํ•  url
  • HttpMethod.POST : POSTํ˜•์‹์œผ๋กœ ๋ณด๋‚ผ ๊ฒƒ์ž„์„ ์•Œ๋ฆผ
  • headers : ํ—ค๋” ์„ค์ •
  • formBody.toString() : ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ • (์•Œ๋ฆฌ๊ณ ์ฒ˜๋Ÿผ form์ผ์ˆ˜๋„ ์žˆ๊ณ , ๋ณดํ†ต์€ json์ด๋‹ค..)
  • NetUtil.REST_BASIC : (๋‚ด๋ถ€ ์ƒ์ˆ˜) ์š”์ฒญ ๋ชจ๋“œ, ์ธ์ฆ๋ฐฉ์‹ ๊ตฌ๋ถ„ ๋“ฑ์— ์‚ฌ์šฉ๋  ๊ฐ’

์™€ ๊ฐ™๋‹ค...

 

 

(2) ๐Ÿ“ŒObjectMapper, JsonNode๋ž€?

์ด๊ฑด ์‚ฌ์‹ค ์˜ˆ์ „์— ๋ด์„œ ํฌ๊ฒŒ ๋‚ฏ์„ค์ง„ ์•Š๋‹ค.

ObjectMapper objectMapper = new ObjectMapper();
JsonNode root = objectMapper.readTree(responseBody);

์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, "JSON ๋ฌธ์ž์—ด์„ ์ฝ์–ด์„œ JsonNode ๋ผ๋Š” ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ฝ”๋“œ"๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

  • ObjectMapper : JSON ๋ฌธ์ž์—ด ↔ ์ž๋ฐ” ๊ฐ์ฒด ๋ณ€ํ™˜ ๋‹ด๋‹น. Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณต (=JSONํŒŒ์„œ)
    • JSON์„ ํŒŒ์‹ฑํ•ด์„œ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ํด๋ž˜์Šค ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ฑฐ๋‚˜
    • ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ JSON๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.
  • JsonNode : ๊ณ„์ธต ๊ตฌ์กฐ๋กœ JSON๊ตฌ์กฐ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด
  • readTree() :  ๋ฌธ์ž์—ด ํ˜•ํƒœ์˜ JSON์„ JsonNode ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. 

์˜ˆ์‹œ๋กœ ๋ณด๋‹ˆ๊นŒ ๋„ˆ๋ฌด ํŽธ์•ˆ~~~~~~~ํ•˜๋‹ค

์˜ˆ์ „์— ๋ด์„œ ์•„์ฃผ ๋ง‰๋ง‰ํ•˜๊ณ  ์–ด๋ ค์šด๊ฑด ์•„๋‹ˆ์ง€๋งŒ ํ•œ๋ฒˆ ๋” ๋ณต์Šต ์ฐจ์›์—์„œ~

 

์ฐธ๊ณ :

https://velog.io/@artp/Java-Map%EA%B3%BC-Entry%EC%9D%98-%EA%B4%80%EA%B3%84

 

[Java] Map๊ณผ Entry์˜ ๊ด€๊ณ„

Java์—์„œ Map๊ณผ Entry์˜ ๊ด€๊ณ„๋Š” ๋งŽ์€ ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋“ค์ด ํ—ท๊ฐˆ๋ คํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Map๊ณผ Entry์˜ ๊ฐœ๋…๊ณผ ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.Map.Entry<K, V>๋Š” Map ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด๋ถ€์— ์ •์˜๋œ ๋‚ด

velog.io

https://velog.io/@gehwan96/Spring-Boot-ApplicationContext%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

 

Spring Boot - ApplicationContext์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

๊ฐœ์š” ์˜ค๋Š˜์€ ApplicationContext์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ง€๊ฒ ๋‹ค. ApplicationContext๊ฐ€ ๋ฌด์—‡์ด๋ฉฐ ์–ด๋– ํ•œ ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž. ApplicationContext์˜ ์—ญํ• ์„ ์•ˆ๋‹ค๋ฉด ์ •๋ง ์ด ์นœ๊ตฌ๊ฐ€ ์„œ๋น„์Šค ๊ฐœ๋ฐœ์‹œ ๊ฐ€์žฅ ๋นก

velog.io

https://www.notion.so/isSummary-1ac9d6b82d4549f9af5b97e4eeac13ac 

(์ด๊ฑด ๋‚ด๊บผ๋‹ค)