CS

· CS
📢 각 도메인 별 Repository 에 의존할 경우 도메인 규칙을 정해놓은 서비스를 이용하지 않아 유지보수성이 떨어지게 됩니다. 예를 들어 지갑(Wallet) 엔티티에 돈을 빼는 메서드가 있다고 합시다. Wallet에 돈을 빼면 땅바닥에 둘 수 없으니, 다른 Wallet (ex. Admin Wallet) 에 보관합니다. 위 로직은 Entity 내에 작성할 수 없는 코드입니다. 이를 간단한 예시로 설명 드리겠습니다.문제 상황초기 상태WalletService 는 돈을 빼는 비즈니스 로직을 가지고 있습니다. 돈을 뺀 후에는 특정 규칙(여기서는 어드민 지갑에 추가) 이 적용됩니다.public class WalletService { private final WalletRepository walletRepos..
· CS
개념들어가기에 앞서트랜잭션은 Spring의 대표적인 AOP 기술 중 하나입니다. 다른 프레임워크에선 이 @Transactional 기술을 부러워 하는 경우도 있습니다.왜 그럴까요?트랜잭션을 사용하지 않은 코드public void saveUser(User user) { Connection connection = null; try { // 데이터베이스 커넥션을 얻음 connection = dataSource.getConnection(); // 트랜잭션 시작 connection.setAutoCommit(false); // 사용자 저장 로직 실행 PreparedStatement statement = connection.prep..
· CS/DB
개념Isolation Level 은 데이터베이스의 트랜잭션 격리 수준을 얘기합니다.이는 여러 트랜잭션이 동시에 실행되고 있을 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나, 조회하는 데이터를 볼 수 있게 허용하는 여부를 결정하는 것입니다.Serializable가장 엄격한 격리 수준입니다. 이름 그대로 트랜잭션을 순차적으로 진행시킵니다.여러 트랜잭션이 동시에 진행 될 일이 없어서 데이터 부정합 문제가 발생되지 않지만, 트랜잭션을 순차적으로 진행하기 때문에 동시 처리 속도가 현저히 떨어지게 됩니다.Repeatable ReadRepeatable Read 는 언두 로그를 활용하는 트랜잭션 격리 수준입니다.📢 언두 로그가 뭘까요?일반적인 RDBMS 는 변경 전의 레코드를 언두 공간에다가 백업합니다. 이렇게 되..
· CS/DB
특정 오프셋 까지 데이터를 모두 조회하고 버린다.오프셋의 동작 방식은 0번 오프셋 부터 지정된 오프셋까지 데이터 조회를 모두 수행합니다.그래서 Disk 인풋, 아웃풋이 오프셋 만큼 일어나게 되어 O(n)의 선형적인 구조를 띄어 느립니다.스트리밍 처리가 아닌 버퍼링 처리를 거칩니다. (완벽한 이유는 아님)쿼리문에 ORDER BY 나 GROUP BY 를 추가되면 버퍼링 방식으로 처리가 됩니다.왜냐하면 결과를 모아두고 정렬 및 그룹핑을 해야하기 때문입니다.개선할 수 있는 방법이 존재합니다.Index Sort 이용하기정렬 조건을 제한하고, 정렬 조건에 따른 인덱스를 생성하여 FileSort 를 사용하지 않게 합니다.
· CS/Kafka
카프카의 개념카프카는 분산형 데이터 스트리밍 플랫폼 입니다.여기서 분산형은 단일 서버에서 처리를 집중시키는 것이 아닌 여러 대의 서버(노드)로 구성된 클러스터 환경에서 데이터를 처리 할 수 있는 것을 의미하고스트리밍은 DB 에 정적인 형태로 누적되는 데이터가 아니라, 실시간으로 연속해서 들어오고 흘러가는 데이터 흐름을 의미합니다.카프카 단어 목록프로듀서프로듀서는 메세지를 생산하는 어플리케이션 혹은 서비스 입니다.프로듀서는 메세지를 클러스터에 보내며, 이때 특정 토픽을 지정합니다.메세지보내지는 메세지 입니다. 예를 들면 Json토픽메세지를 보낼 논리적 파이프라인(관)이라고 생각하면 됩니다.프로듀서가 특정 토픽으로 메세지를 보내면, 컨슈머는 해당 토픽에서 메세지를 읽어 갑니다.클러스터서버 == 브로커카프카는..
· CS/DB
깃허브를 돌아다니다 보면 PK로 Auto Increment 나 UUID 를 사용하는 것을 자주 볼 수 있다. Auto increment를 사용하여 HTTP Method 의 인자로 사용하면 어떤 문제가 일어날 수 있을까? Auto increment - 예측 가능한 모델이 된다.Auto increment 로 생성 된 PK를 URL 같은 공개된 장소에 노출시키면이는 데이터 크롤링이나 인젝션 공격에 조금 더 취약해질 수 있게 된다. 그래서Public 공간 - 예측 불가능하고 Random 한 Index 체계 사용Private 공간 - Auto Increment PK 값으로 데이터 접근으로 하는 것이 적절하다. 그러면 오케이 !! UUID 로 값 조회하면 되겠다! 하는데 일반적인 방법으로 UUID 를 조회 기준으로..
wonow_
'CS' 카테고리의 글 목록