๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿš€ ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 6๊ธฐ ์ง€์› ๊ธฐ๋ก

[ํ”„๋ฆฌ์ฝ”์Šค] ํ”„๋ฆฌ์ฝ”์Šค 4์ฃผ์ฐจ ํ›„๊ธฐ (ํฌ๋ฆฌ์Šค๋งˆ์Šค ํ”„๋กœ๋ชจ์…˜ ๐ŸŽ„)

by dev_writer 2023. 11. 17.

์–ด๋Š๋ง ํ”„๋ฆฌ์ฝ”์Šค์˜ ๋งˆ์ง€๋ง‰ ๋ฏธ์…˜์ด ์ฃผ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ฝ”์ˆ˜ํƒ€ (์ฝ”์น˜์™€์˜ ์ˆ˜๋‹คํƒ€์ž„) ๋•Œ ํฌ๋น„ ๋‹˜๊ณผ ์ฝ”์น˜๋‹˜๋“ค๊ป˜์„œ ๋ง์”€ํ•ด ์ฃผ์…จ๋“ฏ์ด ์‰ฝ๊ฒŒ ํ’€๋ฆฌ์ง€๋Š” ์•Š์•˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ์˜ ์˜๋ฏธ๋ฅผ ๋‹ค์‹œ ์ƒ๊ฐํ•˜์ž. (ํ˜„์‹ค ์„ธ๊ณ„ ๋ฐ˜์˜ ์ฃผ์˜)

๊ทธ๋™์•ˆ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด ์ฑ…์„ ์ฝ์œผ๋ฉฐ ๋ธ”๋กœ๊ทธ์—๋„ ๊ธฐ๋กํ–ˆ์—ˆ๋Š”๋ฐ์š”, ์ฑ…์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ์ด ๋‹จ์ˆœํ•œ ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ชจ๋ฐฉ์ด ์•„๋‹Œ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ํ˜„์‹ค ์†์—์„œ ์ˆ˜๋™์ ์ธ ์กด์žฌ๊ฐ€ ๊ฐ์ฒด์ง€ํ–ฅ ์„ธ๊ณ„์—์„œ๋Š” ๋Šฅ๋™์ ์ธ ์กด์žฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Š” ๊ฐ์ฒด๋ฅผ ์˜์ธํ™” (anthropomorphism) ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ฆ‰, ์ง„์ •ํ•œ ๊ฐ์ฒด์ง€ํ–ฅ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฃผ์˜ํ•  ์ ์€ ํ˜„์‹ค ์„ธ๊ณ„๋ฅผ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ธฐ๋Š” ํ–‰์œ„๋Š” ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ์ €๋Š” ๋‚ ์งœ (Day)์™€ ์ฃผ๋ฌธ (Orders)๋ฅผ ๋งŒ๋“  ๋‹ค์Œ, ์ด๋“ค์„ ์‹ค์ œ๋กœ ๊ด€๋ฆฌํ•˜๋Š” Customer (๊ณ ๊ฐ) ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋ฉด ์–ด๋–จ๊นŒ๋ผ๋Š” ์ƒ๊ฐ์„ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋‹ˆ ํ• ์ธ ์ •์ฑ…์„ ์ ์šฉํ•  ๋•Œ ๊ฒฐ๊ตญ Customer๋กœ๋ถ€ํ„ฐ Day์™€ Orders๋ฅผ getter ๋ฉ”์„œ๋“œ๋กœ ํ˜ธ์ถœํ•˜๋„๋ก ํ–ˆ๊ณ , Customer๊ฐ€ ์Šค์Šค๋กœ์˜ ๋กœ์ง์„ ๊ฐ€์ง€์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ž‘์„ฑํ–ˆ๋˜ ํ• ์ธ ์ •์ฑ…์€ Day์™€ Orders๋ฅผ ์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ์ฒด๊ฐ€ ๋” ์ž์œจ์  ์ด๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด Customer๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  Day์™€ Orders๋งŒ ํ™œ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

public interface DiscountPolicy {

    int discount(final Day day, final Orders orders);
    boolean canDiscount(final Day day, final Orders orders);
}

 

๋ฐฉ์–ด์  ๋ณต์‚ฌ์— ๋Œ€ํ•œ ๊นŠ์€ ๊ณ ๋ฏผ

๊ทธ๋™์•ˆ์˜ ๋ฏธ์…˜๋“ค์—์„œ๋Š” ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์„ ํ™œ์šฉํ•  ๋•Œ ๋ฐฉ์–ด์  ๋ณต์‚ฌ๋ฅผ ํ™œ์šฉํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋…์— ๋Œ€ํ•ด ์ด๋ฆ„๋งŒ ๋“ค์–ด๋ณธ ์ˆ˜์ค€์ด๊ธฐ๋„ ํ–ˆ๊ณ , ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”์— ์žˆ๋‹ค๋Š” ๋‚ด์šฉ์ด๊ธธ๋ž˜ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ ๋  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ๋งŒ ํ–ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‹ค ์šฐ์—ฐํžˆ ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์—์„œ ์‘๋‹ต DTO๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด getter ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•œ๋‹ค๋ฉด, ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ์•„๋‹๊นŒ?๋ผ๋Š” ์˜๋ฌธ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ”๋กœ ์ด ์  ๋•Œ๋ฌธ์— ๋‚˜์˜จ ๊ฐœ๋…์ด ๋ฐฉ์–ด์  ๋ณต์‚ฌ์ž„์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ๋กœ ๋กœ๋˜ ๋ฏธ์…˜์˜ ๊ฒฝ์šฐ, ๋ฐฉ์–ด์  ๋ณต์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (getNumbers๋กœ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ์— numbers.add๋ฅผ ์‹œํ‚ค๋ฉด ๋ฉ๋‹ˆ๋‹ค.)

public class GoalNumbers {

    private static final String NUMBER_SPLITTER = ",";
    
    private final List<LottoNumber> numbers;
    
    ...
    
    public List<LottoNumber> getNumbers() {
        return numbers;
    }
}

 

์ด์— ๋Œ€ํ•ด ๋Š๋‚€ ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ ํ–ˆ๋˜ ๊ฒƒ์€ ์ถ”ํ›„ ๋‹ค๋ฅธ ๊ธ€์— ์ž‘์„ฑํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. (์ด ๋‚ด์šฉ ๋˜ํ•œ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๋œฏ์–ด๋ณด๋ฉฐ ํƒ๊ตฌํ–ˆ๊ธฐ์—..)

 

๋์—†๋Š” JUnit์˜ ๊ธฐ๋Šฅ

3์ฃผ ์ฐจ๊นŒ์ง€ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋‘๋ ต๊ธฐ๋งŒ ํ–ˆ์—ˆ๋˜ JUnit์— ๋Œ€ํ•ด ์–ด๋Š ์ •๋„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ์š”, EnumSource, CsvSource ๋“ฑ ์œ ์šฉํ•œ ๊ฒƒ๋“ค์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒƒ์„ ๋ณด๋ฉด ๋ฐฐ์›€์—๋Š” ๋์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

EnumSource

EnumSource๋Š” Enum์ด ๊ฐ€์ง„ ๊ฐ’๋“ค๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆด ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ParameterizedTest(name = "{0} ๋ฉ”๋‰ด ๊ธฐ๋ณธ ์ƒ์„ฑ ์‹œ 1๊ฐœ์”ฉ ์ €์žฅ๋˜๋Š”๊ฐ€?")
@EnumSource(value = Menu.class)
@DisplayName("๋ฉ”๋‰ด ์ด๋ฆ„๋งŒ์œผ๋กœ Order ์ƒ์„ฑ")
void createOrderWithNameTest(final Menu menu) {
    // given
    Order order = Order.withMenu(menu);
    int expectedSize = 1;

    // when
    String menuName = order.getName();
    int orderSize = order.getSize();
            
    // then
    assertAll(
            () -> assertThat(menu.isNameSame(menuName)).isTrue(),
            () -> assertThat(orderSize).isEqualTo(expectedSize)
    );
 }
 
 // Menu
 public enum Menu {

    SOUP(APPETIZER, "์–‘์†ก์ด์ˆ˜ํ”„", 6000),
    TAPAS(APPETIZER, "ํƒ€ํŒŒ์Šค", 5500),
    SALAD(APPETIZER, "์‹œ์ €์ƒ๋Ÿฌ๋“œ", 8000),
    STEAK(MAIN_DISH, "ํ‹ฐ๋ณธ์Šคํ…Œ์ดํฌ", 55_000),
    BARBEQUE(MAIN_DISH, "๋ฐ”๋น„ํ๋ฆฝ", 54_000),
    SEA_PASTA(MAIN_DISH, "ํ•ด์‚ฐ๋ฌผํŒŒ์Šคํƒ€", 35_000),
    CHRISTMAS_PASTA(MAIN_DISH, "ํฌ๋ฆฌ์Šค๋งˆ์ŠคํŒŒ์Šคํƒ€", 25_000),
    CAKE(DESSERT, "์ดˆ์ฝ”์ผ€์ดํฌ", 15_000),
    ICECREAM(DESSERT, "์•„์ด์Šคํฌ๋ฆผ", 5000),
    COKE(DRINK, "์ œ๋กœ์ฝœ๋ผ", 3000),
    WINE(DRINK, "๋ ˆ๋“œ์™€์ธ", 60_000),
    CHAMPAGNE(DRINK, "์ƒดํŽ˜์ธ", 25_000);
    
    ...
}

 

์œ„ ์ฝ”๋“œ๋Š” Menu ํƒ€์ž…์œผ๋กœ Order๋ฅผ ๋งŒ๋“ค์—ˆ์„ ์‹œ, ์ •์ƒ์ ์œผ๋กœ 1๊ฐœ์”ฉ ์ƒ์„ฑ๋˜๋Š”์ง€ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ SOUP ~ CHAMPAGNE๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๋„ฃ์–ด๋ณด๋ฉฐ ํ…Œ์ŠคํŠธํ•˜๋„๋ก ํ•ด ์ค๋‹ˆ๋‹ค.

ParameterizedTest์˜ name ์†์„ฑ

ParameterizedTest์— name ์†์„ฑ์„ ๋ถ™์ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํ…Œ์ŠคํŠธ๋ฅผ ๋” ์ง๊ด€์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ž ์œ„์น˜์— ๋”ฐ๋ผ {0}, {1}์„ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

CsvSource

CsvSource๋Š” ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

private static final String MENU_ORDERS =
    """
    ์–‘์†ก์ด์ˆ˜ํ”„, 2, SOUP
    ํƒ€ํŒŒ์Šค, 2, TAPAS
    ์‹œ์ €์ƒ๋Ÿฌ๋“œ, 2, SALAD
    ...
    """;

@ParameterizedTest(name = "{0} {1}๊ฐœ ์ฃผ๋ฌธ ์ƒ์„ฑ์ด ๋ฌธ์ œ ์—†๋Š”๊ฐ€?")
@CsvSource(textBlock = MENU_ORDERS)
@DisplayName("์ •์ƒ Order ์ƒ์„ฑ")
void validOrderTest(final String nameInput, final String sizeInput) {
    // given
    String orderInput = nameInput + "-" + sizeInput;

    // when & then
    assertDoesNotThrow(() -> Order.from(orderInput));
}

 

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

 

์•„๋ž˜๋Š” textBlock์— ๊ด€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. (delimiter, delimiterString์œผ๋กœ ๊ตฌ๋ถ„์ž๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

 

๋˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ value๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

@ParameterizedTest(name = "{0}์›์ด ๋“ค์–ด์˜ฌ ๋•Œ {1} Badge์ธ๊ฐ€?")
@CsvSource({
        "3000, NOT_THING",
        "6000, STAR",
        "12000, TREE",
        "25000, SANTA"
})
@DisplayName("๊ฐ ์ž…๋ ฅ๊ฐ’์— ๋”ฐ๋ฅธ ์ ์ ˆํ•œ Badge ์กฐํšŒ")
void findEachBadgeByCostTest(final int cost, final Badge badge) {
    // when
    Badge findBadge = Badge.findByCost(cost);

    // then
    assertThat(findBadge).isEqualTo(badge);
}

assertAll

assertAll์€ ์œ„์˜ EnumSource์—์„œ๋„ ์ž‘์„ฑํ–ˆ๋“ฏ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ assert๋ฅผ ํ•จ๊ป˜ ํ•ด์•ผ ํ•  ๋•Œ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ฒฐ๋ก 

ํ”„๋ฆฌ์ฝ”์Šค๋ฅผ ํ•˜๋ฉด์„œ ๋†“์ณค๋˜ ์ ๋“ค์ด ์กฐ๊ธˆ ์žˆ์–ด ์•„์‰ฝ๊ธฐ๋„ ํ•˜์ง€๋งŒ (๋กœ๋˜ ๋ฏธ์…˜์—์„œ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋Š” 2๋“ฑ๋งŒ ๊ด€์—ฌํ•ด์•ผ ํ•˜์ง€๋งŒ ๊ทธ๋Ÿฌ์ง€ ๋ชปํ•œ ์ , static import๋ฅผ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋“ค์—๋„ ํ•œ ์  ๋“ฑ), ์ „์ฒด์ ์œผ๋กœ ๋ณด๋ฉด ์ด ๋‹น์‹œ์—๋Š” ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์ตœ์„ ์„ ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (๋†“์นœ ์ ๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ๊ทธ๋ž˜๋„ ๊ธฐ๋ณธ์œผ๋กœ ์ฃผ์–ด์ง„ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋“ค์€ ๋ชจ๋‘ ์„ฑ๊ณตํ–ˆ์œผ๋‹ˆ ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์œ„์•ˆ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค..)

 

ํ”„๋ฆฌ์ฝ”์Šค๋ฅผ 4์ฃผ ๊ฐ„ ํ•˜๋ฉด์„œ ์ง„์งœ ํ•™๊ต ์ˆ˜์—…์„ ๋‹ค ๋ฒ„๋ฆฌ๊ณ , ์ˆ˜์—… ์‹œ๊ฐ„์—๋„ ํ”„๋ฆฌ์ฝ”์Šค๋งŒ ํ•˜๋Š” ๋“ฑ ์˜จ์ „ํžˆ ๋ชฐ์ž…์„ ํ–ˆ๋Š”๋ฐ์š”. (๋งค์ผ 4์‹œ์— ์ž” ๊ฒƒ์€ ๋น„๋ฐ€) ๊ทธ๋งŒํผ ์ข‹์€ ๊ฒฐ๊ณผ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ์—๋„ ํƒˆ๋ฝ๋  ํ™•๋ฅ ์ด ํ›จ์”ฌ ๋†’์€ ๊ฒƒ์€ ๋‹น์—ฐํ•˜๋‹ˆ, ์ฐจ์ธฐ ์šฐํ…Œ์ฝ”์— ํƒˆ๋ฝํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ฌธ์ œ์—†์ด ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์„์ง€์— ๋Œ€ํ•ด์„œ๋„ ๊ณ ๋ฏผํ•ด ๋ณผ ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

 

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

์ œ์ถœ๋œ ํ”„๋ฆฌ์ฝ”์Šค ์ „์ฒด ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

1์ฐจ ์„ ๋ฐœ๊นŒ์ง€ ํ•  ๊ฒƒ

ํ˜น์‹œ ๋ชจ๋ฅผ 1์ฐจ ์„ ๋ฐœ ๋Œ€์ƒ ํ•ฉ๊ฒฉ์„ ๊ธฐ๋Œ€ํ•˜๋ฉด์„œ ํ˜น์‹œ ๋ชจ๋ฅผ ์ตœ์ข… ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์— ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด, 12.11 (์›”)๊นŒ์ง€ ๋‚จ์€ ๊ธฐ๊ฐ„ ๋™์•ˆ ์šฐํ…Œ์ฝ”์˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋“ค (์žํŒ๊ธฐ, ํŽ˜์–ด๋งค์นญ, ์ ์‹ฌ ๋ฉ”๋‰ด ์ถ”์ฒœ, ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„)์„ ํ’€์–ด๋ณด๋ฉฐ ์—ฐ์Šตํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

 

์‹ค์ œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์ฒ˜๋Ÿผ 5์‹œ๊ฐ„์„ ์žก์œผ๋ฉฐ ์ง„ํ–‰ํ•ด ๋ณด๊ณ , ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์‹œ๊ฐ„์ด ๋‚จ์„ ๊ฒฝ์šฐ์— ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. (1์ฐจ ๋ชฉํ‘œ๋Š” ๊ตฌํ˜„์ด ์˜จ์ „ํžˆ ๋˜๋„๋ก, ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ 15๋ผ์ธ์„ ๋„˜์ง€ ์•Š๋„๋ก ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

 

12์›” 11์ผ์— ํ•ฉ๊ฒฉ์ด ๋˜๋“  ๋ถˆํ•ฉ๊ฒฉ์ด ๋˜๋“  ๋ธ”๋กœ๊ทธ์— ๊ธฐ๋กํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

์ œ์ถœ ๋งํฌ

์ œ์ถœ ๋งํฌ๋Š” ์ฒ˜์Œ์—๋Š” private ์ €์žฅ์†Œ๋กœ ์ œํ•œ๋˜์—ˆ์ง€๋งŒ ์ด์ œ public์œผ๋กœ ์ˆ˜์ •ํ•ด๋„ ๋˜์–ด์„œ ๋งํฌ ๋‚จ๊ธฐ๊ฒ ์Šต๋‹ˆ๋‹ค!

์ด๊ณณ์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.