Wing Pointer - Text Select
[JPA] JPA @GeneratedValue 전략별 차이와 동작 원리
·
Backend/Java
JPA에서 ID 생성 전략에 대해 설명해 주세요. 엔티티를 데이터베이스에 저장할 때 가장 먼저 필요한 것은 식별자(Primary Key)이다. JPA에서는 이 식별자를 직접 할당할 수도 있고, 자동으로 생성되도록 설정할 수 있다. 이번 글에서 JPA의 `@GeneratedValue`를 활용한 자동 키 생성 전략을 중심으로 정리해 보고자 한다.ID 직접 할당 방식가장 단순한 방식으로 `@Id` 어노테이션만 붙여서 개발자가 직접 ID 값을 설정할 수 있다.@Entitypublic class Member { @Id private Long id; // 직접 ID 할당 private String name;}이런 직접 할당 방식은 외부 시스템과 연동되거나 식별자 규칙이 복잡한 경우, 수동으로 ID ..
[Java] 객체를 복사하는 방법 - 얕은 복사, 깊은 복사
·
Backend/Java
얕은 복사와 깊은 복사에 대해서 설명해 주세요. Java에서 객체를 복사할 때 얕은 복사와 깊은 복사는 중요한 차이를 가진다.얕은 복사는 객체의 참조값을 복사하기 때문에 복사한 객체를 수정하면 원본 객체에도 영향을 미친다.반면 깊은 복사는 객체의 값 자체를 복사하여 완전히 새로운 객체를 생성하므로, 원본과 복사본이 서로 독립적으로 동작한다. 객체 복사의 필요성Java에서 객체를 복사할 때 단순히 `=` 연산자를 사용하면 참조(reference)만 복사된다. 즉, 두 변수가 같은 객체를 가리키게 되어 한쪽에서 값을 바꾸면 다른 쪽도 함께 변경된다. 이 문제를 해결하기 위해 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) 개념이 등장하게 되었다. 예제 코드로 차이점 알아보기class Bo..
[MySQL] 트랜잭션의 격리수준이란?
·
Backend/Database
트랜잭션 격리 수준은 무엇인가요? 데이터베이스에서 트랜잭션은 ACID 특성을 따르는데, 그중 하나가 바로 Isolation(고립성)이다. 이는 여러 트랜잭션이 동시에 실행될 때, 서로의 작업에 영향을 주지 않고 독립적으로 수행되도록 보장하는 성질을 말한다.하지만 완벽하게 고립시킬수록 성능이 떨어지기 때문에, 데이터베이스는 상황에 따라 얼마나 강하게 트랜잭션을 격리할지를 조정할 수 있다.이때의 기준을 바로 트랜잭션 격리 수준(Isolation Level)이라고 한다. 이번 글에서는 트랜잭션의 격리 수준이란 무엇인지, 그리고 각 수준별로 어떤 특징과 차이가 있는지 정리해보고자 한다. 트랜잭션 격리수준이란?트랜잭션의 격리 수준(Isolation Level)은 동시에 여러 트랜잭션이 실행될 때 서로 간섭하지 않..
[MySQL] 데이터베이스에서 인덱스는 어떤 역할을 할까?
·
Backend/Database
데이터베이스 '인덱스'에 대해서 설명해 주세요. 책을 읽을 때 중요한 페이지에 인덱스 스티커를 붙여 빠르게 찾아보는 것처럼, 데이터베이스에서도 인덱스(Index)를 사용하면 원하는 데이터를 훨씬 빠르게 조회할 수 있다. 인덱스는 데이터베이스 성능 최적화를 위한 핵심 수단으로 특히 조회(검색) 성능을 극적으로 향상한다.하지만 삽입이나 수정 시에는 인덱스 갱신이 필요하므로 쓰기 성능 저하라는 트레이드오프도 존재한다. 이번 글에서는 인덱스가 정확히 어떤 역할을 하는지, 그리고 왜 성능 개선의 핵심 요소로 여겨지는지 정리해보려고 한다. 인덱스란 무엇인가?데이터베이스 인덱스는 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 쉽게 말해 백과사전의 색인 역할을 한다고 볼 수 있다.다음과 같은 특징이 존재한다.검색..
[MySQL] SELECT / FROM / WHERE 절 완전 정복
·
Backend/SQL
프로젝트를 진행하면서 SQL 쿼리문을 작성해 보고, SQLD 시험을 준비하면서도 느낀 점이 있다.바로 `SELECT`, `FROM`, `WHERE` 각 절이 무엇을 담당하는지, 특히 서브쿼리가 어디에서 어떻게 쓰이는지 자주 헷갈렸다는 것이다. 결국 이는 SQL의 실행 순서와 각 절의 역할을 명확히 이해하지 못했기 때문이었다. 이번 글에서는 `SELECT`, `FROM`, `WHERE` 절의 역할과 각 절에서 사용할 수 있는 쿼리(서브쿼리, 함수 등)를 한눈에 정리해 보려 한다. 실제 SQL 실행 순서SQL은 우리가 작성하는 순서대로 실행되지 않는다. 눈에 보이기엔 `SELECT` → `FROM` → `WHERE` 순이지만, 실제로는 아래 순서로 실행된다.실행 순서절역할1`FROM`테이블/조인으로 원본 데..
[Java] 일급 컬렉션을 써야 하는 이유
·
Backend/Java
일급 컬렉션이 무엇인가요? '일급 객체'라는 개념이 먼저 떠올랐다. Swift나 JavaScript를 공부할 때, 함수가 일급 객체이기 때문에 변수나 상수에 할당할 수 있고, 다른 함수의 인자로 전달하거나 반환값으로 리턴할 수 있다는 내용을 배웠다.반면 Java에서는 메서드를 변수에 직접 할당하거나 인자로 전달할 수 없기 때문에 일급 객체가 아니다. 그렇다면, '일급 컬렉션'은 무엇일까? 일급 컬렉션(First-Class Collection)이란?하나의 컬렉션을 감싸는 전용 클래스를 만들어, 해당 컬렉션의 비즈니스 로직을 함께 관리하는 설계 방식 즉, 단순히 `List` 같은 자료구조로만 관리하는 것이 아니라, 이를 의미 있는 객체로 승격시켜 응집력 있는 책임 단위로 다루는 것이 핵심이다. 일급 컬렉션 ..