메모장

221116 메모장 -DB1편복습

Developer-Choi 2022. 11. 16. 11:44
728x90
728x90

오전에

통합민간인증 관련하여, prikey 암호화를 진행하였고(AES256 사용)

테스트코드로 암호화 및 복호화 하여 서명까지 진행되는지 확인함, 오후에는 시퀀스 다이어그램 짜야 될 거 같음

 

레거시 web admin 같은 경우는 RA는 현재 진행상황이 데이터 센터에 QA서버구축을 대기중에 있다..

CA같은 경우도 서버 구축을 해야하는데 (SSL-CA 개발서버) 개발망 42서버에 Sys 계정을 누가 관리할 것 인지가 아직 결정이 안났고 대기중이다.

 

그리고 스프링 DB 접근 1편 관련하여 복습 중에 있다. 오전에 좀 더 봤어야했는데 오후까지 좀 봐야 될 듯하다.

 

요즘 점점 허리가 아픈거 같다 자세좀 바로잡아야겠다.

 

 

DB1편 복습 중

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

DB에 커넥션을 맺고 sql문을 날리고, 데이터를 가져오는 방법은 DB마다 다름

JDBC는 이것을 추상화 하여 사용자는 DB에 상관없이 동일하게 가져올 수 있게 함(SQL문 자체는 달라짐)

jdbc 는 drivermanager를 제공하여 커넥션을 직접 가져오게 함

 

커넥션은 매번 가져오게하기엔 리소스가 많이듬 (TCP/IP 연결) 

커넥션 풀을 사용하여 미리 연결 후 사용하고 반납하는 게 유리함 (요즘대세는 히카리 CP)

 

datasource는 커넥션을 가져오는 방법을 추상화 한 것을 사용함

이로 인해 datasource만 의존하고, drivermanager를 통해 커넥션 직접 생성 하여 db접근하던가, 히라키cp로 연결할 수 있음

 

 

트랜젝션 ACID , 격리성을 따질 때 수동커밋을 하는걸 트랜젝션 시작한다고 볼 수 있음

수동 커밋 설정 후 데이터 접근하면 DB 락을 가져오게 됌, 락이 없으면 데이터를 접근 할 수 없음(조회는 가능 할 수 있음)

select for update 조회인데 락 가져옴

 

트랜젝션을 사용하는동안 같은 커넥션은 유지시켜야함

서비스에서 커넥션을 받아서 리포지토리에서 넘기고 받아와서 종료시켜야함(서비스 로직이 매우 지저분)

 

스프링이 트랜젝션 추상화를 만들어둔게 있음, JDBC트랜젝션관리, JPA 트랜젝션관리 등 구현체도 있음

 

트랜젝션을 동기화 하기 위해서 트랜젝션 매니저를 사용,

트랜젝션 매니저- 트랜젝션 동기화 매니저(쓰레드 로컬을 내부에서 사용)가 연결되어 있음

 

트랜젝션 관련 반복로직이 있어서 , 트랜젝션 템플릿을 사용

그래도 트랜젝션 관련 로직을 서비스가 가지고있어야함

최종적으로 @Transacitonal 사용 (성공하면 commit, 실패하면 rollback)

 

트랜잭션 매니저와 datasource는 스프링이 알아서 bean 등록함~!

 

예외는

잡거나 던져야함

체크예외, 언체크드(런타임)예외가 있으며 ,

체크예외는 잡아서 처리하지 않으면 항상 thorws로 던져야하며,

언체크 예외는 예외를 잡아서 처리하지않아도 throws를 생략가능하다.

 

체크예외는 컴파일러가 잡아준다.

기본적으로는 언체크를 사용하는게 요즘 트렌드!!

 

체크예외는 비즈니스적으로 의도적으로 잡아야할때만사용, 예를들면 계좌송금 실패

체크예외는 던지게되면 호출 로직에서도 의존을 하기때문에 의존성이생긴다

 

JDBC로 DB에 쿼리 날릴 시 pstmt.executeUpdate() , rs = pstmt.executeQuery(); 등

SQLException 예외처리를 해줘야 하고DB마다 예외 코드가 달라지기에 스프링은 이를 추상화하여 SQLExceptionTranslator를 제공함따라서

catch (SQLException e) {
            DataAccessException ex = exceptionTranslator.translate("save", sql, e);

 

} 식으로 캐치를 할 수 있음 (DataAccessException 는 런타임 아래에 위치한 언체크 익셉션임)

 

최종으론 jdbc 반복구조를 없애고 위에 예외처리

(체크->언체크 익셉션 처리(SQLExceptionTranslator사용) )

까지 전부 다 해주는 jdbc 템플릿을 사용함(템플릿 콜백 패턴)