전체 글 35

[Git] CI/CD

1. GitHub Actions 워크플로우란?GitHub Actions 워크플로우(Workflow)는 하나 이상의 작업을 실행하는 자동화된 절차를 의미합니다.리포지토리의 .github/workflows 디렉토리에 YAML 파일로 정의되며, 코드 빌드, 테스트, 패키징, 릴리즈, 배포 등 소프트웨어 개발 생명주기(SDLC)의 다양한 단계를 자동화하는 데 사용됩니다. name: Simple-Triggerson: # 1. 특정 브랜치에 코드가 푸시되었을 때 push: branches: [ "main", "dev" ] # 2. 메인 브랜치로 Pull Request가 생성되거나 업데이트될 때 pull_request: branches: [ "main" ] # 3. 매일 정해진 시간(예: 새벽 3..

Git 2026.02.15

[AWS] RDS의 이점

1. RDS를 활용하는 주요 이점AWS RDS(Relational Database Service)는 단순한 DB 설치를 넘어, 운영의 복잡성을 AWS가 대행해주는 서비스입니다. 주요 이점은 다음과 같습니다.자동화된 운영 관리: OS 패치, DB 엔진 업데이트, 백업 및 복구(Snapshot)가 자동화되어 있습니다. 이를 통해 운영 인력은 단순 반복 작업 대신 비즈니스 로직 최적화에 집중할 수 있습니다.고가용성 및 재해 복구: 클릭 몇 번으로 동기식 복제본을 구성할 수 있습니다. 메인 DB에 장애가 발생하면 자동으로 예비 복제본으로 전환(Failover)되어 서비스 중단을 최소화합니다.간편한 확장성: 트래픽 증가 시 클릭만으로 인스턴스 사양을 높이거나(Scale-up), 읽기 전용 복제본(Read Repl..

네트워크 2026.02.15

[DevOps] 컨테이너 기술

컨테이너 기술컨테이너를 이해하려면 기존 서버 → VM → 컨테이너 순서로 알아야 합니다. 1. 기존 서버하나의 OS 위에 여러 App 실행문제: App1 메모리 폭주 → App2까지 느려짐2. 가상머신(VM)기존 서버의 문제점을 개선OS → 하이퍼바이저 → Guest OS별로 App 격리문제: 용량을 많이 차지한다. OS 여러 개 → 용량 GB 단위 개념 등장 년도1964-67: IBM CP-40/CP-67 (최초 하이퍼바이저 개념)1972: IBM VM/370 (상용화)1999: x86 VM (VMware)3. 컨테이너 기술기존 가상머신의 문제점을 개선OS를 각각 가지지 않고 공유함장점:용량 MB 단위시작 초 단위서버 밀도 2-3배개념 등장 년도1979: chroot (격리 기반)2000: FreeBS..

네트워크 2026.02.08

[Java] Mockito

1. Mock: “완전한 가짜, 기본값만 돌려줌”개념실제 로직이 전혀 없는 가짜 객체입니다.메서드를 호출해도 기본값(null, 0, false 등)만 반환하고, 아무 일도 안 합니다.테스트에서 “이 메서드가 이렇게 호출됐는지” 같은 행위(호출 여부, 횟수)를 검증할 때 많이 씁니다.List list = Mockito.mock(List.class);// 실제로는 리스트에 아무것도 안 들어감list.add("a");assertEquals(0, list.size()); // 사이즈는 0 (진짜 add 안 됨)verify(list).add("a"); // add("a")가 불렸는지만 확인 언제 Mock을 쓰냐?테스트 대상 코드가 의존성(Repository, 외부 API,..

Java 2026.02.01

[Java] 입력값 검증의 범위와 책임

애플리케이션의 입력값 검증의 범위와 책임을 어떻게 나눌 것인가?1. Presentation 계층 (@Controller + @Valid)사용자 입력의 형식, 필수값 여부, 문자열 길이 등 기본적인 유효성 검증을 수행합니다.목적은 빠른 피드백과 사용자 경험 향상입니다.@Valid와 Bean Validation 어노테이션을 사용하여 구문적 검증(Syntactic Validation)을 수행합니다.public class UserRegistrationRequest { @NotBlank(message = "아이디는 필수 입력값입니다.") @Size(min = 4, max = 20, message = "아이디는 4~20자 사이여야 합니다.") private String username; @Em..

Java 2026.02.01

[Java] 모니터링 - Prometheus와 Grafana

1. 모니터링나무위키: 어떠한 대상의 상태를 주의깊게 관찰, 주시를 한다는 의미로 쓰이며, 다양한 분야에서 고유한 뉘앙스로 활용되는 어휘다.애플리케이션을 안정적으로 운영하기 위해서는 서버의 건강 상태와 비정상 징후를 실시간으로 체크해야 한다.모니터링이 부재할 경우 서비스 장애 대응이 늦어지고 사용자 경험이 저하될 수 있다.주요 모니터링 대상 (예시)비즈니스 오류: 잘못된 입력값 유입 및 비정상적인 데이터 흐름 탐지.애플리케이션 예외: 예상치 못한 Runtime Exception 및 에러 로그 발생 모니터링.시스템 리소스: CPU 사용량, 메모리(Heap) 점유율, 디스크 I/O, 네트워크 트래픽 등.인프라 및 연동: 외부 API 호출 지연, 데이터베이스(DB) 연결 상태 및 커넥션 풀 확인.2. 모니터링..

Java 2026.02.01

[DB] Transaction, ACID

1. 트랜잭션(Transaction)이란?트랜잭션은 하나의 논리적 작업 단위를 말하며, 이 단위 내의 작업이 모두 성공하거나 모두 실패해야 하는 작업 집합.데이터베이스에서는 일관성 있는 상태를 유지하기 위해 반드시 필요한 개념.트랜잭션은 단순히 작업 하나가 아니라, 여러 작업(작업1 → 2 → 3)을 묶은 것.2. ACID란?데이터베이스 관리 시스템(DBMS)에서 트랜잭션 처리의 신뢰성을 보장하기 위한 네 가지 주요 속성.데이터의 정확성과 일관성을 유지하면서 데이터베이스 시스템이 다양한 오류 상황에서도 신뢰성 있게 동작할 수 있도록 해준다.2-1. A (Atomicity/원자성)트랜잭션의 연산은 모두 성공적으로 실행되거나 아무것도 실행되지 않아야 함을 의미한다.즉, 트랜잭션 내의 모든 작업이 완료되거나,..

DB 2026.01.14

[Java] ORM의 N+1 문제

📝 N+1 구현 자료 GitHub GitHub - castle-bird/castle-bird-lab: 마주한 이슈들을 해결하고 기록하는 곳마주한 이슈들을 해결하고 기록하는 곳. Contribute to castle-bird/castle-bird-lab development by creating an account on GitHub.github.com 1. N+1이란?JPA와 같은 ORM(객체 관계 매핑) 기술에서 발생하는 성능 문제하나의 쿼리(1)를 실행했을 때 연관된 객체를 불러오기 위해 N개의 추가 쿼리가 반복적으로 실행데이터베이스 부하와 성능 저하를 야기 ⭐@ManyToOne(fetch = FetchType.LAZY)의 게으른 로딩시 문제가 발생.2. N+1의 원인 및 코드연관된 엔티티를 불러올 ..

Java 2026.01.13

[DB] 정규화, 역정규화

1. 정규화 (Normalization)정규화(Normalization)란 관계형 데이터베이스 설계에서 데이터의 중복을 최소화하고, 무결성을 보장하기 위해 데이터를 구조화하는 프로세스를 말합니다.잘못 설계된 테이블 속성 간의 종속성을 제거하여, 데이터가 중복되거나 이상 현상이 생기지 않도록 테이블을 분해하는 과정입니다.→ "데이터를 성격에 맞게 가장 작은 단위로 깔끔하게 쪼개는 작업"입니다. 1-1. 제1 정규형 (1NF)테이블의 컬럼 값은 반드시 원자값(Atomic Value)이어야 하며, 반복되는 그룹(Repeating Group)이 존재해서는 안 된다.→ "칸 하나에 값 하나만 담아라."원자값(Atomic Value) 확보: 한 컬럼에 여러 개의 값이 들어간 경우(예: 수업 컬럼에 '헬스, 골프'..

DB 2026.01.06

[DB] DDL, DML, DCL

📖데이터베이스 언어(SQL)는 그 목적과 기능에 따라 크게 정의어(DDL), 조작어(DML), 제어어(DCL)로 분류됩니다.DDL(Data Definition Language): 데이터를 담는 그릇(Column/스키마)을 만들거나 제거하는 언어DML(Data Manipulation Language): 그릇에 담긴 내용물(Row/데이터)을 넣고 빼고 수정하는 언어DCL(Data Control Language): 그릇에 손을 댈 수 있는 사람(User/권한)을 정하는 언어 1. DDL (Data Definition Language, 데이터 정의어) "데이터의 그릇(Structure)을 만드는 언어"데이터베이스의 골격(Schema)을 정의하거나 수정할 때 사용합니다.테이블의 컬럼(Column), 데이터 타입..

DB 2026.01.05