C# 50

C# 기초부터 고급까지 Chapter 2.8. 테스트 코드 작성 기초 – xUnit 완전정복 편

📘 Chapter 2.8: 테스트 코드 작성 기초 – xUnit 완전정복 편✅ 이 챕터에서 배울 것테스트 코드는 왜 필요한가?xUnit 설치 및 설정기본 테스트 메서드 작성법테스트 클래스 구성Assert 사용법데이터 기반 테스트 (Theory)의존성 있는 서비스 테스트하는 방법 (Mocking 개념 포함)1️⃣ 테스트 코드, 왜 필요한데?"코드가 돌아가는 게 아니라, 제대로 돌아가는지 확인하는 게 중요하다!"상황위험리팩터링 시 기존 기능 깨질 수 있음🚨 확인 불가팀원이 수정한 코드, 예상과 다르게 동작🚨 예외 발생외부 API 변화🚨 호출 실패✅ 이걸 예방하려면?→ 테스트 코드가 자동으로 돌면서 이상 여부를 알려줘야 한다!2️⃣ xUnit 시작하기✅ xUnit은 뭔데?.NET 진영에서 가장 널리 쓰..

C# 2025.05.02

C# 기초부터 고급까지 Chapter 2.7. 예외처리 전략 – Retry, Fallback, Polly 패턴

📘 Chapter 2.7: 예외처리 전략 – Retry, Fallback, Polly 패턴✅ 이 챕터에서 확실히 정리할 것기본 예외 처리 구조Retry 전략이란?Fallback 전략이란?Polly란 무엇인가?Polly 실전 사용법 (재시도, 대체 처리, 서킷 브레이커)실무에서 Polly 어떻게 쓰는지 패턴까지 정리1️⃣ 예외 처리 기본기✅ try-catch 기본 구조try{ // 실패할 수 있는 작업 CallExternalService();}catch (Exception ex){ Console.WriteLine($"에러 발생: {ex.Message}");}🧠 대부분 초보자들이 여기까지만 배운다.근데 실무는 이걸로는 택도 없다!!API가 한 번 실패했다고 그냥 끝내면 안 되지재시도 해봐..

C# 2025.05.01

C# 기초부터 고급까지 Chapter 2.6. Configuration 관리 – appsettings.json 구조와 환경별 분리 (feat. POCO 완전 이해 포함)

📘 Chapter 2.6: Configuration 관리 – appsettings.json 구조와 환경별 분리 (feat. POCO 완전 이해 포함)✅ 이번에 진짜 확실히 정리할 내용appsettings.json은 왜 필요한가?설정을 꺼내 쓰는 3가지 방법POCO 클래스란?환경별 설정 분리 정확한 구조user-secrets 비밀 정보 안전하게 숨기기실무 구성 Best Practice1️⃣ appsettings.json은 왜 필요하노?✅ 설정을 코드에 직접 때려박으면 어떻게 되노?var apiKey = "my-super-secret-api-key";👎 이거 배포하면 끝났다.운영용 키 노출수정할 때마다 재컴파일코드가 더러워짐환경에 따라 분기 처리 지옥✅ 그래서 나온 게 appsettings.json{ ..

C# 2025.05.01

C# 기초부터 고급까지 Chapter 2.5. 파일 입출력, 로그 남기기 – NLog, Serilog 예제

📘 Chapter 2.5: 파일 입출력, 로그 남기기 – NLog, Serilog 예제✅ 이 챕터에서 배울 것실무에서 로그 남기는 건 그냥 옵션이 아니라 생명줄이다.뭔 일 터졌을 때 로그가 없으면 원인 분석 자체가 불가능해진다!파일 입출력 기본스트림 처리 (StreamReader/Writer)실무 로깅 라이브러리: NLog와 Serilog각 라이브러리 비교, 설정법, 사용 예제실전 상황별 로그 패턴1️⃣ 파일 입출력 (File I/O) 기본📦 파일 쓰기string path = "log.txt";File.WriteAllText(path, "로그 한 줄!");📦 파일에 줄 단위로 추가 쓰기File.AppendAllText(path, "추가 로그\n");📖 파일 읽기string content = Fil..

C# 2025.04.30

C# 기초부터 고급까지 Chapter 2.4. LINQ 실무 활용법 – 쿼리 문법 vs 메서드 문법 완전정복

📘 Chapter 2.4: LINQ 실무 활용법 – 쿼리 문법 vs 메서드 문법 완전정복✅ 이 챕터에서 배울 것LINQ는 C# 개발자라면 반드시 마스터해야 할 핵심 도구!특히, 두 가지 문법 스타일(쿼리 vs 메서드) 을 구분 못하면실무에서 코드 읽기도, 디버깅도 헷갈리기 딱 좋다.이번 챕터에서 아래 전부 다 뽀갠다:LINQ란?쿼리 문법(Query Syntax)메서드 문법(Method Syntax)내부 동작 차이어떤 걸 써야 하는지 실무 기준 가이드실전 예제 비교1️⃣ LINQ란?✅ LINQ = Language Integrated QueryC# 언어 자체에서 컬렉션을 "SQL처럼" 다룰 수 있게 해주는 문법!📌 List, 배열, DB, XML, JSON 등등데이터 구조를 일관되게 다룰 수 있게 해주는..

C# 2025.04.30

C# 기초부터 고급까지 Chapter 2.3. async/await 완벽 이해 – Task, ValueTask, await 동작원리까지

📚 Chapter 2.3: async/await 완벽 이해 – Task, ValueTask, await 동작원리까지✅ 이 챕터에서 제대로 배울 것비동기(Asynchronous) 기본 개념async/await 기본 문법await 내부 동작 원리Task와 ValueTaskasync void 쓰면 왜 위험한지실무 패턴 총정리1️⃣ 비동기(Asynchronous)란?✅ 비동기 = 일 시켜놓고 결과 기다리면서 다른 일 한다.현실 비유로:분식집에서 떡볶이 주문사장님이 바로 떡볶이 만들면서 다른 손님 주문도 받음떡볶이 다 되면 "떡볶이 나왔습니다!" 알려줌✅ C#에서도 비슷하다!무거운 작업을 시키고 (ex. 파일 다운로드)기다리는 동안 다른 코드를 실행할 수 있다2️⃣ async/await 기본 구조🔥 async..

C# 2025.04.29

C# 기초부터 고급까지 Chapter 2.2. 의존성 주입(DI) – .NET 기본 DI 완전 정복

📚 Chapter 2.2: 의존성 주입(DI) – .NET 기본 DI 완전 정복1️⃣ "의존성(Dependency)"이란 무엇인가?✅ Dependency(의존성) = "내가 동작하려면 필요한 다른 것"예를 들면:자동차(고수준)가 엔진(저수준)에 의존한다NotificationService(고수준)가 IMessageSender(저수준)에 의존한다"내가 뭘 해야 하는데, 다른 놈한테 기대야 한다" 이거다!2️⃣ "문제는" 직접 new로 만들어 버린다는 거야🔥 나쁜 구조 예시public class NotificationService{ private EmailSender _emailSender = new EmailSender(); // 직접 new로 만듬 public void SendNotific..

C# 2025.04.28

C# 기초부터 고급까지 Chapter 2.1. SOLID 원칙 – 실무 예제로 쉽게 설명하기

📚 Chapter 2.1: SOLID 원칙 – 실무 예제로 쉽게 설명하기1️⃣ SOLID란 무엇인가? (큰 그림)✅ SOLID란?"좋은 객체지향 설계를 위한 5가지 핵심 원칙"프로그램이 변화에 강하고, 유지보수가 쉬운 구조를 만들기 위한 철칙!SOLID 이름 뜻:약어이름핵심 요약SSRP (Single Responsibility Principle)하나의 책임만 가져라OOCP (Open-Closed Principle)확장에는 열려있고, 변경에는 닫혀라LLSP (Liskov Substitution Principle)자식 클래스는 부모 클래스를 대체할 수 있어야 한다IISP (Interface Segregation Principle)덩치 큰 인터페이스는 쪼개야 한다DDIP (Dependency Inversio..

C# 2025.04.27

C# 기초부터 고급까지 Chapter 2.1.5. DIP (Dependency Inversion Principle) – 의존성 역전 원칙

📚 Chapter 2.1.5. DIP (Dependency Inversion Principle) – 의존성 역전 원칙✅ DIP란?"고수준 모듈은 저수준 모듈에 의존하면 안 된다.둘 다 추상(인터페이스, 추상 클래스)에 의존해야 한다."쉽게 말하면,구체적인 구현체에 직접 매달리지 말고인터페이스(추상)에 의존하라는 거다!📚 왜 DIP가 중요한가?문제 상황결과코드가 구체 구현에 묶여 있음기능 교체/확장 시 코드 수정 폭발테스트 힘듦Mock 객체로 대체 불가능확장성 제로새로운 기능 추가 때마다 대공사✅ DIP를 지키면 →기능 변경 자유로워지고테스트 더 쉬워지고코드 재사용성 쭉 올라간다!🛠️ 기본 나쁜 예제: DIP 위반public class EmailSender{ public void Send(str..

C# 2025.04.27

C# 기초부터 고급까지 Chapter 2.1.4. ISP (Interface Segregation Principle) – 인터페이스 분리 원칙

📚 Chapter 2.1.4. ISP (Interface Segregation Principle) – 인터페이스 분리 원칙✅ ISP란?"하나의 클라이언트가 자신이 사용하지 않는 메서드에 의존하지 않게 해야 한다."쉽게 말하면,"인터페이스는 작게 작게 쪼개라!""필요한 기능만 가진 인터페이스만 제공해라!"📚 왜 ISP가 중요한가?문제 상황결과거대한 인터페이스필요 없는 메서드도 강제로 구현해야 함코드 복잡성 증가무쓸모 코드들이 시스템을 오염시킴유지보수 난이도 상승하나 바꾸면 연쇄 수정 지옥✅ ISP를 지키면 →필요한 기능만 깔끔하게 다루고,코드 수정 범위 최소화된다!🛠️ 기본 나쁜 예제: ISP 위반덩치 큰 인터페이스public interface IWorker{ void Work(); voi..

C# 2025.04.27