• 전화 통화를 통해 기술 지원을 제공하는 최소의 AWS Support 플랜은 무엇인가?
    • Business
      • Business Support 플랜 또는 Enterprise Support 플랜을 사용하여 기술 지원에 전화하거나 채팅할 수 있습니다. Business Support 플랜은 이 기능을 제공하는 최소 플랜입니다.
  • 한 회사는 AWS 계정 루트 사용자와 관련된 AWS 관리 콘솔 로그인 이벤트를 모니터링하고 이에 대한 알림을 받아야 한다. 회사에서 이러한 요구 사항을 충족하기 위해 사용할 수 있는 AWS 서비스는 무엇인가?
    • Amazon CloudWatch
      • CloudWatch는 실시간으로 AWS에서 실행되는 애플리케이션 및 AWS 리소스를 모니터링합니다. CloudWatch와 AWS CloudTrail을 사용하여 AWS 계정 루트 사용자와 관련된 콘솔 로그인 이벤트를 모니터링하고 이에 대한 알림을 받을 수 있습니다.
  • 전 세계 여러 국가에서 고객을 보유한 기업이 AWS 클라우드를 사용하면 어떤 이점이 있는가? (2개 선택.)
    • 기업은 여러 AWS 리전에 애플리케이션을 배포하여 지연 시간을 줄일 수 있다.
      • 전 세계의 리전을 사용하면 애플리케이션의 글로벌 성능이 향상되고 사용자의 지연 시간이 줄어듭니다.
    • Amazon CloudFront는 지연 시간을 줄이기 위해 전 세계에 여러 엣지 로케이션을 보유하고 있다.
      • CloudFront는 데이터, 비디오, 애플리케이션 및 API를 짧은 지연 시간과 높은 전송 속도로 전 세계 고객에게 안전하게 제공하는 콘텐츠 전송 네트워크(CDN) 서비스입니다.
  • 한 회사 내의 각 부서에 독립적인 자체 AWS 계정과 자체 결제 방법이 있다. 회사에서는 부서별 거버넌스를 중앙 집중화하고 결제를 통합하려고 한다. 회사는 AWS 서비스 또는 기능을 사용하여 이러한 목표를 어떻게 달성할 수 있는가?
    • 하나의 계정 내에서 모든 기능이 활성화된 AWS Organizations에 조직을 생성한다. 조직에 가입하도록 모든 계정을 초대한다.
      • Organizations는 여러 계정을 포함하여 AWS 환경에 대한 중앙 집중식 거버넌스와 결제를 제공합니다.
    • 거버넌스란?
      • '거버넌스(Governance)'는 일반적으로 조직이나 시스템을 어떻게 관리하고 제어할 것인지에 대한 전반적인 접근 방식이나 원칙을 의미합니다. IT 컨텍스트에서 거버넌스는 데이터의 품질, 관리, 작동, 리스크 관리 등을 중심으로 회사의 IT 자원과 프로세스가 효율적으로 동작하도록 지침을 설정하는 것이 주 목적입니다.
  • 한 회사는 회사의 온프레미스 데이터 센터에서 AWS 클라우드로 일관된 비공개 연결을 구축하고자 한다. 다음 중 이러한 요구 사항을 충족하는 AWS 서비스는 무엇인가?
    • AWS Direct Connect
      • Direct Connect는 표준 이더넷 광케이블을 통해 내부 네트워크를 Direct Connect 위치에 연결합니다. 케이블의 한쪽 끝을 라우터에 연결합니다. 케이블의 다른 쪽 끝은 Direct Connect 라우터에 연결합니다. AWS Direct Connect는 귀 회사가 케이블의 유일한 사용자이므로 일관되고 비공개로 유지됩니다.
    • 온프레미스 데이터 센터란?
      • "온프레미스(On-Premises)"는 기업이나 조직이 자체 시설 내에 IT 인프라를 두고 운영하는 것을 의미합니다. 이렇게 회사 건물 내나 별도의 물리적 장소에 설치된 데이터 센터를 "온프레미스 데이터 센터"라고 부릅니다.
  • 여러 가용 영역에 Amazon EC2 인스턴스를 사용하여 애플리케이션을 배포하면 어떤 이점이 있는가? (2개 선택.)
    • 단일 장애 지점 방지
      • 여러 가용 영역에 EC2 인스턴스를 배포하면 단일 장애 지점을 방지할 수 있습니다. 가용 영역은 물리적 중복성을 위해 설계되었으며, 중단 없는 성능으로 복원력을 제공하도록 설계되었습니다.
    • 애플리케이션의 가용성 향상
      • 장애의 영향을 받는 한 곳의 위치에서 모든 인스턴스를 호스팅하면 인스턴스를 전혀 사용하지 못하게 될 수 있습니다. 가용 영역은 물리적 중복성을 위해 설계되었으며 중단 없는 성능으로 복원력을 제공하도록 설계되었습니다.
  • 고객이 사용되지 않은 Amazon EC2 용량을 종종 할인된 가격으로 구매할 수 있게 해 주는 AWS 서비스는 무엇인가?
    • 스팟 인스턴스
      • 스팟 인스턴스를 사용하면 사용되지 않은 EC2 용량에 액세스할 수 있습니다. 스팟 인스턴스는 할인될 수 있습니다.
  • 한 회사가 단일 Amazon S3 버킷에서 정적 웹 사이트를 호스팅하고 있다. 지연 시간을 줄이고 전송 속도를 높일 수 있는 AWS 서비스는 무엇인가?
    • Amazon CloudFront
      • CloudFront는 .html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하는 웹 서비스입니다. 콘텐츠는 엣지 로케이션에서 캐시됩니다. 반복적으로 액세스되는 콘텐츠는 소스 S3 버킷 대신 엣지 로케이션에서 제공될 수 있습니다.
  • AWS 공동 책임 모델에 따라 고객이 책임을 져야 할 태스크는 무엇인가? (2개 선택.)
    • 최소 권한의 원칙에 따라 IAM 사용자를 구성한다.
      • AWS는 AWS Identity and Access Management(IAM)를 서비스로 제공합니다. 고객은 IAM 사용자와 해당 사용자에게 적용되는 액세스 정책을 정의합니다.
    • Amazon S3 버킷을 구성하여 퍼블릭 액세스를 허용한다.
      • 고객이 자신이 소유한 S3 버킷에 대한 액세스 권한을 결정합니다.
  • 한 회사는 웹 사이트에서 발생한 신규 고객 주문을 기록하는 AWS상의 관계형 데이터베이스를 필요로 한다. 이 요구 사항을 충족하는 AWS 서비스 또는 기능은 무엇인가?
    • Amazon Aurora
      • Aurora는 클라우드를 위해 구축된 MySQL 및 PostgreSQL 호환 관계형 데이터베이스입니다. Aurora는 기존 기업 데이터베이스의 성능 및 가용성과 오픈 소스 데이터베이스의 간편성 및 비용 효율성을 함께 제공합니다.
  • 한 회사에 Oracle 데이터베이스가 실행되는 온프레미스 Linux 기반 서버가 있다. 회사는 AWS의 Amazon EC2 인스턴스에서 실행되도록 데이터베이스 서버를 마이그레이션하고자 한다. 회사에서 마이그레이션을 완료하려면 어떤 서비스를 사용해야 하는가?
    • AWS Application Migration Service(AWS MGN)
      • AWS MGN은 자동화된 리프트 앤 시프트 솔루션입니다. 이 솔루션은 물리적 서버와 해당 서버에서 실행되는 모든 데이터베이스 또는 애플리케이션을 AWS의 EC2 인스턴스로 마이그레이션할 수 있습니다.
    • 마이그레이션이란?
      • "마이그레이션(Migration)"은 하나의 운영 환경에서 다른 운영 환경으로 데이터나 애플리케이션, 서비스 등을 옮기는 과정을 의미합니다. 예를 들어, 여기서의 경우는 Oracle 데이터베이스를 온프레미스 Linux 서버에서 AWS의 Amazon EC2 인스턴스로 옮기는 작업이 마이그레이션에 해당합니다.
  • 한 회사가 모든 개발 활동을 AWS로 이전하고 있다. 이 회사는 개발자의 소스 코드를 저장하고 관리할 수 있는 솔루션을 원한다. 이 요구 사항을 충족하는 AWS 코딩 서비스는 무엇인가?
    • AWS CodeCommit
      • CodeCommit은 소스 코드 버전 제어 서비스입니다. CodeCommit은 사용자가 개발자의 소스 코드를 AWS에 저장하고 관리할 수 있도록 도와줍니다.
  • Amazon S3의 특징적인 기능은 다음 중 무엇인가? (2개 선택.)
    • 객체 스토어
      • Amazon S3은 객체 스토리지 서비스입니다.
    • 내구성이 뛰어난 스토리지 시스템
      • Amazon S3은 내구성이 뛰어난 객체 스토리지 서비스입니다.
    • 객체 스토리지란?
      • 객체 스토리지(Object Storage)는 데이터를 '객체'라고 불리는 단위로 저장하는 스토리지 아키텍처를 의미합니다. 각 객체는 데이터 뿐만 아니라 메타데이터와 고유한 식별자도 포함하고 있어. 이 식별자를 통해 데이터에 빠르게 접근할 수 있습니다.
      • 객체 스토리지의 특징
        • 무제한 확장성: 거의 무제한에 가까운 데이터를 저장할 수 있습니다.
        • 메타데이터 관리: 각 객체는 풍부한 메타데이터를 가질 수 있으며, 이를 통해 더 복잡한 데이터 관리와 분석이 가능합니다.
        • HTTP/HTTPS 기반: 웹 기반의 API를 통해 접근하고 관리할 수 있습니다.
        • 평면 네임스페이스: 디렉토리나 폴더 구조 없이 모든 객체를 평면(Flat)한 네임스페이스에 저장합니다.
  • AWS 계정에 프로그래밍 방식으로 액세스하려면 어떤 자격 증명 구성 요소가 필요한가? (2개 선택.)
    • 액세스 키
      • 프로그래밍 방식으로 액세스하려면 AWS 사용자에게 할당할 수 있는 액세스 키 ID와 비밀 액세스 키가 필요합니다.
    • 비밀 액세스 키
      • 프로그래밍 방식으로 액세스하려면 AWS 사용자에게 할당할 수 있는 액세스 키 ID와 비밀 액세스 키가 필요합니다.
  • 다음 중 사용자의 AWS 리소스에 대한 무제한 액세스를 허용하는 보안 그룹을 식별하는 AWS 서비스는 무엇인가?
    • AWS Trusted Advisor
      • Trusted Advisor는 리소스에 대한 무제한 액세스를 허용하는 규칙에 대해 보안 그룹을 확인합니다. 무제한 액세스로 인해 해킹, 서비스 거부 공격 또는 데이터 손실과 같은 악의적인 활동의 기회가 증가합니다.
  • 프리 티어를 초과한 경우 AWS는 AWS Lambda 사용량에 대한 요금을 어떻게 청구하는가? (2개 선택.)
    • Lambda 함수를 실행하는 데 걸리는 시간 기준
      • Lambda 요금은 코드를 실행하는 데 걸리는 시간에 따라 다릅니다.
    • 지정된 Lambda 함수에 대한 요청 수 기준
      • Lambda 요금은 Lambda 함수에 대한 요청 수에 따라 다릅니다.
  • 한 회사에서 학생들을 위한 학습 애플리케이션을 만들고자 한다. 학습 애플리케이션은 학생들이 텍스트가 소리내어 읽혀지는 버튼을 선택할 수 있는 옵션을 제공해야 한다. 이 요구 사항을 충족하는 AWS 기계 학습 서비스는 무엇인가?
    • Amazon Polly
      • Amazon Polly는 텍스트를 음성으로 변환하는 기계 학습 서비스입니다. 이 서비스는 텍스트를 소리내어 읽을 수 있는 기능을 제공합니다.
  • Amazon S3에 저장된 민감한 데이터를 자동으로 검색, 분류 및 보호해야 하는 한 사용자가 있다. 이러한 요구 사항을 충족할 수 있는 AWS 서비스는 무엇인가?
    • Amazon Macie
      • Macie는 AWS에 배포된 애플리케이션의 보안 및 규정 준수를 개선하는 데 도움이 되는 자동 보안 평가 서비스입니다.
  • 한 회사는 회사의 온프레미스 서버와 AWS 간에 암호화된 연결을 필요로 한다. 연결은 회사의 기존 인터넷 연결을 사용해야 한다. 다음 중 이러한 요구 사항을 충족하는 솔루션은 무엇인가?
    • AWS Site-to-Site Connect
      • Site-to-Site VPN은 온프레미스 네트워크와 AWS 클라우드 네트워크 간에 암호화된 네트워크 경로를 생성합니다. 온프레미스 네트워크와 AWS 클라우드 네트워크 간의 이러한 연결은 인터넷을 사용합니다.
  • 한 사용자가 여러 가용 영역에 Amazon RDS DB 인스턴스를 배포하고 있다. 이 전략에는 AWS Well-Architected Framework의 어떤 원칙이 관련되는가?
    • 신뢰성
      • 신뢰성 원칙은 워크로드의 기능이 필요한 때에 기능을 정확하고 일관되게 수행하는 역량을 포함합니다. 여러 가용 영역에 Amazon RDS를 배포하면 단일 장애 지점이 줄어들기 때문에 신뢰성 목표를 달성하는 데 도움이 됩니다.
블로그 이미지

RIsN

,

디자인 패턴

  • 싱글턴 패턴 (Singleton Pattern)
    • 싱글턴 패턴은 특정 클래스의 인스턴스가 하나만 존재하도록 보장합니다. 게임 내의 설정이나 데이터베이스 연결과 같이 하나만 있어야 하는 객체에 사용했습니다.
  • 전략 패턴 (Strategy Pattern)
    • 전략 패턴은 특정 작업을 처리하는 알고리즘 또는 전략을 런타임에 변경할 수 있게 합니다. 예를 들어, 카드 변경에 따른 공격 패턴 변화 등에 사용했습니다.
  • 옵저버 패턴 (Observer Pattern)
    • 옵저버 패턴은 하나의 객체가 변할 때, 그 객체를 "관찰"하고 있는 다른 객체들에게 알려주는 패턴입니다. 이런 식으로 객체 간에 한 쪽이 다른 쪽을 자동으로 업데이트 할 수 있게 합니다.
      UI를 처음 구성할 때 등에 사용했습니다.

객체지향

  • 캡슐화 (Encapsulation)
    • 캡슐화는 객체의 상태와 행동을 하나로 묶고, 실제 구현 내용을 외부에 숨기는 것입니다. 캡슐화를 통해 객체가 어떻게 작동하는지 알 필요 없이 어떻게 사용하는지만 알면 됩니다.
  • 상속 (Inheritance)
    • 상속은 기존의 클래스를 기반으로 새로운 클래스를 만들어서 코드를 재사용하거나 확장하는 것입니다. 몬스터 클래스를 여러가지로 분화해서 사용했습니다.
  • 다형성 (Polymorphism)
    • 다형성은 하나의 인터페이스나 클래스를 여러 가지 방식으로 동작하게 할 수 있습니다. 다형성을 통해 코드가 더 유연해지고 쉽게 확장할 수 있습니다. Virtual이 그 대표적 예로 몬스터의 공격을 다양하게 만드는 등에 사용했습니다.
  • 추상화 (Abstraction)
    • 추상화는 복잡한 시스템을 간단한 인터페이스로 단순화시키는 것입니다. 추상 클래스나 인터페이스를 사용해서 구현합니다. Abstract가 대표적 예로, 초기화가 있어야 하는 클래스에 Init등을 강제하거나 할 때 사용했습니다.

C#

  • C#에서 가비지 컬렉션은 어떻게 작동하나요?
    • .NET의 CLR(Common Language Runtime)이 자동으로 메모리 관리를 해주며, 사용되지 않는 객체를 찾아 메모리를 회수합니다.
  • LINQ란 무엇이고 어떻게 사용하나요?
    • LINQ(Language-Integrated Query)는 쿼리를 프로그래밍 언어에 통합시킨 것입니다. 이를 통해 SQL과 유사한 방법으로 데이터를 처리할 수 있어요.
  • C#에서 예외 처리는 어떻게 하나요?
    • try, catch, finally 블록을 사용하여 예외를 처리합니다.
  • 비동기 프로그래밍에 대해 설명해주세요.
    • async와 await 키워드를 사용해서 I/O 작업이나 복잡한 연산을 백그라운드에서 실행할 수 있게 해줍니다.

C# Event

  • 이벤트(Event)가 무엇인지 설명해 주세요.
    • 이벤트는 클래스나 객체가 특정 조건이나 상황이 발생했을 때 다른 클래스나 객체에게 알려주는 메커니즘입니다. 예를 들어, 버튼 클릭이나 키 입력 같은 UI 상호작용을 다룰 때 유용합니다.
  • C#에서 이벤트를 어떻게 선언하나요?
    • event 키워드를 사용해서 선언합니다. 대게 델리게이트 타입을 이용합니다. 예를 들어, public event EventHandler MyEvent;와 같이 선언할 수 있습니다.
  • 이벤트와 델리게이트의 차이점은 무엇인가요?
    • 델리게이트는 단순히 메서드를 가리키는 타입입니다. 반면 이벤트는 델리게이트를 기반으로 하되, 외부에서 무분별한 호출을 막을 수 있도록 캡슐화된 형태라고 할 수 있습니다.
  • 이벤트를 구독하고 해지하는 방법은?
    • += 연산자를 사용해 구독하고, -= 연산자를 사용해 해지할 수 있습니다. 예를 들어, MyEvent += new EventHandler(MyMethod);로 구독하고, MyEvent -= new EventHandler(MyMethod);로 해지합니다.
  • 이벤트에 여러 개의 리스너를 붙일 수 있나요?
    • 네, 가능합니다. 이벤트는 멀티캐스팅 델리게이트를 사용하기 때문에 여러 메서드가 동시에 이벤트를 구독할 수 있습니다.
  • 이벤트와 예외 처리는 어떻게 다른가요?
    • 이벤트는 일반적으로 예측 가능한 상황에서 사용되며, 예외 처리는 예측하지 못한 오류 상황을 다룰 때 사용됩니다. 이벤트는 명시적으로 구독과 해지를 관리해야 하지만, 예외 처리는 try-catch 블록을 사용해 자동으로 관리됩니다.
  • C#에서 EventArgs 클래스는 무엇이고 왜 사용하나요?
    • 답변: EventArgs는 이벤트 데이터를 전달하는 표준 클래스입니다. 이를 상속받아 커스텀 이벤트 데이터 클래스를 만들 수 있습니다. 이렇게 하면 이벤트가 발생했을 때 추가 정보를 전달할 수 있습니다.

C# SQL

  • ADO.NET이 무엇인가요?
    • ADO.NET은 .NET Framework에서 데이터베이스에 접근할 수 있도록 도와주는 라이브러리입니다. SQL Server, MySQL 등 다양한 데이터베이스에 접속할 수 있습니다.
  • Connection Pooling에 대해서 설명해주세요.
    • Connection Pooling은 데이터베이스 연결을 재사용하여 성능을 향상시키는 기술입니다. 연결을 미리 여러 개 생성해 두고, 필요할 때마다 풀에서 꺼내 씁니다.
  • C#에서 SQL Server에 연결하는 방법은?
    • SqlConnection 클래스를 사용해서 SQL Server에 연결할 수 있습니다. ConnectionString 속성에 데이터베이스 정보를 설정하고, Open 메서드로 연결을 엽니다.
  • SQL Injection이란 무엇이며 어떻게 예방하나요?
    • SQL Injection은 사용자 입력을 적절히 처리하지 않아 악의적인 SQL 쿼리가 실행되는 보안 취약점입니다. 이를 예방하기 위해 파라미터화된 쿼리나 Stored Procedure를 사용합니다.
  • LINQ to SQL에 대해 설명해주세요.
    • LINQ to SQL은 C#에서 SQL 데이터베이스에 LINQ 쿼리를 사용할 수 있게 해주는 ORM(Object-Relational Mapping) 도구입니다. 간편하게 데이터베이스에 접근할 수 있습니다.
  • 트랜잭션이 무엇이고 C#에서 어떻게 사용하나요?
    • 트랜잭션은 데이터베이스의 상태를 일관되게 유지하기 위한 작업 단위입니다. C#에서는 SqlTransaction 클래스를 사용해 트랜잭션을 구현할 수 있습니다.
  • DataReader와 DataSet의 차이점은 무엇인가요?
    • DataReader는 순방향 읽기 전용 커서를 제공해 빠른 데이터 접근이 가능하지만, 한 번에 하나의 테이블만 처리할 수 있습니다. DataSet은 메모리에 데이터를 캐시하여 여러 테이블을 동시에 다룰 수 있습니다.

C#으로 MySQL을 사용하는 법

  • C#에서 MySQL 데이터베이스에 연결하기 위해서는 대개 MySql.Data 라이브러리를 사용합니다. 이 라이브러리는 NuGet 패키지 매니저를 통해 쉽게 설치할 수 있습니다.
    1. 1. 라이브러리 설치: MySql.Data 패키지를 설치합니다.
    2. 2. 연결 문자열 설정: MySQL 서버에 연결 정보를 담은 연결 문자열을 설정합니다.
      string connectionString = "Server=localhost;Database=myDB;User ID=myUsername;Password=myPassword;Pooling=false;";
    3. 3. MySqlConnection 객체 생성: 연결 문자열을 이용해서 MySqlConnection 객체를 생성합니다.
      MySqlConnection connection = new MySqlConnection(connectionString);
    4. 4. 연결 열기: Open() 메서드를 사용해서 데이터베이스에 연결을 엽니다.
      connection.Open();
    5. 5. 쿼리 실행: 이후에는 MySqlCommand, MySqlDataReader 등을 사용해서 SQL 쿼리를 실행하고 결과를 처리합니다.
    6. 6. 연결 닫기: 작업이 끝나면 Close() 메서드를 사용해서 연결을 닫습니다.
      connection.Close();

C# 메모리 최적화

  • 가비지 컬렉션(Garbage Collection)이 무엇인가요?
    • 가비지 컬렉션은 .NET 런타임에서 자동으로 수행되는 메모리 관리 방법입니다. 사용되지 않는 객체를 자동으로 회수하여 메모리를 확보합니다.
  • 스택과 힙의 차이점은 무엇인가요?
    • 스택은 지역 변수와 메서드 호출 정보를 저장하고, LIFO(Last-In, First-Out) 방식으로 동작합니다. 힙은 동적으로 할당된 객체를 저장하고, 가비지 컬렉션에 의해 관리됩니다.
  • Dispose와 Finalize 메서드의 차이점은 무엇인가요?
    • Dispose는 개발자가 명시적으로 호출할 수 있는 메서드로, 자원을 즉시 해제합니다. Finalize는 가비지 컬렉터가 호출하며, 객체가 메모리에서 제거될 때 자원을 해제합니다.
  • C#에서 using 키워드의 역할은 무엇인가요?
    • using 키워드는 IDisposable 인터페이스를 구현한 객체의 Dispose 메서드를 자동으로 호출합니다. 이렇게 하면 자원을 효율적으로 해제할 수 있습니다.
  • 메모리 릭(Memory Leak)을 방지하기 위한 방법은?
    • 이벤트 핸들러를 적절히 해제하고, 사용하지 않는 객체에 대한 참조를 끊는 것이 중요합니다. 또, IDisposable을 구현하여 명시적으로 자원을 해제할 수 있습니다.
  • 값 타입과 참조 타입의 메모리 관리 차이점은?
    • 값 타입은 스택에 저장되고, 참조 타입은 힙에 저장됩니다. 값 타입은 스택 프레임이 사라질 때 자동으로 메모리가 해제되며, 참조 타입은 가비지 컬렉션에 의해 관리됩니다.
  • Weak Reference가 무엇이고 언제 사용하나요?
    • Weak Reference는 가비지 컬렉션의 대상이 될 수 있는 참조입니다. 객체가 더 이상 필요하지 않을 때 메모리를 쉽게 회수할 수 있도록 하기 위해 사용합니다.
  • Value Type과 Reference Type의 메모리 사용 방식을 설명해주세요.
    • Value Type은 스택에 저장되고, Reference Type은 힙에 저장됩니다. Value Type은 메모리 관리가 더 효율적이지만, 크기가 커지면 성능에 문제가 생길 수 있습니다.
  • C#에서의 메모리 누수를 방지하는 방법은?
    • IDisposable 인터페이스를 구현하여 관리되지 않는 리소스를 해제하거나, WeakReference를 사용해 참조를 유지하는 것이 좋습니다.
  • Stackalloc이 무엇이고 언제 사용하는지 설명해주세요.
    • Stackalloc은 스택에 메모리를 할당하는데 사용합니다. 주로 작은 배열이나 버퍼를 빠르게 할당할 때 사용합니다.
  • C#에서의 메모리 최적화 기법 중 하나를 들고 설명해주세요.
    • Object Pooling이 있습니다. 이 기법은 빈번히 생성과 해제가 이루어지는 객체를 미리 생성해 두고 재사용함으로써, 메모리 할당과 해제에 따른 오버헤드를 줄입니다.
  • 배열과 List의 메모리 사용에 대해서 설명해주세요.
    • 배열은 크기가 고정되어 있어 메모리 사용이 예측 가능하지만, List는 동적으로 크기가 변경되므로 내부적으로 배열을 다시 할당하는 과정이 있어 메모리 사용이 불안정할 수 있습니다.
  • C#에서 메모리 최적화 하는 법에 대해서 설명해주세요.
    • C#에서 메모리를 최적화하는 방법은 여러 가지가 있습니다.
    • 먼저, Garbage Collection에 의존하지 않고 IDisposable 인터페이스를 사용해서 관리되지 않는 리소스를 명시적으로 해제할 수 있습니다. 이렇게 하면 메모리 누수를 방지하고 성능을 개선할 수 있습니다.
    • 또한, 객체 풀링(Object Pooling)을 사용해서 빈번하게 생성과 해제가 발생하는 객체를 재사용할 수 있습니다. 이 방법은 메모리 할당과 해제에 따른 오버헤드를 줄이고 성능을 향상시킵니다.
    • Value Type과 Reference Type을 적절히 사용하는 것도 중요합니다. Value Type은 스택에 저장되므로 빠르게 접근 가능하지만, 크기가 커지면 문제가 될 수 있습니다. Reference Type은 힙에 저장되기 때문에 관리가 복잡할 수 있습니다.
    • Stackalloc이라는 키워드를 사용해서 스택에 메모리를 할당할 수도 있습니다. 이 방법은 작은 배열이나 데이터 구조를 빠르게 할당하고 해제하는 데 유용합니다.
    • 마지막으로, 불필요한 객체 생성을 피하는 것도 중요합니다. 예를 들어, 문자열 연산을 할 때 StringBuilder를 사용하거나, 컬렉션을 사용할 때 크기를 미리 할당하는 것이 효율적입니다.

자료구조

  • 배열과 연결 리스트의 차이점은 무엇인가요?
    • 배열은 메모리 상에서 연속적인 위치에 데이터를 저장하며, 빠른 접근이 가능합니다. 하지만 크기가 고정되어 있습니다. 연결 리스트는 각 노드가 포인터로 다음 노드를 가리키며, 동적 크기를 가집니다.
  • 스택과 큐의 차이점은 무엇인가요?
    • 스택은 LIFO(Last-In, First-Out) 방식으로 데이터를 저장하고, 큐는 FIFO(First-In, First-Out) 방식으로 데이터를 저장합니다.
  • 해시 테이블이란 무엇이고, 언제 사용하나요?
    • 해시 테이블은 키-값 쌍으로 데이터를 저장하며, 해시 함수를 통해 빠르게 데이터에 접근할 수 있습니다. 검색, 삽입, 삭제가 빠른 시간 안에 이루어져야 할 때 사용합니다.
  • 이진 트리와 이진 탐색 트리의 차이점은 무엇인가요?
    • 이진 트리는 각 노드가 최대 두 개의 자식 노드를 가지는 트리입니다. 이진 탐색 트리는 이진 트리의 일종이지만, 왼쪽 자식 노드는 부모 노드보다 작고, 오른쪽 자식 노드는 부모 노드보다 크다는 추가적인 조건이 있습니다.
  • 빅 오 표기법에 대해 설명해보세요.
    • 빅 오 표기법은 알고리즘의 성능을 평가하는 표기법입니다. 입력 크기에 따라 알고리즘의 시간 복잡도나 공간 복잡도를 나타냅니다.
  • 그래프와 트리의 차이점은 무엇인가요?
    • 그래프는 노드와 노드를 연결하는 간선으로 구성되며, 사이클이 있을 수 있습니다. 트리는 그래프의 한 종류로, 사이클이 없고, 루트 노드에서 시작해서 모든 노드가 정확히 하나의 부모 노드를 가집니다.
  • 동적 배열과 연결 리스트 중 어떤 것을 사용할지 어떻게 결정하나요?
    • 빠른 무작위 접근이 필요하면 동적 배열을, 삽입과 삭제가 빈번하고 순차적인 접근만 필요하다면 연결 리스트를 사용합니다.

 

블로그 이미지

RIsN

,
  1. 일본어 폰트 검색 사이트
블로그 이미지

RIsN

,

5줄 요약

  • JSONP(JSON with Padding)는 웹 개발에서 동일 출처 정책(Same-Origin Policy)을 우회하는 방법 중 하나입니다.
  • JSONP의 핵심 원리는 HTML에서 <script> 태그는 동일 출처 정책에 영향을 받지 않는다는 것입니다.
  • 따라서 JSONP를 사용하면 <script> 태그를 통해 다른 도메인에서 스크립트를 로드하고 실행할 수 있습니다.
  • JSONP 요청 시, 서버는 JSON 데이터를 콜백 함수로 감싸서 반환하며, 이 콜백 함수는 클라이언트에서 정의된 함수입니다.
  • JSONP는 몇 가지 보안 이슈(GET만 사용 가능한 점 등)와 단점이 있어 현대 웹 개발에서는 CORS를 사용합니다.

추가 내용

경험

블로그 이미지

RIsN

,

5줄 요약

  • SOP(Same-Origin Policy)는 웹 보안에 중요한 역할을 하는 웹 브라우저의 기본 보안 정책입니다.
  • 이 정책은 웹 애플리케이션 간의 상호작용에 제한을 두어, 다른 출처(origin)에서 로드된 스크립트가 해당 출처의 리소스에 접근하는 것을 방지합니다.
  • 이로써 사용자의 정보나 서버의 데이터가 악의적인 공격으로부터 보호됩니다.
  • Same-Origin Policy의 핵심은 스크립트가 동일한 출처(프로토콜, 도메인, 포트 번호)에서 로드되어야만 해당 출처의 리소스에 접근할 수 있게끔 하는 것입니다.
  • 그러나 웹 애플리케이션 간의 유용한 상호작용을 허용하기 위해 몇 가지 예외 사항(CORS, JSONP 등)이 존재합니다.

추가 내용

경험

블로그 이미지

RIsN

,

5줄 요약

  • CORS(Cross-Origin Resource Sharing)는 웹 브라우저에서 다른 도메인의 리소스에 접근할 수 있도록 허용하는 보안 메커니즘입니다.
  • 이 기능은 웹 애플리케이션 간의 상호작용을 증가시키고, 웹 서비스를 개선하는 데 도움이 됩니다.
  • 그러나 이를 통해 발생할 수 있는 보안 위협으로 인해, 브라우저는 기본적으로 동일 출처 정책(Same-Origin Policy)을 따릅니다.
  • 이 정책은 웹 페이지가 다른 도메인의 리소스에 접근하는 것을 제한합니다.
  • 서버는 응답에 'Access-Control-Allow-Origin'과 같은 특정 CORS 헤더를 포함시켜 클라이언트에게 리소스에 대한 접근을 허용하며 이러한 제한을 완화시킬 수 있습니다.

추가 내용

경험

블로그 이미지

RIsN

,

5줄 요약

  • 멀티 레포는 여러 개의 저장소를 사용하는 방식입니다.
  • 각각의 프로젝트마다 별도의 저장소를 생성하고, 서로 다른 저장소에서 개발된 코드를 필요한 경우 외부 라이브러리와 같이 가져와서 사용합니다.
  • 이 방식은 각각의 프로젝트를 독립적으로 관리할 수 있어서 빌드와 배포가 더욱 쉽고 빠릅니다.
  • 그러나 프로젝트 간의 코드 공유가 어려울 수 있고, 코드의 재사용성이 떨어질 수 있습니다.

추가 내용

경험

블로그 이미지

RIsN

,

5줄 요약

  • 모노 레포는 하나의 대규모 저장소에 모든 코드를 저장하는 방식입니다.
  • 즉, 모든 코드와 프로젝트는 하나의 저장소 안에 있으며, 하나의 버전 관리를 공유합니다.
  • 이 방식은 코드의 공유 및 재사용이 쉽고, 여러 프로젝트 간의 종속성 관리도 쉽게 할 수 있습니다.
  • 또한, 프로젝트를 관리하는데 필요한 도구 및 프로세스도 간소화됩니다.
  • 그러나 저장소의 크기가 커질수록 코드 관리 및 빌드 시간 등의 부담이 증가할 수 있습니다.

추가 내용

경험

블로그 이미지

RIsN

,

5줄 요약

  • 레지스터 최적화는 CPU 성능을 향상시키기 위한 중요한 작업입니다.
  • 레지스터 최적화를 위해 사용 빈도가 높은 변수나 함수를 레지스터에 저장하여 CPU가 빠르게 접근할 수 있도록 하는 것이 중요합니다.
  • 레지스터의 개수는 제한적이므로, 사용 빈도가 낮은 변수나 함수는 스택 메모리 등 다른 저장소에 저장하여 관리해야 합니다.
  • 컴파일러나 어셈블러에서 제공하는 최적화 옵션을 활용하거나, 코드를 직접 수정하여 레지스터 최적화를 할 수 있습니다.

추가 내용

경험

블로그 이미지

RIsN

,

5줄 요약

  • 캐시 미스는 CPU가 요청한 데이터가 캐시 메모리에 없어서, 메인 메모리에서 데이터를 가져와야 하는 상황입니다.
  • 캐시 미스가 발생하면, CPU가 메인 메모리에서 데이터를 가져와 캐시 메모리에 저장하고, 다시 해당 데이터에 접근합니다.
  • 캐시 미스는 전체 시스템의 성능을 저하시킬 수 있기 때문에, 캐시 메모리의 크기와 교체 알고리즘 등을 최적화하여 최소화하는 것이 중요합니다.
  • 프로그래머가 데이터의 지역성을 고려하여 프로그램을 작성하면, 데이터를 캐시 메모리에 더 잘 활용하여 성능을 향상시킬 수 있습니다.

추가 내용

경험

블로그 이미지

RIsN

,