'2018/01'에 해당되는 글 4건

Programming/Microsoft SQL Server

Select @@LANGUAGE;
sp_defaultlanguage 'SA', 'Korean'; -> SA계정으로 접근시 기본언어 한글

'Programming > Microsoft SQL Server' 카테고리의 다른 글

트랜잭션 (Transaction)  (0) 2018.09.12
분산 트랜잭션 설정  (0) 2018.07.11
[SQL] 기본언어확인및 변경  (0) 2018.01.30
[SQL] 스키마(Schema)  (0) 2018.01.23
[SQL] 다른 이름으로 DB복원  (0) 2017.09.05
동적 쿼리 실행 예시 (sp_executesql)  (0) 2013.08.22
0 0
Programming/Microsoft SQL Server

스키마(Schema)는 DB안의 테이블(Table)이나 프로시저(Procedure)등 DB에 등록된 개체들을 효휼적으로 관리하기위한 논리적인 그룹단위에 해당합니다. 예를 들어 원래는 DB안에서 테이블을 명시할때는 다음과 같은 형식으로 해야 합니다.


[DB명].[스키마명].[개체명]


DB명의 경우 개체를 다루고 있는 DB를 명시하는 것인데 이것은 현재 선택된 DB가 같은 경우 생략이 가능합니다. 스키마명은 대부분 dbo 라는 이름을 많이 볼 수 있는데 이것은 특별한 스키마를 지정하지 않으면 기본적으로 dbo라는 기본스키마가 지정되기 때문입니다.


스키마는 아래와 같은 방법으로 생성합니다.


Create Schema MySchema;


스키마를 생성하고 나면 해당 스키마에 소속된 개체를 생성할 수 있게 됩니다.


Create Table MySchema.MyTable (
    Idx Int,
    Content Char(20)
);


스키마를 삭제하려면 Create대신 Drop구문을 사용하면 됩니다.


Drop Schema MySchema;


다만 이미 등록된 스키마에 소속된 개체가 존재하면 해당 스키마는 삭제할 수 없으며 등록된 스키마는 SSMS의 DB -> Security(보안) -> Schemas(스키마)를 통해 확인할 수 있습니다.

 

Create Schema mySchema;

▶ 스키마 생성

 

Drop Schema mySchema;

▶ 스키마 삭제

 

Alter Schema mySchema Transfer 현재스키마.테이블명;

▶ 기존 테이블의 스키마 변경

'Programming > Microsoft SQL Server' 카테고리의 다른 글

분산 트랜잭션 설정  (0) 2018.07.11
[SQL] 기본언어확인및 변경  (0) 2018.01.30
[SQL] 스키마(Schema)  (0) 2018.01.23
[SQL] 다른 이름으로 DB복원  (0) 2017.09.05
동적 쿼리 실행 예시 (sp_executesql)  (0) 2013.08.22
[SQL] CTE  (0) 2011.03.07
0 0
Programming/.NET

System.Threading.EventWaitHandle을 사용하면 스레드간 통신을 통해 작업을 동기화 할 수 있습니다.

 

static void Main(string[] args)
{
    EventWaitHandle ewh = new EventWaitHandle(false, EventResetMode.ManualReset);

    Thread t1 = new Thread(myThread);
    t1.IsBackground = true;
    t1.Start(ewh);

    ewh.WaitOne();
    ewh.Reset();

    Thread t2 = new Thread(myThread);
    t2.IsBackground = true;
    t2.Start(ewh);

    ewh.WaitOne();

    Console.Read();
}

static void myThread(object o)
{
    Console.WriteLine("thread 실행");

    Thread.Sleep(10000);

    ((EventWaitHandle)o).Set();
}

 

예제에서는 2개의 스레드를 생성하는데 이때 EventWaitHandle을 사용하여 스레드를 시작합니다. EventWaitHandle의 인스턴스를 생성할때는 2개의 인자를 전달할 수 있는데 첫번째인자는 개체상태를 Signal 로 할것인지 Non-Signal 할것인지를 결정합니다. false로 지정하면 개체는 Non-Signal이 됩니다.

 

예제를 보시면 개체가 WaitOne() 메서드를 호출하는데 만약 이때 개체의 상태가 Signal이면 곧바로 처리를 계속할 수 있도록 제어를 반환하지만 Non-Signal상태라면 개체가 Singal이 될때까지 계속 대기상태에 머무르게 됩니다. myThread메서드에서는 마지막에 전달된 EventWaitHandle개체에 Set() 메서드를 호출하는 부분이 있는데 바로 이때 개체의 상태는 Signal로 전환됩니다. 그런 후 개체는 WaitOne() 메서드를 호출한 시점부터 제어가 반환되어 그 이후의 처리를 계속 진행하는 것입니다.

 

EventWaitHandle의 개체를 생성할때 두번째 인자에서 ManualReset을 지정했는데 이렇게 하면 Set() 메서드가 호출되 개체의 상태가 Signal로 바뀌었을때 다시 Non-Signal로 상태가 변하지 않습니다. 상태를 바꾸려면 임의로 Reset() 메서드를 호출해야 합니다. 반면 AutoReset으로 하면 Signal로 상태가 변한 후 다시 자동으로 Non-Signal 상태로 바뀌게 됩니다. 예제에서 첫번째 WaitOne() 메서드를 호출할때 뒤이어 Reset() 메서드를 호출해 개체의 상태를 Non-Signal로 바꾸고 있는데 이렇게 하지 않으면 두번째 WaitOne() 에서 대기상태에 머무르지 않고 바로 처리가 종료될것입니다. 상태전환을 ManualReset으로 했기 때문에 한번 바뀐 EventWaitHandle의 상태가 계속 유지되는 것입니다. 만약 이것을 AutoReset으로 했다면 임의로 Reset()을 호출하는 부분은 생략이 가능할 것입니다.

'Programming > .NET' 카테고리의 다른 글

[C#] Stack / Queue  (0) 2018.02.13
[ASP.NET MVC] 프로젝트 폴더 구성  (0) 2018.02.09
[C#] EventWaitHandle  (0) 2018.01.16
[ASP.NET MVC] 번들(Bundle)  (0) 2018.01.02
[C#] nameof  (0) 2017.12.27
[ASP.NET MVC] AJAX  (0) 2017.12.22
0 0
Programming/.NET

번들(Bundle)은 웹페이지안에 포함된 css나 javascript와 같은 파일들을 정리하고 최적화시킬 수 있도록 합니다. 우선 아래 뷰를 한번 보겠습니다.

 

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <link href="~/Content/bootstrap.css" rel="stylesheet" />
    <link href="~/Content/bootstrap-theme.css" rel="stylesheet" />
    <script src="~/Scripts/jquery-3.1.1.js"></script>
    <script src="~/Scripts/bootstrap.js"></script>
</head>
<body>
    <div> 
    </div>
</body>
</html>

 

이 뷰는 사실상 아무것도 표시하지 않지만 총 4개의 css와 javascript파일을 포함하고 있습니다. 이 파일을 번들을 통해 정리하고 최적화를 수행하려면 우선 해당 파일들(css, js)이 번들을 통해 추가되도록 수정되어야 합니다.

 

첫번째로 NuGet에서 Microsoft.AspNet.Web.Optimization 패키지를 추가하고 App_Start 폴더에 BundleConfig.cs 라는 파일을 아래 내용으로 생성하도록 합니다.

 

namespace WebApplication1
{
    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/*.css"));
            bundles.Add(new ScriptBundle("~/Content/script").Include(
                "~/Scripts/jquery-{version}.js",
                "~/Scripts/bootstrap.js"));
        }
    }
}

 

BundleConfig.cs에서는 namespace를 최상위 경로로 지정해야 하고 RegisterBundles 메서드안에서는 css와 script 2가지의 번들을 생성해야 하는데 각각 StyleBundle과 ScriptBundle을 이용해 생성한 인스턴스를 전달해야 합니다. 인스턴스를 생성할때는 번들에 포함된 파일의 컨텐츠를 요청할 경로를 알려주어야 하는데 이때는 존재하지 않는 임의의 경로를 표시하고 뒤이어 Include 메서드를 통해 각각의 번들에 포함시킬 파일을 지정합니다.

 

특히 Include에서는 css파일을 지정할때 * 문자를 사용해 해당 경로에 있는 모든 css파일이 포함되도록 하였으며 Jquery는 {version}을 통해 포함된 버전의 파일과 일치되는 js파일을 가져오도록 하였습니다.

 

그리고 Global.asax 에서 웹프로그램이 시작될때 BundleConfig에 있는 RegisterBundles 메서드가 호출될 수 있도록 내용을 추가합니다.

 

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RouteConfig.RegisterRoutes(RouteTable.Routes);

    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

 

마지막으로 View 폴더안에 Web.config를 수정하여 System.Web.Optimization 네임스페이스를 추가하면 준비가 완료됩니다.

 

<pages pageBaseType="System.Web.Mvc.WebViewPage">
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.Optimization" />
    <add namespace="WebApplication1" />
  </namespaces>
</pages>

 

이제 뷰에서 기존의 파일을 포함시킨 태그를 제거하고 아래와 같이 @Scripts와 @Styles 헬퍼메서드를 사용해 렌더하도록 하면 이전과 동일하게 파일이 포함되는 것을 확인할 수 있습니다.

 

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/Content/script")
</head>
<body>
    <div> 
    </div>
</body>
</html>

 

이것은 단지 헬퍼메서드를 통해 기존의 하나하나 추가했던 파일들을 한꺼번에 추가할 수 있다는 것에서 그치지 않고 상황에 따라 최적화된 파일들을 자동적으로 포함시켜주는 것이 가능합니다.

 

<system.web>
  <compilation debug="false" targetFramework="4.5.2" />
  <httpRuntime targetFramework="4.5.2" />
</system.web>

 

최상위에 있는 Web.config 설정에서 debug를 false로 설정하고 Ctrl + F5 키를 눌러 디버깅없이 프로그램을 실행하면 이전과는 사뭇 다른 형태로 파일들을 포함시킨다는 것을 알 수 있습니다.

 

<link href="/Content/css?v=gNG_bQJEaazfHnGAjaeU8yu68JJWugHUs94HKNPHNzo1" rel="stylesheet"/>

<script src="/Content/script?v=rDiPocDqq4l1v5wzpbjulXqJqaXM1N6IzVYG_owHFO81"></script>

 

즉 css와 js파일들을 축소하여 용량을 줄이고 단일 형태로 포함시키도록 함으로서 브라우저가 서버에 요청하는 횟수도 감소시키고 있습니다.

'Programming > .NET' 카테고리의 다른 글

[ASP.NET MVC] 프로젝트 폴더 구성  (0) 2018.02.09
[C#] EventWaitHandle  (0) 2018.01.16
[ASP.NET MVC] 번들(Bundle)  (0) 2018.01.02
[C#] nameof  (0) 2017.12.27
[ASP.NET MVC] AJAX  (0) 2017.12.22
[C#] Assembly  (0) 2017.12.13
0 0
1
블로그 이미지

클리엘