전체 글

전체 글

    객체 지향 ( Object - Oriented )

    1. 객체 ( Object ) 사전적으로 물건 각 객체마다 자기의 임무가 있다. 예) 어느 한 카페 카페로 들어와 주문을 하는 손님 손님의 주문을 받는 직원 커피를 만드는 직원 → 커피를 중심으로 3명이 각자의 역할에 맞춰서 맡은 일을 한다. 손님이 없다면 주문을 받지못할 것이고, 손님이 왔는데 주문을 직원이 못받으면 커피는 만들어지지 못하고 손님은 무한히 기다리게 된다. 이렇게 객체는 상태와 역할을 가진다. 위에서와 같이 커피라는 임무가 들어왔을 때 자신의 역할을 마치고 다음 객체가 할 수 있는 상태를 만들어준다. 객체 지향은 데이터를 추상화시켜서 상태와 임무를 가진 객체를 통해 그 객체들 간의 상호작용을 통해 로직을 구성 2. 캡슐화 ( Encapsulation ) 관련있는 속성과 행위들을 묶은 것 ..

    Synchronize VS Asynchronize / Blocking VS Non Blocking 차이점

    Blocking와 Non Blocking 설명에 앞서 각각의 프로그램 실행하는 순서 관점에서 본다면 더 쉽게 이해가 가능하다.1. Blocking I/O ModelBlcoking I/O Model 에서는 System Call이 끝날때까지 프로그램은 대기해야하고 Sysytem Call이 완료되면 그때야 Return 한다.Wait Queue에 들어간다. 2. Non-Blocking I/O ModelNon-Blocking I/O Model 에서는 System Call이 완료되지 않아도 대기하지 않고 Return 된다.Wait Queue에 들어가지 않는다. 3. Blocking vs Non-Blocking → 프로그램이 호출되는 함수가 바로 return이 되느냐 않느냐 차이이다. Synchronous vs As..

    JPA와 Spring Data JPA

    JPA ? Java Persistence API 의 약자로 관계형 데이터베이스를 사용하기 위한 양식이다. Java 객체와 관계형 DB 사이를 매핑하는 ORM 기술 표준 인터페이스이므로 실제 구현체는 Hibernate 등등 SQL 코드를 구현하지 않고, 객체 지향 프로그래밍 방식으로 DB를 사용 Java 에서 애플리케이션과 JDBC 사이에서 동작한다. Hibernate JPA의 구현체이다. 실제로 JPA의 핵심체인 EntityManagerFactory, EntityManager, EntityTransaction을 Hibernate에서는 SessionFactory, Session, Transaction으로 상속 받고 각각 Impl로 구현하고 있다. 중간에 ORM이 JDBC API를 직접 사용하여 DB에 접근..

    스프링 테스트에서의 @Transactional

    테스트 케이스에서의 @Transactional @Transactional ? Spring의 JPA에서 많이 사용되는 기술로, 선언적 트랜잭션이라 부른다 트랜잭션을 시작하고 Commit 을 시켜주고, Exception 발생 시 Rollback을 시켜준다. 이를 위해 Transaction 어노테이션이 실행되기 전에 transaction begin 코드를 삽입하여 메서드가 실행 된 후 transaction commit 코드를 삽입하여 객체 변경 감지를 수행하게 유도한다. 다수의 트랜잭션에서 발생할 수 있는 문제 Dirty Read A 트랜잭션이 어떤 값을 1에서 2로 변경하고 아직 커밋하지 않은 상태에서 B 트랜잭션이 그 값을 읽는 경우 2가 조회된다. 트랜잭션 B가 2를 조회 한 후 A가 Rollback된다..

    트랜잭션 (Transaction)

    트랜잭션(Transaction) ? 데이터베이스의 상태를 변화시키기위해 수행하는 작업의 단위 또는 한번에 모두 수행되어야 할 일련의 연산 특징 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 직업단위 하나의 트랜잭션은 Commit 되거나 Rollback된다. 성질 원자성 (Atomicity) 트랜잭션의 연산은 데이터베이스에 모두 반영되거나 전혀 반영되지 않아야한다. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야하며, 어느 하나라도 오류가 나면 트랜잭션은 전부 취소된다. 일관성 (Consistency) 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다..

    캐싱 (Caching)

    캐싱 (Caching)

    캐싱 (Caching) ? - 일시적인 특징이 있는 데이터 하위 집함을 저장하는 고속 데이터 스토리지 계층 - 따라서 이후에 해당 데이터에 대한 요청이 있으 경우 데이터의 기본 스토리지 위치에 액세스할 때보다 더 빠르게 요청할 수 있다. - 캐싱을 사용하게되면 이전에 검색하거나 계산한 데이터를 효율적으로 재사용할 수 있다. 1. 캐싱의 유형 1) 브라우저 캐싱 - 이미지, CSS 및 JavaScript와 같은 파일을 사용자 컴퓨터에 로컬로 저장 2) 개체 캐싱 - 이미지 및 글꼴과 같이 웹 페이지에서 사용되는 개체를 저장 - 캐시된 객체가 사용자의 컴퓨터에 저장되기 때문에 보다 일관된 사용자 경험을 제공 3) 페이지 캐싱 - 방문한 전체 웹 페이지의 복사본을 저장 - 웹 페이지 로드 시 필요한 HTTP ..

    Sring Boot + Redis를 이용한 Cachcing

    Sring Boot + Redis를 이용한 Cachcing

    0. 환경구성 1. Window용 Redis 1) https://github.com/tporadowski/redis 에서 Redis 설치 2) Redis 기본포트 (6379) 설정 3) 간편한 접속을 위한 Redis 경로 환경변수 Path 등록 4) Cmd에서 redis-cli 입력으로 localhost로 설정된 Redis 접속 2. Ubuntu용 Redis 1) sudo apt-get redis-server 로 Redis 설치 2) sudo vi/etc/redis/redis.conf 에서 최대 메모리 설정 maxmemory 1g // 최대 사용 메모리 1G 로 설정 maxmemory-policy allkeys-lru // 최대 메모리 초과 시 가장 오래된 데이터 삭제 3) redis-cli로 접속 1...

    [JPA] 더티 체킹 (Dirty Checking)

    JPA에서 더티 체킹과 트랙잭션의 필요성을 인지하지 못한다면 비지니스 로직에서 다루는 엔티티 데이터가 꼬이는 경우가 발생한다. 이런 경우를 방지하지위해 더티 채킹을 알아야 한다. 더티 (Dirty) ? - 상태의 변화가 생긴 정도 더티 체킹 (Dirty Checking) ? - 상태 변경 검사 JPA에서는 트랙잭션이 끝나는 시점에 변화가 있는 모든 엔티디 객체를 데이터베이스에 자동으로 반영해준다. → 변화의기준 : 최초 조회 상태 JPA에서의 Dirty Checking 엔티티를 조회하면 해당 엔티티의 조회 상태 그대로 스냅샷을 만든다. 트랜잭셔니 끝나는 시점에는 이 스냅샷과 비교하여 다른점이 있다면 Update Query를 데이터베이스로 전달한다. 이런 상태에 변경 검사의 대상은 영속성 컨텍스트가 관리하..