3. 트랜잭션 이해1. 트랜잭션DB에서의 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻하는데 예를 들어 A의 5000원을 B에게 계좌이체를 한다고 하면 A의 잔고를 5000원 감소하고 B의 잔고를 5000원 증가해야하는 것과 같이 고려해야할 점이 많다. 계좌이체는 이렇게 2가지 작업이 합쳐져 하나의 작업처럼 동작을 해야한다. 만약 A의 잔고 감소에 성공했는데 B의 잔고를 증가시키지 못했다면 계좌이체는 실패하고 A 잔고만 감소하는 문제가 생긴다. 트랜잭션을 사용하게 되면 감소와 증가를 둘 다 함께 성공해야 저장하고 하나라도 실패하면 거래 전 상태로 되돌아갈 수 있다. 모든 작업에 성공하여 DB에 정상 반영하는 것을 커밋(Commit)이라고 하고 거래 전으로 되돌리는 것을 롤백(Rollba..
2. 커넥션풀과 데이터소스 이해1. 커넥션 풀 이해데이터베이스 커넥션 매번 획득위 그림은 데이터베이스 커넥션을 획득할 때의 과정인데 꽤나 복잡한 과정을 거친다.1. 애플리케이션 로직은 DB 드라이버를 통하여 커넥션을 조회한다. 2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결하는데 3 way handshake 동작이 발생한다.3. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW 등 정보를 DB에 전달한다.4. DB는 내부 인증을 완료하고 내부에 DB 세션을 생성한다.5. DB는 커넥션이 생성 완료되었다는 응답을 보낸다.6. DB 드라이버는 커넥션 객체를 생성하여 클라이언트에 반환한다. 커넥션을 만드는 과정은 복잡하기도 하고 시간도 많이 걸린다. 그래서 이런 문제를 해결하기 위해 커넥션을..
1. JDBC 이해1. JDBC 이해JDBC 등장 이유JDBC는 JAVA Database Connectivity로 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이고 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. 보통 애플리케이션을 개발할 때에는 중요 데이터를 대부분 데이터 베이스에 보관한다. 클라이언트가 애플리케이션 서버를 통하여 데이터를 저장하거나 조회하면 애플리케이션 서버는 데이터 베이스를 어떻게 사용하느냐 일반적인 사용 방법은 이런 식인데커넥션 연결은 주로 TCP/IP를 사용하여 연결한다.SQL 전달은 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통하여 DB에 전달을 하고결과 응답은 DB가 전달된 SQL을 수행하고 그 결과를 응답하는 것이다. 애플리케이션 서버는 응..
import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public int solution(int k, int n, int[] arr) { int answer=0; int lt = 0; int cnt = 0; // 0을 1로 변경한 횟수 for (int rt = 0; rt k) { if(arr[lt] ==0 ) cnt --; lt ++; } answer = Math.max(answer, rt-lt+1); } return answer; }..
1. two pointers algorithm import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public int solution(int n) { int answer = 0; int sum = 0; int lt=0; int m = n/2+1; int[] arr = new int[m]; for (int i = 0; i < m; i++) { arr[i] = i+1; //index 0에 1 들어가고, index 1에 2 들어가고 } //two pointers algorithm for (int rt = 0; rt < m ; rt..
투 포인트 알고리즘 이용 import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public int solution(int n, int m, int[] arr) { int answer = 0; //최대값 int sum = 0; // lt ~ rt까지 연속 부분 수열의 합 int lt = 0; for (int rt = 0; rt m) { sum -= arr[lt++]; //lt값을 빼고나서 증가 } if (sum == m) { answer ++; } } r..
sliding window 알고리즘을 사용하면 된다. 시간 복잡도는 O(N^2)이다. answer -> 최대값, sum -> window안의 값 처음에 0~K전까지의 합(38) 구하여 answer에 초기화 해둔다. sum에도 38이 저장되어있고 for문이 돌면서 +(arr[i] - arr[i-k])를 해준다. import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public int solution(int n, int k, int[] arr) { int answer = 0; //최대값 int sum = 0; //window 안의..