no image
Entity LifeCycle
JPA에서 Entity의 생명주기는 엔티티가 생성되고 영속성 컨텍스트에 저장되며, 분리되거나 삭제되기까지의 과정을 말합니다. 엔티티는 비영속(New/Transient), 영속(Managed), 준영속(Detached), 삭제(Removed) 삭제로 구분됩니다.1. 비영속(New/Transient)비영속 상태는 엔티티가 단순히 메모리에 존재하지만 영속성 컨텍스트에 포함되지 않은 상태입니다. 따라서 JPA가 전혀 관리하지 않으며, 데이터베이스와도 연결되지 않습니다.Member member = new Member(); // 비영속 상태여기서 member는 영속성 컨텍스트에 저장되지 않았기에 비영속 상태입니다. 이 상태일 때는 EntityManager의 도움 없이 일반 객체로 사용할 수 있습니다. 2. 영속(M..
2024.10.25
no image
벌크 연산
벌크 연산일괄 처리를 위해 대량의 데이터를 처리하는 작업입니다. 데이터베이스에서 UPDATE 또는 DELETE 쿼리를 사용하여 한 번에 여러 행을 변경하는 것이 일반적인 입니다. JPA에서 벌크 연산은 대량의 데이터를 변경하기 위한 메커니즘을 제공합니다. 일반적으로 영속성 컨텍스트를 통해 개별 엔티티의 변경을 추적하고, 트랜잭션을 커밋할 때 변경 사항을 데이터베이스에 반영합니다. 그러나 벌크 연산은 단일 엔티티의 변경을 추적하고, 트랜잭션을 커밋할 때 변경사항을 데이터베이스에 반영합니다. 그러나 벌크 연산은 단일 엔티티의 변경이 아닌 여러 엔티티에 대한 변경을 수행할 때 사용합니다. 이러한 변경은 일반적으로 JPA의 더티 채킹 메커니즘이나 트랜잭션 커밋 시점에만 적용되는 것이 아니라, 데이터 베이스에 대..
2024.04.29
no image
OSIV
OSIV 소프트웨어 개발에서 주로 웹 애플리케이션에서 사용되는 패턴 중 하나입니다. 이 패턴은 영속성 컨텍스트를 뷰까지 확장하여 데이터베이스 트랜잭션의 영향 범위를 확장시키는 기능을 제공합니다. 주로 JPA나 Hibernate와 같은 영속성 프레임워크에서 사용됩니다. 일반적으로, 웹 애플리케이션에서는 클라이언트의 요청을 처리하는 동안 여러 개의 데이터베이스 조회가 발생할 수 있습니다. 이 경우, 각각의 데이터베이스 조회는 별도의 트랜잭션을 필요로 합니다. 그러나 웹 애플리케이션에서는 주로 한 번의 요청을 대해 한 번의 트랜잭션을 사용하게 됩니다. 이는 뷰를 렌더링 하기 위해 여러 데이터베이스 조회가 필요할 때 문제가 될 수 있습니다. 예를 들어 뷰에서 지연 로딩을 통해 연관된 엔티티를 로드하려고 할 때 ..
2024.04.10
no image
@Not Empty
@Not Empty Java 애플리케이션에서 주로 사용되는 유효성 검사입니다. Spring Boot나 Jakarta와 같은 프레임 워크에서 사용되며, 주어진 필드가 비어있지 않고 , 빈 문자열이 아님을 확인하는 데 사용됩니다. 이를 통해 @NotNull이나 @Not Black와 함께 사용하여 포괄적인 유효성 검사를 제공할 수 있습니다. 검사 대상 클래스 필드에 적용하여 해당 필드가 유효한 값으로 채워져야 함을 나타냅니다. 메서드의 매개변수에 적용하여 해당 매개변수가 null이 아니고 , 빈 문자열이 아닌지를 검사하빈다. 동작 방식 @NotEmpty 유효성 검사 시 값을 검사하기 전에 null 체크를 수행합니다. 값이 null일 때 검증 실패로 간주 되며 빈 문자열("")도 유효하지 않은 값으로 간주하여 ..
2024.04.01
no image
Enumerated
Enumerated 열거형인 Enum 타입의 필드를 매핑할 때 사용되는 어노테이션이며, 열거형 상수를 DB에 어떻게 저장할지를 지정하는데 사용됩니다. @Enumerate(EnumType.STRING) 열거형 상수의 이름을 문자열로 데이터베이스에 저장하빈다. 즉 열거형 상수의 이름 그대로를 데이터베이스에 저장하게되빈다. 이방식은 데이터베이스에 저장된 값이 일기 쉽고 가독성이 높으며, 열거형 상수의 순서가 변경되어도 데이터베이스에 미치는 영향이 없어 유연성이 높습니다. 그러나 문자열로 저장되기 때문에 데이터베이스 크기가 늘어날 수 있고, 오타 의 인식 문제가 발생할 수 있습니다. @Enumerate (EnumType.ORDINAL) 열거형 상수의 순서를 정수로 데이터베이스에 저장합니다. 따라서 데이터베이스에..
2024.03.28
no image
클래스 분리
관심사 분리와 확장성 확보 두 개의 관심사를 독립시키면서 동시에 손쉽게 확장할 수 있는 방법 방법은 간단하다. DB 커넥션과 관련된 부분을 서브클래스가 아닌 별도의 클래스에 담으며 이렇게 만든 클래스를 UserDao가 이용하면 됩니다. 1. 관심사 분리 관심사 분리는 소프트 웨어 디자인 원칙 중 하나로, 프로그램을 여러 부분으로 나누어 각 부분이 특정한 관심사에 집중하도록 하는 것을 말합니다. 코드의 유지보수성과 가독성을 향상하고, 코드의 재사용성을 높이는데 도움이 됩니다. 2. 확장성 확보 확장성은 시스템이 늘어나는 요구사항에 대해 적절히 대응할 수 있는 능력을 말합니다. 소프트웨어 시스템은 초기 설계 시 확장성을 고려하여야 하며, 확장성을 고려하지 않은 시스템은 새로운 요구사항이나 사용자 증가에 쉽게..
2024.03.27
no image
초난감 DAO
DAO Data Access Object의 초보적인 형태를 가리키는 용어이며 DAO는 소프트웨어 개발에서 데이터베이스나 다른 영속성 메커니즘에 접근하는 객체를 추상화하는 패턴입니다. DAO 패턴은 데이터 액세스 로직을 비즈니스 로직과 분리하여 코드의 유지 보수성을 높이고 확장성을 개선하는 데 사용됩니다. DAO 특징 간단한 인터페이스로 데이터 액세스를 위한 메서드들을 정의한 간단한 인터페이스를 가지고 있습니다. 주로 CRUD 연산을 수행하기 위한 메서드들이 포함됩니다. 단순한 구현 클래스로 DAO 인터페이스의 메서드들을 구현하는 단순한 구현 클래스가 있으며 이 클래스는 주로 JDBC를 사용하여 데이터베이스와 통신하고 SQL 쿼리를 실행합니다. DAO 인터페이스를 구현한 DAO 클래스들은 일반적으로 모의 ..
2024.03.26
no image
CRON 표현식
CRON 표현식 주기적으로 실행되어야 하는 작업을 정의하는 일반적인 방법입니다. 이것은 UNIX 및 유닉스 기반 시스템에서 널리 사용되며, 다양한 스케줄링 작업에 활용됩니다. CRON 표현식을 작성할 때 주의할 점은 각 필드가 해당 시스템의 로컬 시간대 및 설정에 따라 해석되기 때문에 때때로 시스템의 로컬화된 환경 설정에 따라 결과가 달라질 수 있기 때문에 이것을 고려해야 합니다. 필드 허용되는 값 허용되는 특수문자 년 1970 ~ 2099 , - * / 월 1 ~ 12 또는 JAN ~ DEC , - * / 요일 0 ~ 6 또는 SUN ~ SAT , - * / L # 일 1 ~ 31 , - * / L W 시 0 ~ 23 , - * / 분 0 ~ 59 , - * / 초 0 ~ 59 , - * / 특수 문자..
2024.02.08
no image
STOMP
@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic"); // 메시지 브로커를 설정 ("/topic"은 예시) config.setApplicationDestinationPrefixes("/app"); // 클라이언트로부터의 메시지를 처리할 엔드포인트 설정 } @Override public void registerStompEndpoints(S..
2024.01.23