전체 글 194

[Java] 쓰레드

자바에서 쓰레드 사용하는 법 1. Thread 클래스를 상속받는 방법java.lang.Thread 클래스를 상속받아 생성하고 실행class MyThread extends Thread { @Override public void run() { // 스레드의 작업 내용 System.out.println("Thread is running!"); }}public class Main { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); // 스레드 시작 }}start() 메서드 : 쓰레드를 시작하고, 내부적으로 run() 메세드..

BE/Java 2024.12.22

[Spring Boot] @ManyToOne, @OneToMany

JPA 에서 사용하는 관계 매핑 어노테이션.데이터베이스 테이블간의 연관 관계를 자바 객체로 표현할때 사용.@ManyToOne (다대일 관계)의미여러개의 엔티티가 하나의 엔티티에 연결된 관계ex) 여러명의 학생이 하나의 학급에 소속되는 경우예제@Entitypublic class Student { @Id @GeneratedValue private Long id; private String name; @ManyToOne @JoinColumn(name = "class_id") // 외래 키를 매핑 private ClassRoom classRoom; // 한 명의 학생은 하나의 학급에 소속}다대일 관계를 나타냄JoinColumn은 외래키를 매핑하는데 사용, 위 예제에서는 cl..

[Spring Boot] Eager, Lazy

데이터베이스와 상호작용할때 연관된 데이터를 언제 가져올지를 결정하는 방식.주로 ORM(Object-Relational Mapping) 프레임워크(예: JPA, Hibernate)에서 사용된다.Eager (즉시 로딩)데이터를 즉시 가져오는 방식연관된 데이터까지 한번에 로드한다필요한 것 뿐만 아니라, 나중에 쓸지도 모르는 것 까지 미리 다 가져온다특징1. 즉시 로드객체를 조회할때 연관된 데이터도 함께 조회하여 메모리에 로드2. SQL 쿼리 증가 가능성연관된 모든 데이터를 가져오기 때문에 SQL 쿼리가 복잡하거나 많아질 수 있음3. 성능 저하 가능필요하지 않은 데이터를 가져오면 메모리를 낭비하거나 성능에 영향을 줄 수 있음 예시@Entitypublic class User { @Id @Generate..

[Spring Boot] IoC 컨테이너

IoC 컨테이너객체의 생성, 라이프사이클 관리, 의존성 주입을 책임지는 Spring프레임워크의 핵심 구성 요소이다제어의 역전(Inversion of Control, IoC) 원칙을 구현하여 애플리케이션의 객체와 객체 간의 의존성을 관리한다IoC객체 생성 및 의존성 관리를 개발자가 아닌 컨테이너가 담당하는 디자인 원칙이다즉, 객체는 자신이 사용할 의존성을 직접 생성하거나 관리하지 않고, 외부에서 주입받는다 IoC 의 핵심 개념객체 간의 결합도를 낮추어 코드 재사용성과 유지보수성을 높임애플리케이션의 구성 요소를 유연하고 확장 가능하게 설계IoC 컨테이너의 주요 역할1. 빈 등록 및 관리개발자가 정의한 빈을 생성하고 컨테이너에 등록빈의 라이프사이클(생성, 초기화, 소멸)을 관리2. 의존성 주입(DI)빈 간의 ..

[Java] StringBuffer, StringBuilder

문자열을 조작하는데 사용하되는 클래스1. StringBuilder 와 StringBuffer 의 공통점1.1. 가변 문자열`String`클래스는 불변이다. 즉, 문자열을 수정하면 새로운 문자열 객체를 생성한다반면, `StringBuilder`, `StringBuffer`는 가변적으로 설계되어 한 객체에서 문자열을 직접 수정할 수 있다메모리 효율성을 높이고, 문자열을 자주 수정하는 작업에서 더 빠른 성능을 제공한다2. 차이점특성`StringBuilder``StringBuffer`쓰레드 안정성비동기적으로 동작 (쓰레드 안전 아님)동기화 처리속도더 빠름동기화로 인해 약간 느림사용 상황단일 스레드 환경에서 사용멀티 스레드 환경에서 사용쓰레드 안전(Thread-Safe) : 여러 스레드가 동시에 같은 객체를 조작..

BE/Java 2024.12.19

[SQL] CHAR, VARCHAR

텍스트 데이터를 저장하는 데 사용되는 문자열 데이터 타입둘 다 문자 데이터를 저장하지만, 저장 방식과 성능 특성이 다르다1. CHAR1.1. 정의고정 길이(Fixed-length) 문자열 데이터 타입저장하려는 데이터의 길이가 지정한 길이보다 짧더라도 빈 공간을 공백 문자로 채움1.2. 특징고정된 크기 :데이터가 길이보다 짧으면 남은 공간을 공백으로 채워 저장예를 들어, CHAR(10)에 "cat"을 저장하면, 실제로는 "cat "로 저장됨빠른 속도 :고정된 길이 때문에 읽기와 쓰기 성능이 빠름데이터를 처리할 때, 문자열 길이를 계산하지 않아도 됨메모리 낭비 :데이터 길이가 자주 달라지는 경우, 빈 공간을 채우기 때문에 저장 공간이 낭비됨1.3. 예제 CREATE TABLE example_char ( ..

DB/MySQL 2024.12.18

[SQL] 트랜잭션

트랜잭션은 데이터베이스 관리에서 작업의 단위를 의미한다하나의 트랜잭션은 일련의 SQL 작업들을 논리적으로 묶어 처리하며,이 작업들이 모두 성공하거나 실패하는 원자성(Atomicity)을 보장한다1. 트랜잭션의 기본 개념1.1. 트랜잭션이란?데이터베이스의 상태를 변경하는 작업 단위데이터베이스는 트랜잭션 단위로 작업을 처리하며, 각 트랜잭션은 일관성과 안정성을 유지해야 한다1.2. 트랜잭션의 주요 특징 (ACID 속성)트랜잭션의 신뢰성을 보장하기 위해 ACID 속성을 따른다1.2.1. Atomicity (원자성)트랜잭션의 작업은 모두 성공하거나 모두 실패해야 한다부분적으로 작업이 수행된 상태는 허용되지 않음1.2.2. Consistency (일관성)트랜잭션이 완료된 후에도 데이터베이스는 항상 일관된 상태를 ..

DB/MySQL 2024.12.17

[Java] 영속성

애플리케이션에서 생성한 데이터를 데이터베이스와 같은 영구 저장소에 저장하고, 필요할 때 다시 불러오는 과정을 의미영속성은 데이터를 객체화하고, 이를 영구적으로 저장하거나 관리하는 것을 중심으로 작동1. 영속성(Persistence)이란?데이터가 애플리케이션의 실행 주기와 독립적으로 존재할 수 있도록 저장하는 메커니즘을 의미비영속 데이터: 메모리에만 존재하며 애플리케이션 종료 시 사라지는 데이터영속 데이터: 데이터베이스에 저장되어 애플리케이션이 종료되어도 유지되는 데이터자바에서 영속성을 관리하기 위해 ORM(Object Relational Mapping)기술과 JPA를 주로 사용한다2. 영속성을 이해하기 위한 주요 개념2.1. JPAJPA는 자바 애플리케이션에서 데이터를 영속적으로 관리하기 위한 표준 AP..

BE/Java 2024.12.16

[Spring Boot] 빈이란

빈(Bean)이란Spring IoC컨테이너에 의해 관리되는 객체를 의미한다Spring 애플리케이션에는 주요 구성 요소, 서비스, 리포지토리 등의 객체를 빈으로 등록하고 관리한다 특징1. 생성 및 관리Spring 컨테이너가 Bean의 생성, 초기화, 소멸을 책임진다개발자가 직접 객체를 생성하고 관리할 필요가 없다2. 의존성 주입(DI)빈 간의 의존성을 Spring이 관리하며 애플리케이션이 실행될 때 필요한 객체를 주입한다3. 싱글톤 기본 설정Spring 컨테이너는 기본적으로 각 빈을 싱글톤으로 생성하여 동일한 인스턴스를 애플리케이션 전반에서 공유한다 (필요시 다른 스코프를 지정 가능)4. 구성 파일 또는 어노테이션으로 정의XML 파일, 자바클래스, 또는 어노테이션을 통해 빈을 정의할 수 있다Spring B..