728x90

1. .NET Framework란?

  • 정의:
    마이크로소프트가 개발한 소프트웨어 개발 플랫폼으로, 윈도우 응용 프로그램, 웹 애플리케이션, 웹 서비스를 제작하기 위한 풍부한 라이브러리와 도구를 제공.
  • ASP.NET:
    .NET Framework의 일부로, 동적 웹 애플리케이션을 제작하기 위한 웹 기술.

2. .NET Framework의 주요 구성 요소

a. 공용 언어 런타임 (Common Language Runtime, CLR)

  • 역할:
    .NET 언어로 작성된 프로그램의 실행 환경 제공.
    메모리 관리, 보안, 오류 처리 등과 같은 작업을 자동화하여 프로그래밍을 단순화.
  • 주요 기능:
    1. 코드 관리:
      • CLR에서 실행되는 코드는 **관리 코드(Managed Code)**라고 불림.
      • 메모리 관리, 가비지 컬렉션, 스레드 관리 등 자동 처리.
    2. 언어 독립성:
      • 다양한 프로그래밍 언어(C#, VB.NET 등)를 지원하고 상호 운용 가능.
    3. 보안 관리:
      • 응용 프로그램 실행 시 보안 검사 수행.

b. .NET Framework 클래스 라이브러리 (.NET Framework Class Library, FCL)

  • 정의:
    응용 프로그램 개발에 필요한 다양한 기능(입출력, 데이터 처리, 네트워크 통신 등)을 미리 패키지화한 표준 라이브러리 집합.
  • 구성 요소:
    1. ASP.NET:
      • 웹 애플리케이션 및 웹 서비스 개발을 위한 기능 포함.
      • XML 웹 서비스 기술과 통합.
    2. Windows Forms:
      • 윈도우 기반 응용 프로그램 제작에 사용되는 도구 제공.
    3. Data and XML:
      • ADO.NET을 통해 데이터베이스와의 연결 및 XML 데이터 처리를 지원.
    4. Base Class Library (BCL):
      • 문자열 처리, 파일 입출력, 컬렉션, 네트워크 통신 등의 기본 기능 제공.

3. .NET Framework의 특징

  1. 언어 상호 운용성:
    • 다양한 언어(C#, VB.NET, F# 등) 간 상호 호환 가능.
  2. 플랫폼 통합:
    • 윈도우 운영 체제와 긴밀히 통합되어 강력한 API 제공.
  3. 개발 생산성:
    • 풍부한 클래스 라이브러리와 자동화된 환경으로 생산성 향상.
  4. 보안:
    • CLR의 보안 기능으로 실행 중 코드의 무결성과 안전성 보장.
  5. 유연성:
    • 웹, 데스크톱, 모바일, 클라우드 등 다양한 응용 프로그램 개발 가능.

4. ASP.NET의 역할

  • 정의:
    동적 웹 애플리케이션과 XML 웹 서비스를 개발하기 위한 웹 기술.
  • 주요 기능:
    • HTTP 요청 처리.
    • 서버 측 데이터 관리 및 처리.
    • 사용자 인증 및 권한 관리.
    • AJAX 및 JavaScript 통합 지원.
    • 다양한 웹 페이지 제작 지원(Web Forms, MVC).

5. .NET Framework의 작동 원리

  1. 코드 작성:
    • 개발자는 C#, VB.NET 등의 언어로 소스 코드를 작성.
  2. 컴파일:
    • 작성된 코드는 **CIL(Common Intermediate Language)**로 변환.
  3. 실행:
    • CIL 코드는 CLR에서 실행되며, 운영 체제에 맞는 기계어로 JIT(Just-In-Time) 컴파일 후 실행.

6. .NET Framework의 주요 용도

  1. 웹 개발:
    • ASP.NET을 사용하여 웹사이트와 웹 서비스 개발.
  2. 데스크톱 응용 프로그램:
    • Windows Forms 또는 WPF(Windows Presentation Foundation)를 활용.
  3. 데이터베이스 응용 프로그램:
    • ADO.NET으로 데이터베이스와 연동.
  4. 네트워크 응용 프로그램:
    • HTTP, FTP, SMTP 등 네트워크 통신 처리.

7. .NET Framework와 .NET Core 비교

특징.NET Framework.NET Core

플랫폼 지원 윈도우 전용 크로스 플랫폼(윈도우, 리눅스, macOS)
성능 비교적 낮음 성능 최적화
개발 용도 기존의 데스크톱 및 웹 애플리케이션 현대적 웹, 클라우드, IoT 애플리케이션
오픈소스 비공개 완전한 오픈소스

8. 요약

  • .NET Framework는 마이크로소프트의 강력한 개발 플랫폼으로, 웹, 데스크톱, 데이터베이스 응용 프로그램을 쉽게 개발할 수 있도록 지원.
  • 핵심 구성 요소는 **공용 언어 런타임(CLR)**과 클래스 라이브러리(FCL).
  • ASP.NET은 웹 애플리케이션 개발을 위한 강력한 도구.
  • 현대 개발 요구에 맞춰 .NET Core와 통합된 .NET 5 이상이 크로스 플랫폼 개발에 적합.
728x90
728x90

1. 정의

  • 소프트웨어 아키텍처는 소프트웨어 시스템의 구조적 설계를 정의하는 과정으로, 고객의 요구 사항을 충족하기 위한 구체적이고 실용적인 설계를 제공합니다.
  • 소프트웨어 아키텍처는 시스템의 목표와 구현 세부 사항 사이의 연결을 형성하여 성능, 보안, 확장성 등 품질 특성을 최적화하는 것을 목표로 합니다.

2. 소프트웨어 아키텍처의 중요성

  1. 복잡한 요구 사항 처리:
    • 현대 소프트웨어는 다른 시스템, 데이터베이스, 클라우드 환경 등과 상호작용하며 복잡성이 증가.
    • 적절한 아키텍처 없이는 배포, 운영, 유지 관리가 어려움.
  2. TCO(총 소유 비용) 절감:
    • 유지보수 비용이 배포 이후 대부분을 차지.
    • 잘 설계된 소프트웨어는 업데이트 및 문제 해결 비용과 시간을 줄여 TCO를 최소화.
  3. 유지보수성과 확장성:
    • 시간이 지나도 새로운 요구 사항에 대응할 수 있는 유연성을 보장.
  4. 품질 특성 확보:
    • 보안, 안정성, 성능 등 사용자와 비즈니스 요구 사항 충족.

3. 소프트웨어 아키텍처의 역할

  1. 요구 사항 수집 및 분석:
    • 고객의 비즈니스, 사용자, 시스템 요구 사항을 파악.
    • 상충되는 요구 사항 간의 균형을 고려.
  2. 시스템 구조 설계:
    • 모듈화된 구성 요소 정의.
    • 계층화 설계(n-계층, 클라이언트/서버, 서비스 지향 아키텍처 등).
  3. 배포 및 운영 계획:
    • 클라우드, 데스크톱, 모바일 등 다양한 환경에서의 배포 방식 설계.
    • 유지 관리와 확장 가능성을 고려.
  4. 의사결정 기록 및 문서화:
    • 설계 과정에서의 주요 결정 사항과 이유 기록.
    • 개발, 테스트, 관리 팀 간의 정보 공유.

4. 소프트웨어 아키텍처 설계 과정

  1. 요구 사항 분석:
    • 비즈니스 목표, 사용자 경험, 기술적 제약 사항 확인.
    • 다이어그램, 프로세스 순서도 등을 활용해 요구 사항 정의.
  2. 시나리오 기반 설계:
    • 주요 사용 사례와 시나리오 식별.
    • 소프트웨어가 충족해야 할 기본 요구 사항과 제약 조건 정의.
  3. 아키텍처 스타일 선택:
    • 적합한 설계 패턴 및 스타일 결정.
      • 예: 계층화(n-계층), 클라이언트/서버, 마이크로서비스.
  4. 반복적 접근:
    • 초기 설계를 프로토타입으로 테스트하고 피드백 수집.
    • 반복 과정을 통해 설계를 개선.
  5. 설계 문서화 및 구현 지원:
    • 설계 문서와 모델 작성.
    • 개발 및 테스트 팀이 설계를 구현할 수 있도록 지원.

5. 소프트웨어 아키텍처의 품질 특성

  1. 보안:
    • 악의적 공격과 실수로부터 시스템 보호.
    • 데이터 암호화, 인증, 권한 관리 등 고려.
  2. 성능:
    • 요구되는 응답 시간과 처리량 보장.
  3. 확장성:
    • 시스템이 성장하거나 변화하는 요구 사항에 대응할 수 있도록 설계.
  4. 유지보수성:
    • 문제가 발생했을 때 신속히 수정 가능.
    • 코드와 아키텍처의 변경 용이성 보장.
  5. 상호 운용성:
    • 기존 시스템 및 외부 서비스와의 통합.

6. 주요 설계 패턴

  1. 계층화 아키텍처:
    • 프레젠테이션, 비즈니스 로직, 데이터 액세스를 분리하여 유지보수 용이.
  2. 마이크로서비스:
    • 독립적인 서비스 단위로 구성되어 확장성과 배포 유연성 제공.
  3. 클라이언트/서버:
    • 서버에서 데이터와 로직 처리, 클라이언트는 사용자 인터페이스 제공.
  4. 서비스 지향 아키텍처(SOA):
    • 서비스 간 통합과 재사용성을 강조.

7. 소프트웨어 설계자의 필수 기술

  1. 소프트 스킬:
    • 요구 사항 수집 및 고객과의 협업.
    • 팀 간 조율과 커뮤니케이션 능력.
  2. 하드 스킬:
    • 최신 소프트웨어 기술과 트렌드 이해.
    • 설계 패턴, 통신 프로토콜, 보안 원칙에 대한 지식.
    • 네트워킹, 운영 체제 및 하드웨어에 대한 기본 이해.
  3. 비전과 창의력:
    • 고객의 현재 및 미래 요구 사항을 충족하는 솔루션 시각화.
    • 복잡한 시스템의 상호작용을 구조화하는 직관력.

8. 소프트웨어 아키텍처 설계의 이점

  • 다양한 이해 관계자의 요구를 충족.
  • 변경에 대비한 유연성과 확장성 확보.
  • 품질 특성을 균형 있게 충족.
  • 배포와 유지보수의 간소화.

9. 요약

소프트웨어 아키텍처는 소프트웨어 개발의 기초 설계 과정으로, 요구 사항을 분석하고 최적의 설계를 통해 성능, 안정성, 보안, 확장성을 극대화하는 작업입니다. 반복적인 설계 프로세스를 통해 요구 사항을 충족시키며, 시스템의 품질 특성을 유지합니다. 이는 소프트웨어의 전체적인 성공TCO 절감에 핵심적인 역할을 합니다.

728x90
728x90

공유기 (Router / IP Sharer)

  1. 기능
    • 인터넷에 접속할 수 있는 IP 주소를 분배하는 장치.
    • **NAT(Network Address Translation)**를 통해 내부 네트워크(로컬 IP)를 외부 네트워크(공용 IP)와 연결.
    • 네트워크 트래픽을 관리하고 라우팅합니다.
  2. 특징
    • 기본 IP 주소: 192.168.x.x 형식.
    • 대부분의 공유기는 WAN 포트LAN 포트를 갖추고 있음.
      • WAN 포트: 인터넷 서비스 공급자(ISP)로부터 입력된 신호를 받아들임.
      • LAN 포트: 내부 네트워크 장치(PC, 스마트폰 등)와 연결.
    • Wi-Fi 기능 포함(무선 공유기).
  3. 사용
    • 인터넷 서비스를 분배하는 핵심 장치로 가정과 소규모 사무실에서 사용.
    • 여러 장치가 인터넷에 연결할 수 있도록 IP 주소를 자동 할당(DHCP 서버).

허브 (Hub)

  1. 기능
    • 네트워크의 중심 장치로, 여러 컴퓨터를 물리적으로 연결.
    • 데이터를 단순히 모든 연결된 장치로 전송(브로드캐스트 방식).
    • 데이터 충돌 가능성이 높음.
  2. 특징
    • IP를 분배하는 기능이 없음. 단순히 연결만 수행.
    • 스위치와 유사하나, 스마트 기능 부족.
    • 속도와 효율성이 낮음.
  3. 사용
    • 오래된 소규모 네트워크 환경에서 사용.
    • 대체로 **스위치(Switch)**로 대체됨.

라우터 (Router)

  1. 기능
    • 네트워크 간 데이터 패킷을 최적의 경로로 라우팅.
    • LAN과 WAN, 또는 LAN과 LAN 간 데이터를 연결.
    • 공유기와 동일한 역할을 하지만 더 고급 네트워크 관리 기능 포함.
  2. 특징
    • **동적 라우팅 프로토콜(Dynamic Routing Protocol)**을 사용하여 네트워크 간 연결 최적화.
    • 보안, 방화벽, VPN 기능 등을 제공.
  3. 사용
    • 기업 네트워크, 데이터 센터, 대규모 네트워크에서 사용.

비교

구분공유기허브라우터

IP 관리 IP 주소 분배 및 네트워크 관리 IP 관리 불가능 네트워크 간 IP 관리 및 라우팅
데이터 처리 NAT를 통해 데이터 전송 브로드캐스트(모든 장치로 데이터 전송) 최적 경로로 데이터 라우팅
성능 효율적, 트래픽 관리 비효율적, 데이터 충돌 가능성 높음 고성능, 보안 및 트래픽 최적화
주요 사용 가정, 소규모 네트워크 소규모 네트워크 대규모 네트워크, 기업 환경
부가 기능 Wi-Fi, DHCP, NAT, 방화벽 없음 고급 라우팅, 보안 프로토콜

결론

  • 공유기: 인터넷 연결 및 IP 분배가 필요한 일반 사용자에게 적합.
  • 허브: 단순 연결이 필요한 오래된 환경에서 제한적으로 사용.
  • 라우터: 네트워크 트래픽 관리와 최적화가 필요한 기업 환경에서 적합.
728x90
728x90

OPC (OLE for Process Control)

  1. OPC란?
    • OPC는 Windows 프로그램이 산업용 하드웨어 장치통신할 수 있도록 지원하는 소프트웨어 인터페이스 표준입니다.
    • 주로 서버/클라이언트 모델로 구현됩니다.
    • 하드웨어 통신 프로토콜(PCL, 센서, RTU 등)을 OPC 프로토콜로 변환하여 데이터를 주고받거나 제어 명령을 실행할 수 있습니다.
  2. OPC 구성 요소
    • OPC 서버:
      • PLC, 센서 등 하드웨어 장치와의 통신을 담당하며, 데이터를 OPC 프로토콜로 변환합니다.
    • OPC 클라이언트:
      • OPC 서버를 사용하여 데이터를 읽거나 제어 명령을 전송합니다.
  3. OPC 활용 예
    • 제조 공장에서 센서 데이터를 수집하고, 그 데이터를 SCADA 시스템으로 보내는 역할.
    • 데이터를 실시간으로 모니터링하거나 기록, 분석하여 자동화 프로세스를 개선.

SCADA (Supervisory Control and Data Acquisition)

  1. SCADA란?
    • 원격 설비 감시제어 시스템으로, 여러 설비를 중앙에서 모니터링하고 관리합니다.
    • 공장의 자동화된 감시 및 제어, 데이터 분석효율적인 에너지 관리를 지원합니다.
  2. SCADA 구성 요소
    • HMI (Human-Machine Interface):
      • 데이터 시각화 및 사용자 인터페이스를 제공합니다.
      • 관리자나 운영자가 공정 상태를 모니터링하고 제어할 수 있도록 지원.
    • 컴퓨터 감시 시스템:
      • 공정 관련 데이터를 수집하고, 하드웨어를 제어하기 위한 명령을 내립니다.
    • RTU (Remote Terminal Unit):
      • 현장 센서와 연결되어 신호를 디지털 데이터로 변환하고, 이를 감시 시스템에 전달합니다.
    • PLC (Programmable Logic Controller):
      • 다양한 자동화된 기기와의 연결 및 제어를 담당합니다. RTU보다 다목적이고 경제적입니다.
    • 통신 시설:
      • 원거리의 RTU, PLC 등과 제어 시스템 간 데이터 통신을 지원합니다.

OPC와 SCADA의 상호 작용

  • OPC는 하드웨어와 SCADA 시스템 간 데이터 교환의 중간 다리 역할을 합니다.
  • SCADA 시스템은 OPC 서버에서 데이터를 가져와 이를 시각화(HMI), 분석, 제어 등에 사용합니다.

활용 사례

  1. 산업 공정 자동화:
    • 제조 라인에서 PLC와 SCADA를 통해 자동화된 작업 수행 및 오류 관리.
  2. 에너지 관리:
    • 발전소, 송배전 시스템에서 데이터 수집 및 원격 제어.
  3. 스마트 빌딩 관리:
    • HVAC 시스템, 조명, 보안 등 다양한 기기 관리.

장점

  • 데이터 중앙화: 모든 데이터를 SCADA 시스템에서 관리.
  • 실시간 모니터링 및 제어: 공정 효율성을 극대화.
  • 다양한 기기와의 호환성: OPC 표준을 통해 여러 제조사의 장치와 통신.

관련 기술

  • 프로토콜: MQTT, Modbus, BACnet.
  • 데이터 시각화 도구: HMI, Grafana.
  • 네트워킹 기술: TCP/IP, Ethernet.
728x90
728x90

1. 상수(Constant)

  • 정의: 값을 절대 변경할 수 없는 메모리 공간.
  • 선언 방법:
const 자료형 상수명 = 값;
  • 예시:
const int a = 30; 
const string greeting = "Hello, World!";

2. 열거 형식(Enum)

  • 정의: 종류는 같지만 서로 다른 값을 가지는 상수의 집합.
  • 기반 자료형: 정수 계열만 사용 가능 (byte, sbyte, short, ushort, int, uint, long, ulong, char). 기본값은 int.

a. 선언 방법

enum 열거형식명 : 기반자료형 { 상수1, 상수2 } 
enum 열거형식명 { 상수1 = 값1, 상수2 = 값2 } 
enum 열거형식명 { 상수1 = 값1, 상수2, 상수3 = 값3 }

b. 예시

enum Color { Red = 1, Green = 2, Blue = 3 } 
enum Status : byte { Active = 1, Inactive = 0 }
 

c. 열거형 활용

  • 값 확인:
Console.WriteLine((int)Color.Red); // 출력: 1
  • 열거형 값을 문자열로 출력:
Console.WriteLine(Color.Green); // 출력: Green

3. Nullable 형식

  • 정의: 값이 없을 수 있는 변수 형식.
  • 선언 방법:
데이터형식? 변수이름;

a. 예시

int? a = null; // Nullable 형식 
if (a.HasValue) // 값이 있는지 확인
{
	Console.WriteLine(a.Value); 
} 
else 
{
	Console.WriteLine("No value"); 
}

b. Nullable 속성

  • HasValue: 값이 있는지 확인 (true 또는 false).
  • Value: 변수에 담긴 값 반환.

4. var 형식

  • 정의: 변수에 담긴 데이터에 따라 컴파일러가 자동으로 형식을 지정.
  • 주의사항:
    • 선언과 동시에 값을 초기화해야 함.
    • 지역 변수로만 사용 가능.

예시

var x = 10;        // 컴파일러가 int로 추론
var y = "Hello";   // 컴파일러가 string으로 추론
// var z;           // 오류: 초기화 필요

 


5. 공용 형식 시스템 (CTS)

  • 정의: .NET 프레임워크의 형식 체계 표준.
  • C#의 모든 데이터 형식은 CTS를 기반으로 하며, 다른 .NET 언어들과의 호환성을 보장.
  • 예시:
    • C#의 int는 CTS의 System.Int32에 매핑.
    • C#의 string은 CTS의 System.String에 매핑.

정리

  • 상수: 변경할 수 없는 고정된 값.
  • 열거형: 특정 그룹의 상수를 관리하기 위한 형식.
  • Nullable: 값이 없음을 표현.
  • var: 데이터 형식을 자동 추론.
  • CTS: .NET에서 데이터 형식의 표준을 정의.
728x90
728x90

1. 데이터 형식 개요

  • 참조 형식: 문자열(string), 오브젝트(object) 형식으로 구분.
  • 값 형식: 숫자 형식, 논리 형식으로 구분.
    • 숫자 형식: 정수 계열, 부동소수점 계열, 소수 계열로 세분화.

2. 정수 계열

정수 데이터를 다루기 위한 형식이며, 크기와 범위가 다릅니다.
효율적인 메모리 사용을 위해 데이터 범위에 맞는 형식을 선택해야 합니다.

데이터 형식설명크기(Byte)범위

byte 부호 없는 정수 1 0 ~ 255
sbyte 부호 있는 정수 1 -128 ~ 127
ushort 부호 없는 정수 2 0 ~ 65,535
short 부호 있는 정수 2 -32,768 ~ 32,767
uint 부호 없는 정수 4 0 ~ 4,294,967,295
int 부호 있는 정수 4 -2,147,483,648 ~ 2,147,483,647
ulong 부호 없는 정수 8 0 ~ 18,446,744,073,709,551,615
long 부호 있는 정수 8 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

양수와 음수 표현: 최상위 비트를 이용하여 0(양수), 1(음수)로 구분.
음수 표현: 2의 보수법

  1. 비트를 반전.
  2. 1을 더함.

예시: -3

  • 00000011 → 비트 반전 → 11111100 → 1 추가 → 11111101

3. 오버플로우와 언더플로우

  • 오버플로우: 데이터가 최대값을 넘으면 0으로 순환.
  • 언더플로우: 데이터가 최소값을 넘으면 최대값으로 순환.
csharp
코드 복사
byte a = 255; a++; // 0

4. 부동소수점 계열

유리수와 실수를 표현하는 데이터 형식.
정수 계열보다 표현 범위가 넓지만 정확도 손실이 있을 수 있음.

데이터 형식설명크기(Byte)범위

float 단일 정밀도 부동소수점 (7자리) 4 ±3.402823e38
double 복수 정밀도 부동소수점 (15~16자리) 8 ±1.79769313486232e308
decimal 29자리 고정소수점 16 매우 정밀한 소수값 표현

 


5. 논리 형식 계열

참과 거짓을 표현.

데이터 형식설명크기(Byte)범위

bool 논리 값 1 true, false

6. 문자와 문자열 형식

  • 문자(char): 단일 문자, 작은 따옴표 사용.
char c = 'A';
  • 문자열(string): 여러 문자의 집합, 큰따옴표 사용.
string s = "Hello";

7. Object 형식

  • 모든 데이터 형식의 조상.
  • 참조 형식이며, 힙(Heap)에 데이터를 저장.

8. 박싱(Boxing)과 언박싱(Unboxing)

  • 박싱: 값 형식 → 참조 형식(object)로 변환.
int a = 20; 
object o = a; // 박싱
  • 언박싱: 참조 형식(object) → 값 형식으로 변환.
object o = 20; 
int a = (int)o; // 언박싱

9. 데이터 크기

  • bit: 0과 1을 표현하는 최소 단위.
  • 니블: 4비트.
  • 바이트(byte): 8비트.
  • 워드(word): CPU의 데이터 처리 단위(16비트 이상).

10. 데이터 구조

  • 필드: 데이터베이스의 열(Column).
  • 레코드: 데이터베이스의 행(Row).
  • 파일: 레코드의 집합.
  • 데이터베이스: 파일의 집합.
728x90
728x90

1. 변수란 무엇인가?

  • 코드 관점: 값을 대입하거나 변경할 수 있는 요소.
  • 메모리 관점: 데이터를 담는 일정 크기의 공간. 데이터 형식에 따라 크기가 달라집니다.
  • 수학적 관점: 변하는 값을 가진 요소.

컴퓨터에서 변수를 사용하려면 변수 선언이 필요합니다.
변수 선언은 컴파일러에게 필요한 메모리 공간을 예약하도록 지시하는 과정입니다.

int x; // 변수 선언
x = 100; // 데이터 할당
 

2. 메모리와 변수의 관계

변수를 선언하면 메모리 공간이 할당되고, 값을 대입하면 해당 공간에 데이터가 저장됩니다.

예시:

int x = 100;

위 코드는 선언과 동시에 값을 할당한 경우로, 변수 x의 메모리 공간에 100이 저장됩니다.


3. 값 형식(Value Type)과 참조 형식(Reference Type)

변수는 값 형식참조 형식으로 나뉩니다.

a. 값 형식 (Value Type)

  • 데이터를 스택(Stack) 메모리 영역에 저장.
  • 코드 블록이 끝나면 자동으로 제거됩니다.
  • 저장 및 제거 과정: 위 코드에서 b가 먼저 제거되고, 다음으로 a가 제거됩니다.
  • {
        int a = 100;
        int b = 200;
    }

b. 참조 형식 (Reference Type)

  • 데이터는 힙(Heap)에 저장되고, 스택은 힙의 메모리 주소를 참조합니다.
  • 코드 블록이 끝나도 힙에 데이터는 남아 있습니다.
  • 힙의 데이터를 제거하려면 **가비지 컬렉터(Garbage Collector)**가 필요합니다.

예시:

object a = 10;
  • 스택: 변수 a와 메모리 주소값 (&2000) 저장.
  • : 데이터 10이 주소 2000에 저장.

4. 변수의 종류

a. 전역 변수 (Global Variable)

  • 클래스 내부에서 선언되며, 클래스 객체가 살아있는 동안 참조 가능합니다.
  • 기본값이 자동으로 할당됩니다. (예: int 타입은 0)

예시:

class Example
{
    int globalVar; // 기본값 0 자동 할당
}

b. 지역 변수 (Local Variable)

  • 메서드 내에서 선언되며, 메서드 호출이 끝나면 메모리에서 제거됩니다.
  • 기본값이 자동으로 할당되지 않으므로, 초기화를 해야 사용 가능합니다.

예시:

public void Method()
{
    int localVar;
    localVar = 100; // 초기화 필수
}

5. 메모리 구조 요약

  • 스택(Stack): 값 형식 데이터를 저장하며, 데이터가 코드 블록이 끝나면 제거됩니다.
  • 힙(Heap): 참조 형식 데이터를 저장하며, 데이터가 명시적으로 제거되지 않으면 계속 유지됩니다.
728x90
728x90

1. Connection Pooling이란?

  • Connection Pooling은 데이터베이스 연결을 효율적으로 관리하기 위한 방법입니다.
  • DB 연결은 클라이언트와 서버 간의 핸드셰이크, 로그인 등으로 시간이 소요되므로, 기존의 연결을 유지하고 재활용하여 성능을 향상시킵니다.
  • ADO.NET에서는 Connection Pooling이 기본적으로 활성화(ON) 되어 있으며, 이를 통해 연결 작업의 비용을 줄입니다.

2. Connection Pooling의 동작 원리

  1. 연결 생성:
    • 클라이언트가 SqlConnection 객체를 생성하고 Open()을 호출하면, 새로운 연결이 생성되고 Connection Pool에 추가됩니다.
    • SQL 서버에는 이를 나타내는 SPID(Session Process ID)가 생성됩니다.
  2. 연결 재활용:
    • 연결이 닫혀도(Connection Close) Pool에 반환되어 대기 상태로 유지됩니다.
    • 새로운 연결 요청이 발생하면 Pool에서 기존 연결을 재사용합니다.
  3. Pool 크기 관리:
    • 최소 연결 수(Min Pool Size): Pool에 유지될 최소 연결 수.
    • 최대 연결 수(Max Pool Size): Pool에 저장될 최대 연결 수. 기본값은 100입니다.
    • 필요 시 Pool 크기를 동적으로 조정하여 리소스를 관리합니다.
  4. Timeout 관리:
    • 연결 요청이 Queue에서 대기할 수 있는 최대 시간(Connection Timeout). 기본값은 15초입니다.
    • Timeout 안에 연결을 확보하지 못하면 예외가 발생합니다.

3. Connection Pool 생성 기준

  • Connection String:
    • 동일한 Connection String을 사용하는 경우 같은 Pool을 공유합니다.
    • Connection String이 조금이라도 다르거나, 옵션 순서가 다르면 별도의 Pool이 생성됩니다.
  • 인증 방식:
    • Windows Authentication: 사용자 계정별로 별도의 Pool이 생성됩니다.
    • SQL Authentication: 공통 Pool을 사용하여 성능이 더 좋습니다.
  • 프로세스와 AppDomain:
    • 프로세스와 AppDomain이 다르면 별도의 Pool이 생성됩니다.

4. Connection Pool 옵션

Connection String에서 설정 가능한 주요 옵션:

옵션설명기본값

Pooling Connection Pooling 활성화 여부. true로 설정 시 활성화. true
Min Pool Size Pool에서 유지할 최소 연결 수. 1
Max Pool Size Pool에서 유지할 최대 연결 수. 100
Connection Timeout 연결 요청 대기 시간. 초 단위로 설정. 15
Enlist 현재 트랜잭션 컨텍스트에 연결을 자동 등록할지 여부. true

예제 Connection String

string connectionString = "Data Source=MyServer;Initial Catalog=MyDB;Integrated Security=true;" +
                          "Min Pool Size=20;Max Pool Size=100;Connection Timeout=15;Pooling=true;";

5. Connection Pool 관리

  • Pool 초기화:
    • SqlConnection.ClearAllPools()를 호출하면 모든 Connection Pool이 초기화되고 연결이 닫힙니다.
    • 사용하지 않는 연결은 자동으로 제거되어 SQL 서버 부하를 줄입니다.

사용 예제

using (SqlConnection conn = new SqlConnection(connectionString))
{
    conn.Open();
    // 데이터베이스 작업 수행
    conn.Close(); // 연결은 Pool로 반환
}
SqlConnection.ClearAllPools(); // Pool 초기화

6. Connection Pool 성능 관리

  • 적절한 Pool 크기 설정:
    • 최소 Pool 크기(Min Pool Size)를 설정하면 서버가 항상 준비된 연결을 유지하므로 대기 시간이 줄어듭니다.
    • 최대 Pool 크기(Max Pool Size)를 통해 과도한 리소스 사용을 제한합니다.
  • Connection String 최적화:
    • 통일된 Connection String을 사용하여 불필요한 Pool 생성을 방지합니다.
  • Idle Timeout:
    • 사용하지 않는 연결은 일정 시간 후 제거됩니다. 이 시간을 관리하여 리소스를 최적화할 수 있습니다.

7. Connection Pool 모니터링

  • SQL Server SPID 확인:
    • SQL Server에서 sys.dm_exec_sessions 및 sys.dm_exec_requests를 사용하여 Pool에 연결된 세션(SPID)을 확인할 수 있습니다.
    SELECT * FROM sys.dm_exec_sessions WHERE is_user_process = 1;
  • ADO.NET 성능 카운터:
    • .NET 성능 카운터를 통해 Pool 상태를 모니터링할 수 있습니다.
    • 사용 가능한 연결 수:
       
      .NET Data Provider for SqlServer -> NumberOfPooledConnections
728x90
728x90

1. 증감 연산자

  • 전위 증가 연산자 (++a):
    변수를 증가시킨 후 해당 구문을 실행.
  • 후위 증가 연산자 (a++):
    해당 구문을 실행한 후 변수를 증가.

예시:

int a = 10; 
Console.WriteLine(a++); // 출력: 10 (증가는 이후에 실행) 
Console.WriteLine(++a); // 출력: 12 (증가는 먼저 실행)

2. 관계 연산자

  • 논리형식(bool) 결과 반환 (true 또는 false).연산자설명 
    == 두 피연산자가 같으면 true.
    != 두 피연산자가 다르면 true.

예시:

int x = 5, y = 10; 
Console.WriteLine(x == y); // 출력: False 
Console.WriteLine(x != y); // 출력: True

3. 논리 연산자

  • AND (&&): 두 조건이 모두 참일 때 true.
  • OR (||): 하나라도 참이면 true.
  • NOT (!): 논리값을 반전.

예시:

bool a = true, b = false; 
Console.WriteLine(a && b); // 출력: False 
Console.WriteLine(a || b); // 출력: True 
Console.WriteLine(!a); // 출력: False

4. 조건 연산자 (?:)

  • 형식: 조건식 ? 참일 때 값 : 거짓일 때 값.
  • 조건식의 결과는 논리값(true 또는 false).

예시:

int a = 30; 
string result = a == 30 ? "삼십" : "삼십 아님"; 
Console.WriteLine(result); // 출력: 삼십

5. Null 조건부 연산자 (?.)

  • 형식: 객체?.멤버 또는 객체?[인덱스].
  • 객체가 null이면 null 반환, 아니면 멤버에 접근.

예시:

class Foo 
{ 
	public int Member { get; set; } 
} 
Foo foo = null; 
int? bar = foo?.Member; // foo가 null이므로 bar는 null

6. Null 병합 연산자 (??)

  • 형식: op1 ?? op2.
  • op1이 null이면 op2 반환, 그렇지 않으면 op1 반환.

예시:

string message = null; 
string result = message ?? "Default message"; 
Console.WriteLine(result); // 출력: Default message​

7. 비트 연산자

  • 왼쪽 시프트 (<<): 비트를 왼쪽으로 이동.
  • 오른쪽 시프트 (>>): 비트를 오른쪽으로 이동.
  • XOR (^): 두 비트가 다를 때 1.
  • NOT (~): 모든 비트를 반전.

시프트 연산 예시:

int a = 240, b = 2; 
Console.WriteLine(a << b); // 출력: 960 (240 * 2^2) 
Console.WriteLine(a >> b); // 출력: 60 (240 / 2^2)​

정리

  • 증감 연산자: 전위와 후위의 차이를 이해.
  • 관계 및 논리 연산자: 분기와 조건 설정에 필수.
  • 조건 연산자: 간단한 조건문 처리에 유용.
  • Null 조건부 연산자: 객체가 null인지 확인 후 멤버 접근.
  • Null 병합 연산자: null 기본값을 처리하는 데 활용.
  • 비트 연산자: 낮은 수준의 데이터 조작에 필수.
728x90
728x90
 

1. 데이터 형식 변환이란?

  • 정의: 변수를 다른 데이터 형식의 변수로 옮겨 담는 것을 변환이라고 합니다.
  • 변환에는 두 가지 방식이 있습니다:
    1. 암시적 변환: 데이터 손실이 없는 경우 자동으로 수행.
    2. 명시적 변환: 데이터 손실 가능성이 있는 경우 개발자가 명시적으로 수행.

2. 정수 데이터 형식 변환

a. 작은 정수 → 큰 정수
  • 변환 시 문제가 발생하지 않습니다.
  • 예: byte → int
b. 큰 정수 → 작은 정수
  • 데이터가 범위를 초과하면 오버플로우 발생.
  • 예: int → byte 
int a = 256;
byte b = (byte)a; // b = 0 (오버플로우 발생)

c. 부호 있는 정수 → 부호 없는 정수

  • 음수 값을 변환하면 언더플로우가 발생.
  • 예: int → uint
int a = -1;
uint b = (uint)a; // b = 4294967295 (언더플로우)

3. 부동소수점 데이터 형식 변환

a. 부동소수점 → 정수

  • 소수점 이하를 버리고 정수 값만 남습니다. 반올림은 하지 않습니다.
  • 예:
     
double d = 3.9; 
int i = (int)d; // i = 3

b. float ↔ double 변환

  • 부동소수점은 소수를 이진수로 저장하므로 정밀도 손실이 있을 수 있습니다.
  • 예:
float f = 1.123456789f; // 제한된 정밀도 (7자리)
double d = f; // 정밀도가 손상될 수 있음

4. 문자와 숫자 변환

a. 문자 → 숫자

  • Parse() 또는 Convert.ToInt32() 메소드를 사용.
  • 예:
string s = "123"; 
int i = int.Parse(s); // i = 123

b. 숫자 → 문자

  • ToString() 메소드를 사용.
  • 예:
int i = 123; 
string s = i.ToString(); // s = "123"

 


5. 변환의 주의점

  • 정수 변환: 범위 초과 여부 확인 (오버플로우/언더플로우).
  • 부동소수점 변환: 정밀도 손실 가능성 이해.
  • 문자와 숫자 변환: 잘못된 입력 처리 대비 (예외 처리).
728x90

+ Recent posts