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

TIL/Spring

๐Ÿ“š 3/20(์ˆ˜) ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ Java-Spring 59์ผ์ฐจ TIL - SpringData JPA Service์—์„œ ๋‹ค๋ฅธ Service๋ฅผ ์˜์กดํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด?

๐Ÿ“  ์˜ค๋Š˜์˜ ํ•™์Šต ํ‚ค์›Œ๋“œ 

  • SpringData JPA - Service์—์„œ ๋‹ค๋ฅธ Service๋ฅผ ์˜์กดํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด?

 

 

 

 

๐Ÿ“ Service์—์„œ ๋‹ค๋ฅธ Service์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด? 

  ์„œ๋น„์Šค์—์„œ ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

<ํŠธ๋ ๋กœ ๋งŒ๋“ค๊ธฐ> ํŒ€ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘์— ๋Œ“๊ธ€ ์กฐํšŒ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๋‹ค๊ฐ€ ์ด ์–˜๊ธฐ ์ฃผ์ œ๊ฐ€ ๋‚˜์™”๋‹ค.

 

ํŠธ๋ ๋กœ์˜ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด '๋ณด๋“œ > ์นผ๋Ÿผ > ์นด๋“œ > ๋Œ“๊ธ€' ์ˆœ์œผ๋กœ ๋˜์–ด์žˆ๋‹ค.

<Board - Column - Card>

 

<Card - Comment, Card๋ฅผ ๋‹จ๊ฑด ์กฐํšŒํ•œ ๋ชจ์Šต>

 

 

  ์—ฌ๊ธฐ์„œ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๋ฐฉ์‹์€ '์นด๋“œ ๋‹จ๊ฑด ์กฐํšŒ๋ฅผ ํ–ˆ์„ ๋•Œ, ๋Œ“๊ธ€์ด ๋ฆฌ์ŠคํŠธ ํ˜•์‹์œผ๋กœ ๊ฐ™์ด ๋ณด์—ฌ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์นด๋“œ ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋‹จ์—์„œ ๋Œ“๊ธ€ ์กฐํšŒ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ?'์˜€๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‹ค๋ฅธ ํŒ€์›์€ ๋Œ“๊ธ€ ์กฐํšŒ์ด๋‹ˆ ๋Œ“๊ธ€ ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋‹จ์—์„œ ์กฐํšŒ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด์„œ ๊ทธ ๊ธฐ๋Šฅ์„ ์นด๋“œ ์ชฝ ์„œ๋น„์Šค๋‹จ์—์„œ ๊ฐ€์ ธ๋‹ค ์จ์•ผ ํ•œ๋‹ค๊ณ  ์–˜๊ธฐํ–ˆ๋‹ค. 

 

 

  ํŒ€์›์˜ ์˜๊ฒฌ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

// A ๋„๋ฉ”์ธ์˜ ์„œ๋น„์Šค
@Service
public class AService {
    
    @Autowired
    private BService bService;

    public void callBServiceMethod() {
        // B ๋„๋ฉ”์ธ์˜ ์„œ๋น„์Šค ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
        bService.doSomethingInB();
    }
}

// B ๋„๋ฉ”์ธ์˜ ์„œ๋น„์Šค
@Service
public class BService {
    
    public void doSomethingInB() {
        // B ๋„๋ฉ”์ธ์˜ ์„œ๋น„์Šค์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…
        System.out.println("Method in BService is called.");
    }
}

 

 

 

 

  ์„œ๋น„์Šค๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์˜ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ๋˜๋ฉด, ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ์ƒ๊ธฐ๋Š”๋ฐ ์ •๋ฆฌํ•ด ๋ณด์ž๋ฉด ์ด๋ ‡๋‹ค.

- ์˜์กด์„ฑ ๊ฐ•ํ™”(Increased Dependency): A ๋„๋ฉ”์ธ์˜ ์„œ๋น„์Šค๊ฐ€ B ๋„๋ฉ”์ธ์˜ ์„œ๋น„์Šค๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋ฉด, ๋‘ ์„œ๋น„์Šค ๊ฐ„์˜ ์˜์กด์„ฑ์ด ๋†’์•„์ง„๋‹ค. ์ด๋Š” ๋‘ ์„œ๋น„์Šค ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋†’์ด๊ณ , ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ „ํŒŒ๋˜๋Š” ๋ฒ”์œ„๋ฅผ ๋„“ํž ์ˆ˜ ์žˆ๋‹ค.

- ๊ฒฐํ•ฉ๋„ ์ฆ๊ฐ€(Increased Coupling): A ๋„๋ฉ”์ธ์˜ ์„œ๋น„์Šค๊ฐ€ B ๋„๋ฉ”์ธ์˜ ์„œ๋น„์Šค๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋ฉด, ๋‘ ์„œ๋น„์Šค ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค. ์ด๋Š” ํ•œ ์„œ๋น„์Šค๊ฐ€ ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์— ์˜์กดํ•˜๊ฒŒ ๋˜์–ด, ๋ณ€๊ฒฝ์ด ์ „ํŒŒ๋  ์ˆ˜ ์žˆ๊ณ , ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค.

- ๋ณด์•ˆ ๋ฌธ์ œ(Security Concerns): ์„œ๋น„์Šค ๊ฐ„์˜ ์ง์ ‘ ํ˜ธ์ถœ์€ ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ, ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š์€ ์„œ๋น„์Šค์— ์ง์ ‘ ์•ก์„ธ์Šค ํ•  ๊ฒฝ์šฐ, ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ๋‹ค.

- ์„ฑ๋Šฅ ๋ฌธ์ œ(Performance Issues): ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์˜ ์„œ๋น„์Šค๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•  ๋•Œ๋Š” ๋„คํŠธ์›Œํฌ ์ง€์—ฐ์ด๋‚˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ „์ฒด ์‹œ์Šคํ…œ์˜ ์‘๋‹ต ์‹œ๊ฐ„์ด ๋А๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค.

- ๋ณ€๊ฒฝ ๊ด€๋ฆฌ ์–ด๋ ค์›€(Difficulty in Change Management): ์„œ๋น„์Šค ๊ฐ„์˜ ์ง์ ‘ ํ˜ธ์ถœ์€ ์„œ๋น„์Šค ๊ฐ„์˜ ๋ณ€๊ฒฝ์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ํ•œ ์„œ๋น„์Šค์˜ ๋ณ€๊ฒฝ์ด ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒฝ์šฐ, ๋ณ€๊ฒฝ ๊ด€๋ฆฌ ๋ฐ ๋ฐฐํฌ๊ฐ€ ๋” ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

- ํ…Œ์ŠคํŠธ ์–ด๋ ค์›€(Difficulty Of Test): A ์„œ๋น„์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•  ๋•Œ B ์„œ๋น„์Šค์˜ ๋™์ž‘์ด ํฌํ•จ๋˜๋ฏ€๋กœ, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค. ๋˜ํ•œ B ์„œ๋น„์Šค๊ฐ€ ์™ธ๋ถ€ ์˜์กด์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ํ…Œ์ŠคํŠธ์˜ ๋ณต์žก์„ฑ์ด ๋”์šฑ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ค‘๊ฐ„ ๋งค๊ฐœ์ฒด๋ฅผ ํ†ตํ•œ ๊ฐ„์ ‘ ํ†ต์‹ , ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ†ตํ•ฉ, ์„œ๋น„์Šค ๋ฒ„์Šค ๋“ฑ์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

ํŒ€์›๋“ค์—๊ฒŒ ์ด ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด์„œ ์ „๋‹ฌํ–ˆ๊ณ , ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฐฉ์‹์œผ๋กœ๋Š” ์ฝ”๋“œ๋ฅผ ์งœ์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.