1
2
3
4
5
6
7
8
9
10
11
$(document).ready(function () {
    $('a').on('click'function () {
        var $this = $(this); //클릭된 a요소
        var liClass = $this .parent().attr('class'); //a의 부모의 속성중 class 속성의 값을 가져옴
        console.log(liClass);
    }) ;
}) ;
 
//클래스 안에 숫자 가져오는 법
var itemVal = parseInt($(this).attr('class').replace(/[^0-9]/g,''));
 
cs


.NET Framework 1.0 (2002)

C# 1.0 / Visual Basic.NET (7.0)

첫 통합 개발 환경

CLR 및 기본 클래스 라이브러리 파일 포함


.NET Framework 1.1 (2003)

C# 1.1 / Visual Basic.NET (7.1)

Windows Server 2003 -> .NET Framework 1.1 표준 탑재


.NET Framework 2.0 (2005)

ASP.NET 2.0, ADO.NET 2.0, Windows Form 2.0

C# 2.0 / Visual Basic 2005 (8.0)

SQL Server 2005

제네릭 클래스 도입, 리팩토링 기능, 코드 스니펫

Visual Studio Team System (VSTS)

ALM (Application Lifecycle Management, 애플리케이션 수명주기관리)


.NET Framework 3.0 (2006)

코어부분은 .NET Framework 2.0

WPF (Windows Presentation Foundation) : UX (User Experience)

WCF (Windows Communication Foundation) : Messaging Model 기반 분산통신기술 통합

WF (Windows Workflow Foundation)

CardSpace

Windows Vista -> .NET Framework 3.0 기본 탑재


AJAX.NET (2007)

ASP.NET AJAX 1.0 (추가 모듈) : AJAX Web Application 개발 용이

Expression Blend : WPF 어플리케이션 GUI 구축


.NET Framework 3.5 (2007)

WPF의 GUI 설계

Javascript 디버그 기능 및 IntelliSence

ASP.NET AJAX 표준 탑재

.NET Framework 2.0, 3.0, 3.5 선택 가능

C# 3.0 / Visual Basic 2008 (9.0)

LINQ 기능

SQL Server 2008

Windows Server 2008

Visual Studio Team System 2008


.NET Framework 3.5 Service Pack1 (2008)

ASP.NET Dynamic Data

ADO.NET Entity Framework / Data Services

WCF Atom Pub Services

클라이언트 프로파일 (Client Profile)

Visual Studio SDK 1.1 (SP1)

Visual C++ 2008 -> 오피스 리본 스타일 Interface / 고급 GUI 컨트롤


.NET Framework 4.0 (2010)

Base Class Library 개선

MEF (Managed Extensibility Framework) 

: 어플리케이션과 컴포넌트의 재사용성을 높이기 위한 라이브러리
- 확장성이 쉬운 선언과 사용
- 런타임 확장 모니터링

데이터 구조 추가

: 64비트 프로그래밍을 위한 새로운 데이터 구조
- BigInteger & CodePlexNumber
- Tuple, SortedSet

IO 개선
- 메모리 매핑 파일
- 모델 해제 통일

Parallel Computing

TPL (Task Paralleel Library)

: 병렬 처리를 하기 위한 확장 메서드
- 수평적인 병렬 작업의 실행
- 최대 효율을 위한 Stealing 알고리즘 작업
- 상위 레벨을 추상화 (더 이상 스레드의 지식이 필요없다)

PLINQ (Parallel LINQ)

: 선언적인 데이터 병렬처리 (초점은 '무엇이' '어떻게'가 아니다)
- LINQ to Object 를 사용하여 단순한 병렬 처리

CDS (Coordination Data Structures)

- 병렬 처리를 쉽게 하기 위한 공통 구조

.NET Framework Client

WPF (Windows Presentation Foundation)

- 클라이언트 프로파일 (Client Profile)
- 비지니스 컨트롤에 초점
- 실버라이트 시너지 효과
- Windows7 지원 (멀티터치 등)

ASP.NET 4.0

ASP.NET Dynamic Data 개선

ASP.NET MVC

MVC 에 ASP.NET Dynamic Data 지원

- 데이터 중심으로 뷰와 커스텀 컨트롤 만들기 쉽게

CSS, ID, ViewState 컨트롤이 더 좋아진 ASP.NET

확장할 수 있는 캐싱 프레임워크 (Caching Framework)

Velocity

.NET 을 위한 분산 캐싱

ASP.NET 의 Session State Provider

: .NET 이 지원하는 가장 대표적인 분산 캐싱

유연하고, 서로 다른 캐싱 모델

- Partitioned
- Replicated
- Local

Windows Workflow & Communication Foundation

완전 선언적인 서비스

워크플로우 개선

- 프로그래밍 모델 개선
- 새로운 플로우차트 모델 스타일 & 확장 활동 팔레트
- 워크플로우 규칙 통합
- 디자이너 경험 향상
- 상당한 성능 향상
- 상호 메시지

WCF 개선

- Duplex 내구성
- In-process Channel
- WS-Discovery & UDP Channel

ADO.NET Data Services

관계형 데이터 지원

'오프라인' 상태 지원

ASP.NET AJAX

자바스크립트 UI 템플릿과 데이터 바인딩

AJAX 컨트롤 툴킷 개선

DOM Selection, 애니메이션 등


  • IIS가 웹 리소스 요청을 받았을때 처리 하는 방식
  • IIS 5.X 버전과 IIS 6.0 의 버전간 차이가 있다.

  • IIS 5.X
  1. 클라이언트의 모든 HTTP 요청은 IIS의 실행 프로세스인 inetinfo.exe 가 받아 들인다.
    inetinfo는 요청 리소스의 형식을 확인하여 확장자와 매핑되어 있는 ISAPI Extension 모듈로 요청을 전달한다.
    ex)
    asp -> asp.dll,
    aspx, asmx, ashx -> aspnet_isapi.dll,
    txt, 이미지, 스크립트 없는 asp 파일이 요청되면 inetinfo는 외부 모듈 연계없이 직접 처리함.
  2. aspnet_isapi.dll 은 닷넷 웹 리소스를 직접 처리 하지 않고 ASP.NET Worker Process 인 aspnet_wp.exe 로 요청을 전달하는 dispatcher 로서 역할을 수행한다.
  3. aspnet_isapi.dll 과 aspnet_wp.exe 사이의 연결은 프로세스 경계를 넘어 데이터를 전송하기 위한 Win32 메커니즘인 명명 파이프를 통해 이루어 진다.
  4. ASP.NET Worker Process 인 aspnet_wp.exe 는 닷넷공용언어런타임(CLR)을 호스트하며 HTTP 파이프라인을 활성화하여 웹 리소스의 실제 처리를 시작한다.
  5. 각 웹 응용프로그램들은 Worker Process 의 가상 디렉터리로 식별되며, AppDomain 이라는 응용프로그램 도메인에 속하게 된다.
    - 각각의 웹 응용프로그램들은 논리적으로 격리됨을 알 수 있다.
    (응용프로그램 설정(Application, Session, Cache 등)이 공유 되지 않는다.)
    - AppDomain 은 Win32 내의 프로세스 분리와 유사한 방식으로 서로 분리되고, 격리 되어 진다.
    - CLR 은 서로 다른 AppDomain 내에 있는 개체들 사이의 직접적인 호출을 막음으로써 격리를 강제한다.
    (여기서 웹 응용프로그램이라 함은 웹 사이트 혹은 응용프로그램으로 구성된 웹사이트 하위 가상 디렉터리를 의미)
  6. 기본적으로 모든 활성 웹 응용프로그램들은 하나의 Worker Process 에서 호스트한다.
    - 그러나 멀티 CPU를 가진 웹 서버라면 다중 Worker Process 가 실행되도록 할 수 있다. (웹 가든)
    - machine.config 파일의 <processModel> 섹션의 webGarden 속성을 true 로 설정하고 cpuMask 속성을 비트 마스크값으로 지정

  • IIS 6.0
  1. 클라이언트의 모든 HTTP 요청은 커널 모드에서 작동하는 http.sys 드라이버가 받아 들인다.
    - http.sys 리스너는 요청을 적절한 응용프로그램 풀 요청 대기열에 배치한다.
    - 다수의 웹 응용프로그램들이 하나의 응용프로그램 풀을 사용하더라도 풀의 요청 대기열은 오직 하나다.)
  2. 응용프로그램 풀은 worker process 와 가상디렉터리를 구별한다.
    - 요청을 올바른 worker process 로 보내기 위해 http.sys 매퍼가 사용하는 논리 프로세스 경계에 의해 정의되는 구성 개체이다.
  3. WAS 는 메타베이스와 응용프로그램 푸을 관리하는 중추적인 역할을 담당한다. (WAS 는 Worker Process 를 생성, 관리한다.)
    - 이 프로세스는 공유되지 않는 svchost.exe 의 사용자 모드에서 Local System 권한으로 실행된다.
    - 또한 worker process 의 모니터링, 리사이클링 등 관리를 담당한다.
  4. IIS 6.0 의 메타베이스는 XML 기반의 파일로 관리된다.
    - WAS 는 이 메타베이스의 변경사항을 실시간으로 반영한다.
  5. 닷넷 웹 리소스를 처리하기 위한 worker process 는 더 이상 aspnet_wp.exe 가 아닌 w3wp.exe 이다.
    - w3wp.exe 는 응용프로그램 풀 대기열로부터 요청을 읽어온다.
    - w3wp.exe 는 또한 asp 와 같은 닷넷 이전버전의 웹 리소스도 처리한다.
  6. inetinfo.exe 에서 호스트 되었던 aspnet_isapi.dll 은 이제 w3wp 라는 worker process 가 로드한다.
    - aspnet_isapi.dll 은 CLR 을 로드하고 파이프라인을 시작한다.

  • IIS6.0 에서는 WWW 서비스가 더 이상 inetinfo.exe 프로세스에 호스트 되지 않고 별도의 작업자 프로세서인 w3wp.exe 에 의해 처리된다.
    단, 요청 프로세스 설정, FTP, SMTP, NNTP, IIS Admin 과 같은 서비스는 여전히 inetinfo.exe 에서 호스트 한다.

  • 커널 모드(Kernel Mode)와 사용자 모드(User Mode)
    - 커널 모드는 컴퓨터의 모든 메모리에 접근할 수 있고 다른 어플리케이션의 프로세스로부터 격리된 메모리 공간에서 실행된다.
    - 커널 모드 구성요소만이 하드웨어와 같은 리소스에 직접 접근이 가능하다.
    - 반면 어플리케이션과 이를 지원하는 서브시스템은 사용자 모드에서 실행 된다.
      사용자 모드의 프로세스는 직접 자원에 접근할 수 없으며 자원에 대한 접근 요구가 커널 모드 구성 요소에 의해 허가되어야 한다.

  • 정의
    - 로드밸런싱(Load Balancing)이란 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도저하등을 고려하여 적절히 분산처리하여 해결해 주는 서비스.
  • 서비스 방식
    - 네트워크 상단의 L 4스위치 가상서버가 존재하여 서버로 들어오는 패킷을 리얼 서버로 균일하게 트래픽을 부하 분산시킨다.
    - 만약 리얼 서버 중 정상적으로 작동하지 않는 경우가 발생하면 이를 감지하여 정상적으로 작동하는 서버로 부하 분산시킨다.
  • 장점
    - 고가의 서버로 확장하지 않고 저렴한 비용으로 다수의 서버를 증설하여 경제적으로 비용절감 할 수 있다.
    - 대량의 트래픽으로 1대의 서버로 집중적인 부하율이 높아지면 L4 스위치가 이를 감지하여 합리적으로 부하분산 처리 할 수 있다.
    - 1대의 서버 장애가 발생하여도 서비스 중단없이 다른 서버로 적절히 자동으로 분배하여 서비스가 계속 운용가능하게 할 수 있다.
    - 추후 사용량이 많아 서버 확장으로 서비스 중단없이 서버 증설이 가능하다.

  • LINQ 설명
    • Language Integrated Query
    • 데이터에 대해 질문하고, 그 답에 해당하는 데이터를 찾는 것
    • 데이터 검색에 편리함
    • Example
      • 1
        2
        3
        4
        5
        var women =
                from    woman in womanList     // wamanList에서 (여자인가?)
                where    woman.age > 20        // 20세가 넘는 성인을 (성인인가?)
                orderby    woman.age            // 나이 순으로 정렬하여 (나이가 어린가?)
                select    woman;                // 배열 데이터로 추출한다.
        cs
  • from
    • 데이터를 검색하기 위해 검색할 범위를 지정해주는 역할
    • LINQ 쿼리식 (Query Expression) 은 반드시 from 으로 시작해야함
    • foreach 문과 거의 비슷
    • foreach ( var element in elementList ) == from element in elementList
      - foreach 문과 from 절의 element 변수의 차이점
        - foreach의 element 변수에는 실제로 elementList의 데이터가 저장된다.
        하지만 LINQ에서는 element 변수에 데이터가 저장되지 않고,
        단순히 'elementList에 존재하는 요소'라는 의미로만 사용된다.
    • from 에서 사용가능한 타입은 IEnumerable<T> 인터페이스를 상속하는 타입
      C#에서의 배열이나 컬렉션 등은 모두 IEnumerable<T>을 상속하기 때문에
      배열이나 컬렉션 타입이라면 전부 사용가능하다.
  • where
    • from으로 검색 범위를 지정하였다면, where은 범위 내에서 데이터를 걸러내는 필터 역할
  • orderby
    • orderby는 걸러진 데이터를 정렬해주는 연산자
    • 기본값으로 오름차순 정렬을 사용함
    • 가독성을 위해서 오름차순과 내림차순을 명시해주는 것이 좋다.
    • Example
      • 1
        2
        orderby woman.age ascending //오름차순
        orderby woman.age descending //내림차순
        cs
  • select
    • 최종적으로 검색된 데이터를 추출하는 역할
    • 추출된 데이터의 타입은 select절에 지정한 변수의 타입으로 결정됨
    • 무명형식(타입)으로 만들어서 추출할 수도 있다.
    • Example
      • 1
        2
        3
        4
        5
        select woman;        //Woman형 배열 데이터 추출
        select woman.name;    //String형 name 배열 데이터 추출
        select new { title = "성인여자", name = woman.name };
        //무명 타입의 배열데이터 추출
         
        cs
  • 링크를 사용하기 위해서는 System.Linq 네임스페이스를 추가해주어야 함

Example
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Woman
{
    public string name {get; set;}
    public int age {get; set;}
}
 
class MainApp
{
    static void Main(string[] args)
    {
        Woman[] womanList =
        {
            new Woman() { name = "A", age = 24 },
            new Woman() { name = "B", age = 20 },
            new Woman() { name = "C", age = 32 },
            new Woman() { name = "D", age = 20 },
        };
 
        var Women = from woman in womanList
                    where woman.age > 20
                    orderby woman.age ascending
                    slect new {
                        title = "검색 결과",
                        name = woman.name
                    };
 
        foreach(var woman in Women)
        {
            Console.WriteLine("{0}: {1}", woman.title, woman.name);
        }
    }
}
 
cs

숫자 범위에 Swtich문 사용해서 날짜 주차 계산하는 법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
protected void CalDate()
{
    DateTime CalEndDate = DateTime.Now;
    DateTime CalStartDate = Convert.ToDateTime("2015-12-01 09:00:00");
    double DtDiff = (CalEndDate - CalStartDate).TotalDays;
    int DtRange = (Convert.ToInt32(Math.Truncate(DtDiff))) / 7;
    switch (DtRange)
    {
        case 0:     //1-6
            result3 = "1주차입니다.";
            break;
        case 1:     //7-13
            result3 = "2주차입니다.";
            break;
        case 2:     //14-20
            result3 = "3주차입니다.";
            break;
        case 3:     //21-27
            result3 = "4주차입니다.";
            break;
        default:    //else
            result3 = "기간이 아닙니다.";
            break;
    }
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
 
namespace TestKMH.Web
{
    public partial class Test002 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            CheckIP();
        }
 
        protected void CheckIP()
        {
            if (Cache == null || Cache["ConIP"== null)
            {
                //Cache가 없을 경우, 접속IP로 Cache 생성
                Cache.Insert("ConIP", Request.UserHostAddress, null, DateTime.Now.AddMinutes(5), TimeSpan.Zero);
                lblMessage.Text = "접속IP 캐시 생성";
            }
            else
            {
                if (Cache["ConIP"].ToString() == Request.UserHostAddress)
                {
                    //10분이내 같은 IP주소로 접속한 경우
                    lblMessage.Text = "5분이내에 같은 IP로 접속했습니다! 5분후에 이용해 주세요.";
                }
                else
                {
                    //다른 IP로 접속했을 경우 Cache에 업데이트
                    Cache.Remove("ConIP");
                    Cache.Insert("ConIP", Request.UserHostAddress, null, DateTime.Now.AddMinutes(5), TimeSpan.Zero);
                    lblMessage.Text = "최신IP로 캐시 업데이트";
                }
            }
        }
    }
}
 
cs


[도구] - [인터넷 옵션] - [보안] 탭 - [사용자 지정 수준] 버튼 클릭



웹 사이트에서 주소 또는 상태 표시줄 없이 창을 열도록 허용 - [사용] 클릭 하면 
팝업창에서 주소와 상태표시줄이 없어짐!



제어판 - 업데이트 설치/제거

위의 경로대로 들어가면 Internet Explorer 11이 있는 것을 확인할 수 있다.


Internet Explorer 11 관련 업데이트 내용을 지우고 재부팅하면

IE가 다운그레이드 된 것을 확인할 수 있다.

  • 지역별 시간계산 구조
  1. DB에 저장된 시간(한국시간)을 GMT 시간 A로 변환
  2. 사용자의 기기브라우저 시간과 GMT 시간차이 계산해서 B를 가져옴 (ex: America/New_York : -04:00)
  3. A + B

ex) 
[DB시간(한국)]              -> GMT+0:00 변환              -> 현지시간(ex:America/New_York)과 GMT+0:00차이 시간(-4:00)을 더함]
[2015-03-12 08:08:42] -> [2015-03-11 23:08:42] -> [2015-03-11 19:08:42]



결과 (ex: 미국 동부 표준시)


+ Recent posts