전체 글 132

[JPA] Propagation

JPA의 Propagation 트랜잭션의 전파 방식을 설정하는 속성이다. 쉽게 말해 트랜잭션 내에서 다른 트랜잭션을 호출할 때 어떻게 동작할지를 지정한다. @Transactional 어노테이션을 통해 설정할 수 있으며, ex: @Transactional(propagation = Propagation.REQUIRED) 다양한 `Propagation` 옵션들이 있다 1. REQUIRED: 기본값, 트랜잭션을 항상 필요로 한다. 기존 트랜잭션이 존재하면 해당 트랜잭션을 사용하고, 없으면 새로운 트랜잭션을 만들어 사용한다. 2. SUPPORTS: 기존 트랜잭션이 존재하면 해당 트랜잭션을 사용하고, 없으면 트랜잭션 없이 실행된다. 3. MANDATORY: 기존 트랜잭션이 반드시 존재해야 하며, 없으면 예외가 발생..

CS 2023.10.27

[DB] 트랜잭션(Transaction, ACID)

트랜잭션(Transaction) DB에서 사용되는 업무 처리의 최소 단위 트랜잭션의 특성 : ACID Atomicity: 원자성 트랜잭션을 구성하는 연산 전체가 모두 정상 실행되거나 모두 취소되어야 한다 Consistency: 일관성 시스템이 가진 고정요소는 트랜잭션 수행 전과 후의 상태가 같아야 한다 Isolation: 격리성, 고립성 동시에 실행되는 트랜잭션은 서로 영향을 미치지 않아야 한다 value desc DEFAULT 기본 설정값(READ_COMMITTED) READ_UNCOMMITTED 다른 트랜잭션이 commit하지 않은 데이터를 읽을 수 있다. READ_COMMITTED 다른 트랜잭션이 commit한 데이터를 읽을 수 있다 REPEATABLE_READ 처음 읽은 데이터와 두번째 읽은 데이..

CS 2023.10.27

[JPA] 영속성 컨텍스트, 엔티티 매니저

JPA(Java Persistence API)에서 영속성 컨텍스트(Persistence Context)영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻이다.영속성 컨텍스트는 애플리케이션과 DB 사이에서 객체를 보관하는 가상의 DB 역할을 한다.엔티티 매니저(EntityManager)를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리하게 된다.  EntityManagerJPA의 핵심 인터페이스 중 하나로, 영속성 컨텍스트를 관리하고 엔티티를 DB에 저장하거나 조회하는 역할을 한다.1. 엔티티 영속화(Persist): 새로운 엔티티를 영속성 컨텍스트에 저장하고 DB에 반영한다. 2. 엔티티 수정 및 삭제: 영속성 컨텍스트에 있는 엔티티의 상태를 수정 및 삭제하..

CS 2023.10.27

[Design Pattern] 가교 패턴(브릿지 패턴, Bridge Pattern)

가교 패턴(브릿지 패턴, Bridge Pattern) 구현부(Implementation)와 추상화(Abstraction)를 분리하여 각각 독립적으로 변형할 수 있게 하는 패턴이다. 구성요소 Implementor - abstract 기능을 구현하기 위한 인터페이스 정의 ConcreateImplementor - 실제 기능 구현 Abstract - 기능 계층의 최상위 클래스 - 구현 부분에 해당하는 클래스를 인스턴스를 가지고 구현부 메서드를 호출 RefinedAbstract - 기능 계층에서 새로운 부분을 확장한 클래스 특징 복합 객체를 다시 재정의하여 추상 계층화된 구조이다. 구성 클래스의 연결 부분을 추상 클래스로 변경한다. 이를 통해 각각의 계층이 독립적으로 확장 및 변경 가능해진다. 브리지 패턴은 기능..

CS 2023.10.26

[Design Pattern] 퍼사드(Facade) 패턴

퍼사드 패턴(Facade Pattern) 서브시스템에 있는 인터페이스들에 대한 통합된 인터페이스를 제공하는 디자인 패턴이다. Facade: 클라이언트의 요청을 적절한 서브시스템 클래스에 위임한다. Subsystem classes: 서브시스템 기능을 구현한다. 서브시스템 클래스는 facade에 의해서만 사용된다. Client: Facade에게 특정 행동을 수행해달라고 요청한다. 온라인 쇼핑몰에서의 주문 시스템을 예로 들어보자. 서브시스템을 사용하기 쉽게 하는 인터페이스(퍼사드)를 두어 간편하게 주문을 넣을 수 있도록 변경하였다. 퍼사드 패턴을 적용한 결과 서브시스템 클래스에서 변화가 생겨도 클라이언트 코드에 영향이 가지 않는다. 퍼사드 패턴의 핵심은 상호작용 결합도를 낮추는데 있다. 따라서 위와 같이 세 ..

CS 2023.10.26

[Design Pattern] 전략 패턴(Strategy Pattern)

전략 패턴(Strategy Pattern) 알고리즘을 정의하고 해당 알고리즘을 실행하는 부분을 분리하여 교체 가능하게 하는 패턴이다. 이를 통해 알고리즘을 동적으로 선택하거나 확장하기가 용이해 진다. 전략 패턴의 구성 요소 1. 전략(Strategy) - 알고리즘을 나타내는 인터페이스나 추상 클래스 - 여러 알고리즘의 공통점을 정의한다 2. 구체적인 전략(Concrete Strategy) - 전략 인터페이스를 구현한 클래스 - 각각의 클래스는 다양한 알고리즘을 구현한다 3. 컨텍스트(Context) - 전략을 사용하는 클라이언트 - 필요에 따라 다른 전략을 선택하고 실행한다 예시 전략(Strategy) // 정렬 전략을 나타내는 인터페이스 interface SortStrategy { void sort(i..

CS 2023.10.23

[Design Pattern] 팩토리 메서드(Factory method pattern)

팩토리 메서드 패턴(Factory method pattern) 부모(상위) 클래스에 알려지지 않은 구체 클래스(new 키워드로 객체를 생성할 수 있는 클래스)를 생성하는 패턴이며, 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다. 부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다. Factory Method가 중첩되기 시작하면 굉장히 복잡해 질 수 있다. 또한 상속을 사용하지만 부모(상위) 클래스를 전혀 확장하지 않는다. 따라서 이 패턴은 extends 관계를 잘못 이용한 것으로 볼 수 있다. extends 관계를 남발하게 되면 프로그램의 엔트로피가 높아질 수 있으므로 Factory Method 패턴의 사용을 주의해야 한다. // Product: ..

CS 2023.10.23

[Spring] Bean의 생명주기 및 Scope

빈(Bean) 일반 Java 객체와 다른 점은 없으나, 스프링 컨테이너에서 관리되는 객체를 Bean이라고 부른다. 스프링 컨테이너에 의해 생성되고 관리되며, 다음과 같은 단계로 이루어진다 생명주기 1. 정의: 스프링 컨테이너에 빈을 등록하기 위해 XML 파일, Java 어노테이션 등을 사용하여 빈의 정의를 작성 2. 생성: 스프링 컨테이너는 빈의 정의를 기반으로 빈 객체를 생성(클래스의 생성자나 팩토리 메서드 등을 사용) 3. 의존성 주입: 생성된 빈에 대해 필요한 의존성들을 주입한다. 빈의 정의에서 확인하고 해당 빈들을 찾아서 주입한다. 4. 초기화: 빈이 생성되고 의존성이 주입된 후, 초기화 메서드가 호출된다. InitializingBean 인터페이스의 afterPropertiesSet() 메서드나 ..

CS 2023.10.20

[JAVA] UML(Unified Modeling Language)

UML(Unified Modeling Language) 객체지향 소프트웨어 개발 전 단계에서 다양한 측면을 의사소통이 원활하게 이루어지도록 시각화 한 모델링 언어 사물(Things), 관계(Relationships), 다이어그램(Diagram)으로 구성한다. 사물(객체): 다이어그램 안에서 관계가 형성될 수 있는 대상들 관계 : 사물과 사물 사이의 연관성을 표현 실선으로 표현, 방향에 따라 화살표를 사용(양방향일 시 화살표 X) 집합(Aggregation)관계 : 사물이 다른 사물에 포함되어 있는 관계 포함(Composition)관계 : 상호 의존관계이며 독립될 수 없는 관계 일반화(Generalization)관계 : 사물의 구체적인지에 따라 상, 하 관계로 표현 실체화(Realization) : 사물의..

CS 2023.10.19

[Java] 객체지향 분석(OOA) 및 설계(OOD) 및 설계원칙(SOLID)

객체지향 분석(OOA; object-oriented anaysis)사용자의 요구사항을 토대로 클래스, 관계 등을 정의하여 모델링하는 단계이며 클래스를 식별 및 정의하는 것이 목적이다.클래스 식별: 실생활에서 어떤 객체들이 서로 유사한 특성과 행동을 가지고 있는지 파악하는 것ex: 자동차(클래스) - 속도, 연료량 등의 특성을 가지며 주행, 가속, 감속 등의 행동을 할 수 있다. 객체지향 분석의 방법론Rumbaugh(럼바우) 방법 : 모든 구성요소를 그래픽 표기법(UML)을 이용하여 모델링하는 기법 [JAVA] UML(Unified Modeling Language)UML(Unified Modeling Language) 객체지향 소프트웨어 개발 전 단계에서 다양한 측면을 의사소통이 원활하게 이루어지도록 시..

CS 2023.10.19