cs/ODOQ 31

[ODOQ] 얕은 복사 깊은 복사

[One Day One Question]얕은 복사와 깊은 복사 대해 설명해 주세요.1. 얕은 복사 (Shallow Copy)정의: 객체의 최상위 계층만 복사하며, 객체 내부에 포함된 참조형 데이터(다른 객체나 배열 등)는 복사되지 않고 원본 객체와 동일한 참조를 공유합니다.특징:변수 값: 기본형 데이터(숫자, 문자열 등)는 복사본과 원본이 독립적입니다.참조형 데이터: 내부 참조 데이터(리스트, 딕셔너리 등)는 원본 객체와 동일한 메모리 주소를 가리킵니다. 따라서 원본 또는 복사본 중 하나에서 내부 데이터를 변경하면 다른 쪽에도 영향을 줍니다.import java.util.ArrayList;class ShallowCopyExample implements Cloneable { int number; ..

cs/ODOQ 2024.12.02

[ODOQ] 트랜잭션 격리수준

[One Day One Question]DB에서 인덱스에 대해 설명해 주세요.트랜잭션 격리 수준(Transaction Isolation Level)은 데이터베이스에서 여러 트랜잭션이 동시에 실행될 때, 각 트랜잭션이 다른 트랜잭션으로부터 얼마나 고립(isolated)되어 있는지를 정의하는 기준입니다. 이는 데이터 무결성을 유지하면서 동시에 데이터베이스 성능을 최적화하기 위해 설계되었습니다. 1. READ UNCOMMITTED (읽기 미완료 허용)특징:다른 트랜잭션이 아직 커밋하지 않은 데이터를 읽을 수 있음.가장 낮은 격리 수준으로, 데이터 일관성이 깨질 가능성이 높음.문제점:Dirty Read: 커밋되지 않은 데이터를 읽음으로써, 이후 롤백되면 잘못된 데이터를 읽은 문제가 발생. 2. READ COMM..

cs/ODOQ 2024.11.29

[ODOQ] DB 인덱스(Index)

[One Day One Question]DB에서 인덱스에 대해 설명해 주세요.데이터베이스 인덱스는 테이블에서 데이터를 빠르게 검색하기 위해 사용하는 데이터 구조입니다. 책의 목차처럼 작동하여 특정 데이터를 빠르게 찾을 수 있게 해줍니다. 1. 인덱스의 역할검색 속도 향상: 테이블에 저장된 데이터 중 특정 값을 찾거나 범위를 검색할 때, 테이블 전체를 탐색(Full Table Scan)하는 대신 인덱스를 통해 필요한 데이터에 바로 접근할 수 있습니다.데이터 정렬: 인덱스는 데이터를 정렬된 상태로 유지하므로, 검색뿐 아니라 정렬, 그룹화와 같은 작업에서도 성능을 향상시킵니다.2. 인덱스의 장점빠른 검색: 특정 데이터를 빠르게 찾을 수 있습니다.정렬 비용 감소: 데이터를 이미 정렬된 상태로 유지합니다.쿼리 성..

cs/ODOQ 2024.11.28

[ODOQ] 일급 컬렉션

[One Day One Question]일급 컬렉션에 대해서 설명해 주세요일급 컬렉션(First-class Collection)은 객체 지향 설계에서 컬렉션(리스트, 맵, 세트 등)을 다룰 때 사용하는 설계 패턴입니다. 단순히 컬렉션을 감싸는 클래스를 만드는 것처럼 보이지만, 이 패턴을 활용하면 설계의 명확성과 유지보수성을 크게 향상시킬 수 있습니다. 일급 컬렉션의 특징단일 컬렉션만 포함컬렉션 외에 다른 멤버 변수를 가지지 않습니다.해당 클래스를 통해 컬렉션에 대한 작업을 수행합니다.public class Members { private final List members; // 단일 컬렉션 public Members(List members) { this.members = new A..

cs/ODOQ 2024.11.27

[ODOQ] Checked Exception, Unchecked Exception

[One Day One Question]자바에서 Checked Exception과 Unchecked Exception의 차이점을 설명해 주세요1. Checked Exception정의Checked Exception은 컴파일러가 예외 처리를 강제로 요구하는 예외입니다.즉, 이러한 예외가 발생할 가능성이 있는 코드는 반드시 try-catch 블록으로 처리하거나, 해당 메서드의 throws 선언부에 명시해야 합니다.특징컴파일 단계에서 확인되며, 처리되지 않으면 컴파일 에러가 발생합니다.예외 처리가 필수적이므로, 프로그램의 안정성을 높이는 데 도움을 줍니다.주로 외부 환경과의 상호작용에서 발생하는 예외에 해당합니다.예시IOException (파일 입출력 관련)SQLException (데이터베이스 관련)ClassN..

cs/ODOQ 2024.11.26

[ODOQ] JPA의 N + 1

[One Day One Question]JPA의 N+1에 대해서 설명해주세요JPA의 N+1 문제는 데이터베이스에서 쿼리를 수행할 때 발생하는 성능 저하 문제입니다. 이 문제는 주로 연관된 엔티티를 조회할 때 발생하며, 기본적으로 N개의 엔티티를 조회할 때 추가로 N개의 쿼리가 발생하는 상황을 의미합니다. 예를 들어, 게시글과 댓글을 조회할 때, 게시글을 조회한 후 각 게시글마다 댓글을 조회하기 위해 추가 쿼리가 발생한다면 N + 1 문제가 발생한 것입니다. @Entitypublic class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @On..

cs/ODOQ 2024.11.25

[ODOQ] TCP와 UDP의 차이점

[One Day One Question]TCP와 UDP의 차이점을 설명해주세요 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 인터넷에서 데이터를 전송하기 위해 사용하는 프로토콜입니다. 두 프로토콜은 데이터 전송 방식과 특징에서 주요 차이점이 있습니다.1. 연결 기반 vs 비연결 기반TCP: 연결 기반 프로토콜로, 데이터를 전송하기 전에 송신자와 수신자 간에 연결을 설정합니다. 이를 3-way handshake라고 합니다.UDP: 비연결 기반 프로토콜로, 연결 설정 없이 데이터를 전송합니다. 송신자는 데이터를 바로 전송하며 수신 여부를 확인하지 않습니다. 2. 신뢰성TCP: 신뢰성이 보장됩니다. 데이터의 손실, 중복, 순서가 어긋나는 경..

cs/ODOQ 2024.11.25

[ODOQ] HTTP와 HTTPS의 차이점

[One Day One Question]HTTPS는 HTTP와 어떤 차이점이 있으며, HTTPS가 보안을 강화하는 원리는 무엇인가요?HTTP와 HTTPS의 차이점HTTP와 HTTPS는 인터넷에서 데이터를 주고받는 데 사용되는 프로토콜이지만, 보안 측면에서 큰 차이가 있습니다.1. HTTP (HyperText Transfer Protocol)데이터를 암호화하지 않고 평문(Plain Text)으로 전송합니다.네트워크 상에서 제3자가 데이터를 쉽게 읽거나 조작할 수 있습니다.기본적으로 포트 80번을 사용합니다.2. HTTPS (HyperText Transfer Protocol Secure)HTTP에 SSL/TLS(암호화 프로토콜)를 결합하여 데이터를 암호화하여 전송합니다.제3자가 데이터를 읽거나 변조하기 매우..

cs/ODOQ 2024.11.24

[ODOQ] 엔티티 매니저란?

[One Day One Question]엔티티 매니저란?엔티티 매니저(Entity Manager)는 JPA(Java Persistence API)에서 제공하는 핵심 인터페이스로, 엔티티와 데이터베이스 간의 상호작용을 관리하는 역할을 합니다. 엔티티 매니저를 통해 애플리케이션은 데이터베이스와의 CRUD(Create, Read, Update, Delete) 작업을 수행할 수 있습니다.주요 기능 및 역할엔티티 생명주기 관리엔티티 매니저는 엔티티의 상태(비영속, 영속, 준영속, 삭제)를 관리합니다.비영속(New/Transient): 엔티티가 영속성 컨텍스트에 포함되지 않은 상태.영속(Managed): 영속성 컨텍스트에서 관리되는 상태.준영속(Detached): 영속성 컨텍스트에서 분리된 상태.삭제(Removed..

cs/ODOQ 2024.11.22

[ODOQ] JPA의 ddl-auto 옵션

[One Day One Question]JPA의 ddl-auto 옵션은 각각 어떤 동작을 하고 어떤 상황에서 사용해야 할까요? JPA의 ddl-auto 옵션은 Hibernate에서 데이터베이스 스키마를 어떻게 관리할지를 설정하는 옵션입니다. 이 옵션은 application.yml 또는 application.properties 파일에서 설정하며, 다양한 환경에서 유용하게 사용할 수 있습니다.주요 옵션과 동작none동작: JPA가 데이터베이스 스키마 생성이나 수정 작업을 수행하지 않음.사용 상황: 이미 정의된 스키마를 사용하고, 애플리케이션이 데이터베이스 스키마를 변경하지 않아야 하는 프로덕션 환경.validate동작: 엔티티와 데이터베이스 스키마가 일치하는지 검증.사용 상황: 스키마는 외부에서 생성하고, ..

cs/ODOQ 2024.11.22