CS 42

SOLID 원칙

📌 SOLID 원칙이란? SOLID 원칙은 객체 지향 프로그래밍(OOP)의 5가지 설계 원칙으로,소프트웨어를 유지보수하기 쉽게 설계하는 방법을 제시함. ✅ SOLID 원칙을 따를 경우: • 코드의 가독성과 재사용성이 높아짐. • 변경 사항이 최소한의 영향만 주도록 설계할 수 있음. • 유지보수가 쉬운 소프트웨어를 만들 수 있음. ✅ SOLID는 다음 5가지 원칙의 약어: 1. S → SRP (단일 책임 원칙, Single Responsibility Principle) 2. O → OCP (개방-폐쇄 원칙, Open-Closed Principle) 3. L → LSP (리스코프 치환 원칙, Liskov Substitution Principle) 4. I → ISP (인터페이스 분리 원칙, Interfac..

CS 2025.04.04

DSL

DSL(Domain Specific Language)이란? DSL(Domain Specific Language)이란 특정한 문제나 도메인을 표현하거나 해결하기 위해 특별히 설계된 프로그래밍 언어를 의미함. DSL은 Domain-Specific Language의 약자로, 우리말로는 ‘도메인 특화 언어’라고 번역할 수 있음. 여기서 도메인이란 특정한 영역이나 문제 범위를 의미함. 즉, 범용적인 프로그래밍 언어(예: Java, Python)가 모든 분야를 폭넓게 다룰 수 있는 언어라면,DSL은 특정한 분야나 문제에 맞춰서 간결하고 명확한 표현을 하도록 만들어진 언어임. DSL을 사용하는 목적 DSL을 사용하는 가장 큰 목적은 특정 분야에서 문제를 쉽고 직관적으로 표현하고 해결하기 위함임. 즉, • 특정 도메인..

CS 2025.03.25

JIT(Just-In-Time) 컴파일러

⚡ 1. JIT(Just-In-Time) 컴파일러란?JIT(Just-In-Time) 컴파일러 는 프로그램 실행 중(런타임)에 바이트코드를 네이티브 코드(기계어)로 변환하는 컴파일러입니다.JIT 컴파일러는 Java, C#, Kotlin 등의 언어에서 사용되며, 인터프리터 방식과 정적 컴파일 방식의 장점을 결합한 기술입니다. 💡 쉽게 말하면: • 일반적으로 컴파일은 실행 전에 이루어지지만, JIT 컴파일러는 실행 중에 컴파일을 수행 • 바이트코드(Bytecode)를 네이티브 코드(Native Code)로 변환하여 속도를 향상시킴 • Java Virtual Machine(JVM) 및 .NET CLR(Common Language Runtime) 에서 사용됨JIT 컴파일러 = 실행 중(Just-In-Time)에..

CS 2025.03.05

트러블 슈팅

1️⃣ 트러블슈팅(Troubleshooting)이란?트러블슈팅(Troubleshooting) 은 시스템, 소프트웨어, 네트워크 등에서 발생한 문제를 분석하고 해결하는 과정을 의미함.개발자, 시스템 관리자, 네트워크 엔지니어 등 IT 분야에서 필수적인 역량임. 💡 트러블슈팅의 핵심 목표:✅ 문제의 원인 파악 → 증상 분석, 로그 확인, 테스트 수행✅ 해결책 적용 → 코드 수정, 설정 변경, 서버 재시작, 패치 적용✅ 재발 방지 → 문제 해결 후, 근본적인 원인을 해결하여 동일한 문제 발생 방지 2️⃣ 트러블슈팅 과정 (Troubleshooting Steps)트러블슈팅은 단순한 버그 수정이 아니라 체계적인 문제 해결 과정을 따르는 것이 중요함.일반적인 문제 해결 과정은 다음과 같음. 🛠 1) 문제 정의 ..

CS 2025.02.28

SSE (Server-Sent Events)

**SSE(Server-Sent Events)**는 서버가 클라이언트에게 실시간으로 데이터를 푸시(Push)하는 기술임.클라이언트는 HTTP 연결을 유지하면서 서버로부터 지속적인 이벤트를 받을 수 있음. SSE는 WebSocket과 비슷하지만 단방향(서버 → 클라이언트) 통신에 최적화된 기술임. 📌 1. SSE(Server-Sent Events)란?✅ SSE의 정의  “SSE는 서버에서 클라이언트로 실시간 이벤트를 전송하는 단방향 통신 기술이다.”“HTTP 연결을 유지하면서 서버가 지속적으로 데이터를 보낼 수 있다.” ✅ SSE의 특징 • 서버 → 클라이언트 단방향 통신 (클라이언트 → 서버는 요청만 가능) • HTTP 기반 연결 (일반적인 HTTP 요청처럼 동작) • 자동 재연결 지원 (연결이 끊어지..

CS 2025.02.19

락(Lock)과 동시성

멀티스레드 환경에서 데이터 일관성을 유지하고 동시성을 제어하기 위해 **락(Lock)**을 사용함.락을 적용하는 방식에는 크게 **비관적 락(Pessimistic Lock)**과 **낙관적 락(Optimistic Lock)**이 있음. 📌 1. 동시성(Concurrency) 문제란?여러 개의 스레드(또는 프로세스)가 같은 데이터를 동시에 접근할 때, 데이터 일관성이 깨지는 문제를 의미함.예를 들어, 은행 계좌에서 잔액을 조회하고 동시에 출금하는 경우를 생각해보자. ✅ 예제 (동시성 문제) 1. 스레드 A: 계좌 잔액 조회 → 100,000원 2. 스레드 B: 계좌 잔액 조회 → 100,000원 3. 스레드 A: 50,000원 출금 → 50,000원 남음 4. 스레드 B: 30,000원 출금 → 70,0..

CS 2025.02.18

OCP 원칙 (Open-Closed Principle)

**OCP(Open-Closed Principle, 개방-폐쇄 원칙)**은 SOLID 원칙 중 하나로,**“확장에는 열려 있고, 변경에는 닫혀 있어야 한다.”**라는 개념을 의미함. 즉, 새로운 기능을 추가할 때 기존 코드를 수정하지 않고 확장할 수 있어야 함.이 원칙을 잘 지키면 코드의 유지보수성과 확장성이 증가하고, 버그 발생 가능성이 줄어듦.📌 1. OCP 원칙이란?✅ OCP(Open-Closed Principle)의 정의  “소프트웨어 요소(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하지만, 변경에는 닫혀 있어야 한다.”  • 확장(Open) → 새로운 기능 추가 가능해야 함. • 변경(Closed) → 기존 코드 수정 없이 기능을 추가해야 함. ✅ 왜 OCP가 중요할까? • 기존 코드를..

CS 2025.02.17

다형성

**다형성(Polymorphism)**은 같은 인터페이스나 부모 클래스를 공유하는 객체들이 각기 다른 방식으로 동작할 수 있는 성질을 의미함.즉, 하나의 객체가 여러 형태를 가질 수 있는 능력을 말함.📌 1. 다형성의 개념다형성은 **객체지향 프로그래밍(OOP)**의 중요한 개념 중 하나로, 상속(Inheritance)과 인터페이스(Interface)를 활용하여 구현됨. ✅ 다형성의 핵심 1. 하나의 부모 클래스 또는 인터페이스를 기반으로 여러 자식 클래스가 서로 다른 동작을 가질 수 있음. 2. 컴파일 시점(정적 바인딩)과 실행 시점(동적 바인딩)에서 객체의 타입이 달라질 수 있음. 3. 코드를 유연하게 작성할 수 있으며, 유지보수성과 확장성이 증가함.📌 2. 다형성의 종류다형성은 크게 **“컴파일..

CS 2025.02.16

DFS, BFS

DFS(깊이 우선 탐색) & BFS(너비 우선 탐색)1. DFS(Depth-First Search, 깊이 우선 탐색)개념DFS(Depth-First Search)는 그래프 탐색 알고리즘 중 하나로, 최대한 깊이 내려간 후, 더 이상 갈 곳이 없으면 되돌아오는 방식으로 탐색함.동작 과정시작 노드를 방문하고 스택에 넣음.현재 노드에서 방문하지 않은 인접 노드가 있으면 해당 노드를 방문하고 스택에 넣음.방문할 수 있는 모든 노드를 방문하면, 스택에서 노드를 하나씩 꺼내면서 탐색을 계속 진행함.스택이 비면 탐색이 종료됨.구현 방법스택(Stack) 또는 재귀(Recursion) 를 사용하여 구현할 수 있음.코드 (Java)import java.util.*;public class DFSSample { stat..

CS 2025.02.14

git branch 별 차이 (dev, origin dev, origin/dev)

명령어 병합 대상 최신 상태 여부병합 대상의 특성git merge dev로컬 dev 브랜치로컬 dev가 최신 상태여야 함로컬 브랜치git merge origin dev 로컬 origin/dev (원격의 로컬 복사본) git fetch로 최신 상태 보장리모트 트래킹 브랜치git merge origin/dev fetch된 최신 origin/dev 참조 항상 최신 상태 (fetch 필요)리모트 트래킹 브랜치명령어별 설명1) git merge devgit merge dev병합 대상: 로컬 dev 브랜치로컬 dev 브랜치가 최신 상태여야 제대로 병합할 수 있음.만약 로컬 dev가 최신 상태가 아니면 구버전 변경사항이 병합될 수 있는 위험이 있음.최신 상태 보장을 위해서는 병합 전에:git checkout dev ..

CS 2025.02.11