๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ด๋ž€?

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๋งŒ ์กด์žฌํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ํŒจํ„ด

 

 

์™œ ํ•„์š”ํ• ๊นŒ?

 

  • ์ž์ฃผ ์“ฐ์ด๋Š” ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ์ค„์ž„
  • ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์—์„œ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ๊ฐ์ฒด ์ƒ์„ฑ ๋น„์šฉ์ด ํฐ ๊ฒฝ์šฐ ํšจ๊ณผ์ 

์˜ˆ๋ฅผ๋“ค์–ด DB์—ฐ๊ฒฐ ๊ฐ์ฒด, ์„ค์ • ๊ฐ์ฒด ๋“ฑ์€ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค.

๊ทธ๋ž˜์„œ ํ•œ๋ฒˆ๋งŒ ๋งŒ๋“ค๊ณ  ๋‹ค๊ฐ™์ด ์“ฐ์ž = ์‹ฑ๊ธ€ํ†ค

 

 

Spring boot์—์„œ๋Š” ์–ด๋””์— ์“ฐ์ผ๊นŒ?

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“  Bean์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค์ด๋‹ค.

 

์ฝ”๋“œ๋กœ ๋ณด๊ธฐ

public class MySingleton {

    // 1. ์ž๊ธฐ ์ž์‹ ์„ private static์œผ๋กœ ํ•˜๋‚˜ ๋งŒ๋“ ๋‹ค
    private static MySingleton instance = new MySingleton();

    // 2. ์ƒ์„ฑ์ž๋ฅผ private์œผ๋กœ ๋ง‰๋Š”๋‹ค (new ๊ธˆ์ง€)
    private MySingleton() {}

    // 3. ์ •์  ๋ฉ”์„œ๋“œ๋กœ instance๋ฅผ ๊บผ๋‚ด ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค
    public static MySingleton getInstance() {
        return instance;
    }
}

 

์‚ฌ์šฉ๋ฒ•

MySingleton a = MySingleton.getInstance();
MySingleton b = MySingleton.getInstance();

System.out.println(a == b); // true

→ ๋‘˜ ๋‹ค ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ณ  ์žˆ์Œ

 

์Šคํ”„๋ง์—์„  ์ด๊ฑธ ์™œ ์•ˆ๋งŒ๋“ค์–ด๋„ ๋ ๊นŒ?

์Šคํ”„๋ง์€๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  Bean์„ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ๊ด€๋ฆฌํ•ด์ค€๋‹ค.
@Service
public class MyService {
}
@Autowired
private MyService myService1;

@Autowired
private MyService myService2;

→ ์ด ๋‘ ๊ฐœ๋„ ๊ฒฐ๊ตญ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค!

 

์‹ฑ๊ธ€ํ†ค ์ฃผ์˜์ 

์ƒํƒœ(state)๋ฅผ ๊ฐ€์ง€๋ฉด ์•ˆ ๋จ → ์‹ฑ๊ธ€ํ†ค์€ ๊ณต์œ ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ˆ„๊ตฐ๊ฐ€ ๊ฐ’ ๋ฐ”๊พธ๋ฉด ๋‹ค๋ฅธ ๊ณณ์—์„œ๋„ ๋ฐ”๋€œ
๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์‹ ์ค‘ํžˆ ์จ์•ผ ํ•จ (์Šคํ”„๋ง์€ ์ž˜ ์ฒ˜๋ฆฌํ•ด์ฃผ์ง€๋งŒ ์ง์ ‘ ๊ตฌํ˜„ํ•  ๋• ์ฃผ์˜)

 

์‹ค๋ฌด์—์„œ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๋‘๋ฉด ์ข‹์€ ๊ฐ์ฒด๋“ค

  • Service ํด๋ž˜์Šค (@Service) : ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ ๋‹ด๋‹น. ์ƒํƒœ ์—†์ด ์š”์ฒญ๋งŒ ์ฒ˜๋ฆฌํ•จ → ๊ณต์œ ํ•ด๋„ ์•ˆ์ „ํ•จ
  • Repository ํด๋ž˜์Šค (@Repository) : DB ์ ‘๊ทผ ๊ฐ์ฒด๋Š” DB ์ปค๋„ฅ์…˜ ํ’€๋กœ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค๋ฉด ๋‚ญ๋น„
  • ์„ค์ • ๊ด€๋ฆฌ ๊ฐ์ฒด (Config) : ์˜ˆ: AppProperties, JwtProperties ๊ฐ™์€ ์„ค์ •์€ ํ•œ ๋ฒˆ๋งŒ ์ฝ์–ด๋‘๋ฉด ์ถฉ๋ถ„ํ•จ
  • ๊ณตํ†ต ์œ ํ‹ธ์„ฑ ๊ฐ์ฒด : ์•”ํ˜ธํ™”, ๋‚ ์งœ ํฌ๋งท, ํŒŒ์ผ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ๋“ฑ์€ ๋งค๋ฒˆ ์ƒˆ๋กœ ๋งŒ๋“ค ํ•„์š” ์—†์Œ
  • ์บ์‹œ ๋งค๋‹ˆ์ €, Redis ํด๋ผ์ด์–ธํŠธ : ์—ฐ๊ฒฐ ํ•˜๋‚˜ ์—ด์–ด๋‘๊ณ  ์“ฐ๋Š” ๊ตฌ์กฐ → ์‹ฑ๊ธ€ํ†ค ํ•„์ˆ˜!
  • ๋กœ๊ฑฐ(Logger) : ๋กœ๊ทธ๋Š” ๋งค๋ฒˆ ์ƒˆ๋กœ ๋งŒ๋“ค ํ•„์š” ์—†์ด ๊ณต์œ ํ•ด์„œ ์จ์•ผ ๋จ

 

 

๋ฐ˜์‘ํ˜•