๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Spring

[Spring] ๋™์ผํ•œ ํŒจํ‚ค์ง€ ํด๋ž˜์Šค ์ƒ์„ฑ์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ธฐ

by ํ‘์‹œ๋ฐ” 2023. 10. 7.

๐Ÿ˜ค  ๋ฐฐ๊ฒฝ

ํ”„๋กœ์ ํŠธ์—๋Š” ํšŒ์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ ์ž์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ž์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŠน์ • ํด๋ž˜์Šค์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์ˆ˜์ •์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ๋‹ค. ๊ทธ๋•Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ  ํ•ด๋‹น ๋‚ด์šฉ์„ ๊ณต์œ ํ•˜๊ณ ์ž ํ•œ๋‹ค.

๐Ÿ“Œ  ๋ฌธ์ œ

ํ•ด๋‹น ์ƒํ™ฉ์„ ์ตœ๋Œ€ํ•œ ๋น„์Šทํ•˜๊ฒŒ ์žฌ์—ฐํ•ด๋ณด์•˜๋‹ค.

1. external-lib

 

external-lib๋ผ๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ํ•ด๋‹น ๋ชจ๋“ˆ์—๋Š” ShibaHolic ์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

public class ShibaHolic {

    public void getShibaHolic() {
        problem();
        System.out.println("์„ฑ๊ณต");
    }

    private void problem() {
        System.out.println("๋ฌธ์ œ ๋ฐœ์ƒ");
    }
}

 

ShibaHolic ํด๋ž˜์Šค๋Š” getShibaHolic() ์ด๋ผ๋Š” API๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ๊ฐœ๋ฐœ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์—์„œ ํ•ด๋‹น API๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ problem()์ด ํ˜ธ์ถœ๋˜๋Š” ๊ฒŒ ๋ฌธ์ œ๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

2. service

<dependency>
	<groupId>shiba.holic</groupId>
	<artifactId>external-lib</artifactId>
	<version>1.0-SNAPSHOT</version>
</dependency>

 

์„œ๋น„์Šค ์ค‘์ธ ํ”„๋กœ์ ํŠธ๋Š” getShibaHolic()์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ external-lib dependency๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

public class Blog {
    public void getBlog() {
        ShibaHolic shibaHolic = new ShibaHolic();
        shibaHolic.getShibaHolic();
    }

    public static void main(String[] args) {
        Blog blog = new Blog();
        blog.getBlog();
    }
}

 

์„œ๋น„์Šค ํ”„๋กœ์ ํŠธ - Blog ํด๋ž˜์Šค - getBlog() ์—์„œ getShibaHolic()์„ ํ˜ธ์ถœํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

 

 

๋‹น์—ฐํ•˜๊ฒŒ problem() ๋ฉ”์„œ๋“œ๋ฅผ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— "๋ฌธ์ œ ๋ฐœ์ƒ" ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ "์„ฑ๊ณต" ๋ฉ”์‹œ์ง€๋งŒ ๋ฐ›์œผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

๐Ÿ”Ž  ํ•ด๊ฒฐ

ํ•ด๋‹น ์ƒํ™ฉ์—์„œ ํ•„์ž๊ฐ€ ํ•ด๊ฒฐํ–ˆ๋˜ ๋ฐฉ๋ฒ•์€ ๋™์ผํ•œ ํŒจํ‚ค์ง€์— ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋‹ค๋ฅธ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

์„œ๋น„์Šค ๋ชจ๋“ˆ์— ๋™์ผํ•œ ํŒจํ‚ค์ง€๋กœ ๊ฐ™์€ ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

public class ShibaHolic {
    public void getShibaHolic() {
        System.out.println("์„ฑ๊ณต");
    }
}

 

๊ทธ๋ฆฌ๊ณ  ์„ฑ๊ณต ๋ฉ”์‹œ์ง€๋งŒ ์ถœ๋ ฅ๋˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค.

 

 

๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ Blog ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด "์„ฑ๊ณต" ๋ฉ”์‹œ์ง€๋งŒ ์ถœ๋ ฅ๋œ๋‹ค.

๊ฒฐ๋ก 

์ด ๋ฐฉ๋ฒ•์€ ์™œ ํ•„์š”ํ• ๊นŒ? ํ•„์ž๋Š” ํ•ด๋‹น ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ์ข‹์€ ์ด์œ ๋Š” 2๊ฐ€์ง€๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

 

์šฐ์„ , ๊ฐ„๋‹จํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ˆ˜์ •์„ ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

ํ•„์ž๊ฐ€ ์ง๋ฉดํ•œ ์ƒํ™ฉ์€ ์šด์˜ ํ™˜๊ฒฝ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์  ์—ฌ์œ ๊ฐ€ ์žˆ์–ด์„œ ๊ดœ์ฐฎ์•˜์ง€๋งŒ, ์„œ๋น„์Šค ์šด์˜ ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด ์–ด๋• ์„๊นŒ? ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ˆ˜์ •์„ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์œ„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋ฐœ ํŒ€์— ์ˆ˜์ • ์š”์ฒญ์„ ํ•ด์„œ ๋ฐฐํฌ๊ฐ€ ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ• (ํŽธ๋ฒ• ๋“ฑ)์„ ์ด์šฉํ•ด์•ผ ํ–ˆ์„ ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ๋‚˜์ค‘์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ •์‹์œผ๋กœ ๋ฐฐํฌ๋์„ ๋•Œ ํŽธ๋ฒ•์œผ๋กœ ์ˆ˜์ •ํ•œ ๊ฒƒ์„ ๋‹ค์‹œ ์›๋ณตํ•ด์•ผ ๋˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ๋ฐœ์ƒํ•œ๋‹ค.

๋งŒ์•ฝ ํฌ์ŠคํŒ…ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ–ˆ๋‹ค๋ฉด? ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฎ์–ด์”Œ์šด ํด๋ž˜์Šค๋งŒ ์‚ญ์ œํ•˜๋ฉด ๋œ๋‹ค.

 

๋‘ ๋ฒˆ์งธ๋กœ, ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—๋งŒ ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ธฐ๋Šฅ์ด ๊ณผ์—ฐ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ๋ฌธ์ œ๋กœ ๋ฐ›์•„๋“ค์ผ์ง€๋Š” ์•Œ ์ˆ˜ ์—†๋‹ค.

 

ํŠน์ • ๊ธฐ๋Šฅ์ด A ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ฌธ์ œ์ด์ง€๋งŒ, ๋‚˜๋จธ์ง€ B~Z ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ˆ˜์ •ํ•  ๋•Œ ์˜คํžˆ๋ ค ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ์ด์Šˆ๋ฅผ ๊ณ ๋ฏผํ•ด์•ผ ๋  ์ˆ˜๋„ ์žˆ๋‹ค. 

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‚ด์šฉ ์ค‘ ์ผ๋ถ€๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ, ํ•ด๋‹น ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•ด ๋ณด๋„๋ก ํ•˜์ž.

๋Œ“๊ธ€