728x90

전체 글 122

SQL SELECT 쿼리 실행 순서 완벽 정리

SQL에서 SELECT 문은 가장 자주 사용되는 명령어 중 하나입니다. 하지만 우리가 작성하는 SELECT 문은 실제로 데이터베이스가 처리하는 순서와 다릅니다. 이 글에서는 SQL의 SELECT 쿼리가 실제로 어떻게 실행되는지를 단계별로 자세히 알아보겠습니다.우리가 흔히 쓰는 SELECT 문SELECT name, ageFROM usersWHERE age > 20GROUP BY ageHAVING COUNT(*) > 1ORDER BY age DESCLIMIT 10;이 쿼리는 겉보기에는 위에서 아래로 순차적으로 실행되는 것처럼 보이지만, 실제로 데이터베이스가 처리하는 순서는 전혀 다릅니다.SELECT 쿼리의 실제 실행 순서SQL 표준에 따른 SELECT 문은 아래와 같은 순서로 실행됩니다:FROM테이블이나 뷰..

SQL 2025.05.09

NAS, DAS, SAN: 스토리지의 세 가지 축을 이해하자

현대의 IT 인프라에서 데이터 저장은 단순한 하드디스크 이상의 의미를 가집니다. 기업의 규모가 커질수록 스토리지의 선택은 성능, 확장성, 안정성에 직접적인 영향을 미칩니다. 오늘은 대표적인 스토리지 아키텍처인 NAS, DAS, SAN의 개념과 차이점을 비교해보겠습니다.1. DAS (Direct Attached Storage): 직접 연결 스토리지개념DAS는 서버나 컴퓨터에 직접 연결된 저장장치를 말합니다. 예를 들어 내 컴퓨터에 연결된 SSD, 외장하드 등이 이에 해당합니다.특징속도: 로컬 연결이기 때문에 빠른 I/O 속도 제공설치 용이성: 간단한 설치, 별도 네트워크 필요 없음확장성 부족: 장비 하나에만 연결되므로 여러 시스템과 공유 어려움사용 예소규모 서버개인용 백업고속 작업이 필요한 로컬 환경2. ..

IT 2025.05.08

데이터 오류 검출의 핵심! CRC와 체크섬 완전 정리

데이터 통신이나 파일 저장 과정에서 가장 중요한 것 중 하나는 정확성입니다. 데이터가 손상되거나 변경되었는지를 검증하기 위해, 우리는 다양한 오류 검출 기법을 사용합니다. 그중에서도 많이 쓰이는 대표적인 두 가지 방법이 체크섬(Checksum)과 CRC(Cyclic Redundancy Check)입니다.이번 포스트에서는 이 두 가지 기술이 무엇이고, 어떻게 동작하는지, 그리고 차이점은 무엇인지를 쉽게 정리해보겠습니다. 체크섬(Checksum)이란?체크섬은 데이터의 각 바이트(혹은 워드)를 단순히 더한 값을 기반으로 오류를 감지하는 방식입니다.작동 방식송신 측에서 데이터를 일정 단위로 나눈 뒤, 각 값을 더해서 "합"을 구합니다.이 합의 하위 비트(예: 8비트, 16비트)를 체크섬으로 보냅니다.수신 측도 ..

JPA에서 @Enumerated 사용할 때 주의사항 정리

JPA를 사용하면서 enum 타입을 매핑할 때 자주 사용되는 애노테이션이 @Enumerated입니다. 하지만 잘못 사용하면 치명적인 데이터 오류로 이어질 수 있으므로 주의가 필요합니다. 이 글에서는 @Enumerated의 사용법과 왜 EnumType.ORDINAL을 피해야 하는지 자세히 정리합니다. @Enumerated란?Java의 enum 타입을 JPA 엔티티 필드와 DB 컬럼 간에 어떻게 매핑할지 지정하는 애노테이션입니다.@Enumerated(EnumType.STRING)private Status status;@Enumerated는 기본적으로 EnumType.ORDINAL 방식으로 동작합니다. 타입설명EnumType.ORDINALenum의 순서(index) 를 DB에 저장 (예: 0, 1, 2)Enu..

JPA 2025.05.01

JPA 연관관계 정리 (단방향, 양방향 관계 포함)

JPA(Java Persistence API)에서는 엔티티 간의 관계를 정의할 때 단방향과 양방향 관계를 설정할 수 있습니다. 이 관계들은 Many-to-One, One-to-Many, One-to-One, Many-to-Many 등 다양한 매핑 관계와 함께 설정할 수 있으며, 각 방향에 따라 데이터 흐름과 관계 관리 방식이 달라집니다.이번에는 단방향과 양방향 관계를 포함한 JPA 관계 설정을 정리해 보겠습니다.1. 단방향 관계 (One-Way Relationship)단방향 관계는 한 엔티티에서만 다른 엔티티를 참조하는 관계입니다. 즉, 한 쪽에서만 연관된 엔티티를 관리하고, 다른 쪽에서는 해당 관계를 알지 못하는 형태입니다. 이 경우, 양쪽 엔티티에서 연관된 객체를 조회하거나 수정할 수 없습니다.예시:..

JPA 2025.04.29

양방향 매핑에서 연관관계의 주인에 값을 입력하지 않은 실수

JPA(Java Persistence API)를 사용하면서, 특히 양방향 연관관계를 매핑할 때 자주 발생하는 실수 중 하나는 연관관계의 주인에 값을 제대로 설정하지 않는 것입니다. 이 실수는 데이터베이스에 저장되는 결과가 의도한 대로 동작하지 않거나, 예상치 못한 오류가 발생하는 원인이 됩니다.1. 양방향 연관관계란?JPA에서 양방향 연관관계는 두 개의 엔티티 간에 서로를 참조하는 구조를 말합니다. 예를 들어, Member와 Team 엔티티가 있을 때, Member는 Team을 참조하고, Team은 여러 Member들을 참조하는 관계가 있을 수 있습니다.예시: Member와 Team의 양방향 관계@Entitypublic class Member { @Id @GeneratedValue pri..

JPA 2025.04.29

데이터 중심 설계와 객체 중심 설계의 차이 – JPA 예제로 쉽게 이해하기

안녕하세요! 오늘은 데이터 중심으로 모델링한 예제가 왜 협력 관계를 만들 수 없는지 쉽게 설명해볼게요.우선 아래 코드를 보면서 어떤 부분이 문제가 되는지 살펴봅시다.Team team = new Team();team.setName("TeamA");em.persist(team);Member member = new Member();member.setUsername("memberA");member.setTeamId(team.getId());em.persist(member);Member findMember = em.find(Member.class, member.getId());Long findTeamId = findMember.getTeamId();Team findTeam = em.find(Team.class,..

JPA 2025.04.28

JPA에서 플러시(Flush)와 커밋(Commit)의 차이 + 트랜잭션 관리 완벽 정리

JPA를 공부하다 보면 자주 마주치는 개념 중 하나가 바로 플러시(Flush)와 커밋(Commit)입니다. 이 둘은 비슷해 보이지만 실제로는 역할과 시점이 다릅니다. 또한, 트랜잭션의 관리 방식도 함께 이해해야 JPA를 제대로 활용할 수 있습니다.이 글에서는 플러시와 커밋의 차이, 그리고 트랜잭션의 흐름까지 쉽게 정리해보겠습니다.1. 플러시(Flush)란?정의: JPA의 영속성 컨텍스트(1차 캐시)에 저장된 변경 내용을 DB에 SQL로 반영하는 작업입니다.중요: 플러시는 트랜잭션을 끝내지 않습니다. 단순히 SQL이 실행될 뿐이고, 트랜잭션은 계속 유지됩니다.언제 플러시가 일어날까?직접 호출: em.flush()JPQL 실행 전: 정확한 결과를 위해 자동 플러시커밋 직전: 자동으로 플러시 후 커밋 진행2...

JPA 2025.04.27

JPA 기본키 매핑 전략 완벽 정리

JPA(Java Persistence API)를 사용할 때 가장 먼저 고민하게 되는 부분 중 하나가 바로 기본키(Primary Key) 매핑 전략입니다. 엔티티(Entity)는 데이터베이스 테이블과 매핑되기 때문에, 각 엔티티에는 반드시 고유한 식별자(Primary Key)가 필요합니다.이번 포스팅에서는 JPA에서 제공하는 기본키 매핑 전략에 대해 하나씩 자세히 알아보겠습니다.1. 기본키 매핑 방식의 종류JPA에서는 기본키를 매핑할 때 총 4가지 전략을 제공합니다.직접 할당 (Assigned, 직접 설정)자동 증가 (IDENTITY)시퀀스 (SEQUENCE)테이블 (TABLE)2. 직접 할당 (Assigned)@Idprivate String id;개발자가 직접 기본키 값을 지정합니다.자동 생성되지 않기 ..

JPA 2025.04.26

JPA 영속성과 캐시의 관계 – 캐시처럼 동작하는 영속성 컨텍스트

JPA = ORM + 캐시?JPA를 쓰다 보면 마치 자동으로 캐시를 써주는 것 같은 경험을 하게 됩니다. 같은 데이터를 여러 번 조회해도 SQL 쿼리가 한 번만 날아가고, 트랜잭션 내에서 바뀐 값이 자동으로 DB에 반영되기도 하죠. 이 모든 비밀은 영속성 컨텍스트에 있습니다.1. 영속성 컨텍스트는 1차 캐시다JPA에서 영속성 컨텍스트는 1차 캐시 역할을 합니다.1차 캐시란?트랜잭션 범위 내에서만 유효한 메모리 캐시입니다.동일한 EntityManager에서 같은 엔티티를 여러 번 조회해도 DB에서 재조회하지 않고 캐시에서 반환합니다.2. persist()와 캐시의 관계📍 persist() 호출 시엔티티는 영속성 컨텍스트에 저장됩니다.이후 해당 엔티티는 1차 캐시에 존재합니다.같은 엔티티를 다시 조회하면 ..

JPA 2025.04.24
728x90