๊ฐœ๋ฐœ.log/framework

[SpringBoot] ๊ด€์Šต์ ์ธ ์ถ”์ƒํ™” Service, ServiceImpl ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

๊ฐœ๋ฐœํ•˜๋Š” ์ฃผ๋””์”จ 2023. 10. 11. 00:34

Service interface์™€ ServiceImpl class ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

 

๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ๋Š” Service๋ฅผ ๋งŒ๋“ค ๋•Œ MemberService์™€ ๊ฐ™์ด ์„œ๋น„์Šค๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์„ค๊ณ„ํ•˜๊ณ , MemberServiceImpl ๋ผ๋Š” ๊ตฌํ˜„์ฒด์ธ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ค๊ณ„๋ฉ๋‹ˆ๋‹ค.

 

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

 

๋‚ด์šฉ ์ค‘ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์€ ๋Œ“๊ธ€์„ ํ†ตํ•ด ๋ง์”€ํ•ด์ฃผ์‹œ๋ฉด ์ฐพ์•„๋ณด๊ณ  ์ˆ˜์ •ํ•˜๋ฉฐ ๊ณต๋ถ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 


 

 

์ด๋ก ์ƒ์œผ๋กœ ์œ„์™€ ๊ฐ™์€ Service, ServiceImpl ํŒจํ„ด์œผ๋กœ ์„ค๊ณ„๋ฅผ ํ•ด์•ผํ•˜๋Š” ์ด์œ ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด๋ฅผ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๊ตฌํ˜„์ฒด๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ตฌํ˜„์ฒด ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•ด๋„ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

์ด ๊ฐ™์€ ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•œ ๊ตฌํ˜„ ๋ฐฉ์‹์€ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜์ธ ๋‹คํ˜•์„ฑ๊ณผ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๋‹ค์„ฏ ๊ฐ€์ง€ ์›์น™ ์ค‘ ํ•˜๋‚˜์ธ OCP ์›์น™์„ ๊ฐ€์žฅ ์ž˜ ์‹คํ˜„ํ•ด์ฃผ๋Š” ์„ค๊ณ„ ๋ฐฉ์‹์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด ํด๋ž˜์Šค ์‚ฌ์ด์˜ ๊ด€๊ณ„๊ฐ€ 1:1์˜ ๊ด€๊ณ„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์‹ค์งˆ์ ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค, ํด๋ž˜์Šค ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ด์ ์„ ์ „ํ˜€ ๊ฐ€์ ธ๊ฐ€์ง€ ๋ชปํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ด€์Šต์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ์ถ”์ƒ ํŒจํ„ด์„ ์ ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

* OCP (Open Closed Principle)

๊ฐœ๋ฐฉ, ํ์‡„ ์›์น™์ด๋ผ๊ณ  ํ•˜๋ฉฐ '์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ์ฒด(ํด๋ž˜์Šค, ๋ชจ๋“ˆ, ํ•จ์ˆ˜ ๋“ฑ)๋Š” ํ™•์žฅ์— ๋Œ€ํ•ด ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜๊ณ , ์ˆ˜์ •์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.'๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™์ž…๋‹ˆ๋‹ค.

 

* ์œ„ ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•œ ๊ตฌํ˜„ ๋ฐฉ์‹์˜ ๋‹จ์ 

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

 

 


 

 

์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ํ•œ๋ฒˆ ์ด์•ผ๊ธฐํ•ด๋ณด๋ฉด,

public interface MainService {
    ResponseEntity<?> doAction();
}

doAction() ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜๋Š” Service,

@Service
public class MainServiceImplA implements MainService {
    @Override
    public ResponseEntity<?> doAction() {
        System.out.println("do Action A");
    }
}

MainService์˜ doAction ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” MainServiceImplA,

@Service
public class MainServiceImplB implements MainService {
    @Override
    public ResponseEntity<?> doAction() {
        System.out.println("do Action B");
    }
}

MainService์˜ doAction ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” MainServiceImplB,

 

 

doAction() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ตฌํ˜„์ฒด MainServiceImplA, MainServiceImplB ๊ฐ€ ์žˆ์„ ๋•Œ, ์ด ๋‘ ๊ตฌํ˜„์ฒด๋Š” ๊ฐ๊ฐ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ doAction() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ doAction() ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ interface ์ธ MainService์˜ ์—ญํ• ์ž…๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค๊ณ„ํ–ˆ์„ ๋•Œ, interface์—์„œ ์ •์˜ํ•œ ๊ธฐ๋Šฅ์„ ์ƒˆ๋กœ์šด ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ณณ์—์„œ ๊ตฌํ˜„์ฒด๋งŒ ์†์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Service๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋งŒ๋“ค๊ณ , ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ServiceImpl ๋ผ๋Š” class๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

์ด์ฒ˜๋Ÿผ Service๋ฅผ interface๋กœ ๋งŒ๋“œ๋Š” ๋ชฉ์ ์€ ํ•˜๋‚˜์˜ ์—ญํ• ์„ ์—ฌ๋Ÿฌ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด์˜ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ๋…๋ฆฝ์ ์œผ๋กœ ๋ณด๋‹ค ์ž์œ ๋กœ์šด ํ™•์žฅ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์œ„์—์„œ ์ด์•ผ๊ธฐํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด๊ฐ€ 1:1๋กœ ๋งŒ๋“ค์–ด์ ธ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ์•ž์œผ๋กœ๋„ ์ด๋Ÿฌํ•œ ๊ด€์Šต์ ์ธ ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•œ Service, ServiceImpl ์„ค๊ณ„ ๋ฐฉ์‹์„ ์ ์šฉํ•ด์•ผ ํ• ๊นŒ์š”?

 

 


 

 

์‹ค์ œ๋กœ ํšจ๊ณผ๋„ ๋ณด์ง€ ๋ชปํ•˜๋Š” ์ด๋Ÿฌํ•œ ๊ด€์Šต์ ์ธ ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•œ ์„ค๊ณ„๋ฐฉ์‹์„ ๊ณ„์† ์ ์šฉํ•ด์•ผ ํ• ๊นŒ?

 

 

๊ฒฐ๊ตญ ์„ ํƒ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์‚ฌ๋žŒ์˜ ๋ชซ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด๋ฅผ ๋ถ„๋ฆฌํ•œ ์„ค๊ณ„๋ฅผ ํ†ตํ•œ ์ด์ ๋“ค๊ณผ ํ•ด๋‹น ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ•˜์ง€ ์•Š๋Š” ์ด์œ ์™€ ๊ทผ๊ฑฐ์— ๋Œ€ํ•ด์„œ๋Š” ์•Œ๊ณ  ์žˆ๊ณ , ๋งํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.

 

 

(๊ณ„์† ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ž…์žฅ์—์„œ์˜ ์˜๊ฒฌ ๋‘ ๊ฐ€์ง€)

 

  1. ๊ฐ์ฒด์— ๋Œ€ํ•œ ์„ค๊ณ„์™€ ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋Š” ์–ธ์ œ๋“ ์ง€ ๋ณ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฅผ ๋Œ€๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    ์ง€๊ธˆ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉ์ค‘์ธ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด ํด๋ž˜์Šค๊ฐ€ 1:1 ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ์„์ง€ ๋ชจ๋ฅด์ง€๋งŒ ์„œ๋น„์Šค๊ฐ€ ์ปค์ง€๊ณ  ๋ณ€ํ™”ํ•จ์— ๋”ฐ๋ผ์„œ ์–ผ๋งˆ๋“ ์ง€ ๊ตฌํ˜„์ฒด ํด๋ž˜์Šค๋Š” ํ™•์žฅ๋  ๊ฐ€๋Šฅ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๋ฏธ๋ž˜์˜ ๋ณ€ํ™”์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋Œ€๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ํ˜‘์—…์—์„œ ์ด์ ์œผ๋กœ ์ž‘์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ์„ค๊ณ„์ž๊ฐ€ ํ”„๋กœ์ ํŠธ์˜ ํฐ ๋ผˆ๋Œ€๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ๋‚˜๋จธ์ง€ ์ž‘์—…์ž๋“ค์€ ๊ทธ์— ๋งž๋Š” ์‹ค์ œ ๊ตฌํ˜„์„ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ํ•จ์ˆ˜๋ช…, ๋ฆฌํ„ด, ํŒŒ๋ผ๋ฏธํ„ฐ ๋“ฑ์„ ์„ค๊ณ„์ž๊ฐ€ ๋งŒ๋“ค์–ด๋†“์€ ์ธํ„ฐํŽ˜์ด์Šค์— ๋งž์ถฐ ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ˆ„๊ตฐ๊ฐ€ ์ž‘์„ฑํ•˜๊ณ  ์‹ค์ œ ๊ตฌํ˜„์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ„ํ• ์˜ ๊ธฐ๋Šฅ๋„ ํ˜‘์—…์—์„œ์˜ ์ด์ ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•จ๊ป˜ ์•Œ๋ฉด ์ดํ•ดํ•˜๊ธฐ ์ข‹์€ MVC ํŒจํ„ด์—์„œ Service Model์˜ ์—ญํ• 

 

MVC ํŒจํ„ด์—์„œ view๋Š” ์ž์‹ ์ด ์š”์ฒญํ•  Controller๋งŒ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋˜๊ณ , Controller๋Š” ํ™”๋ฉด์—์„œ ๋„˜์–ด์˜ค๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์„ ์ด์šฉํ•ด Service๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Service๋Š” ๋ถˆํ•„์š”ํ•˜๊ฒŒ Http ํ†ต์‹ ์„ ์œ„ํ•œ HttpServlet์„ ์ƒ์†๋ฐ›์„ ํ•„์š” ์—†๋Š” ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Service๋Š” ์–ด๋–ค ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ˜ธ์ถœํ•˜๋“  ์ƒ๊ด€์—†์ด ํ•„์š”ํ•œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋งŒ ์ค€๋‹ค๋ฉด ์ž์‹ ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ์–ด๋””์„œ๋“  ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค ํŒŒ์ผ์ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

(Service์—์„œ request๋‚˜ response์™€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. request, response๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ž‘์—…์€ ์ปจํŠธ๋กค๋Ÿฌ ๋‹จ์—์„œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

 

์ด๋ ‡๊ฒŒ ์ œ๋Œ€๋กœ ๊ตฌํ˜„๋œ Service๋ผ๋ฉด ๋‹จ์ˆœ Web ๊ธฐ๋ฐ˜์ด ์•„๋‹ˆ๋ผ ์ถ”ํ›„ native app์œผ๋กœ view๋‹จ์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ Service๋Š” view์— ์ข…์†์ ์ธ ์ฝ”๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ถ”๊ฐ€์ ์ธ ์š”์ฒญ ์‚ฌํ•ญ์ด ๋“ค์–ด์˜ค๋ฉด ๊ธฐ์กด์˜ ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๊ธฐ์กด Service ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๊ทธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(์œ„์—์„œ ์ด์•ผ๊ธฐํ•œ OCP์— ๋”ฐ๋ฅธ ๋ณ€ํ™”์—๋Š” ๋‹ซํ˜€์žˆ๊ณ , ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๋Š” ๊ตฌ์กฐ)