์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋””์ž์ธํŒจํ„ด์˜ ์•„๋ฆ„๋‹ค์›€] 3์žฅ. ์„ค๊ณ„ ์›์น™ : ๋‹จ์ผ์ฑ…์ž„์›์น™, ๊ฐœ๋ฐฉํ์‡„ ์›์น™

CS/๋””์ž์ธํŒจํ„ด OOP

by :ํ•ดํ”ผ๋ž˜๋น—๐Ÿพ 2024. 4. 20. 10:43

๋ณธ๋ฌธ

๋‹จ์ผ์ฑ…์ž„์›์น™

ํด๋ž˜์Šค์™€ ๋ชจ๋“ˆ์€ ํ•˜๋‚˜์˜ ์ฑ…์ž„ ๋˜๋Š” ๊ธฐ๋Šฅ๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค

ํด๋ž˜์Šค์— ๋‹จ์ผ ์ฑ…์ž„์ด ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๊ธฐ

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

1. ํด๋ž˜์Šค์— ์ฝ”๋“œ, ํ•จ์ˆ˜ ๋˜๋Š” ์†์„ฑ์ด ๋„ˆ๋ฌด ๋งŽ์•„ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒฝ์šฐ ํด๋ž˜์Šค ๋ถ„ํ• ์„ ๊ณ ๋ คํ•˜์ž

2. ํด๋ž˜์Šค๊ฐ€ ๋„ˆ๋ฌด ๊ณผํ•˜๊ฒŒ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์˜์กดํ•œ๋‹ค๋ฉด, ๋†’์€ ์‘์ง‘๋„์™€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„์˜ ์ฝ”๋“œ ์„ค๊ณ„ ์‚ฌ์ƒ์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํด๋ž˜์Šค ๋ถ„ํ• ์„ ๊ณ ๋ คํ•˜์ž

3. ํด๋ž˜์Šค์— private ๋ฉ”์„œ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๋” ๋งŽ์€ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก public ๋ฉ”์„œ๋„๋กœ ์„ค์ •ํ•˜์—ฌ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค์ž

4. ํด๋ž˜์Šค์˜ ์ด๋ฆ„์„ ๋น„์ฆˆ๋‹ˆ์Šค์ ์œผ๋กœ ์ •ํ™•ํ•˜๊ฒŒ ์ง€์ •ํ•˜๊ธฐ ์–ด๋ ต๊ฑฐ๋‚˜ Manager, Context์ฒ˜๋Ÿผ ์ผ๋ฐ˜์ ์ธ ๋‹จ์–ด๊ฐ€ ์•„๋‹ˆ๋ฉด ํด๋ž˜์Šค์˜ ์ด๋ฆ„์„ ์ •์˜ํ•˜๊ธฐ ์–ด๋ ค์šธ ๊ฒฝ์šฐ, ํด๋ž˜์Šค ์ฑ…์ž„ ์ •์˜๊ฐ€ ์ถฉ๋ถ„ํžˆ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•œ๋‹ค

5. UserInfo ํด๋ž˜์Šค์˜ ๋งŽ์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์ฃผ์†Œ๋ฅผ ์œ„ํ•ด์„œ๋งŒ ๊ตฌํ˜„๋œ ์•ž์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ํด๋ž˜์Šค์˜ ๋งŽ์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ์†์„ฑ ์ค‘ ์ผ๋ถ€์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์†์„ฑ๊ณผ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ„ํ• ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์ž

 

ํด๋ž˜์Šค ๋ถ„ํ• ๋กœ ์ธํ•ด ์ฝ”๋“œ์˜ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์ด ๊ทนํžˆ ๋‚ฎ์•„์งˆ ์ˆ˜ ์žˆ๋‹ค 

 

๊ฐœ๋ฐฉ ํ์‡„ ์›์น™

ํ™•์žฅํ•  ๋•Œ๋Š” ๊ฐœ๋ฐฉ, ์ˆ˜์ •ํ•  ๋•Œ๋Š” ํ์‡„

ํ•ด๋‹น ๋ชจ๋“ˆ๋“ค์ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋ ์ง€, ์–ด๋–ค ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ์„์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ 

๋‹จ๊ธฐ๊ฐ„ ๋‚ด์— ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ, ์ฝ”๋“œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์ด ๋น„๊ต์  ํฐ ํ™•์žฅ, ๊ตฌํ˜„ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค์ง€ ์•Š๋Š” ํ™•์žฅ์— ๋Œ€ํ•ด ํ™•์žฅ ํฌ์ธํŠธ๋ฅผ ์ค€๋น„ํ•˜์ž

 

๋ฐฉ๋ฒ•1)

public class ApplicationContext {
    private AlertRule alertRule;
    private Notification notification;
    private Alert alert;
    
    public void initalizeBeans() {
    	alertRule = new AlertRule(/*๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ๋žต*/); // ์ดˆ๊ธฐํ™” ์ฝ”๋“œ ์ƒ๋žต
        notification = new Notification(/* ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ๋žต*/); // ์ดˆ๊ธฐํ™” ์ฝ”๋“œ ์ƒ๋žต
        alert = new Alert();
        alert.addAlertHandler(new TpsAlerthandler(alertRule, notification));
        alert.addAlertHandler(new ErrorAlertHandler(alertRule, notification));
		// api ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก
    }
    
    public Alert getAlert() { return alert; }
    
    private static final ApplicationContext instance = new ApplicationContext();
    private ApplicationContext() {
    	initalizeBeans();
    }
    
    public static ApplicationContext getInstance() {
    	return instance;
    }
}

public class Demo {
	public static void main(String[] args) {
    	ApiStatInfo apiStatInfo = new ApiStatInfo();
        // ... apiStatInfo ๋ฐ์ดํ„ฐ ๊ฐ’ ์„ค์ • ์ฝ”๋“œ ์ƒ๋žต ..
        ApplicationContext.getInstance().getAlert().check(apiStatInfo);
    }
}
public class ApiStatInfo {
    private String api;
    private long requestCount;
    private long errorCount;
    private long duration;
    private long timeoutCount; // ๋ณ€๊ฒฝ1 : timeoutCount ์†์„ฑ ์ถ”๊ฐ€ 
}

public abstract class AlertHandler {// ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์Œ }
public class TpsAlertHandler extends AlertHandler {//์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์Œ }
public class ErrorHandler extends AlertHandler {// ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์Œ }

// ๋ณ€๊ฒฝ2 : TimeoutAlertHandler ํด๋ž˜์Šค ์ถ”๊ฐ€ 
public class TimeoutAlertHandler extends AlertHandler {//์ฝ”๋“œ ์ƒ๋žต}

 

๋ฐฉ๋ฒ•2)

์ถ”์ƒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋ฅผ ์ฃผ์ž…๋ฐ›์•„์„œ ๋™์ผํ•œ ์ด๋ฆ„์ด์ง€๋งŒ ๋‹ค๋ฅธ ๋™์ž‘์„ ํ•˜๋„๋ก ํ•œ๋‹ค 

 

 

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ