객체지향의 사실과 오해 | 조영호 - 교보문고 객체지향의 사실과 오해 | 객체지향에 대한 선입견을 버려라!『객체지향의 사실과 오해』는 객체지향이란 무엇인가라는 원론적면서도 다소 위험한 질문에 답하기 위해 쓰여진 책이다. 안타깝 product.kyobobook.co.kr 역할, 책임, 협력 객체 지향의 중요 개념 📌 역할, 책임, 협력 역할은 관련성 높은 책임의 집합이다. 역할과 책임은 협력이 원활하게 진행한데 핵심적인 구성요소이다. 여러 사람이 동일한 역할을 수행할 수 있다. 역할은 대체 가능성을 의미한다. 책임을 수행하는 방법은 자율적으로 선택할 수 있다. 한 사람이 동시에 여러 역할을 수행할 수 있다. 역할은 유연하고 재사용 가능한 협력 관계를 구축하는 데 중요한 설계 요소다, 대체 가능한 역할과 책..
자바 ORM 표준 JPA 프로그래밍 | 김영한 - 교보문고 자바 ORM 표준 JPA 프로그래밍 | 자바 ORM 표준 JPA는 SQL 작성 없이 객체를 데이터베이스에 직접 저장할 수 있게 도와주고, 객체와 관계형 데이터베이스의 차이도 중간에서 해결해준다. 이 책은 JPA product.kyobobook.co.kr 스프링 환경에서 JPA를 사용하면 컨테이너가 트랜잭션과 영속성을 관리해준다. 컨테이너 환경에서 동작하는 JPA의 내부 동작 방식을 이해하지 못하면 문제가 발생했을 때 해결이 쉽지 않다. 1. 트랜잭션 범위의 영속성 컨텍스트 1.1. 스프링 컨테이너의 기본 전략 스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다. 트랜잭션의 범위와 영속성 컨텍스트의 생존 범위가 같다 트랜잭션..
자바 ORM 표준 JPA 프로그래밍 | 김영한 - 교보문고 자바 ORM 표준 JPA 프로그래밍 | 자바 ORM 표준 JPA는 SQL 작성 없이 객체를 데이터베이스에 직접 저장할 수 있게 도와주고, 객체와 관계형 데이터베이스의 차이도 중간에서 해결해준다. 이 책은 JPA product.kyobobook.co.kr 1. 스프링 데이터 JPA 스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트다. CRUD를 처리하기 위한 공통 인터페이스 JpaRepository를 제공하고, 리포지토리를 개발할 때 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입해준다. 일반적인 CRUD 메소드는 JpaRepository 인터페이스가 공통..
저번 글에 이어서 데이터베이스 락을 활용하여 동시성 이슈를 해결하는 방법을 정리해보려고 한다. (프로젝트 DB로 MySQL를 사용하고 있음) 해결방법 2. DB에 비관적 락 걸기 비관적 락 (Pessimistic Lock) 트랜잭션 충돌이 발생한다고 가정하고 미리 락을 걸어버리는 방법 데이터베이스의 읽기락, 쓰기락 사용 읽기 락 : 다른 트랜잭션에서 읽기만 가능, 쓰기는 불가능 쓰기 락 : 다른 트랜잭션에서 읽기, 쓰기 모두 불가능 ex. 서버 1 DB에서 데이터를 가져올 때 비관적 락을 걸면, 다른 서버에서는 서버 1의 작업이 끝나서 락이 풀릴때까지 데이터에 접근하지 못함 그림으로 설명하면 아래와 같다. DB에 쓰게에 대한 비관적 락이 걸린 경우, 트랜잭션 A가 커밋되기 전에는 트랜잭션 B의 selec..
이커머스 프로젝트를 진행했는데 트러블슈팅 내역을 정리해보려고 한다. 먼저 상품의 재고처리에 대한 동시성 이슈이다. 현재 상품 주문과 주문취소 시 상품의 재고변경로직이 동작하는데 여기서 동시성 이슈가 발생한다. 1. ❓동시성 이슈란❓ 여러 스레드가 동시에 같은 인스턴스의 필드 값을 변경하면서 발생하는 문제 여러 스레드가 하나의 자원을 공유하고 있기 때문에 같은 자원을 두고 경쟁상태(Race Condition)가 됨 2. 코드와 테스트 코드는 간단히 아래와 같이 구성되어 있다. // Product.java @Entity public class Product extends BaseEntity { // ... 기타 필드 @Column(nullable = false) private Long stock; priva..