no image
Queue?
Queue? Queue는 줄을 서다라는 뜻으로 큐에 먼저 들어간 데이터가 먼저 나오는 자료 구조입니다. 스택과 마찬가지로 예를 들어보면 맛집에서 줄을 선 순서대로 입장하는 것과 똑같습니다. 이런 큐의 특징을 선입선출 또는 FIFO라고 하며 큐에서 삽입하는 연산을 Enqueue, 꺼내는 연산을 Dequeue라고 합니다. 큐의 특징 Enqueue 큐에 데이터를 추가하는 작업이며 새로운 데이터는 항상 큐의 끝에 추가됩니다. // 큐에 데이터를 추가하는 메서드 public void enqueue(E item) { // 만약 큐의 용량이 가득 찬 경우 예외 처리를 할 수도 있습니다. if (isFull()) { System.out.println("Queue is full. Cannot enqueue."); ret..
2024.04.12
no image
OSIV
OSIV 소프트웨어 개발에서 주로 웹 애플리케이션에서 사용되는 패턴 중 하나입니다. 이 패턴은 영속성 컨텍스트를 뷰까지 확장하여 데이터베이스 트랜잭션의 영향 범위를 확장시키는 기능을 제공합니다. 주로 JPA나 Hibernate와 같은 영속성 프레임워크에서 사용됩니다. 일반적으로, 웹 애플리케이션에서는 클라이언트의 요청을 처리하는 동안 여러 개의 데이터베이스 조회가 발생할 수 있습니다. 이 경우, 각각의 데이터베이스 조회는 별도의 트랜잭션을 필요로 합니다. 그러나 웹 애플리케이션에서는 주로 한 번의 요청을 대해 한 번의 트랜잭션을 사용하게 됩니다. 이는 뷰를 렌더링 하기 위해 여러 데이터베이스 조회가 필요할 때 문제가 될 수 있습니다. 예를 들어 뷰에서 지연 로딩을 통해 연관된 엔티티를 로드하려고 할 때 ..
2024.04.10
no image
One Two Many fetch Join
One Two Many fetch Join 페이징 페치 조인을 사용해 보았습니다. 이런 HHH90003004: firstResult/maxResults specified with collection fetch; applying in memory 오류가 발생했습니다. 이 오류는 컬렉션 페치 조인에 적용된 상태에서 페이징을 적용할 때 발생하며, 이는 Hibernate가 컬렉션을 메모리에 로드한 후에 페이징을 적용해야 한다는 것을 의미합니다. 이러한 상황에서는 데이터가 적은 경우에는 큰 문제가 되지 않지만, 데이터가 많으면 성능 이슈가 발생할 수 있고, 때로는 메모리 초과 예외가 발생할 수도 있습니다. 이러한 이유로 Hibernate는 경고 메시지를 통해 알려줍니다 해결 방법 쿼리 수정 컬렉션 페치 조인 대신..
2024.04.05
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
동기화
동기화 동기화는 다수의 프로세스나 스레드에서 공유 자언에 동시에 접근할 때 발생할 수 있는 문제를 해결하기 위한 기술입니다. 여러 프로세스나 스레드가 동시에 공유 자원을 수정하거나 읽을 때, 일관된 순서로 접근하여 데이터의 일관성 보장의 목표 프로세스 동기화 컴퓨터 시스템에서 여러 프로세스가 동시에 실행될 때 발생할 수 있는 문제를 해결하는 기술입니다. 동기화의 목적 상호 배제 동일한 자원에 대해 여러 프로세스나 스레드가 동시에 접근하지 못하도록 제어하는 것을 말하며, 즉, 한 프로세스나 스레드가 자원을 사용하고 있을 때에는 다른 프로세스나 스레드는 접근할 수 없도록 해야 합니다. 예를 들면, 계좌에 저축하는 프로세스 A와 B가 있을 때 A가 자원을 사용하는 동안 B는 대기하고, A작업이 끝난 후에 B가..
2024.03.15
no image
Call By Value와 Call By Reference
함수가 호출될 때, 일반적으로 메모리 내에서 함수를 위한 별도의 임시 공간이 생성됩니다. 이 공간은 주로 스택 프레임이라고 불리며, 함수 호출 시 할당되는 메모리 블록으로 사용됩니다. 스택 프레임에는 함수에서 사용되는 지역 변수 및 기타 관련 정보가 저장됩니다. 함수가 실행을 마치고 종료되면 해당 스택 프레임은 메모리에서 해제됩니다. 함수 호출 방식에는 주로 값에 의한 호출인 (call-by-value)와 참조에 의한 호출(call by referece)이 있습니다. Call By Value (값에 의한 호출) 함수 호출 시에 전달되는 변수의 값의 복사하여 함수의 인자로 전달합니다. 이러한 경우, 복사된 값은 함수 내부에서 지역적으로 사용되는 특성을 가지며, 함수 내부에서 해당 값이 변경되더라도 외부의 ..
2024.03.03