나만의 공부 공간
STUDY ARCHIVE

전체 글

119개의 기록

멀티 쓰레드

이번에는 멀티 쓰레드를 공부하면서 헷갈렸던 부분을 정리해봤습니다. 직접 코드를 돌려보니 start()와 run()의 차이, 데몬 쓰레드가 언제 종료되는지가 특히 중요했습니다.멀티 쓰레드의 장단점- 멀티 쓰레드는 장점이 많지만, 고려해야 할 사항도 많이 있습니다.장점시스템 자원을 보다 효율적으로 사용할 수 있다.사용자에 대한 응답성이 향상된다.작업이 분리되어 코드가 간결해 진다.단점동기화에 주의해야 한다.(서로 충돌이 많을 수 있다)교착상태가 발생하지 않도록 주의해야 한다.각 쓰레드가 효율적으로 고르게 실행될 수 있게 해야 한다. 쓰레드의 구현과 생성- run()에 쓰레드가 수행할 내용을 작성하는 2가지 방법1. Thread클래스를 상속public class MyThread extends Thread{ ..

읽어보기

엔티티 매핑 소개

✅ 객체와 테이블 매핑@Entity : JPA에서 이 클래스가 엔티티(테이블과 매핑되는 객체)임을 명시@Table : 실제 DB의 어떤 테이블과 매핑할지 지정✅ 필드와 컬럼 매핑@Column : 엔티티 클래스의 필드와 DB 컬럼 매핑✅ 기본키 매핑@Id : 엔티티의 기본키(PK) 지정✅ 연관관계 매핑@ManyToOne : 다대일(N:1) 관계 설정@JoinColumn : 외래키 매핑할 때 사용✅ 객체와 테이블 매핑@Entity -> 엔티티가 붙은 클래스는 JPA가 관리, 엔티티라 지칭JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수적.✅ 데이터베이스 스키마 자동 생성DDL을 애플리케이션 실행 시점에 자동 생성테이블 중심 -> 객체 중심데이터베이스 방언을 활용해서 데이터베이스 맞는 적절한 D..

읽어보기

JPA - 영속성 컨텍스트

JPA에서 가장 중요한 2가지1️⃣ 객체와 관계형 데이터베이스 매핑 (ORM)Java 객체와 RDB 테이블을 자동으로 매핑개발자는 객체 중심으로 코드를 작성하고 JPA가 SQL로 변환하여 DB와 연동2️⃣ 영속성 컨텍스트 (Persistence Context)JPA에서 엔티티를 관리하는 핵심 메모리 공간쉽게 말해, 엔티티를 DB에 저장하기 위한 준비 단계JPA 이해에 가장 중요한 개념핵심 포인트EntityManager.persist(entity)엔티티를 영속성 컨텍스트에 등록즉시 DB에 저장되는 것이 아님트랜잭션 커밋 시, 영속성 컨텍스트의 변경 내용이 DB에 반영2️⃣ 엔티티의 생명 주기비영속(new/transient) - 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태영속(managed) - 영속성 ..

읽어보기

Spring Data JPA Query Methods

Spring Data JPA의 Query Methods (쿼리 메소드) 요약1. 쿼리 정의 방식파생 쿼리(Derived Queries): 메서드 이름을 규칙에 맞게 작성하면 Spring Data JPA가 자동으로 JPQL 쿼리를 생성해 실행합니다.명시적 선언(@Query): 메서드 이름 기반으로는 표현하기 어려운 복잡한 쿼리는 @Query 어노테이션을 사용해 직접 JPQL 또는 네이티브 SQL을 작성할 수도 있습니다.2. 메서드 이름 기반 쿼리 (파생 쿼리)메서드 이름은 크게 도입부(Subject) + 조건절(Criteria) 구조입니다.예: findByEmailAddressAndLastname → findBy (도입부) + EmailAddressAndLastname (조건절)도입부 예시: find, r..

읽어보기

Spring Data Jpa

스프링 프로젝트를 진행하다 보면 JPA라는 기술은 필수적으로 사용된다는 것을 알 수 있습니다. 이 과정에서 반복적으로 CRUD 코드를 작성하지 않고 공통 인터페이스만 정의함으로써 기본적인 데이터 처리를 자동으로 제공받을 수 있는 Spring Data JPA의 편리함을 느낄 수 있을 것입니다. 예를 들어, 간단하게 Member라는 엔티티를 만들고 이 엔티티에 대한 CRUD 기능을 구현한다고 가정해보겠습니다. Spring Data JPA를 사용하면 별도의 구현 없이도 기본적인 저장, 조회, 수정, 삭제 기능을 손쉽게 만들 수 있습니다. Member 엔티티@Entity@Getter @Setter@NoArgsConstructorpublic class Member { @Id @GeneratedValu..

읽어보기

트랜잭션 AOP 주의 사항

@Transactional을 사용하면 스프링의 트랜잭션 AOP가 적용됩니다. 트랜잭션 AOP는 기본적으로 프록시 방식의 AOP를 사용합니다.@Transactional을 적용하면 프록시 객체가 요청을 먼저 받아서 트랜잭션을 처리하고, 실제 객체를 호출합니다. 따라서 트랜잭션을 적용하려면 항상 프록시를 통해서 대상 객체를 호출해야 합니다.이렇게 해야 프록시에서 먼저 트랜잭션을 적용하고, 이후에 대상 객체를 호출하게 됩니다.만약 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 AOP가 적용되지 않고 트랜잭션도 적용되지 않습니다. package hello.springtx.apply;import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.Test;imp..

읽어보기

트랜잭션 적용 확인

트랜잭션 적용 확인@Transactional을 통해 선언적 트랜잭션 방식을 사용하면 단순히 애노테이션 하나로 트랜잭션을 적용할 수 있습니다. 이 기능은 트랜잭션 관련 코드가 눈에 보이지 않고 AOP기반으로 동작하기 때문에 실제로 적용이 되는지 안되는지 눈으로 확인하기 어려움이 있습니다. package hello.springtx.apply;import jakarta.transaction.Transactional;import lombok.extern.slf4j.Slf4j;import org.assertj.core.api.Assertions;import org.junit.jupiter.api.Test;import org.springframework.aop.support.AopUtils;import org.sp..

읽어보기

예외 처리

자바를 공부하거나 프로그래밍을 하다 보면 예외(Exception)와 관련된 오류를 마주치는 경우가 많습니다. 이번 글에서는 자바의 예외 처리에 대해 정리해보려고 합니다.● Object : 예외도 객체입니다.자바에서 모든 클래스의 최상위 부모는 Object이며 예외 클래스도 예외가 아닙니다. 따라서 예외도 객체입니다.● Throwable : 모든 예외의 최상위 클래스입니다.Throwable은 자바에서 발생할 수 있는 모든 예외와 오류의 부모 클래스입니다. 하위에는 Exception과 Error가 있습니다.● Error : 시스템 수준의 치명적인 예외입니다.Error는 메모리 부족, 스택 오버플로우 등 시스템적인 문제로 인해 발생하는 예외로, 애플리케이션에서 복구할 수 없습니다.따라서 애플리케이션 개발자는 ..

읽어보기

멀티 쓰레드

이번에는 멀티 쓰레드를 공부하면서 헷갈렸던 부분을 정리해봤습니다. 직접 코드를 돌려보니 start()와 run()의 차이, 데몬 쓰레드가 언제 종료되는지가 특히 중요했습니다.멀티 쓰레드의 장단점- 멀티 쓰레드는 장점이 많지만, 고려해야 할 사항도 많이 있습니다.장점시스템 자원을 보다 효율적으로 사용할 수 있다.사용자에 대한 응답성이 향상된다.작업이 분리되어 코드가 간결해 진다.단점동기화에 주의해야 한다.(서로 충돌이 많을 수 있다)교착상태가 발생하지 않도록 주의해야 한다.각 쓰레드가 효율적으로 고르게 실행될 수 있게 해야 한다. 쓰레드의 구현과 생성- run()에 쓰레드가 수행할 내용을 작성하는 2가지 방법1. Thread클래스를 상속public class MyThread extends Thread{ ..

읽어보기

엔티티 매핑 소개

✅ 객체와 테이블 매핑@Entity : JPA에서 이 클래스가 엔티티(테이블과 매핑되는 객체)임을 명시@Table : 실제 DB의 어떤 테이블과 매핑할지 지정✅ 필드와 컬럼 매핑@Column : 엔티티 클래스의 필드와 DB 컬럼 매핑✅ 기본키 매핑@Id : 엔티티의 기본키(PK) 지정✅ 연관관계 매핑@ManyToOne : 다대일(N:1) 관계 설정@JoinColumn : 외래키 매핑할 때 사용✅ 객체와 테이블 매핑@Entity -> 엔티티가 붙은 클래스는 JPA가 관리, 엔티티라 지칭JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수적.✅ 데이터베이스 스키마 자동 생성DDL을 애플리케이션 실행 시점에 자동 생성테이블 중심 -> 객체 중심데이터베이스 방언을 활용해서 데이터베이스 맞는 적절한 D..

읽어보기

JPA - 영속성 컨텍스트

JPA에서 가장 중요한 2가지1️⃣ 객체와 관계형 데이터베이스 매핑 (ORM)Java 객체와 RDB 테이블을 자동으로 매핑개발자는 객체 중심으로 코드를 작성하고 JPA가 SQL로 변환하여 DB와 연동2️⃣ 영속성 컨텍스트 (Persistence Context)JPA에서 엔티티를 관리하는 핵심 메모리 공간쉽게 말해, 엔티티를 DB에 저장하기 위한 준비 단계JPA 이해에 가장 중요한 개념핵심 포인트EntityManager.persist(entity)엔티티를 영속성 컨텍스트에 등록즉시 DB에 저장되는 것이 아님트랜잭션 커밋 시, 영속성 컨텍스트의 변경 내용이 DB에 반영2️⃣ 엔티티의 생명 주기비영속(new/transient) - 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태영속(managed) - 영속성 ..

읽어보기

Spring Data JPA Query Methods

Spring Data JPA의 Query Methods (쿼리 메소드) 요약1. 쿼리 정의 방식파생 쿼리(Derived Queries): 메서드 이름을 규칙에 맞게 작성하면 Spring Data JPA가 자동으로 JPQL 쿼리를 생성해 실행합니다.명시적 선언(@Query): 메서드 이름 기반으로는 표현하기 어려운 복잡한 쿼리는 @Query 어노테이션을 사용해 직접 JPQL 또는 네이티브 SQL을 작성할 수도 있습니다.2. 메서드 이름 기반 쿼리 (파생 쿼리)메서드 이름은 크게 도입부(Subject) + 조건절(Criteria) 구조입니다.예: findByEmailAddressAndLastname → findBy (도입부) + EmailAddressAndLastname (조건절)도입부 예시: find, r..

읽어보기

Spring Data Jpa

스프링 프로젝트를 진행하다 보면 JPA라는 기술은 필수적으로 사용된다는 것을 알 수 있습니다. 이 과정에서 반복적으로 CRUD 코드를 작성하지 않고 공통 인터페이스만 정의함으로써 기본적인 데이터 처리를 자동으로 제공받을 수 있는 Spring Data JPA의 편리함을 느낄 수 있을 것입니다. 예를 들어, 간단하게 Member라는 엔티티를 만들고 이 엔티티에 대한 CRUD 기능을 구현한다고 가정해보겠습니다. Spring Data JPA를 사용하면 별도의 구현 없이도 기본적인 저장, 조회, 수정, 삭제 기능을 손쉽게 만들 수 있습니다. Member 엔티티@Entity@Getter @Setter@NoArgsConstructorpublic class Member { @Id @GeneratedValu..

읽어보기

트랜잭션 AOP 주의 사항

@Transactional을 사용하면 스프링의 트랜잭션 AOP가 적용됩니다. 트랜잭션 AOP는 기본적으로 프록시 방식의 AOP를 사용합니다.@Transactional을 적용하면 프록시 객체가 요청을 먼저 받아서 트랜잭션을 처리하고, 실제 객체를 호출합니다. 따라서 트랜잭션을 적용하려면 항상 프록시를 통해서 대상 객체를 호출해야 합니다.이렇게 해야 프록시에서 먼저 트랜잭션을 적용하고, 이후에 대상 객체를 호출하게 됩니다.만약 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 AOP가 적용되지 않고 트랜잭션도 적용되지 않습니다. package hello.springtx.apply;import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.Test;imp..

읽어보기

트랜잭션 적용 확인

트랜잭션 적용 확인@Transactional을 통해 선언적 트랜잭션 방식을 사용하면 단순히 애노테이션 하나로 트랜잭션을 적용할 수 있습니다. 이 기능은 트랜잭션 관련 코드가 눈에 보이지 않고 AOP기반으로 동작하기 때문에 실제로 적용이 되는지 안되는지 눈으로 확인하기 어려움이 있습니다. package hello.springtx.apply;import jakarta.transaction.Transactional;import lombok.extern.slf4j.Slf4j;import org.assertj.core.api.Assertions;import org.junit.jupiter.api.Test;import org.springframework.aop.support.AopUtils;import org.sp..

읽어보기

예외 처리

자바를 공부하거나 프로그래밍을 하다 보면 예외(Exception)와 관련된 오류를 마주치는 경우가 많습니다. 이번 글에서는 자바의 예외 처리에 대해 정리해보려고 합니다.● Object : 예외도 객체입니다.자바에서 모든 클래스의 최상위 부모는 Object이며 예외 클래스도 예외가 아닙니다. 따라서 예외도 객체입니다.● Throwable : 모든 예외의 최상위 클래스입니다.Throwable은 자바에서 발생할 수 있는 모든 예외와 오류의 부모 클래스입니다. 하위에는 Exception과 Error가 있습니다.● Error : 시스템 수준의 치명적인 예외입니다.Error는 메모리 부족, 스택 오버플로우 등 시스템적인 문제로 인해 발생하는 예외로, 애플리케이션에서 복구할 수 없습니다.따라서 애플리케이션 개발자는 ..

읽어보기