Join MySQL의 sql로 관계 대수의 자연 조인, 세타 조인, 외부 조인, 세미 조인, 카티션 곱 등이 가능하다. inner join 두 릴레이션에 있는 모든 튜플을 조회 한다. 조인을 할 때 주로 ANSI 조인 형태를 사용한다. ANSI 조인은 JOIN 키워드와 ON이 있기 때문에 쉽게 조인 조건을 알 수 있다. # ANSI 조인 형태 # 다른 sql에서도 범용적으로 사용 가능 # where 조건절과 join 조건이 분리되므로 가독성이 높음 select * from table_l [inner] join table_r on table_l.common = table_r.common; # 조인 속성이 동일 하다면 아래와 같이 쓸 수 있음 select * from table_l [inner] join t..
Logging Logging이란 애플리케이션의 로그를 기록하는 작업을 말하며 Spring에서는 주로 SLF4J(Simple Logging Facade for Java)와 Logback, Log4j와 같은 로깅 라이브러리를 주로 사용해 로그를 기록한다. 단순히 화면에 정보를 출력하는 sysout보다는 더 많은 기능을 제공하는 로깅 라이브러리로 로그를 기록하는 것이 더 좋은 방법이다. 아래는 SLF4J로 로그를 기록하는 코드이다. import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.mysql.cj.log.Slf4JLogger; class LoggerTest { Logger lo..
MyBatis 자바 Object와 SQL을 맵핑하는 SQL Mapper이다. Object - SQL 사이의 parameter mapping, result mapping 작업을 자동으로 해준다. SQL을 별도의 파일(xml)로 분리해서 관리한다. 반복되는 JDBC 코드가 제거된다. MyBatis도 JDBC를 기반으로 동작한다. RDB에 종속적인 단점이 있지만 복잡한 쿼리도 쉽게 적용할 수 있기에 ORM Framework와 같이 사용되는 추세이다. JDBC 동작 방식 DataSource 객체(구현체) 준비 DB Connection (DataSource로부터 커넥션을 가져옴) SQL 작성, parameter mapping 실행 R.S Data Get (result Mapping) Close JDBC 코드를 작..
설정 파일 Eclipse에서 Spring Legacy 프로젝트를 열면 3개의 설정 파일(xml)이 있다. web.xml 서블릿 컨테이너 설정 파일. 톰캣이 실행되면 web.xml을 통해 서블릿, 필터 등의 설정 수행 ex - 디스패처 서블릿 등록, post 요청 파라미터 인코딩을 수행하는 필터 등록 servlet-context.xml 웹, MVC 관련 빈 객체가 정의되는 스프링 설정 파일 (ex - 핸들러 어댑터, 뷰 리졸버, 컨트롤러) 해당 설정 파일에 정의된 빈 객체는 Spring Container에 생성됨 웹과 관련 있는 객체 component-scan 요청 맵핑 설정 위 설정은 InternalResourceViewResolver가 논리적 뷰 이름으로부터 물리 뷰 경로를 만들 때 사용되는 접두사(p..
Segment Tree구간 트리(Segment Tree)는 저장된 자료의 특정 구간 질의를 빠르게 대답하기 위해 저장된 자료를 전처리한 트리를 말한다. 흔히 구간 트리는 일차원 배열의 특정 구간 질의를 빠르게 대답하는데 사용된다. 예를 들어 [1, 7, 5, 3, 2] 라는 일차원 배열이 있을 때 [1, 2] 구간의 최소치를 찾는 연산을 해야 한다. 이를 연산하는 간단한 방법은 구간의 시작부터 끝까지 순회하면서 최소치를 찾으면 되며 시간 복잡도는 O(N)이 된다. 반면 구간 트리를 한 번 만들어두면 위 연산을 O(log N)으로 할 수 있다. 구간 트리의 핵심 아이디어는 배열 구간에 대한 이진 트리를 만드는 것이다. 구간 트리의 노드는 구간을 표현한다. 루트 노드는 항상 배열의 전체 구간 [0, n-1]..
최단 경로최단 경로 문제(shortest path problem)는 그래프에서 주어진 두 정점을 연결하는 가장 짧은 경로를 찾는 문제로, 그래프 관련 문제 중에서 최단 경로 문제가 많다. 최단 경로 문제를 해결하기 위해서는 그래프가 어떤 그래프인지 파악하고, 그에 맞는 최단 경로 알고리즘을 적용해야한다. 최단 경로 알고리즘은 최단 경로를 구성하는 정점들의 목록을 구해 주는 것이 아닌 최단 경로의 길이를 찾아줄 뿐이라는 점에 유의해야한다. 실제 경로를 계산하기 위해서는 BFS에서 그랬듯이 탐색 과정에서 별도의 정보를 저장하고, 이것으로부터 실제 경로를 찾아내야한다. 가중치가 없는 그래프에서는 BFS로 최단 경로를 구할 수 있다. 여기서의 최단 경로는 경로의 길이가 가장 짧은 경로를 말한다. 가중치가 있는 ..
Binary Search Tree (BST) 데이터 탐색 알고리즘으로 이진 탐색 알고리즘이 있다. 탐색 범위를 반으로 줄이면서 탐색하는 알고리즘이다. 정렬된 배열에서 이진 탐색 알고리즘을 적용해 O(log N)의 시간복잡도로 탐색할 수 있지만 배열의 원소를 추가, 삭제하는데 O(N)의 시간복잡도가 든다는 단점이 있다. 이를 극복하기 위해 BST를 사용한다. 균형 잡힌 BST(BBST)라면 탐색, 삽입, 삭제의 시간 복잡도를 O(log N)으로 만들 수 있다. BST는 이진 트리에 속하며 이진 탐색을 목적으로 하는 트리다. BST의 모든 노드는 아래의 규칙을 갖는다. 각 노드의 왼쪽 서브 트리에는 해당 노드의 원소보다 작은 원소를 가진 노드들이, 오른쪽 서브 트리에는 해당 노드의 원소보다 큰 원소를 가진 ..
트리 트리는 계층 구조를 표현하는 자료구조이다. 트리는 다양한 목적으로 사용되어 다양한 종류의 트리들이 등장했다. 현실 세계 계층 구조 표현 이진 검색 트리 힙 세그먼트 트리 유니온-파인드 트라이 등등 트리 용어 node(노드) : 트리 구성 요소 edge(간선) : 노드와 노드를 연결한 선 parent : 두 노드가 간선으로 연결되었을 때 상위 노드 child : 두 노드가 간선으로 연결되었을 때 하위 노드 sibling : 같은 부모를 가지는 자식 노드들 ancestor : 부모 노드와 그 부모 노드의 상위 노드들 descendant : 자식 노드와 그 자식 노드의 하위 노드들 root : 부모가 없는 최상위 노드 leaf : 자식이 없는 노드 Internal : 리프 노드가 아닌 노드 depth :..