본문 바로가기

분류 전체보기

(276)
DBCP DBCP = Database Connection Pool 이번 블로그에서는 DBCP에 대해서 정리해보고자 한다. 1. 기존의 애플리케이션과 DB간 통신 방법 클라이언트가 API 요청 애플리케이션과 DB 간에 TCP 신뢰성 연결 응답을 위해 DB에 리소스 요청 리소스 응답 애플리케이션과 DB 간에 TCP 신뢰성 해제 클라이언트에 전달 - 항상 리소스를 받기위해 DB와 TCP 기반의 신뢰성 있는 통신을 하는데 연결할때는 3웨이 핸드셰이크, 연결해제시에는 4웨이 핸드셰이크가 매번 발생하고 이는 시간적으로 비효율적이다. 2. DBCP 동작 방식 - 위의 시간 낭비를 해결하기 위해 사용 - TCP 기반의 DB 커넥션을 미리 만들어 두고 사용함으로 TCP 연결 생성 및 해제 시간 단축 애플리케이션 시작전에 TCP ..
백준 - 탑 with JAVA 해당 문제는 간단하지만 사소한 모든 요소가 메모리 초과, 시간 초과에 영향을 끼칠 수 있어서 기록해두려고 한다. 1. 기본적으로 입력은 BufferedReader로 받고 빈칸을 두고 입력을 받는다면, StringTokenizer를 사용하자 2. Stack을 사용한다면 stack.isEmpty()를 통해 비어있는지 여부를 체크하자. 만약 size()>0을 한다면 비효율적이다. 3. Stack을 사용한다면 pop(), push()를 통해 넣었다 빼기를 반복하지말고 peek()를 무조건 쓰자 4. printf보단 print가 메모리 초과가 발생하지 않는다. 로직 - 새로운 입력을 받을 때, Stack의 후입선출 구조를 통해 현재 타워보다 높이가 큰 수가 나올때까지 확인한다. - 확인 후 새로운 타워를 Stac..
백준 - 비슷한 단어 with JAVA 문자열 A와 B가 있다. 이 때, 문자 하나를 수정, 삭제, 변경해서 같은 문자열을 만든다. 예를 들어, ABC, ABCD 가 있다고 가정하자. [A, B, C, D]에서 [A, B, C]를 빼주면 [D] 만 남는다. 즉 1개만 바꿔주면 된다. 하지만, [A, B, C]에서 [A, B, C, D]를 빼주면 [] 가 되어 변경을 안해줘도 된다고 판단한다. 따라서 이를 주의해서 로직을 작성해야 한다. import java.util.*; // 비슷한 단어 public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); String value = sc.next();..
자료구조 정리 With JAVA 이번 블로그에서는 자료구조 정리를 자바를 기준으로 해보려고 한다. 우선, 자바의 전체 자료구조를 보면 아래와 같다. 그 중에서도 대표적인 자료구조는 아래와 같다. 1. 선형 자료구조 - 종류 : 연결리스트, 벡터, 배열, 스택, 큐 1-1. 연결 리스트 - 데이터를 감싼 노드를 포인터로 연결한 자료구조 - 삽입, 삭제가 빠르지만, 접근 및 탐색은 느려진다. 시간 복잡도 - 삽입 삭제 : O(1) - 접근, 탐색 : O(N) 싱글 연결 리스트 - next 포인터만 가진다. class Node{ Node next; } 이중 연결 리스트, 원형 이중 연결 리스트 - prev, next 포인터를 가진다. - 원형 이중 연결 리스트는 처음과 끝 노드도 연결한다. class Node{ Node prev; Node ..
LCS 알고리즘 LCS 알고리즘 - 최장 공통 부분 수열 또는 최장 공통 문자열을 의미한다. - 최장 공통 부분 수열 : (ABCDEF, GBCDFE) -> BCDF, BCDE - 최장 공통 문자열 : (ABCDEF, GBCDFE) -> BCD 1. 최장 공통 문자열 특징 - 연속해서 같아야 한다. 점화식 - 만약 문자가 같다면 현재 각각의 문자열의 인덱스-1 위치의 값(그 전에 일치했는지 여부)에 + 1 을 해주면 된다. 시간복잡도 - O(NM) 예시 - 문자열1 : ABCDEF 문자열2 : GBCDFE - 두번째 인덱스에서 B가 같은데, 문자열1, 문자열2의 해당 인덱스에서 한칸씩 앞에서도 같은지 확인하고 더해주는 원리이다. A B C D E F 0 0 0 0 0 0 0 G 0 0 0 0 0 0 0 B 0 0 1 0..
Nginx 이번 블로그에서는 Nginx에 대해서 알아보려고 한다. 1. 특징 높은 성능 : 경량 서버이며, 이벤트 기반 아키텍처를 기반으로 하여 매우 빠른 성능을 제공하고 비동기 및 다중 프로세스 모델을 사용하므로 많은 동시 연결을 처리할 수 있다. 리버스 프록시 : 요청을 웹 어플리케이션 서버로 전달하는 역할을 한다. 이를 통해 로드 밸런싱, SSL 종료 및 캐싱을 구현 가능하다. 정적 파일 캐싱 : 정적파일(HTML, CSS, JS, 이미지 등)을 효율적으로 제공하는 데 특화되어 있다. 확장성 : 수평적으로 확장이 가능해 더 많은 트래픽을 처리하기 위해 서버 클러스터를 만들 수 있다. 즉, Nginx가 관리하는 서버의 수를 늘리거나 줄이는 작업에 용이하다. 높은 가용성 : 다중 서버간의 로드 밸런싱을 구성하여 ..
백준 - 내리막길 DFS + DP 기본적으로 맵의 가로, 세로 최대는 500이다. 만약, (0, 0)에서 (499, 499)까지 간다고 가정하자 해당 경우의 수는 굉장히 커진다. 예를 들어, (0, 0)에서 (200, 200)으로 가는 경로가 10000이고 (200, 200)에서 (499, 499)까지 간다고 가정했을 때, 경로가 10000이라면 약, 10억가지의 경우의 수가 나온다. 밑의 두가지 코드의 차이점은 아래와 같다. 1번 코드 : (200, 200) 방문시 DP를 통해 (499, 499)까지 도달 가능하다고 판단하고 돌아간다. 2번 코드 : 항상 끝까지 방문한다. 위의 차이점으로 DP를 통해 시간복잡도를 낮출 수 있다. 추가사항 - 노드1에서 노드2까지 가는 경우의 수를 구하라 - 백준 점프 문제와 유사하다. ..
REAL MYSQL 정리 이번 블로그에서는 Mysql에 대해서 상세히 기록해보려고 한다. 내용 : Mysql 8.0을 기반으로한 REAL MYSQL을 참고하여 제작하였습니다. 1. Mysql Architecture ★★★★★ 구성 : Mysql서버, 응용프로그램, Mysql 엔진, 스토리지 엔진, 운영체제, 하드웨어 Mysql 엔진 구성 - 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러 - Cache, Buffer, SQL Interface - SQL파서 및 전처리기 - 옵티마이져 - 실행 엔진 - Mysql 엔진은 하나만 존재 스토리지 엔진 - SQL문장을 분석 및 최적화하여 실제 데이터를 읽고 쓰기 작업을 수행 - 여러개 존재하고 동시 동작 가능 - Mysql 5.5버전 이후부터는 MyISAM 스토리지 엔진보..