본문 바로가기

전체 글22

[Spring] Transaction Propagation Transaction시작과 종료가 존재종료커밋(commit): 모든 작업을 확정지음롤백(rollback): 모든 작업을 무효화함스프링에서는 내부적으로 커넥션 갖고있음→ transactionManager 이용하나의 트랜잭션 시작시, commit () 또는 rollback() 호출될 때 까지가 하나의 트랜잭션으로 묶임스프링에서는 선언적 트랜잭션(트랜잭션 어노테이션, @Transactional)여러 트랜잭션을 묶어서 하나의 트랜잭션 경계를 만들 수도 있음물리 트랜잭션 vs 논리 트랜잭션기존의 트랜잭션 진행 중일 때 추가적인 트랜잭션 진행해야하는 경우엔?만약, 트랜잭션 전파 없이 1개의 트랜잭션만 사용되면 물리 트랜잭션만 존재트랜잭션 전파 사용될 때 논리 트랜잭션 개념 사용물리 트랜잭션실제 데이터베이스에 적용되.. 2024. 12. 16.
[Spring] self-invocation 01.들어가기 전self-invocation 즉, 자기호출 트랜잭션 관련 설정에서 발생할 수 있는 문제인데용항상... 프로젝트를 하면서 느끼지만 잘 모르고 쓰는것들이 많고 그 안을 파고들어야 더 깊이 공부할 수 있는 것 같아요그리고 그걸 남겨야 ^^..... 머리속에 오래 남더라구요? 그래서 이번에는 self-invocation이 발생할 수 있는 상황을 만들어보고, 테스트 하는 과정을 살펴보자 그전에 먼저 인터페이스를 만들고 간단한 예제를 만들어보자public interface Business { void ready(); void go();}@Slf4jpublic class SimpleBusiness implements Business { @Override public void re.. 2024. 11. 23.
[Spring] JPA save(), saveAll(), deleteAll(), deleteAllInBatch(), @Query 비교 01. 들어가기전프로젝트를 하면서, 엔티티의 갯수가 많아지고, 여러 부분을 저장하거나 삭제하는 로직을 구현하는데!이때 여러 jpa 쿼리메소드가 성능차이가 나는건 알고있었지만, 이유를 정확하게 몰랐다! 까보면서 알아보쟈 !02.save()03.saveAll()둘다 @Transactional 적용되어있음save(): 1건 마다 save()함수 호출saveAll(): 1건 마다 인스턴스 내부의 save()함수 호출→ saveAll()이 성능이 더 좋은데, 이유가 뭐냐?@TransactionalAOP 프록시 기반으로 외부 Bean 객체가 있고, 이 객체의 함수를 호출해 Intercept가 되어 트랜잭션으로 묶이게 됨Bean 객체 내부에서 내부함수 호출 시 @Transcational 적용Xsave() 호출 시,상.. 2024. 11. 10.
Load Balancer & Auto Scaling 01.들어가기 전내가 작업했던 것들을 좀더 기록하는 습관을 ,,, 가지고자 열심히 써보려고한다!기존에 작업했을 때는 https로 배포하면서 자연스럽게 구글링하고 찾아보면서 aws 서비스 로드밸런서를 사용하였는데,,,대충 트랙픽 분산과 가용성을 높이기 위함은 알고있지만 정확하게 적어보면 좋을 것 같다! +) 도메인을 구매하게 되면 -> 인증서를 발급 하기전 이 도메인 소유에 대한 인증을 해야함: route53Route53 : 가용성과 확장성이 뛰어난 클라우드 DNS(Domain Name System) 웹서비스(이 과정에서 호스팅 영역 생성해 도메인을 인증)02. ACM(AWS Certificate Manager) 인증서 발급 과정이제 내 도메인에 대한 보안 인증서를 발급 받는 것! -> SSL(TSL) 인.. 2024. 11. 6.
[Spring] gradle로 멀티모듈설계 해보기 01. 들어가기 전,현재 하고있는 프로젝트는 처음에는 하나의 모듈의 모든 기능을 작성 하고 있었습니다!보시면 domain, global 로 나누고, 도메인 주도 기반으로 해서 구현하고 있는 과정인데용위를 보시면, 도메인 별로 batch, controller, dto, ..  요렇게 나눠져 있었던 구조였습니당..! 서버 인스턴스 하나만으로 시작할 때는 서비스의 복잡도가 상대적으로 낮고 유지보수도 간편한데,, ! 트래픽이 증가하거나 작업 부하가 늘어나게 된다면? 나중을 위해 지금이 멀티모듈로 구조를 바꿔야 하는 적절한 시기라고 생각했습니당 저희는 ASG와 로드밸런싱 구성을도입을 했는데요, 이런식으로 API 서버는 사용자 요청에 실시간으로 대응을 해야하기 때문에 ASG를 통해 트랙픽에 맞춰 하는 것이 바람직하.. 2024. 11. 5.
[JAVA] PriorityQueue - 우선순위 큐 기존에 큐에 대해서 다룬적이 있었는데, 이번 주차 알고리즘은 '그래프'! 였다!그래프 이론에 대해 공부하다가 우선순위 큐에 대해 알아야할 것 같아서 따로 빠르게 정리해보고자 한다! 01. PriorityQueue란?일반적인 큐의 구조 FIFO(First In First Out)를 가짐대신, 들어온 순서대로 나가는 것이 아닌 우선순위를 먼저 결정하고 높은 데이터가 먼저 나가는 자료구조* 우선순위큐에 저장할 객체는 Comparable Interface를 구현해야한다->이때 comparaTo method를 오바라이드하여 구현해줘야한다!이 부분에서 우선순위 조건을 리턴해주면, 해당 조건으로 우선순위가 적용되도록 객체를 추출해주는 방식!02. PriorityQueue 선언 및 메소드// 우선순위가 낮은 숫자가 먼.. 2024. 7. 1.
[알고리즘] DP DP피보나치 수열로 재귀, DP 모두 비교해보기!1. 재귀함수자기 자신을 호출하는 함수로 반복적으로 호출을 함으로써 원하는 결과를 도출피보나치는 O(2^N) 시간복잡도 걸림public static int fibonacci_recur(int n) { //O(2^N) if (n 2. DP1) DP의 핵심최적 부분 구조'큰 문제의 최적해'가 '작은 문제의 최적해'를 포함하는 성질중복 부분 문제'동일한 작은 문제를 반복적으로 해결'해야 하는 성질💡 이 순서대로 해보자!1. DP 방식을 적용할 수 있는지 확인하기: 최적 부분 구조, 중복 부분 문제인지 따져보기2. 점화식 세우기 : 일반화 할 수 있는 수식 생각하기 2) DP의 종류💡  메모이제이션(Memoization)이란?‘중복 계산'을 피하기.. 2024. 5. 25.
[알고리즘] BFS/DFS 0. 그래프0.1 그래프정점(node 혹은 vertex)과 간선(edge)로 이루어지 자료구조정점: 데이터를 저장하는 위치간선: 정점을 연결하는 선인접 정점: 간선에 의해 직접 연결된 정점 (ex. 1과 2는 인접 정점)차수: 무방향 그래프에서 하나의 정점에 인접한 정점의 수ex. 1의 차수: 2와 50.2 그래프 구현 방법0.2.1 인접 행렬 (Adjacency Matrix)2차원 배열 이용matrix[ i ][ j ] == true 라면 i -> j로의 간선이 있음의미int 행렬의 경우 1 = true, 0 = false배열 구성 → 간선 정보 조회빠름 O(1)간선의 개수 무관하게 항상 n^2의 메모리 공간 차지인접한 노드를 찾기 위해 모든 노드 전부 순회해야함0.2.2 인접 리스트(Adjacency.. 2024. 5. 7.
[알고리즘] 정렬 정렬 알고리즘 시간 복잡도Bubble Sort (버블 정렬)O(n^2)Selection Sort (선택 정렬)O(n^2)Insertion Sort (삽입 정렬)O(n^2)Quick Sort (퀵 정렬)평균 : O(nlogn) / 최악 : O(n^2)Merge Sort (병합 정렬)O(nlogn)Radix Sort (기수 정렬)O(kn) / k : 최대 데이터의 자릿수Arrays.sort()평균 : O(nlogn) / 최악 : O(n^2)Collections.sort()O(nlogn)1. 버블정렬1.1 개념순서대로 보면서 두 수를 비교해서 오른쪽 수가 왼쪽수보다 더 작으면 교화한번 작업 시 → 맨 마지막 자리에 가장 큰수가 가게 되는 원리즉, 마지막을 제외하고 n-1번 작업을 하면 정렬완료시간 복잡도 O(.. 2024. 5. 7.