728x90
분류 전체보기
521

AOP(Aspect Oriented Programming)의 개념과 적용

여러 메소드에 동일한 코드가 반복될 때 AOP를 적용할 수 있다. 예를 들어 로깅을 메소드의 호출 전/후에 간단하게 추가할 수 있다. AOP의 기본 개념 1. Aspect (관점) 여러 클래스나 기능에 걸쳐서 있는 관심사 (e.g. @Transactional, @Cacheable) 2. Advice (조언) AOP에서 실제로 적용하는 기능(로깅, 트랜잭션, 캐시, 인증 등) 3. Join point (연결 포인트) 특정 기능이 실행될 수 있는 연결 포인트 4. Pointcut (포인트 선택 방법) Join point 중에서 해당 Aspect를 적용(수행)할 대상을 뽑을 조건식 5. Target Object Advice가 적용될 대상 객체 6. AOP Proxy 대상 객체에 Aspect를 적용하는 경우 A..

Java & Spring 2024.01.03

dataintegrityviolationexception - OneToOne 관계에서 자식 엔티티를 삭제했을 경우

Error org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["FK7FUJUGL45E8HKHKIO47O2IW29: PUBLIC.ARTICLE FOREIGN KEY(ARTICLE_FILE_ID) REFERENCES PUBLIC.ARTICLE_FILE(ID) (CAST(1 AS BIGINT))"; SQL statement: delete from article_file where id=? [23503-214]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not exe..

Java & Spring 2024.01.03

[CodeDeploy] 배포시 저장되는 파일 개수를 지정하여 용량 절약

CodeDeploy 에이전트는 배포 후 EC2 인스턴스에 배포 파일을 저장한다. 이때 배포 파일은 일반적으로 /opt/codedeploy-agent/deployment-root에 저장된다. cd /opt/codedeploy-agent/deployment-root 위에서 ./e9861313-aeda-4ed9-9615-9db2ad17925f가 이에 해당된다. e9861313-aeda-4ed9-9615-9db2ad17925f는 Deployment Group ID를 의미하며 해당 디렉토리에는 각 배포마다 저장되는 하위 디렉토리가 존재한다. 각 디렉토리명은 Deployment ID를 의미한다. 그리고 위 5개는 최근 배포를 완료한 5개의 Deployment ID에 해당하는 것을 확인할 수 있다. 각 디렉토리에는 ..

Temp 2024.01.02

Redis의 SpinLock을 사용한 동기화 문제 해결

위와 같이 A라는 계좌를 thread1이 사용하고 있을때 동시에 thread2를 사용한다고 할 때 동기화 문제가 발생한다. 구체적으로 두 thread가 동시에 실행하게되면 처음 A계좌에있는 10,000원을 가져다 사용하기 때문에 마지막에 실행을 완료한 thread의 결과가 최종 결과가 된다. 해당 동기화 문제를 해결하기 위해 Redis의 SpinLock을 사용할 수 있다. SpinLock이란 뮤텍스처럼 한 시점의 하나의 스레드에만 접근할 수 있도록 하며 접근하지 못한 다른 스레드들은 접근 할 수 있을 때까지 루프를 돌며 재시도를 하는 것이다. spring-redis Dependency 추가 implementation 'org.springframework.boot:spring-boot-starter-dat..

Java & Spring 2023.12.28

[DATABASE] Partitioning, Sharding, Replication

Partitioning partitioning은 다음과 같이 vertical partitioning과 horizontal partitioning으로 나눌 수 있다. vertical partitioning horizontal partitioning column을 기준으로 table을 나누는 방식 row를 기준으로 table을 나누는 방식 Vertical Partitioning 예를 들어 Article이라는 게시글관련 테이블이 있다고 해보자. id title writer_id created_at read_cnt comment_cnt content ... ... ... ... ... ... ... 만약 게시글들을 조회해야할 경우 content attribute는 필요가 없고 id, title, writer_i..

Database 2023.12.23

[DATABASE] INDEX(인덱스)

인덱스가 걸려있지 않을 경우 일반적인 SELECT-WHERE문을 실행하면 하나씩 순차적으로 탐색하게된다. 즉, 시간복잡도가 O(N)을 가지며 이를 full scan(table scan)이라고 부른다. 반면에 인덱스(B-tree based index)가 걸려있다면 시간복잡도는 O(logN)을 가지게되어 full scan보다 더 빠르게 찾을 수 있다. 이렇게 인덱스를 빠르게 조회하기 위해 사용할 수 있을 뿐만아니라 빠르게 정렬(order by)하거나 그룹화(group by)하기위해서도 사용할 수 있다. 인덱스 생성 CREATE INDEX {index_name} ON {table} ({attribute}); 두 개 이상의 attribute를 사용할 경우 다음과 같이 작성할 수 있다. CREATE UNIQUE ..

Database 2023.12.16

[DATABASE] 정규화(Normalization)

정규화는 데이터 중복과 insertion, update, deletion anomaly를 최소화하기 위해 일련의 normal forms(NF)에 따라 relational DB를 구성하는 과정을 말한다. 이때 normal form(NF)이란 정규화되기 위해 준수해야하는 각각의 rule들을 의미한다. 정규화 과정 Init table부터 순차적으로 진행하며 normal form을 만족하지 못하면 만족하도록 테이블 구조를 조정한다. 그리고 선행 단계를 만족해야 다음 단계로 진행할 수 있다. 1NF ~ BCNF까지는 FD와 key만으로 정의되는 normal form이며 3NF까지 도달하면 정규화되었다고 말하기도 한다. 정규화 예시 Schema bank_name account_num account_id class ..

Database 2023.12.15

[DATABASE] Functional Dependency(FD)

article_id title content category user_id article_id를 집합 X, title, content, category를 집합 Y라고 하자. 이때 X값에 따라 Y값이 유일하게 결정된다고 볼 수 있다. 또한 이러한 것을 X가 Y를 함수적으로 결정한다. 또는 Y가 X에 함수적으로 의존한다.라고 말할 수 있으며 Functional Dependency(FD)라고 부른다. X -> Y로 표현할 수 있으며 X는 left-hand side, Y는 right-hand side라고 한다. 추가 예시 {stu_id} -> {stu_name, birth_date, address} {class_id} -> {class_name, year, semester, credit} {stu_id, cla..

Database 2023.12.13

[DATABASE] MVCC (MultiVersion Concurrency Control)

같은 데이터에 대해서 서로 다른 트랜잭션이 동시에 write를 하는 것만 허용을 하지 않고 그 외에 read/write 또는 read/read하는 경우를 허용한다. 따라서 Lock을 사용했을 때보다 처리량이 많아진다. MVCC? 데이터를 읽을 때 특정 시점(Isolation Level)을 기준으로 가장 최근에 commit된 데이터를 읽는다. 또한 데이터가 변할 때 이력을 따로 저장하여 관리한다. x=10일 때 다음 작업을 수행한다고 해보자. (lock, unlock은 생략) transaction1 transaction2 write(x=50) read(x) => 10 commit read(x) => 50 transaction2에서 write(x=50)을 수행하면 별도의 공간에 변경된 값을 저장한다. MV..

Database 2023.12.10

[DATABASE] LOCK (2PL Protocol)

x=10이라는 데이터가 있을 경우 다음과 같은 작업을 진행할 경우 잘못된 동작을 일으킬 수 있다. transaction1 transaction2 write(x=20) write(x=90) 이런 잘못된 동작을 해결하기위해 Lock을 사용할 수 있다. Write Lock (Exclusive Lock) 다른 transaction이 같은 데이터를 데이터를 read/write하는 것을 허용하지 않는다. transaction1 transaction2 write_lock(x) write_lock(x) write(x=20) unlock(x) write(x=90) unlock transaction1에서 lock을 획득 transaction2는 trancation1에서 unlock을 할때까지 대기 transaction1에..

Database 2023.12.07
728x90