분류 전체보기(250)
-
[DB 접근 기술] 트랜잭션 (2)
트랜잭션 문제 해결 - 트랜잭션 템플릿 앞서 트랜잭션 매니저를 통해 트랜잭션 추상화, 리소스 동기화를 얻는데에는 성공했다. 그 덕에 서비스 코드는 이제 JDBC 기술에 의존하지 않으며 트랜잭션 동기화 매니저 덕분에 커넥션을 파라미터로 넘기지 않아도 된다. 하지만 트랜잭션을 사용하는 로직을 살펴보면 다음과 같은 패턴이 반복되는 것을 확인할 수 있다. 트랜잭션 사용 코드 //트랜잭션 시작 TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try { //비즈니스 로직 bizLogic(fromId, toId, money); transactionManager.commit(status); /..
2022.05.28 -
[DB 접근 기술] 트랜잭션 (1)
애플리케이션 구조 여러가지 애플리케이션 구조가 있지만, 가장 단순하면서 많이 사용하는 방법은 역할에 따라 3가지 계층으로 나누는 것이다. 이 3개의 계층 중 핵심 비즈니스 로직이 들어있는 서비스 계층이 가장 중요하다고 가히 말 할 수 있다. 시간이 흘러서 UI(웹)와 관련된 부분이 변하고, 데이터 저장 기술을 다른 기술로 변경될 순 있어도, 비즈니스 로직은 최대한 변경없이 유지되어야 한다. 이렇게 하려면 서비스 계층을 특정 기술에 종속적이지 않게 개발해야 한다. --> 사실 계층을 나눈 이유도 서비스 계층을 순수하게 유지하기 위한 목적이 크다. 기술에 종속적인 부분은 프레젠테이션 계층, 데이터 접근 계층에서 가지고 간다. --> 예를 들어서 HTTP API 를 사용하다가 GRPC 같은 기술로 변경해도 프..
2022.05.28 -
[토비의 스터디 3.1] 1.6 싱글톤 레지스트리와 오브젝트 스코프
1.5, 1.6장은 스터디에서 내가 맡은 부분이라 발표에 사용한 자료를 그대로 가져왔다. 1.6. 싱글톤 레지스트리와 오브젝트 스코프 오브젝트의 동일성(identity)과 동등성(equality) 동일성은 == 연산자 동등성은 equals() 메소드 동일성은 하나의 오브젝트를 두 개의 레퍼런스 변수가 가리키고 있는 상태 동등성은 두 개의 다른 오브젝트가 메모리상에 존재하나, 로직상의 정의에 따라 오브젝트 정보가 같다고 판단 스프링은 기본적으로 빈을 요청했을 때 매번 동일한 오브젝트를 돌려준다. 1.6.1. 싱글톤 레지스트리로서의 애플리케이션 컨텍스트 애플리케이션 컨텍스트는 싱글톤을 저장하고 관리하는 싱글톤 레지스트리다. 서버 애플리케이션과 싱글톤 스프링이 적용되는 대상은 자바 엔터프라이즈 기술을 사용하는..
2022.05.27 -
[토비의 스프링 3.1] 1.5 스프링의 IoC
1.5, 1.6장은 스터디에서 내가 맡은 부분이라 발표에 사용한 자료를 그대로 가져왔다. 이제 스프링을 사용해본다. 기존에 만든 DaoFactory을 스프링이 사용 가능하도록 만들어보자. 간단한 개념을 소개하자면, 스프링이 제어권을 가지고 직접 생성과 관계를 맺어주는 오브젝트를 빈(Bean)이라고 한다. 빈의 생성, 관계 설정 등의 제어를 담당하는 IoC 오브젝트를 빈 팩토리라고 하며 애플리케이션 컨텍스트를 사용한다. 애플리케이션 컨텍스트는 별도의 설정 정보를 참고해서 빈에 대한 제어 작업을 총괄한다. 1.5.1 오브젝트 팩토리를 이용한 스프링 IoC 앞서 만든 DaoFactory를 스프링의 애플리케이션 컨텍스트가 사용할 수 있는 설정정보로 만들어보자. 먼저, 설정을 담당하는 클래스는 스프링이 인식할 수..
2022.05.27 -
[DB 접근 기술] DB 락
DB 락 - 개념 이해 세션1이 트랜잭션을 시작하고 데이터를 수정하는 동안 아직 커밋을 수행하지 않았는데, 세션2에서 동시에 같은 데이터를 수정하게 되면 여러가지 문제가 발생한다. 바로 트랜잭션의 원자성이 깨지는 것이다. 여기에 더해서 세션1이 중간에 롤백을 하게 되면 세션2는 잘못된 데이터를 수정하는 문제가 발생한다. 이런 문제를 방지하려면, 세션이 트랜잭션을 시작하고 데이터를 수정하는 동안에는 커밋이나 롤백 전까지 다른 세션에서 해당 데이터를 수정할 수 없게 막아야 한다. 데이터베이스는 이런 문제를 해결하기 위해 락(Lock)이라는 개념을 제공한다. 세션1은 트랜잭션을 시작한다. 세션1은 memberA 의 money 를 500으로 변경을 시도한다. 이때 해당 로우의 락을 먼저 획득해야 한다. 락이 남..
2022.05.27 -
[DB 접근 기술] 트랜잭션 이해
트랜잭션 - 개념 이해 데이터를 저장할 때 파일이 아니라 DB에 저장하는 이유는 무엇일까 가장 대표적인 이유로 DB는 트랜잭션이라는 개념을 지원하기 때문이다. 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 이는 생각보다 고려해야 할 점이 많다. A가 B에게 5000원을 송금한다면, A의 잔고를 5천원 감소하고, B의 잔고를 5천원 증가해야 한다. 이 과정이 하나의 트랜잭션 안에서 이루어져야 한다. 1. A의 잔고 5천원 감소 2. B의 잔고 5천원 증가 만약 1번은 성공했는데 2번에서 시스템 문제가 발생한다면 A의 돈만 파쇄된 것이다. DB가 제공하는 트랜잭션 기능을 사용하면 1,2 둘 다 성공해야 저장하고 둘 중에 하나라도 실패하면 거래 전의 상태로 돌아갈 수 있다. 모든 작업이..
2022.05.27