[๐Ÿ”ฅTroubleShooting - MoodBuddy๐Ÿ”ฅ] Service ๊ณ„์ธต์ด ๋ฌด๊ฒ๋‹ค๋ฉด, Facade ํŒจํ„ด ์–ด๋•Œ?

._mungยท2025๋…„ 3์›” 8์ผ
0

MoodBuddy

๋ชฉ๋ก ๋ณด๊ธฐ
1/8

๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

ํŒ€์› : PM(1) / Design(1) / Frontend(2) / Backend(3)
๊ธฐ๊ฐ„ : 2024.03 ~ 2025.03
๋งํฌ : https://github.com/M-ung/MoodBuddy_Server
์„œ๋น„์Šค ๋‚ด์šฉ : ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ผ๊ธฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ์ • ๋ถ„์„ํ•˜๋Š” ์›น ์„œ๋น„์Šค
์†Œํ†ต : GitHub, Slack, Notion, Discord


๐Ÿ”ฅTroubleShooting๐Ÿ”ฅ

Problems

ํ•ญ์ƒ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ๋“œ๋Š” ๊ณ ๋ฏผ ์ค‘ ํ•˜๋‚˜๊ฐ€ Service ๊ณ„์ธต์— ์—ฌ๋Ÿฌ Repository ๋ฅผ ์ฃผ์ž…ํ•ด์•ผ ํ• ์ง€, ์•„๋‹ˆ๋ฉด ์—ฌ๋Ÿฌ Service ๋ฅผ ์ฃผ์ž…ํ•ด์•ผ ํ• ์ง€ ๊ณ ๋ฏผ์ด ๋“ ๋‹ค.

๐Ÿ“ ์—ฌ๋Ÿฌ Repository ์ฃผ์ž…ํ•œ ๊ฒฝ์šฐ

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class DiaryServiceImpl implements DiaryService {
    private final UserRepository userRepository;
    private final ProfileRepository profileRepository;
    private final ProfileImageRepository profileImageRepository;
    private final DiaryRepository diaryRepository;
    private final DiaryImageRepository diaryImageRepository;
    
}

๐Ÿ“ ์—ฌ๋Ÿฌ Service ์ฃผ์ž…ํ•œ ๊ฒฝ์šฐ

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class DiaryServiceImpl implements DiaryService {
    private final UserService userService;
    private final ProfileService profileService;
    private final ProfileImageService profileImageService;
    private final DiaryImageService diaryImageService;
    
}

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


How

๊ฒฐ๊ตญ์—๋Š” ๋‘ ๋ฐฉ๋ฒ• ์ค‘ ์–ด๋–ค ๊ฑธ ์“ฐ๋“ , ์ฝ”๋“œ๋ฅผ ๋ดค์„ ๋•Œ Service ๊ณ„์ธต์ด ๋„ˆ๋ฌด ๋ฌด๊ฒ๊ฒŒ ๋Š๊ปด์กŒ๋‹ค.

๊ทธ๋ž˜์„œ ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์ฐพ๋Š” ๋„์ค‘ "ํผ์‚ฌ๋“œ ํŒจํ„ด"์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

ํผ์‚ฌ๋“œ ํŒจํ„ด์ด๋ž€?
ํผ์‚ฌ๋“œ ํŒจํ„ด์€ ๋ณต์žกํ•œ ๋‚ด๋ถ€ ์‹œ์Šคํ…œ์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค.

ํผ์‚ฌ๋“œ ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•˜์—ฌ Controller - Facade - Service - Repository ๋กœ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์œ„ "ํผ์‚ฌ๋“œ ํŒจํ„ด" ๋ฐฉ์‹์„ ์ ์šฉํ•ด ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.


Process

๋จผ์ € ํฐ ํ‹€์€ "ํผ์‚ฌ๋“œ ํŒจํ„ด"์„ ๊ฐ€์ ธ์˜ค์ง€๋งŒ ์šฐ๋ฆฌ ํŒ€๋งŒ์˜ ๊ทœ์น™์ด ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทœ์น™์„ ๋งŒ๋“ค์—ˆ๋‹ค.

1. ๊ณ„์ธต ์ˆœ์„œ๋Š” Controller - Facade - Service - Repository ์ˆœ์œผ๋กœ ์œ ์ง€ํ•œ๋‹ค.
2. ํ•˜๋‚˜์˜ Service ๋Š” ์ตœ๋Œ€ํ•œ ์—ญํ• ์— ๋งž๊ฒŒ ํ•˜๋‚˜์˜ Repository๋ฅผ ๊ฐ–๋Š”๋‹ค.
3. ํ•˜๋‚˜์˜ Facade ๋Š” ํ•ด๋‹น ๋„๋ฉ”์ธ ์•ˆ์—์„œ ์—ฌ๋Ÿฌ Service๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

๊ทธ๋Ÿผ ๊ตฌ์กฐ์— ๋งž๊ฒŒ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์™€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ๋‹ค.


Result

๋ฌธ์ œ ํ•ด๊ฒฐ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ๋‹ค.
1. Service ๊ณ„์ธต์˜ ๋ฉ”์„œ๋“œ ์ˆ˜ 14 โ†’ 7, 50% ๊ฐ์†Œ.
2. Service ๊ณ„์ธต์˜ ์ฝ”๋“œ ๋ผ์ธ ์ˆ˜ 210 โ†’ 76, ์•ฝ 3๋ฐฐ ๊ฐ์†Œ.
3. Controller ๊ณ„์ธต์—์„œ ์—ฌ๋Ÿฌ Service๋ฅผ ์ง์ ‘ ๋‹ค๋ฃจ์ง€ ์•Š๊ณ , ํ•˜๋‚˜์˜ Facade๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ๊ฐ€๋Šฅ.
4. ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด ๊ตฌ์กฐ๋กœ ์œ ์—ฐํ•œ ํ™•์žฅ์„ฑ ์ฆ๊ฐ€.


Thoughts

์ฒ˜์Œ์œผ๋กœ ํผ์‚ฌ๋“œ ํŒจํ„ด์„ ์ ์šฉํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฒฝํ—˜ํ•ด ๋ณด์•˜๋‹ค. ๋งค๋ฒˆ ๊ณ ๋ฏผ์ด์—ˆ๋˜ Service ๊ณ„์ธต์— Service ๋ฅผ ๋งŽ์ด ์ฃผ์ž…ํ• ์ง€, Repository ๋ฅผ ๋งŽ์ด ์ฃผ์ž…ํ• ์ง€๋ฅผ ์ด๋ฒˆ ๊ธฐํšŒ์— ํ•ด์†Œํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
ํผ์‚ฌ๋“œ ํŒจํ„ด์„ ์ ์šฉํ•ด ๊ฐ Service ์™€ ๊ฐ Repository ๋Š” ๊ฐ์ž์˜ ์—ญํ• ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ํผ์‚ฌ๋“œ ์•ˆ์— ์ˆจ๊ธธ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋‚˜๋Š” ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๊ณ ๋ฏผ์„ ํ•˜๋Š” ๊ฑด '์–ด๋–ป๊ฒŒ ํ•ด์•ผ ๊น”๋”ํ• ๊นŒ?' '์–ด๋–ป๊ฒŒ ํ•ด์•ผ ์ค‘๋ณต์„ฑ์ด ์ ์–ด์งˆ๊นŒ?' ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ ํผ์‚ฌ๋“œ ํŒจํ„ด ๊ฒฝํ—˜ ๋•๋ถ„์— ์ด ๊ณ ๋ฏผ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๊ด€์ ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ๋˜์—ˆ๋‹ค.


profile
๐Ÿ’ป ๐Ÿ’ป ๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด