Motivation 1. Kafka Connector 내용을 공부하면서 DB에 실제로 카프카 커넥터를 붙여서 실행하고 사용해면 좋은 경험이 되고 더 잘 기억에 남을 것 같았음 ✔ 아쉬웠던 점 👉 자주 사용하는 ORACLE로 연동해보면 더 좋을 것 같다고 생각해서 시도를 했으나 잘 안됐음, 관련 글을 찾아봤는데 ORACLE에 Connector를 연동한 사례가 별로 없었음(MySQL은 비교적 예시도 많았으나, 오라클은 유독 없음. 오라클에 적용할 수 없는 어떤 이유가 있는건가.. 의문..) 👉 m1맥이라 오라클 서버를 실행할 수 없어서 오라클 클라우드에서 제공하는 Autonomous DB를 사용하고 있었는데, 여기에 카프카 커넥터를 적용한 사례가 하나 있긴했으나 Docker를 이용한 방법(나는 카프카 서버..
목차 배경 상용 서버는 대부분 linux 환경에서 구동되는데, 서버 개발과 운영 모니터링을 하다보면 서버의 로그를 확인해야하는 순간들이 생긴다. 이때 직접 서버에 접속하고 로그 파일을 탐색하며 어느시기(대게 몇시 몇분 몇초 단위로)에 어떤 요청을 받고 어떤 에러를 뱉었는지 분석해야하는 순간들이 종종 발생하는데, 그때 linux의 파일 내용 검색 명령어를 활용하면 파일 탐색시간을 축소할 수 있고 그만큼 빠른 시간내에 로그를 분석하여 에러를 확인할 수 있다. 대부분 서버는 linux 환경에서 구동되기 때문에 동작 방식과 관련 명령어들을 숙지해두면 서버 로그 파일 탐색과 모니터링 이외에도 서버 개발과 운영을 하는데 많은 도움이 될 것 같다. 이번에는 그 중 linux 환경에서 파일 탐색을 하는데 쓰이는 기본..
데드락(DeadlocK) 시스템 자원에 대한 요구가 뒤엉켜서, 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다리며 무한 대기에 빠지는 상황 데드락 발생 조건 상호 배제 한 번에 하나의 프로세스만 자원을 사용할 수 있음 사용중인 자원을 다른 프로세스가 사용하려면 해제될때까지 기다려야 함 점유 대기 다른 프로세스에 할당된 자원을 점유하기위해 대기하는 프로세스가 존재해야함 비선점 이미 할당된 자원을 강제로 뺏을 수 없음 순환 대기 대기 프로세스의 집합이 순환 형태로 자원을 기다리고 있어야함 해결 방법 예방(Prevention) 데드락이 발생하지 않도록 예방 회피(Avoidance) 데드락 발생 가능성을 인정하면서 적절하게 회피 탐지 및 회복(Detection & Recovery) 데드락 ..
필요한 단축키 있을때마다 계속 업데이트 익혀두면 코드 짤 때 / 리팩토링할 때 / 기존 코드 뒤져볼때 상당히 편리함 필수 단축키 Windows MacOS 단축키 기능 Ctrl + Shift + Space Control + Shift + Space 적합한 코드 자동완성 추천 Shift + Shift Shift + Shift 파일, 클래스, 설정 등 키워드에 관련된 가능한 모든 것을 검색 Alt + Insert Command + N 생성자, Getter/Setter, toString과 같은 코드 생성 (Lombok으로 대체 가능) Ctrl + W Ctrl + W 커서 근처의 코드 선택 영역 확대 Ctrl + Shift + W Ctrl + Shift + W 커서 근처의 코드 선택 영역 축소 Ctrl + P C..
DUAL 테이블 오라클에서 제공하는 기본 테이블 SYS 소유이지만 모든 사용자에게 권한을 주어서 내가 만든 테이블처럼 조회 가능 사용법 1. 임시로 원하는 임시 값을 리턴받고 싶을 때(간단한 테스트를 하는 경우) SELECT 'nooblette.net' as nooblette; select 쿼리를 통해 간단한 데이터베이스 접속 테스트를 원할 때 mysql과 MSSQL에서는 위와같이 select만 있는 쿼리를 지원해서 조회해볼 수 있지만, ORACLE에서는 이를 지원하지 않는다. SELECT 'nooblette.net' as nooblette FROM DUAL; 이때, 위처럼 FROM 절에 DUAL 테이블을 담아서 사용할 수 있다. 즉, FROM절에 특정 테이블을 담지않고 select 만으로 데이터를 조..
트랜잭션 DB에서 데이터의 일관성과 무결성을 보장 하나의 그룹으로 처리되어야 하는 명령어를 모아놓은 작업 단위 e.g) 하나의 그룹이 4개의 SQL문으로 이루어졌을 경우, 4개의 SQL문이 완전히 처리가 되거나 아니면 하나도 수행이 되지 말아야함(All-OR-Nothing) 일반적으로 Begin_transaction과 End_transaction으로 나뉘어 트랜잭션 그룹 내에서 처리해야할 명령어들을 기술 트랜잭션 단위 장애 발생 시 복구 작업을 할 때 사용 병행 제어 시 논리 작업 단위로 사용 데이터베이스의 일관성과 무결성을 유지하기 위해 여러개의 트랜잭션 단위를 잘 정의해두어야함! 트랜잭션 예시 A가 B에게 100,000원을 이체하는 경우 하나의 트랙잰션에 들어가는 4개의 SQL문을 정의 Select ..
백엔드 개발과 관련한 업무에 대해 배우고 조금씩 실제 코드를 만져가며 작업을 하면서, 브라우저에서 사용자에게 화면을 보여주기 위한 두 렌더링 과정을 이해하고 차이를 분명히 알아두어 넘어갈 필요를 느꼈다. SSR(Server Side Randering)과 CSR(Client Side Rendering) 들어가기에 앞서, Rendering : 웹 페이지가 요청해서 (서버로부터) 받은 내용을 브라우저 화면에 표시하는 것 SSR(Server Side Rendering) - 서버 사이드 렌더링 서버쪽에서 렌더링 준비까지 마친 상태로 클라이언트에게 전달하는 방식 전통적인(오래된) 웹 애플리케이션에서 주로 사용 요청할때마다 서버에서 처리를 한 후 페이지에 응답 새로고침이 일어나면 새로운 페이지가 렌더링됨 과정 Use..
목차 배경 인텔리제이 환경에서 Spring Boot를 사용하지 않고, Maven 기반의 웹 프로젝트를 Tomcat을 통해서 웹 개발환경을 구축해보았다. (해당 코드는 git hub repository 에 올려두었습니다 : https://github.com/nooblette/mvn-tomcat-webapp) Maven과 Tomcat으로 웹 개발 환경 구축하기(+ IntelliJ) Spring + Maven + Tomcat으로 WAS 환경 구축을 위해 내가 준비한 툴과 버전은 다음과 같다. - IntelliJ : https://www.jetbrains.com/ko-kr/idea/download/#section=mac - Maven (3.8.5) : https://maven.apache.org/download..
세그먼트 트리(Segment Tree) 여러개의 데이터가 연속적으로 존재할 때 특정한 범위에 속하는 데이터들의 합을 구하는 방법 방법 1️⃣ 단순 배열을 이용해 선형적으로 구하기 e.g.) [5 8 7 3 2 5 1 8 9 7 3] 데이터를 순차적으로 하나씩 더하므로 O(n)의 시간복잡도 index 0 1 2 3 4 5 6 7 8 9 10 11 array 5 8 7 3 2 5 1 8 9 8 7 3 ➡ array[1]부터 array[10]까지의 부분합 : 58 (차례대로 하나씩 더함) 방법 2️⃣ 트리 구조를 이용하여 구하기 각 노드마다 구간합을 저장하여, 트리의 특성상 O(logN)의 시간복잡도 구간합 트리 생성 트리 배열의 크기 기존 배열의 크기 => N = Segment Tree에서 leaf node..
Red-Black 트리(Red-Black Tree) Abstract 불균등상태를 방지하기 위해 균형을 맞추는 이진탐색트리 의 일종 레드블랙트리의 Search는 O(logN) 조건 Root Property: 루트 노드의 색깔은 검정(Black) 이다. External Property : 모든 External Node(자식이 없는 노드)의 색깔은 검정(Black) 이다. Internal Property : 빨강(Red) 노드의 자식은 검정(Black) 이다. (= No Double Red, 빨강 노드는 연속해서 나올 수 없다.) Depth Property : 모든 leaf 노드에서 Black Depth는 같다 모든 leaf 노드에서 root 노드까지 가는 경로에서 만나는 검정(Black)색 노드의 개수는 같..
AVL 트리 Abstract 스스로 균형을 잡는 이진탐색트리 트리의 높이가 h이고 불균등상태(편향이진트리)라면 이진탐색트리의 시간복잡도는 O(h) 이를 방지하고자 높이 균형을 유지하는 트리가 AVL 트리 특징 이진탐색트리의 속성을 가짐 왼쪽, 오른쪽 서브트리의 높이 차는 최대 h 어떤 시점에서든지, 두 서브트리의 높이차이가 2이상이되면 회전을 통해 균형을 맞춤 AVL트리는 높이를 logN으로 유지하기 때문에 삽입, 삭제, 검색의 시간복잡도는 O(logN) Balance Factor(BF) 왼쪽 서브트리의 높이에서 오른쪽 서브트리의 높이를 뺸 값 Balance Factor(k) = height(left(k)) = height(right(l)) BF = 1 : 왼쪽 서브트리의 높이가 오른쪽 서브트리의 높이보..
B+ Tree 데이터의 빠른 접근을 위해 비단말(Non Leaf) 노드는 인덱스 역할만 수행 B 트리 + Leaf 노드들의 데이터는 연결리스트로 표현된 색인 구조 실제 DB에서 사용하는 인덱싱 Index 부분 과 Leaf Node로 구성된 순차 데이터 부분 으로 이루어짐 인덱스 부분의 key값은 leaf에 있는 key값을 직접 찾아가는데 사용함 leaf 노드는 연결리스트 형태, 선형 검색이 가능 특징 루트노드는 적어도 2개 이상의 자식을 가져야함 루트노드를 제외한 모든 노드는 M/2개 부터 M개의 자식을 가짐 노드에는 최소 [M/2]-1개 부터 최대 M-1개의 키를 포함 노드의 자료수(key)가 x개라면, 자식수는 x+1개 여야함 최소 차수(t)는 자식수의 하한값을 의미, 최소차수가 t가 2라면 M = ..