전체 글 149

[mySQL] 면접 예상 질문

noSQL 과 SQL의 차이 noSQL RDB가 아닌 다른 형태의 데이터 저장과 처리를 지원하는 데이터베이스 시스템 유연성이 높아서 비구조적인 데이터, 다양한 형태의 데이터를 처리하기 용이하다. 대량의 데이터를 처리하는 데 뛰어난 성능을 가진다. ACID (원자성, 일관성, 고립성, 지속성) 특성을 보장하지 않을 수 있어 데이터 무결성이 보장되지 않을 수 있다. 복잡한 쿼리 작성이 어렵다. 데이터 모델링에 유연성이 있기 때문에 비교적 데이터 일관성 유지가 어렵다. SQL 관계를 통해 데이터를 구조화하기 때문에 복잡한 쿼리 작성을 간단하게 할 수 있다. 스키마가 고정되어 있어 데이터 구조 변경이 어렵다. 대량의 데이터를 처리할 때 성능이 저하될 수 있다. 비구조적인 데이터를 다루는 데 적합하지 않다. SQ..

CS 2023.11.07

[Network] websocket & stomp, 실시간 통신

Http와 웹소켓의 차이 http 클라이언트가 서버에 요청을 하면 서버가 응답을 보내는 단방향 통신 비연결성(요청 - 응답 시에만 연결을 유지), 무상태성(서버는 클라이언트의 상태를 보존하지 않음) 특성을 가짐 웹소켓 클라이언트 - 서버 간 실시간 통신이 가능하도록 하는 양방향 통신 프로토콜 요청 - 응답 형태가 아니라 데이터가 변경될 때 마다 이벤트를 보내거나 받는다 소켓의 동작 방법 HTTP로 접속요청 후 웹소켓 프로토콜로 변경 후 실시간 통신으로 이루어진다. 웹소켓 개념과 원리 개념정리 웹소켓 개념과 원리 웹소켓(WebSocket)의 개념 웹소켓이란? 웹소켓(WebSocket) 기존의 단방향 HTTP 프로토콜과 호환되어 양방향 통신을 제공하기 위해 개발된 프로토콜 일반 Socket통신과 달리 yur..

CS 2023.11.07

[JPA] N+1

N+1 문제 데이터베이스에서 데이터를 조회할 때 발생하는 성능 문제 중 하나다. 조회된 데이터 갯수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하는 현상이다. 이로 인해 불필요한 쿼리가 발생하여 성능이 저하된다. 발생 이유 연관된 여러개의 테이블이 존재할 때, 한쪽 테이블만 조회하고 연결된 다른 테이블은 따로 조회하기 때문에 발생한다. Eager는 조회 즉시 N+1 문제가 발생하고, Lazy는 연관된 데이터를 조회하려고 할 때 발생한다. 해결 방법 1. Fetch Join JPQL을 사용하여 DB에서 데이터를 가져올 때 처음부터 연관된 데이터까지 같이 가져오게 하는 방식이다. 장점 - 데이터베이스에서 한 번의 쿼리로 필요한 데이터를 모두 가져올 수 있다. - 지연 로딩을 사용하지 않기 때문에 성능이 향..

CS 2023.10.30

[JPA] ORM, JPA

ORM(Object-Relational Mapping) Class와 RDB(Relational DataBase)의 테이블을 매핑(연결)한다는 뜻이며, 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이다. 장점 SQL문이 아닌 Method를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을 이용하여 비즈니스 로직을 구성하는데만 집중할 수 있음. (내부적으로는 쿼리를 생성하여 DB를 조작함. 하지만 개발자가 이를 신경 쓰지 않아도됨) Query와 같이 필요한 선언문, 할당 등의 부수적인 코드가 줄어들어, 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높임 객체지향적인 코드 작성이 가능하다. 오직 객체지향적 접근만 고려하면 되기때문에 생산성 증가 매핑하는 정보가 Class로 명시 ..

CS 2023.10.30

[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] 영속성 컨텍스트 및 이점(5가지)

JPA(Java Persistence API)에서 영속성 컨텍스트(Persistence Context) 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻이다. 영속성 컨텍스트는 애플리케이션과 DB 사이에서 객체를 보관하는 가상의 DB 역할을 한다. 엔티티 매니저(EntityManager)를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리하게 된다. EntityManager JPA의 핵심 인터페이스 중 하나로, 영속성 컨텍스트를 관리하고 엔티티를 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