/// <summary>
        /// 지정된 부모 메뉴의 자식 메뉴를 생성합니다.
        /// </summary>
        /// <param name="parent">부모 메뉴</param>
        /// <param name="code">새로운 메뉴의 Id</param>
        /// <param name="menuTemplate">새로운 메뉴의 메뉴 템플릿 정보</param>
        /// <returns></returns>
        public Menu CreateMenuOf(Menu parent, string code, MenuTemplate menuTemplate)
        {
            if(parent == null)
                return CreateMenu(menuTemplate, code);

            code.ShouldNotBeWhiteSpace("code");
            Guard.Assert(parent.MenuTemplate.Product == menuTemplate.Product,
                         @"부모 메뉴의 Product 정보와 새로 만들 MenuTemplate의 Product정보가 틀립니다.");

            if(IsDebugEnabled)
                log.Debug(@"새로운 Menu 정보를 생성합니다... parent={0}, code={1}, menuTemplate={2}",
                          parent, code, menuTemplate);

            var menu = new Menu(menuTemplate, code);

            menu.SetParent(parent);
            menu.UpdateNodePosition();

            return Repository<Menu>.SaveOrUpdate(menu);
        }