-
Spring ๊ฐ๋ฐฉ ํ์์ ์์น์ ๋ฐ์ํ ์ฝ๋ ๋ฆฌํฉํ ๋งBack-end/TIL 2022. 4. 25. 09:26
๐ ์ํฉ
- ํ์ฅ๋๊ป์ ๋ฆฌํฉํ ๋งํ ์ฝ๋๋ฅผ ๋ณด๊ณ ์ธํฐํ์ด์ค ๊ตฌํ์ฒด๋ฅผ ๋ช ์ํด์ฃผ๋ ๊ฒ์ ๋ํด ๊ณ ๋ฏผํ๋ฉฐ ‘Spring์ ๊ฐ๋ฐฉ ํ์ ์์น’ ๊ฐ๋ ์ ๋ํด ์ง์ ์ ์ธ ์ดํด๋ฅผ ํ๊ฒ ๋์๋ค.
- ํ์ฌ ํ์ฌ ์ฝ๋๋ ์์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ง๊ธ์ SmsExternalService ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๊ฐ SmsNaverService ๋ฟ์ด์ง๋ง, ๋ง์ฝ ๋ค๋ฅธ ๊ตฌํ์ฒด๊ฐ ์๊ธด๋ค๋ฉด, SpringBoot๊ฐ ์ด๋ค ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํด์ผํ ์ง ๋ชฐ๋ผ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
- ๋ฐ๋ผ์ ์ด๋ฌํ ๋ถ๋ถ์ ๋ํ ๋ฆฌํฉํ ๋ง์ด ์ถ๊ฐ๋ก ํ์ํ๋ค๊ณ ์๊ฐํ๋ค.
๐ ๊ฐ์
@RestController public class UserV2Controller { private SmsExternalService smsExternalService; @PostMapping(..) public ResponseEntity<SingleResult<Dto>> userAuthPhoneNumber(@RequestBody @Valid SmsSendReqDto smsSendReqDto) { ... smsExternalService = smsExternalFactory.getType(smsSendReqDto.getType()); //์์ฒญํ ํ์ ์ ํด๋นํ๋ ๊ตฌํ์ฒด ๋ฐํ } }
- ์์ฒ๋ผ ์์ฒญํ ํ์ ์ ๋ฐ๋ฅธ ๊ตฌํ์ฒด ๋ฐํ์ ๋ค๋ฅธ ํด๋์ค(SmsExternalFactory)์์ ์ฒ๋ฆฌํ๊ฒ ํ์ฌ ์๋ง์ ๊ตฌํ์ฒด๋ฅผ ๋ฐํํด์ฃผ๋๋ก ๊ฐ์ ํ ์ ์๋ค.
- ์๋ก์ด SMS์ ์ก ๊ตฌํ์ฒด๊ฐ ์ถ๊ฐ๋๋ค๊ณ ํ๋๋ผ๋(ํ์ฅ์ ์ด๋ ค์์) SMS์ ์ก์ ํธ์ถํ๋ UserV2Controller ์ชฝ์์๋ ์์ ์์ด(๋ณ๊ฒฝ์๋ ๋ซํ ์์) SmsExternalService ํ์ฅ์ด ๊ฐ๋ฅํ๋ค. ๋ฌผ๋ก SmsExternalFactory ํด๋์ค์ ์์กด์ฑ ์ฃผ์ ์ฝ๋์์๋ ์ถ๊ฐ๊ฐ ๋ ๊ฒ์ด๋ค. (์ด๋๊ฐ์์๋ ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํ๋๋ฐ, ๊ทธ ์ด๋๊ฐ๊ฐ Controller๋ ์๋๋ ์๊ธฐ๊ฐ ๋จ)
๐ ์ถ๊ฐ๋ก ๊ณ ๋ คํ ๋ถ๋ถ
- ์์ ๊ฐ์ ์ฝ๋ ์ํฉ์ ๋ํด ํ์ฅ๋๊ป ๊ณต์ ๋ฅผ ๋๋ ธ๊ณ , ํด๋น ๋ฐฉ์ ์ด์ธ์๋ ์ถ๊ฐ๋ก 2๊ฐ์ง ๋ฐฉ์์ ๋ํด ์๊ฒ ๋์๋ค.
- ์ฐ์ , ์ฐ๋ฆฌ ํ์ฌ์์๋ SMS๋ฅผ 1๊ฐ์ง๋ก๋ง ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ ์ค์ ๋ฐฉ์์ ์ฐ์ ์์๊ฐ ์๋์๋ค. ๊ทธ ๋์ , @Profile ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด ํน์ Service ๊ตฌํ์ฒด๊ฐ ์ด๋ค ํ๊ฒฝ(prod, dev, test ๋ฑ)์์ ์ฌ์ฉ๋ ๊ฒ์ธ์ง ๋ช ์ํด์ค ์ ์๊ณ , @Qualifier ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด Service์ ๊ตฌํ์ฒด๋ฅผ ๋ช ์ํด์ฃผ๋ ๋ฐฉํฅ์ด ๋ ์ฐ์ ์ ์ผ๋ก ๊ณ ๋ ค๋๋ค๊ณ ๋ง์ํด์ฃผ์ จ๋ค.
// @Qualifier() ์ ์ฉ ์์ public class UserV2Controller { private final SmsService smsService; ... // ์์ฑ์ public UserV2Controller(@Qualifier("SmsNaverService") SmsService smsService, ..) { // @Qualifier๋ฅผ ์ฌ์ฉํด ๊ตฌํ์ฒด ๋ช ์ this.smsService = smsService; ... } ... }
- ๋ช ํํ ์ ๋ต์ ์์ง๋ง, ํ์ฌ ์ํฉ์์ ๊ฐ์ฅ ์ ํฉํ ๋ฐฉ์์ผ๋ก ๊ฐ์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
๐์ฐธ๊ณ
https://cheese10yun.github.io/spring-solid-ocp/#null
'Back-end > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SpringBatch] ์ ์ฉ ์์, ๊ตฌ์ฑ ๋ฐฉ์ ๊ฐ๋จ ์ ๋ฆฌ (0) 2022.04.26 JPA์ Cross Join ๊ฐ์ ํ๊ธฐ (0) 2022.04.20 API & Response Body ํํ ๊ตฌ์ฑ (0) 2022.04.13 [SpringBoot] JPA Entity์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ Enum ๋งคํ (0) 2022.04.12 [๋ฒ์ธ] ์๋น์ค ์ด์ฉ์ฝ๊ด ์ฒ๋ฆฌ ๋ฐฉ์ (0) 2022.04.12