전체 글 106

[CS] TCP vs UDP, 뭐가 다른가

TCP와 UDP의 차이, 3-way handshake가 뭔지, 각각 언제 쓰는지 간단히 정리했습니다.공통점둘 다 OSI 전송 계층(4계층) 프로토콜로, 데이터를 "어느 포트로 보낼지" 정해서 전달하는 역할을 합니다. 차이는 연결을 맺고 전달을 보장하느냐에 있습니다. TCP: 연결형, 신뢰성 보장데이터를 보내기 전에 먼저 "연결"을 맺고, 상대가 잘 받았는지 확인해가며 순서대로 전달합니다.연결 설정: 3-way handshake로 연결을 맺은 뒤에만 데이터 전송 시작신뢰성: 패킷이 유실되면 재전송, 순서가 바뀌면 재정렬속도: 확인 절차가 있어서 UDP보다 느림예시: 웹(HTTP), 이메일, 파일 전송처럼 데이터가 하나라도 빠지면 안 되는 경우 UDP: 비연결형, 속도 우선연결 설정 없이 바로 데이터를 보내..

DEV/cs 2026.09.18

[CS] 데드락(Deadlock)이란 - 발생 조건과 해결 방법

데드락이 뭐고 왜 생기는지, 발생하는 4가지 조건과 예방/해결 방법을 자바 예시와 함께 정리했습니다.데드락이란두 개 이상의 스레드(또는 프로세스)가 서로가 가진 자원을 기다리느라, 아무도 진행하지 못하고 영원히 멈춰버리는 상태입니다. java// 스레드 A: lock1을 잡고 lock2를 기다림synchronized (lock1) { synchronized (lock2) { ... }}// 스레드 B: lock2를 잡고 lock1을 기다림synchronized (lock2) { synchronized (lock1) { ... }}A가 lock1을 잡은 채 lock2를 기다리는데, 마침 B가 lock2를 잡은 채 lock1을 기다리고 있으면 둘 다 영원히 풀리지 않습니다. 이게 데드락입니다.발생..

DEV/cs 2026.09.17

[CS] JAVA 가비지 컬렉션(GC)이란

자바 가비지 컬렉션이 뭐고 왜 필요한지, Young/Old 영역 구조와 동작 원리를 간단히 정리했습니다.가비지 컬렉션이란더 이상 사용하지 않는 객체를 JVM이 자동으로 찾아서 메모리에서 해제해주는 기능입니다. C/C++처럼 개발자가 직접 free()를 호출해 메모리를 해제할 필요 없이, JVM이 "누구도 참조하지 않는 객체"를 판단해서 알아서 치워줍니다. javaObject obj = new Object(); // 힙에 객체 생성, obj가 참조obj = null; // 참조를 끊음 → 이 객체는 이제 아무도 참조하지 않음(가비지)// GC가 실행되면 이 객체가 메모리에서 회수됨가비지인지 어떻게 판단하나간단히 말하면, 아무 변수도 가리키고 있지 않은 객체가 가비지입니다. 위 예시처럼 obj = null을..

DEV/cs 2026.09.16

[CS] JAVA 인터페이스 vs 추상클래스, 뭐가 다른가

인터페이스와 추상클래스의 차이를, 코드 예시와 함께 간단히 정리했습니다.인터페이스와 추상클래스는 모두 객체지향 프로그래밍에서 공통된 규칙이나 기능을 정의하기 위해 사용합니다.하지만 가장 큰 차이는 “무엇을 위한 것인가?”입니다.인터페이스 → 클래스가 어떤 기능을 해야 하는지 규격을 정하는 것추상클래스 → 여러 클래스가 공통으로 사용하는 기능을 물려주는 것인터페이스(Interface)인터페이스는 클래스가 어떤 동작을 반드시 제공해야 하는지 규격(계약)을 정의합니다.interface Flyable { void fly();}interface Swimmable { void swim();}Flyable은 "날 수 있어야 한다"는 규격을 정의하고,Swimmable은 "헤엄칠 수 있어야 한다"는 규격을 정..

DEV/cs 2026.09.15

[CS] 객체지향과 절차지향 프로그래밍이란, 비교

절차지향과 객체지향 프로그래밍이 뭐가 다른지, 같은 예제를 두 방식으로 짜보면서 비교했습니다. 절차지향(Procedural)이란"데이터"와 "그 데이터를 처리하는 함수"를 분리해서, 위에서 아래로 순서대로 실행되는 절차(함수 호출) 중심으로 프로그램을 짜는 방식입니다.C언어가 대표적입니다.// 절차지향 스타일: 데이터(구조체 느낌)와 함수가 분리됨class Account { int balance;}class AccountService { static void withdraw(Account account, int amount) { if (account.balance Account는 데이터만 가지고 있고, withdraw라는 함수가 그 데이터를 밖에서 조작합니다. 데이터와 로직이 따로..

DEV/cs 2026.09.14

[SQL] NoSQL이란 - RDBMS와 비교 + 예시

NoSQL이 뭔지, RDBMS와 뭐가 다른지, 4가지 종류와 각 예시(Redis, MongoDB 등)를 간단히 정리했습니다.NoSQL이란"Not Only SQL"의 줄임말로, 관계형 데이터베이스(RDBMS)처럼 정해진 테이블/행-열 구조를 따르지 않는 데이터베이스를 통틀어 부르는 말입니다. RDBMS와 NoSQL 비교 - RDBMS (예: MySQL) - 스키마 고정, 테이블 형태로 저장id - name - order_id 1철수1001 - NoSQL (예: MongoDB, 문서형) - 스키마 자유, 필드가 문서마다 달라도 됨.* 아래는 이해를 돕기 위해 JSON으로 표현한 것일 뿐, 실제 저장 형식은 DB마다 다릅니다(MongoDB는 내부적으로 BSON이라는 이진 포맷 사용). json{ "id": ..

DEV/SQL 2026.09.13

[AI] LLM, RAG, MCP 정리

LLM, RAG, MCP가 각각 무엇인지 간단하게 정리해보겠습니다. LLM (Large Language Model) Large → 대규모Language → 언어Model → 모델 LLM은 대량의 텍스트 데이터를 학습한 언어 모델입니다.사용자의 질문을 이해하고, 학습한 내용을 바탕으로 다음에 올 단어나 문장을 예측하면서 답변을 생성합니다. 예를 들어 사용자가 "자바에서 인터페이스란?"이라고 질문하면, LLM은 학습한 프로그래밍 지식을 바탕으로 답변을 만들어냅니다. 하지만 학습에 포함되지 않은 최신 정보나 특정 회사의 내부 문서처럼 모델이 직접 알 수 없는 정보는 답변에 활용할 수 없습니다.RAG (Retrieval-Augmented Generation) Retrieval → 검색, 가져오기Augmented..

DEV/AI 2026.09.12

[CS] 전략 패턴(Strategy Pattern)이란

같은 문제를 해결하는 여러 알고리즘을 각각 캡슐화해서 런타임에 교체 가능하게 만드는 전략 패턴을, 간단한 자바 예시로 정리했습니다.전략 패턴이란같은 문제를 해결하는 여러 알고리즘을 각각 캡슐화하여, 런타임(실행 시점)에 교체 가능하도록 만드는 행동 디자인 패턴입니다. "어떻게 할지(How)"를 사용하는 쪽(Context)에서 분리해서, 알고리즘(Strategy)만 갈아끼울 수 있게 만드는 게 핵심입니다.예시: 결제 수단결제 수단이 카드/카카오페이/포인트로 여러 개 있고, 상황에 따라 골라 써야 하는 경우를 생각해보겠습니다 나쁜 예 (if-else로 분기)javapublic void pay(String type, int amount) { if (type.equals("CARD")) { /..

DEV/cs 2026.09.11

[Spring/SpringBoot] 스프링(Spring) vs 스프링부트(Spring Boot) 차이

스프링 프레임워크와 스프링부트가 정확히 뭐가 다른지, 설정 방식과 서버 구동 방식을 중심으로 간단히 정리했습니다.정리스프링(Spring Framework)은 자바 기반 애플리케이션 개발을 위한 프레임워크로, DI, AOP, MVC 등 다양한 기능을 제공합니다.DI: 객체가 필요한 걸 직접 만들지 않고 밖에서 넣어주는 것→ “필요한 부품을 내가 직접 만드는 게 아니라 외부에서 받아서 사용하는 것”AOP: 여러 곳에서 반복되는 기능을 따로 빼서 필요한 곳에 자동으로 적용하는 것→ “로그나 트랜잭션 같은 공통 기능을 비즈니스 코드와 분리하는 것”MVC: 프로그램 역할을 Controller / Model / View로 나눠서 관리하는 것→ Controller = 요청 처리, Model = 데이터·로직, View..

DEV/SpringBoot 2026.09.10

[SpringBoot] 스프링 시큐리티 활용하기 2편 - 세션 관리와 권한별 접근 제어

지난 글에서 스프링 시큐리티의 기본 개념과 설정을 다뤘다면, 이번엔 세션을 어떻게 관리하는지와 사용자 권한(Role)에 따라 접근을 제어하는 방법을 코드와 함께 정리했습니다.이번 글에서 다룰 것지난 글에서는 스프링 시큐리티가 필터 체인 위에서 인증을 처리한다는 것과, 가장 기본적인 로그인 설정을 살펴봤습니다. 이번에는 조금 더 실무에 가까운 두 가지, 세션 관리와 권한별 접근 제어를 다뤄보겠습니다.1. 세션 관리스프링 시큐리티는 서블릿 컨테이너(톰캣 등)가 제공하는 HttpSession을 그대로 가져다가, 그 안에 인증 정보를 저장해두는 방식으로 동작합니다. 이 세션을 어떻게 쓸지는 sessionManagement()로 설정합니다. javahttp.sessionManagement(session -> se..

DEV/SpringBoot 2026.09.09