[SQL] Join
·
database, sql
목표 Spring을 이용하면서 SQL 최적화를 위해 Join을 꽤 사용했지만, 어떤 원리로 동작하는지는 제대로 이해하지않고 그냥 이렇게 하면 Join이 된다. 라는 안일한 생각으로 SQL을 작성했던 것 같아 이번 기회에 Join에 대해 정리해보고자 한다. 여러 Join 전략 중 가장 많이 사용하는 4가지 Join 전략에 대해 이해해보자. SQL Join이란 두 개 이상의 테이블을 서로 연결하여 데이터를 검색할 때 사용하는 방법이다. 분리되어 있는 여러 테이블을 사용자가 원하는 형식으로 조합해야할때 SQL Join문을 이용해 해결할 수 있다. Join은 아래와 같이 7개의 형식으로 사용할 수 있다. Join의 종류와 활용 방법 오늘은 위 7개 형식의 Join 중 대부분의 Join에서 사용되는 아래 4가지 ..
[Spring] Redis 사용하기(2)
·
spring, jpa
https://zzzzseong.tistory.com/5 [Spring] Redis 사용하기(1) 목표 Redis가 무엇이고 언제 사용하는 것인지 알아보자 Docker로 Redis를 실행해보자 Redis란 무엇이고 언제, 어떻게 사용하는것일까? Redis(Remote Dictionary Server) Redis는 오픈소스기반 NoSQL의 Key-Value Store, zzzzseong.tistory.com 해당 글은 위 포스트와 이어지는 글입니다. Redis개념과 Docker를 이용한 Redis 사용방법을 보려면 위 포스트를 참고해주세요. 목표 이전 포스트에서 Redis의 기본적인 개념과 작동방식을 알아보았다. 이번 포스트에서는 Redis를 Spring에서 사용하는 방법에 대해 알아보자. Redis 사용..
[Spring] DispatcherServlet
·
spring, jpa
[Java] Servlet개요Servlet은 자바로 개발된 웹 애플리케이션에서 클라이언트의 HTTP 요청에 대해 적절한 동작을 수행하고 응답을 작성하도록 설계된 자바 인터페이스입니다. 검색해보면 Servlet에 대해 대부분 이zzzzseong.tistory.com DispatcherServletDispatcherServlet은 모든 HTTP 요청을 가장 먼저 받아 적합한 Controller로 전달하는 역할은 합니다. Spring에서 HTTP 요청 및 응답을 처리하는 핵심 기술이라고 할 수 있습니다. 또한, DispatcherServlet은 FrontController라고도 불립니다. 아래는 DispatcherServlet의 생명주기입니다. DispatcherServlet 동작과정DispatcherSe..
[Algorithm] BFS - 넓이 우선 탐색
·
algorithm
목표 알고리즘 문제를 풀면서 DFS를 정리한 글로 정리한 적이 있다. BFS 또한, 완벽하게 알고있어야하는 알고리즘이라고 판단되어 DFS와 반대되는 탐색 개념인 BFS 그래프 탐색 알고리즘에 대해 이해하고 하고자 한다. DFS의 개념이 부족하다면 아래 글을 읽고 오면 좋다. https://zzzzseong.tistory.com/23 [Algorithm] DFS - 깊이 우선 탐색 목표 Greedy, Dijkstra, DP 알고리즘과 같이 대표적인 알고리즘 중 하나인 DFS 그래프 탐색 알고리즘에 대해 이해하고 학습한다. DFS(Depth First Search)란 DFS(Depth First Search) DFS란 초기 노드에서 시작하여 해 zzzzseong.tistory.com BFS(Breadth..
[Algorithm] DFS - 깊이 우선 탐색
·
algorithm
목표 Greedy, Dijkstra, DP 알고리즘과 같이 대표적인 알고리즘 중 하나인 DFS 그래프 탐색 알고리즘에 대해 이해하고 학습한다. DFS(Depth First Search)란 DFS(Depth First Search) DFS란 초기 노드에서 시작하여 해를 찾을때까지 자식 노드를 계속해서 타고 들어가며 탐색하는 완전탐색 알고리즘이다. 깊이(Depth)의 노드를 우선적으로 탐색하는 BFS와 반대되는 개념이라고 생각하면 이해하기 쉽다. DFS는 Stack 또는 재귀를 이용해 구현할 수 있는데 재귀를 이용해 구현하는것이 일반적이다. BFS에 대한 개념이 부족하다면 아래 글을 읽고 오면 좋다. https://zzzzseong.tistory.com/22 [Algorithm] BFS - 넓이 우선 탐색 ..
[Algorithm] Dijkstra - 다익스트라
·
algorithm
목표 최소비용 경로문제로 대표되는 Dijkstra 알고리즘에 대해 이해하고 학습한다. Dijkstra 알고리즘을 활용할 수 있는 알고리즘 문제를 풀어보고 정형화된 템플릿을 만들어보자. Dijkstra란 Dijkstra Dijkstra란 V개의 정점과 각각의 가중치(W)를 가진 E개의 간선을 가진 그래프에서 i번 정점에서 j번 정점까지로의 최소 가중치를 가지는, 최단 경로를 찾는 알고리즘이다. 아래는 Dijkstra 알고리즘을 활용할 수 있는 그래프의 예시이다. Dijkstra 알고리즘을 활용하기 위해서는 앞서 설명한 그래프, 정점 별 최소 가중치를 저장하기 위한 1차원 배열, 그래프 탐색을 위한 자료구조가 필요하다. 그래프 탐색을 위한 자료구조는 인접행렬과 우선순위 큐를 사용할 수 있고, 인접행렬을 개선..
[Java] OOP와 OOP의 특성
·
java
목표 예전부터 누군가 나에게 OOP가 무엇인지 묻는다면 자동차를 예로 들거나, "원하는 객체를 만들어서 레고처럼 조립하는 거야!" 라는 식으로 두루뭉실하게 설명하며 "OOP는 무엇이다!" 라고 명확하게 정의하지 못했다. 오늘 글을 쓰면서 OOP에 대해 확실히 이해해보려고 한다. OOP언어를 배우면 가장 먼저 마주하는 내용이 OOP의 특성이다. OOP의 대표적인 4가지 특성을 글로 정리해 항상 이것을 참고하며 프로그램을 설계, 구현하고자 한다. OOP란 OOP(Object-Oriented Programming) 객체 지향 프로그래밍 현실 세계에서 어떤 제품을 만들 때는 부품을 먼저 만들고, 이 부품들을 하나씩 조립해서 완성품을 만든다. 소프트웨어를 개발할 때에도 부품에 해당하는 객체를 먼저 만들고, 이 객..
[Data Structure] Heap
·
data structure
Heap Heap은 최솟값, 최댓값을 빠르게 찾기 위해 고안된 자료구조이고, 무엇인가를 차곡차곡 쌓아 놓은 더미와 비슷하다 하여 Heap이라고 부른다. Heap은 '이진 트리'이되 '완전 이진 트리이다. '이진 트리'란 각 노드가 자식 노드를 최대 두개까지 가질 수 있는 트리를 말하며 '완전 이진 트리'란 마지막 레벨을 제외하고 모든 레벨이 채워져 있는 트리를 말한다. 탐색보다는 삽입과 삭제에 최적화된 자료구조이다. Array, Linked List에서 데이터 저장의 시간 복잡도는 O(n)이지만, Heap은 O(logn)이라는 좋은 성능을 보여준다. 그 이유는 Heap에 저장할 수 있는 데이터의 수는 트리의 높이가 하나 늘 때마다 두 배씩 증가하기 때문에, 데이터의 수가 두 배 늘 때마다 비교연산의 횟수..
[Data Structure] Priority Queue - 우선순위 큐
·
data structure
Priority Queue Priority Queue는 들어간 순서에 상관없이 우선순위가 높은 데이터가 먼저 나오는 자료구조이다. Queue와 구조가 비슷할 것 같지만 둘은 많은 차이가 있다. Queue는 연산의 결과로 FIFO 즉, 먼저 들어간 데이터가 먼저 나오지만 Priority Queue는 그렇지 않다. 앞서 설명한 것처럼 들어간 순서에 상관없이 우선순위가 높은 데이터가 먼저 나온다. Priority Queue는 Array, List, Heap으로 구현할 수 있다. 하지만 Array와 List는 데이터 삽입과 삽입 위치를 찾는 과정에서 성능을 저하시킬 수 있기때문에 일반적으로 Heap을 이용해 구현한다. Priority Queue의 개념은 사실상 Heap에 대한 개념과 같기 때문에 Heap에 대한..