필요한 단축키 있을때마다 계속 업데이트 익혀두면 코드 짤 때 / 리팩토링할 때 / 기존 코드 뒤져볼때 상당히 편리함 필수 단축키 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..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/DbpUa/btrFHKpRptG/ptEgNGKAwpIVfpuVDYmjqK/img.png)
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 ..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/czyWxv/btrBbL7MWxl/xChmuzCrRZTKm4ahDjdYuk/img.png)
백엔드 개발과 관련한 업무에 대해 배우고 조금씩 실제 코드를 만져가며 작업을 하면서, 브라우저에서 사용자에게 화면을 보여주기 위한 두 렌더링 과정을 이해하고 차이를 분명히 알아두어 넘어갈 필요를 느꼈다. SSR(Server Side Randering)과 CSR(Client Side Rendering) 들어가기에 앞서, Rendering : 웹 페이지가 요청해서 (서버로부터) 받은 내용을 브라우저 화면에 표시하는 것 SSR(Server Side Rendering) - 서버 사이드 렌더링 서버쪽에서 렌더링 준비까지 마친 상태로 클라이언트에게 전달하는 방식 전통적인(오래된) 웹 애플리케이션에서 주로 사용 요청할때마다 서버에서 처리를 한 후 페이지에 응답 새로고침이 일어나면 새로운 페이지가 렌더링됨 과정 Use..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/cXLupq/btrzpsWrrH8/KjJ1Ur0apZvKsWh4Oemc91/img.jpg)
목차 배경 인텔리제이 환경에서 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..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/ns8hB/btroR0bnGCp/QdBorcslqcJzJPotUCJVpk/img.jpg)
세그먼트 트리(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..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/dMsLa9/btroTm5KVFf/wuVOGmExuYbKHowpFP9Gd0/img.jpg)
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)색 노드의 개수는 같..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/cfk60A/btroQbku4OG/QoG5xZqN8BipMN8nGRINm0/img.jpg)
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 : 왼쪽 서브트리의 높이가 오른쪽 서브트리의 높이보..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/R0Kb4/btroQ6btNQ6/dfv1p1jqkz9b4ZaRLVk52k/img.jpg)
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 = ..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/DvoX9/btroRYKJxHl/FXxidpSKaVicKH9uLJ9K30/img.jpg)
B-Tree 이진트리는 하나의 부모가 두개의 자식밖에 갖지 못하고, 균형이 맞지 않으면 검색 효율이 선형(O(N)) 으로 떨어진다. 하지만 이진트리가 균형만 맞다면 검색, 삽입, 삭제 모두 O(logN) 으로 보이는 장점이 있다. Abstract DB, 파일시스템에서 널리 쓰이는 트리 자료구조의 일종 이진트리를 확장해서, 더 많은 수의 자식을 가질 수 있게 일반화 시킨 것이 B-Tree 자식수에 대해 일반화를 진행하면서, 하나의 레벨에 자식을 더 많이 저장하는 것이 아니라 트리의 균형을 자동으로 맞추는 로직까지 구현 단순하고 효율적, 레벨로만 따지만 완전히 균형을 맞춘 트리 멀티레벨 인덱싱을 통해 빠른 검색이 가능 규칙 M차 B 트리 ➡️ 최대 M개의 자식 을 가질 수 있는 B 트리 루트노드는 적어도 2..
![](http://i1.daumcdn.net/thumb/C200x200/?fname=https://blog.kakaocdn.net/dn/b77Cwd/btroRLq8DGd/VBkaWdd49P4bf6X6Vjdyck/img.jpg)
트라이(Trie) 문자열에 대한 검색을 빠르게 도와주는 자료구조 Abstract 문자열에 대해 이진탐색트리를 적용하면 ➡️ 문자열의 길이(M) + 문자열의 총 개수(O(log(N)) ➡️ O(Mlog(N)) 의 시간복잡도 트라이를 적용하면 ➡️ O(M) 으로 문자열 검색이 가능 e.g.) [bear, bell, bid, bull, buy, sell, stack, stop] (N = 8) BST for Strings 문자열의 개수(N)만큼 비교하기 때문에 O(logN) 가장 길이가 긴 문자열의 길이가 M이라면 두 문자열을 비교하는데 O(M) 총 O(MlogN)의 시간복잡도 Trie for Strings 트라이(Trie)를 활용 한 Tree의 leaf node의 갯수는 문자열의 총 개수(N)과 동일하다 O(..
배경 포트폴리오, 코딩테스트, 기술면접 등 취준중에 도움이 되었던 사이트와 유용하게 사용했던 사이트 모음(정리) 취준 #Portfolio 포트폴리오 작성법 https://medium.com/%EC%98%A4%EC%9D%BC%EB%82%98%EC%9A%B0-%ED%8C%80-%EB%B8%94%EB%A1%9C%EA%B7%B8/%EC%A3%BC%EB%8B%88%EC%96%B4-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4%EB%A5%BC-%EC%A4%80%EB%B9%84%ED%95%A0-%EB%95%8C-%EC%95%8C%EC%95%84%EB%91%90%EB%A9%B4-%EC%A2%8B%EC%9D%80-%EA..