본문 바로가기

JAVA13

스프링 인터셉터를 이용한 권한 검증 분리하기 문제 상황 사이드 프로젝트를 진행하면서 기본 인증/권한을 제외하고, 방장 및 팀원 권한 검증도 추가로 필요한 상황이였다. 초기에는 아래와 같이 Service layer의 메서드를 통해 검증을 진행했다. 하지만, 추가 검증이 필요한 도메인의 Service가 추가될 때 마다 해당 메서드들이 항상 추가되어야 됬었다. 좋지 않아.... 문제점을 정리해보자. 먼저, 인증 및 권한 검증은 비지니스 로직와 별개의 관심 사항이다. 또한, 같은 기능의 코드가 계속 반복되어 불필요한 중복 코드가 발생한다. 이러한 문제를 Filter, Spring Interceptor, AOP 등을 사용해서 해결할 수 있다.위 기술들 모두 이를 해결할 수 있지만, 컨트롤러에 전달되는 Request, Reponse를 처리하거나, 새로운 데이.. 2023. 6. 14.
스프링 트랜잭션 AOP 등장까지의 변천사 스프링 트랜잭션 AOP가 등장하기 전 이전의 문제점들을 정리해보고 어떠한 매커니즘으로 동작하는지 정리하고자 한다. 그 과정에서 등장하는 스레드 로컬을 사용한 트랜잭션 동기화 매니저, 템플릿 콜백 패턴, 스프링 AOP 등의 기술과 자세한 동작 방식은 추후 자세히 정리해보도록 할 것이다. 지금은 트랜잭션 AOP가 등장하기까지의 배경 및 변천사를 중점적으로 정리해보겠다. 문제의 시작 기본적으로 트랜잭션의 시작과 끝은 비지니스 로직이 있는 Sevice 계층에서 시작하는 것이 좋다. 예를 들어 비지니스 로직 중 계좌의 돈을 차감하고 또 계좌의 돈을 추가하는 두개의 기능이 있는데, 예외로 인해 일부만 commit 되고 일부는 rollback되면 어떨까? 심각한 데이터 적합성 등 문제가 발생할 것이다. 그러므로 비지.. 2023. 5. 27.
트랜잭션 이해와 락 트랜잭션의 이해 트랜잭션(Transaction)이란, 데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하는 작업의 단위이다. 트랜잭션은 ACID라는 원자성, 일관성, 격리성, 지속성을 보장하게 된다. 각 특징의 의미를 하나씩 정리해보겠다. 원자성(Atomicity) 트랜잭션 내에서 실행한 작업들은 모두 성공하든지, 실패해야만 한다. 일관성(Consistency) 모든 트랜잭션은 데이터베이스의 상태를 일관성있게 유지해야된다. 데이터베이스 객체, 참조 무결성 제약조건을 만족해야하는 것이 예로 될 수 있다. 격리성(Isolation) 동시에 실행 중인 트랜잭션은 서로 영향을 미치지 않도록 격리된 환경에서 독립적으로 수행되어야 된다. 격리성은 동시성과 관련하여 성능 이슈가 있기 때문에 격리수준을 정할 .. 2023. 5. 24.
커넥션 풀과 데이터소스 서론 데이터베이스 커넥션을 획득하기 위해서는 아래와 같은 복잡한 단계를 거치게 된다. 커넥션을 맺을 수 있는 DB 드라이버(H2, MySQL 등)를 찾는다. DB 드라이버와 3-way-handshake 를 통해 TCP/IP 연결을 맺는다. ID, PW와 기타 부가정보를 DB 전달하고, DB는 전달받은 ID,PW 를 통해 내부 인증을 완료하고 DB 세션을 생성한다. DB는 커넥션이 생성됬임을 알리고, DB 드라이버는 커넥션 객체를 생성해서 클라이언트에게 반환한다. 오버헤드가 너무 큰데??.... 맞다!! 데이터베이스와 커넥션을 맺는것은 복잡하고 시간도 오래 걸린다. 그럼 미리 커넥션을 만들고 필요할때 주면 되는거 아니야??... 맞다!! 어플리케이션 로딩 시점에 필요한 만큼의 커넥션을 미리 생성해둔 후, .. 2023. 5. 20.