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..
[Java] 일급 컬렉션을 써야 하는 이유
·
Backend/Java
일급 컬렉션이 무엇인가요? '일급 객체'라는 개념이 먼저 떠올랐다. Swift나 JavaScript를 공부할 때, 함수가 일급 객체이기 때문에 변수나 상수에 할당할 수 있고, 다른 함수의 인자로 전달하거나 반환값으로 리턴할 수 있다는 내용을 배웠다.반면 Java에서는 메서드를 변수에 직접 할당하거나 인자로 전달할 수 없기 때문에 일급 객체가 아니다. 그렇다면, '일급 컬렉션'은 무엇일까? 일급 컬렉션(First-Class Collection)이란?하나의 컬렉션을 감싸는 전용 클래스를 만들어, 해당 컬렉션의 비즈니스 로직을 함께 관리하는 설계 방식 즉, 단순히 `List` 같은 자료구조로만 관리하는 것이 아니라, 이를 의미 있는 객체로 승격시켜 응집력 있는 책임 단위로 다루는 것이 핵심이다. 일급 컬렉션 ..
[Java] Checked Exception과 Unchecked Exception
·
Backend/Java
자바에서 Checked Exception과 Unchecked Exception에 대해서설명해 주세요. 요거 SSAFY에서 배운 내용이다. (주간 평가 대비한다고 공부했던 기억이...) Checked Exception은 컴파일 시점에 예외가 발생할 수도 있는 상황을 체크해서 엄격하게 예외를 검사하기 때문에 명시적으로 예외처리를 해줘야 한다. Unchecked Exception은 런타임 시점에 발생하며, 명시적으로 예외를 던지지 않아도 예외 처리가 가능하기 때문에 필수가 아니다. `Exception` 클래스를 상속받은 자식 클래스 중 `RuntimeException`을 상속한 클래스들이 Unchecked Exception, 그 외는 Checked Exception으로 분류된다고 정리했다. (그래서 "Che..
[JPA] N + 1 문제은 왜 발생하고 어떻게 해결할 수 있을까?
·
Backend/Java
JPA의 N + 1 문제에 대해서 설명해 주세요. N + 1 문제는 백엔드 면접에서 빠지지 않는 단골 질문이다. 갑자기 DB 조회 성능이 급격히 나빠진다면 대부분 이 문제와 관련이 있다고 한다. 아직 대규모 트래픽이나 방대한 데이터를 다뤄본 경험은 없지만, 설명만 들어도 충분히 발생할 수 있는 문제라는 생각이 들었다. 따라서 미리 대비하여 최적화해 둘 필요가 있다고 생각했다. 그래서 이번 글에서는 JPA의 N + 1 문제를 정확히 이해하고, `findAll()` 실행 시 글로벌 패치 전략에 따라 어떤 차이가 있는지 정리해 보았다. N + 1 문제란?JPA에서 연관 관계가 설정된 엔티티를 조회할 때, 조회된 엔티티 개수(N)만큼 추가 쿼리가 실행되는 현상을 말한다. 예를 들어, `User`와 `Post`가..
[Java] 문자열 앞뒤 공백 제거하기 - trim(), strip()
·
Backend/Java
Java에서 문자열 앞뒤의 공백을 제거할 때 가장 먼저 떠오르는 메서드는 `trim()`이어서백준 1152번 단어의 개수 문제를 풀 때 해당 메서드를 사용했었다. 그런데 알아보니 Java 11부터`strip()`이라는 메서드도 추가되었다고 하여두 메서드는 어떤 차이점이 있는지 궁금해서 정리해보려고 한다. 결과적으로 말하자면,두 메서드는 "어떤 공백을 제거하느냐"에 중요한 차이가 있다. String text = " hello ";System.out.println(text.trim()); // "hello"System.out.println(text.strip()); // "hello"표면적으로는 동일한 결과를 출력하지만 이 두 메서드의 차이는 유니코드 공백(whitespace) 처리 범위에서 드러난..