From 04780acc73893f9980a37b05cd9a1c820d9719c1 Mon Sep 17 00:00:00 2001
From: mooncw <97713997+mooncw@users.noreply.github.com>
Date: Tue, 30 Jan 2024 23:54:44 +0900
Subject: [PATCH 01/14] Create 2024-01-26-stomp-websocket-programing
---
_posts/2024-01-26-stomp-websocket-programing | 148 +++++++++++++++++++
1 file changed, 148 insertions(+)
create mode 100644 _posts/2024-01-26-stomp-websocket-programing
diff --git a/_posts/2024-01-26-stomp-websocket-programing b/_posts/2024-01-26-stomp-websocket-programing
new file mode 100644
index 0000000..cd9b2d0
--- /dev/null
+++ b/_posts/2024-01-26-stomp-websocket-programing
@@ -0,0 +1,148 @@
+---
+layout: post
+title: STOMP 웹소켓 프로그래밍
+author: 문찬욱
+categories: 기술세미나
+banner:
+ image: https://raw.githubusercontent.com/Kernel360/blog-image/main/2024/0126/thumb.jpg
+ background: "#000"
+ height: "100vh"
+ min_height: "38vh"
+ heading_style: "font-size: 4.25em; font-weight: bold; text-decoration: underline"
+ tags: [웹소켓, STOMP]
+---
+
+안녕하세요. 저는 STOMP 웹소켓 프로그래밍이라는 주제로 발표한 문찬욱입니다.
+
+저는 이번 프로젝트에서 채팅 기능을 구현하고 있는데요, 그 과정에서 사용한 기술에 대해 공유드리고자 이 주제를 선정했습니다.
+
+이 글에서 웹소켓이 무엇인지, http와 웹소켓의 차이점이 무엇인지, 웹소켓 동작 방식은 어떤지, STOMP이 무엇인지 알려드리고자 합니다.
+
+
+
+## 1. 웹소켓
+웹소켓은 http 환경에서 클라이언트와 서버 사이에 하나의 TCP 커넥션을 통해 실시간으로 전이중 통신을 가능하게 하는 프로토콜입니다.
+
+여기서 전이중 통신은 전화기처럼 양방향으로 송신과 수신이 가능한 통신을 뜻합니다.
+
+
+
+## 2. HTTP vs 웹소켓
+그럼 이러한 웹소켓과 HTTP와의 차이점은 무엇일까요?
+
+Http는 클라이언트가 요청을 보낼 때마다 연결을 맺고 응답을 받은 후 연결을 끊어버리기 때문에 비 연결성 프로토콜입니다.
+
+그리고 클라이언트가 요청하고 서버가 응답하는 단방향 통신입니다.
+
+반면에 웹소켓은 한번 연결을 맺으면 어느 한쪽에서 연결을 끊으라는 요청을 보내기 전까진 연결을 유지하기 때문에 연결 지향 프로토콜입니다.
+
+그리고 양 쪽에서 데이터를 주고 받을 수 있는 양방향 통신입니다.
+
+
+이미지1
+
+### 실시간 측면에서는...?
+http는 비 연결성이기 때문에 데이터를 주기 위해선 매번 연결해야 하고 그만큼 연결 비용이 발생하게 됩니다.
+
+즉, 오버헤드가 커집니다.
+
+이미지2
+
+위 이미지에서 왼쪽은 일반적인 http로 주고받는 데이터양이고, 오른쪽 위는 웹소켓 연결요청할 때의 데이터양이고, 그 아래는 연결 이후의 데이터양입니다.
+
+웹소켓은 처음 연결할 때 http로 하기 때문에 처음 데이터 양은 유사하지만, 이후 데이터 양이 매우 줄어든 것을 확인할 수 있습니다.
+
+이러한 점들에서 웹소켓이 http 보다 실시간성에 더 유리합니다.
+
+## 3. 웹소켓 동작 방식
+이미지3
+
+웹소켓의 동작 방식은 크게 3가지로 나눌 수 있는데요,
+
+빨간 박스는 Opening Handshake,
+
+노란 박스는 Data transfer,
+
+보라 박스는 Closing Handshake에 해당됩니다.
+
+### Opening Handshake
+이미지4
+
+빨간 박스 부분인 Opening Handshake는 먼저 웹소켓 클라이언트에서 http 프로토콜을 통해 웹소켓으로 Upgrade 해달라는 요청을 보냅니다.
+
+이 요청의 의미는 웹소켓 프로토콜로 전환해달라는 것입니다.
+
+그 다음 웹소켓 서버는 101 응답과 함께 웹소켓 프로토콜로의 전환을 승인했음을 알립니다.
+
+### Data Transfer
+이미지5
+
+노란 박스 부분인 Data Transfer는 Opening Handshake가 끝나서 전환된 웹소켓 프로토콜을 통해 클라이언트와 서버 간 실시간 전이중 통신을 하는 부분입니다.
+
+### Closing Handshake
+이미지6
+
+보라 박스 부분인 Closing Handshake는 서로 간의 커넥션을 종료하는 부분입니다.
+
+## 4. STOMP
+STOMP는 streaming text oriented messaging protocol의 줄임말이며,
+
+메세지 브로커를 활용하여 쉽게 메시지를 주고 받을 수 있는 프로토콜입니다.
+
+이 프로토콜은 웹소켓 위에 얹어 하위 프로토콜로 함께 사용할 수 있습니다.
+
+### 웹소켓만 사용하는 것 비해 어떤 이점이...?
+웹소켓 프로토콜은 메시지 데이터 타입이 Text인지 Binary인지는 정의하지만, 메시지 내용에 대해서는 정의하지 않습니다.
+
+이는 복잡한 메시지를 주고 받으려면 어떤 메시지인지 알기 위한 로직이 필요하다는 것입니다.
+
+STOMP 프로토콜은 메시지 내용을 구조화 할 수 있어서 효과적인 메시징을 도와줍니다.
+
+예를 들어, A라는 사람이 B라는 사람에게 “안녕”이라는 내용으로 보내는 메시지가 있다고 해보겠습니다.
+
+웹소켓로 보낼 때는 “안녕”이라는 메시지만 보내면 됩니다.
+
+클라이언트가 1명이라면 문제가 없지만, 클라이언트가 여러명이라면, 이 메시지를 누가 보냈는지, 누구한테 가야하는지, 어떤 용도로 보내는 것인지 서버가 알 수가 없습니다.
+
+물론, 단순히 안녕이 아닌 모든 정보가 담긴 한줄의 긴 텍스트 문자열로 보낼 수 있습니다.
+
+하지만 이러면, 서버가 이 메시지를 이해하고 처리하기 쉽지 않을 수 있습니다.
+
+또한 연결된 클라이언트 주소마다 메시지 핸들러를 구현해야 합니다.
+
+이미지7
+
+STOMP는 이미지처럼
+
+destination /app/chat/message로 보내는,
+sender A가,
+
+content “안녕”의 내용의 메시지를,
+
+send 전송했음을
+
+구조화 된 형태로 보낼 수 있기 때문에 서버는 이 메시지가 어떤 메시지인지 이해하고 처리하기 쉽습니다.
+
+또 다른 이점은 STOMP는 pub/sub 구조로 되어있다는 것입니다.
+
+이미지8
+
+pub/sub 구조란 이 이미지처럼 publisher에서 메시지 브로커의 Topic1이라는 특정 토픽에 메시지를 보내면, Topic1을 구독하고 있는 subscribe들에게 메세지를 전달하는 구조를 말합니다.
+
+이 구조로 인해 최대 토픽별로만 메시지 핸들러를 구현해주면 되기 때문에 웹소켓로만 구성된 것에 비해 메시지 핸들러 구현 양이 줄어든다는 이점이 있습니다.
+
+### pub/sub 구조의 특징
+저는 pub/sub 구조의 특징을 크게 3가지로 나눠볼 수 있었습니다.
+
+첫째, pub과 sub을 쉽게 추가할 수 있어서 확장성이 좋습니다.
+
+둘째, pub과 sub 간에 강한 의존성이 없어서 비동기적으로 처리할 수 있습니다.
+
+셋째, sub은 관심 토픽에 대한 메시지만 받을 수 있어서 선택적 수신이 가능합니다.
+
+
+
+## 5. 마무리
+채팅, 실시간 업데이트, 알림 같은 실시간성 기능을 구현하고자 하면,
+
+STOMP도 선택지 중 하나라고 생각합니다.
From 9527940e0bcd793cfb069b796e055d29f233dd57 Mon Sep 17 00:00:00 2001
From: mooncw <97713997+mooncw@users.noreply.github.com>
Date: Mon, 5 Feb 2024 23:24:51 +0900
Subject: [PATCH 02/14] Update 2024-01-26-stomp-websocket-programing
---
_posts/2024-01-26-stomp-websocket-programing | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/_posts/2024-01-26-stomp-websocket-programing b/_posts/2024-01-26-stomp-websocket-programing
index cd9b2d0..16505bf 100644
--- a/_posts/2024-01-26-stomp-websocket-programing
+++ b/_posts/2024-01-26-stomp-websocket-programing
@@ -38,15 +38,14 @@ Http는 클라이언트가 요청을 보낼 때마다 연결을 맺고 응답을
그리고 양 쪽에서 데이터를 주고 받을 수 있는 양방향 통신입니다.
-
-이미지1
+
### 실시간 측면에서는...?
http는 비 연결성이기 때문에 데이터를 주기 위해선 매번 연결해야 하고 그만큼 연결 비용이 발생하게 됩니다.
즉, 오버헤드가 커집니다.
-이미지2
+
위 이미지에서 왼쪽은 일반적인 http로 주고받는 데이터양이고, 오른쪽 위는 웹소켓 연결요청할 때의 데이터양이고, 그 아래는 연결 이후의 데이터양입니다.
@@ -55,7 +54,7 @@ http는 비 연결성이기 때문에 데이터를 주기 위해선 매번 연
이러한 점들에서 웹소켓이 http 보다 실시간성에 더 유리합니다.
## 3. 웹소켓 동작 방식
-이미지3
+
웹소켓의 동작 방식은 크게 3가지로 나눌 수 있는데요,
@@ -66,7 +65,7 @@ http는 비 연결성이기 때문에 데이터를 주기 위해선 매번 연
보라 박스는 Closing Handshake에 해당됩니다.
### Opening Handshake
-이미지4
+
빨간 박스 부분인 Opening Handshake는 먼저 웹소켓 클라이언트에서 http 프로토콜을 통해 웹소켓으로 Upgrade 해달라는 요청을 보냅니다.
@@ -75,12 +74,12 @@ http는 비 연결성이기 때문에 데이터를 주기 위해선 매번 연
그 다음 웹소켓 서버는 101 응답과 함께 웹소켓 프로토콜로의 전환을 승인했음을 알립니다.
### Data Transfer
-이미지5
+
노란 박스 부분인 Data Transfer는 Opening Handshake가 끝나서 전환된 웹소켓 프로토콜을 통해 클라이언트와 서버 간 실시간 전이중 통신을 하는 부분입니다.
### Closing Handshake
-이미지6
+
보라 박스 부분인 Closing Handshake는 서로 간의 커넥션을 종료하는 부분입니다.
@@ -110,7 +109,7 @@ STOMP 프로토콜은 메시지 내용을 구조화 할 수 있어서 효과적
또한 연결된 클라이언트 주소마다 메시지 핸들러를 구현해야 합니다.
-이미지7
+
STOMP는 이미지처럼
@@ -125,7 +124,7 @@ send 전송했음을
또 다른 이점은 STOMP는 pub/sub 구조로 되어있다는 것입니다.
-이미지8
+
pub/sub 구조란 이 이미지처럼 publisher에서 메시지 브로커의 Topic1이라는 특정 토픽에 메시지를 보내면, Topic1을 구독하고 있는 subscribe들에게 메세지를 전달하는 구조를 말합니다.
From 10a3799276dbfb31fc416674a9053b11339ea844 Mon Sep 17 00:00:00 2001
From: mooncw <97713997+mooncw@users.noreply.github.com>
Date: Mon, 5 Feb 2024 23:29:17 +0900
Subject: [PATCH 03/14] =?UTF-8?q?feat:=2020240126=5Fstomp=20=EC=9B=B9?=
=?UTF-8?q?=EC=86=8C=EC=BC=93=20=ED=94=84=EB=A1=9C=EA=B7=B8=EB=9E=98?=
=?UTF-8?q?=EB=B0=8D=5F=EB=AC=B8=EC=B0=AC=EC=9A=B1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...socket-programing => 2024-01-26-stomp-websocket-programing.md} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename _posts/{2024-01-26-stomp-websocket-programing => 2024-01-26-stomp-websocket-programing.md} (100%)
diff --git a/_posts/2024-01-26-stomp-websocket-programing b/_posts/2024-01-26-stomp-websocket-programing.md
similarity index 100%
rename from _posts/2024-01-26-stomp-websocket-programing
rename to _posts/2024-01-26-stomp-websocket-programing.md
From 691c22c0820af3d20c3a7f8458e7ec299a2d0ae6 Mon Sep 17 00:00:00 2001
From: isevou__
Date: Tue, 13 Feb 2024 00:46:45 +0900
Subject: [PATCH 04/14] =?UTF-8?q?feat=20:=2020240125=5F=EC=BD=94=EB=94=A9?=
=?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=5F=EA=B3=A0=EB=B3=91=EB=A3=A1.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
_posts/2023-01-25-coding-test.md | 94 ++++++++++++++++++++++++++++++++
1 file changed, 94 insertions(+)
create mode 100644 _posts/2023-01-25-coding-test.md
diff --git a/_posts/2023-01-25-coding-test.md b/_posts/2023-01-25-coding-test.md
new file mode 100644
index 0000000..7420b66
--- /dev/null
+++ b/_posts/2023-01-25-coding-test.md
@@ -0,0 +1,94 @@
+---
+layout: post
+title: 주저하는 개발자들을 위해 - 코딩 테스트
+author: 고병룡
+categories: 기술세미나
+banner:
+ image: https://docs.oracle.com/cd/E19340-01/820-6424/images/to_MOM.gif
+ background: "#000"
+ height: "100vh"
+ min_height: "38vh"
+ heading_style: "font-size: 4.25em; font-weight: bold; text-decoration: underline"
+ tags: [코딩테스트, 기술세미나]
+---
+
+## 코딩 테스트?
+코딩 테스트란 개발자의 기술적인 역량을 시험하기 위해 실시하는 알고리즘이나 구현을 요구하는 테스트입니다.
+
+회사 입장에서는 지원자를 평가하는 최소한의 기준이고 지원자에게는 ~~통곡의 벽~~ 처럼 느껴지는 코딩 테스트 대체 왜 해야할까?
+
+그리고 또 어떻게 준비해야만 할까..?
+
+## 코딩 테스트 그래서 왜 해야하나?
+무엇보다도, 많은 회사들이 코딩테스트를 1차적인 관문으로 두고 지원자를 거르고 있기 때문에 그런 회사들에 지원할 생각이 있다면 꾸준히 준비하는 게 좋다.
+
+> 아래 4가지 이유를 통해서 조금 더 자세히 알아보자면..
+
+* 여러분들이 가고 싶어하는 많은 회사에는 정말 많은 지원자가 몰린다. 이들 개개인의 모든 역량을 테스트하기에는 현실적으로 무리가 있고, 이 과정에서 코딩 테스트는 효율적으로 이들을 가려내는데 도움이 되기 때문에 많은 기업들이 도입한다.
+* 여러분들이 어떤 식으로 코드를 작성하는지 미리 확인하고 어떤 사고 방식과 결론, 평소 개발을 어떻게 하는지 엿볼 수 있는 창구와 비슷하다. 자신이 어떤 개발자인지 비교적 손 쉽게 다른 개발자들에게 보여줄 수 있다.
+* 개발에 필요한 지식들을 보여주고 나의 컴퓨터 과학 지식을 기반으로 한 나의 문제 해결력을 보여주기 쉽다. 결국 알고리즘 문제를 구현한다는 건 그 문제를 이해해야만 할 수 있는 거고, 그에 맞는 알고리즘을 찾고 시간 내에 테스트 케이스들을 통과시켜야 하기 때문에, 비교적 쉽게 내 문제 해결 능력을 보여줄 수 있다.
+* 개발자는 자주,, 생각보다 자주 이직이라는 카드를 꺼내든다.. 이직할 때 코테 준비를 하지말고,, 항상 이직이라는 카드를 꺼낼 수 있도록 언제든 코테를 준비를 할 필요가 있다.
+
+## [당신이 코딩테스트를 포기하는 7가지 이유](https://www.inflearn.com/course/%EA%B0%9C%EB%B0%9C%EC%9E%90-%EC%B7%A8%EC%97%85-%ED%86%B5%ED%95%A9%ED%8E%B8)
+아래의 7가지 이유는 [한정수님](https://github.com/Integerous)의 [비전공자를 위한 개발자 취업 가이드](https://www.inflearn.com/course/%EA%B0%9C%EB%B0%9C%EC%9E%90-%EC%B7%A8%EC%97%85-%ED%86%B5%ED%95%A9%ED%8E%B8)의 내용에서 가져온 개발자들이 코테를 포기하는 7가지 이유이다.
+
+가져온 이유들에는 각각 논리적인 허점이 존재하고 우리는 같이 그것을 깨부수고 코딩테스트를 준비하기 위한 마음가짐을 잡아 보도록 하자.
+
+>1. 코딩 테스트를 보는 회사에는 어차피 서류 합격도 못할 것이다.
+
+아니다. 서류만 내도 코테를 보게 해주는 회사가 많고 “서류”도 영향이 있지만 “테스트 결과” 도 영향이 있다.
+> 2. 코딩 테스트를 준비할 시간이 없다.
+
+분명히 당신의 하루에는 낭비되는 시간이 있다. 그 시간을 찾아서 하자. 코딩 테스트 준비 뿐만아니라 다른 공부도 마찬가지다..
+> 3. 지금부터 준비하더라도, 더 오래 준비한 전공자들에게 밀릴 것이다.
+
+체육 전공한 사람이 마라톤을 더 잘 뛸까? 아니면 일반인이 더 잘 뛸까? 확률은 전자가 높겠지만 거의 비슷하게 힘들다. 전공자들이라고 해서 코테가 쉽고 뚝딱 풀리는 일은 아니다.
+> 4. Java(언어), Spring(프레임워크)도 제대로 못하는데 무슨 코딩 테스트?
+
+코딩 테스트라도 제대로 해야지 면접은 볼 수 있지 않을까? 물론 둘 다 잘하면 정말 좋고 그것도 아니라면 면접에 들어갈 수 있는 실력이 된다는 것 자체로도 의미가 있다고 생각한다. 코테를 볼 기회는 항상 찾아오는게 아니니...
+> 5. 코딩 테스트 안봐도 개발로 취업은 하더라.
+
+당연히 할 수 있다. 하지 않는 기업을 찾아서 지원하면 된다. 하지만 차라리 코테를 준비하고 더 많은 기회를 얻는게 맞지 않나 라는 생각이 든다.
+>6. 조금 해봤는데, 너무 어렵다.
+
+착각하는 분들이 있는데 우리는 대회를 나가자고 하는 게 아니다. 코테를 쳐보는 것만으로도 소중한 자산이다. 이걸로 상을 타는 게 아니라 우리는 취업이 목적이기에....
+>7. 어떻게 준비해야 될지 모르겠다.
+
+그러면 이제부터 알아보자! 만약 필자가 뭐하는 사람인지 의심이 간다면.. 그래도 나름 [열심히(?)](https://solved.ac/profile/hodako97) 준비해오고 [알고리즘을 좋아하고](https://github.com/fingersdanny/PS_note), [알고리즘 스터디](https://github.com/Kernel360-cell1/algorithm-study)를 운영 중인 사람 중 하나로써 여러분들이 코테에서 더 행복해지길 바라는 마음에서 준비했다.
+
+## 코딩테스트 어떻게 준비해야 할까?
+
+### 1. 알고리즘 / 자료구조를 배우자
+
+코딩 테스트에 나오는 문제는 다양한 배경 지식을 요구하고 그 중 만나게 되는 대부분은 자료 구조와 다양한 알고리즘이다.
+
+따라서, 무턱대고 문제를 풀기위해 접근 하는 것보다는 미리 아래의 자료구조와 알고리즘과 친숙해진 이후로 풀어보길 시작하는 것을 권장한다..
+
+그 중에 보편적으로 활용되는 자료 구조와 알고리즘은 다음과 같다.
+
+#### 자료구조
+* 배열 (Array)
+* 리스트 (List)
+* 연결 리스트 (LinkedList)
+* 스택 (Stack)
+* 큐 (Queue)
+* 덱 (Deque)
+* 우선순위 큐 (Priority Queue), 힙 (Heap)
+* 트리 (Tree), 이진 트리(Binary Tree)
+* 그래프 (Graph)
+* 세트 (Set)
+* 맵 (Map)
+
+
+
+
+## 참고 자료
+[Kafka와 RabbitMQ의 차이점은 무엇인가요?](https://aws.amazon.com/ko/compare/the-difference-between-rabbitmq-and-kafka/)
+
+[Apache Kafka란 무엇입니까?](https://aws.amazon.com/ko/what-is/apache-kafka/)
+
+[Apache ActiveMQ](https://activemq.apache.org/)
+
+[메시지 큐란?](https://www.ibm.com/kr-ko/topics/message-queues)
+
+[Pub/Sub이란 무엇인가요?](https://cloud.google.com/pubsub/docs/overview?hl=ko)
From e0ca87f47d026a898adaabdb842d413179425492 Mon Sep 17 00:00:00 2001
From: Byungryong Ko
Date: Wed, 14 Feb 2024 13:12:07 +0900
Subject: [PATCH 05/14] =?UTF-8?q?chore=20:=20=EA=B8=80=20=EB=82=B4?=
=?UTF-8?q?=EC=9A=A9=20=EC=B6=94=EA=B0=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
_posts/2023-01-25-coding-test.md | 67 +++++++++++++++++++++++++++++---
1 file changed, 61 insertions(+), 6 deletions(-)
diff --git a/_posts/2023-01-25-coding-test.md b/_posts/2023-01-25-coding-test.md
index 7420b66..dc5b74c 100644
--- a/_posts/2023-01-25-coding-test.md
+++ b/_posts/2023-01-25-coding-test.md
@@ -13,7 +13,7 @@ banner:
---
## 코딩 테스트?
-코딩 테스트란 개발자의 기술적인 역량을 시험하기 위해 실시하는 알고리즘이나 구현을 요구하는 테스트입니다.
+코딩 테스트란 개발자의 기술적인 역량을 시험하기 위해 실시하는 알고리즘이나 구현을 요구하는 테스트다.
회사 입장에서는 지원자를 평가하는 최소한의 기준이고 지원자에게는 ~~통곡의 벽~~ 처럼 느껴지는 코딩 테스트 대체 왜 해야할까?
@@ -78,17 +78,72 @@ banner:
* 그래프 (Graph)
* 세트 (Set)
* 맵 (Map)
+* 서로소 집합 (Disjoint Set / Union Find)
+> 위에 있는 자료 구조들을 모두 아는 편이 좋은가요?
+위 자료 구조들은 기술 면접 때도 자주 만날 수 있으니 말로 설명할 수 있을 만큼 알아 두는 편이 좋다. 당연히 문제를 만났을 때 위의 자료구조를 각 프로그래밍 언어별로 어떤 식으로 사용할 수 있는지도 알아두어야 문제에 적용할 수 있다.
+
+#### 알고리즘
+* 그리디 (Greedy)
+* 동적 계획법 (Dynamic Programming) : 메모이제이션...
+* 다양한 정렬 알고리즘 : 버블, 선택, 삽입, 병합, 힙, 퀵
+* 탐색 알고리즘
+ * 깊이 우선 탐색 (DFS)
+ * 너비 우선 탐색 (BFS)
+ * 이진 탐색
+ * 매개 변수 탐색
+ * 트리에서의 탐색 : 힙 트리, 트라이(Trie)
+* 크루스칼 알고리즘 (최소 신장 트리)
+* 백트래킹
+* 최단 경로 : 다익스트라, 벨만-포드, 플로이드-워셜
+* 완전 탐색 (Bruteforcing)
+
+> 알고리즘과 마찬가지로 위에 있는 내용들도 전부는 아니지만 말로 설명할 수 있어야 한다.
+
+> 알고리즘 공부를 시작하고 싶은데 어디서부터 보는게 좋을까요?
+
+개인적으로 방법은 중요하다고 생각하지 않고 꾸준히 보는게 더 낫다고 생각하지만 그래도 몇 가지 강의 및 책을 추천해보자면,
+
+[이것이 코딩 테스트다](https://product.kyobobook.co.kr/detail/S000001810273?utm_source=google&utm_medium=cpc&utm_campaign=googleSearch&gad_source=1&gclid=EAIaIQobChMIutbEu_OphAMVE1cPAh1V2A1hEAAYASAAEgLDevD_BwE)
+
+[BaaaaaaaarkingDog님의 실전 알고리즘 강좌](https://blog.encrypted.gg/919)
+
+
+### 2. 꾸준히 풀자
+
+너무나도 당연한 말이지만 생각보다 코딩 테스트는 언제든 볼 수 있게끔 준비를 해놓는 상태가 훨씬 좋다고 생각한다. 꾸준히 준비하지 않으면 실력이 떨어지는 속도는 가파르지만 실력을 올리는 속도는 생각보다 더 걸릴 수 있다.
+
+따라서 사람들이 자주 사용하고, 실제 코딩 테스트 환경에 가까운 곳에서 자주 문제를 풀어보기를 권장한다.
+
+* [프로그래머스](https://school.programmers.co.kr/learn/challenges?order=recent) : 많은 기업들의 코딩 테스트를 진행해주고 있고 문제도 꾸준히 올라온다. 카카오 등의 기업 공채에서의 기출 문제 또한 제공하고 있다.
+* [SW Expert Academy](https://swexpertacademy.com/main/main.do) : 삼성에서 운영하는 코딩테스트 및 알고리즘 학습 사이트이다. 삼성 관련 (반기 마다 열리는 알고리즘 특강, 입사 시 코딩 테스트)가 모두 여기에서 요구하는 문제 입출력 방식이나 라이브러리를 어떤 것을 사용할 수 있는지 까지 미리 알고 준비할 수 있다.
+* [Baekjoon Online Judge](https://www.acmicpc.net/) : 다양한 문제를 제공하고 삼성 SW 역랑 기출 문제를 제공하고 있다. 압도적인 문제 수와 유저 수로 인해 문제를 풀지 못했을 때 물어볼 곳이 더 많다는 이점이 있다.
+
+개인적으로는 백준을 제일 좋아하고 애용한다. 꾸준히 풀기를 지키기 위해서는 나름의 보상이 필요하다고 생각하는데.. 필자는 꾸준히 풀기 위해 코딩 테스트를 나름의 게임이라고 생각하여 위 백준 사이트와 연동되는 [solved.ac](https://solved.ac/)를 활용하여 꾸준히 잔디 심기(?) 및 랭크를 통해서 코딩 테스트를 준비중이다.
+
+### 3. 실제로 구현하기 전에 어떻게 구현할 지 손으로 적어보자
+
+아는 문제가 나와서 구현부터 할 생각할지 말고 무엇부터 어떻게 구현할지 생각해보고 문제 풀이를 작성해보자.
+
+ 1. 요즘 코딩 테스트에 나오는 문제들은 설명이 길다. 미리 순서를 정해두지 않고 구현만 하다가 보면 중간에 갈 길을 잃기 쉽고 문제 설명 중 어디까지 구현했는지 추적할 수가 없다. 결국 다시 되돌아가서 문제를 읽어야 할 수 도 있다. 처음부터 모든 상황을 본인의 언어로 정리해둔다면, 헷갈릴 이유도 없고 본인이 어디까지 구현했는 지 추적이 가능하다.
+ 2. 대부분의 코딩 테스트는 펜과 종이를 허용한다. 이걸 준비하라고 하는 이유는 써서 고민해봐도 좋다는 얘기고 이것을 활용하지 않을 이유가 없다!
+ 3. 많은 수의 기업이 코딩 테스트에 대한 기출문제를 제공하지 않는다. 따라서 직접 적어 놓은 문제 구현 계획을 보고 나서 나중에 복기할 수 있도록 한다.
+
+### 4. 시간 분배를 잘하자.
+
+1. 문제를 풀기 전에 시간 복잡도 계산을 해보고 올바른 알고리즘을 골랐는지 생각해보자. 보수적으로 생각했을 때 연산이 1억번을 1초라 가정하면 대부분의 문제에서 시간 초과를 받지 않을 수 있다. 어떤 알고리즘을 사용할지 입력의 최대 범위는 어디까지인지 시간은 얼마나 주어졌는지를 복합적으로 고려해보고 문제를 풀어야 한다.
+2. 실제 시험도 마찬가지지만 문제 당 시간 분배가 중요하다. 최악의 경우 2시간 내에 4문제를 풀어야할 수도 있고 그거 보다 길거나 짧을 수 있다. 평균적으로 실전에서는 40분 ~ 1시간이 주어진다고 생각하고 문제를 접근해야 테스트 중 시간이 모잘라서 문제를 포기하는 불상사를 겪지 않을 수 있다.
+3. 여느 시험을 볼 때와 마찬가지로 너무 오래 걸리는 문제만 붙잡고 있지 말아야 한다. 모든 답안을 다 들고 시험장에 갈 수 없듯이 코딩테스트도 못 푸는 문제가 있을 수 있다. 그럴 땐 넘기고 시간이 남을 때 돌아보는게 정신건강에 훨씬 더 좋다.
+4. 앞의 내용의 연장선에서 대부분의 코딩테스트는 순서대로 풀지 않아도 된다. 처음에 문제를 받는다면 쭉 훑어보고 해당 문제의 알고리즘이 바로 보이거나 구현이 오래 걸리지 않을 것 같은 문제들을 빨리 풀고 시간을 아끼는 게 좋다!
## 참고 자료
-[Kafka와 RabbitMQ의 차이점은 무엇인가요?](https://aws.amazon.com/ko/compare/the-difference-between-rabbitmq-and-kafka/)
+이것이 코딩 테스트다
-[Apache Kafka란 무엇입니까?](https://aws.amazon.com/ko/what-is/apache-kafka/)
+[개발자 취업을 위한 코딩 테스트 준비 방법](https://katfun.tistory.com/192)
-[Apache ActiveMQ](https://activemq.apache.org/)
+[알고리즘 분류 참고 - 백준 온라인 저지 알고리즘 별 문제 분류](https://www.acmicpc.net/problem/tags)
-[메시지 큐란?](https://www.ibm.com/kr-ko/topics/message-queues)
-[Pub/Sub이란 무엇인가요?](https://cloud.google.com/pubsub/docs/overview?hl=ko)
+헤더 이미지 붙이고 글 내용 읽고 수정해서 오늘 업로드 할 것
\ No newline at end of file
From 2bd1aaa41098e5b0feb25ffc39193c2ff678efb0 Mon Sep 17 00:00:00 2001
From: gunsight <103917282+gunsight1@users.noreply.github.com>
Date: Wed, 14 Feb 2024 14:21:26 +0900
Subject: [PATCH 06/14] Create 2023-12-01-RDBMS.md
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
RDBMS의 조회과정, 쿼리실행계획 중요성
---
_posts/2023-12-01-RDBMS.md | 192 +++++++++++++++++++++++++++++++++++++
1 file changed, 192 insertions(+)
create mode 100644 _posts/2023-12-01-RDBMS.md
diff --git a/_posts/2023-12-01-RDBMS.md b/_posts/2023-12-01-RDBMS.md
new file mode 100644
index 0000000..d2ab64d
--- /dev/null
+++ b/_posts/2023-12-01-RDBMS.md
@@ -0,0 +1,192 @@
+# RDBMS의 조회과정, 쿼리실행계획 중요성
+
+반갑습니다.
+RDBMS와 쿼리실행계획의 중요성을 주제로 기술세미나 발표를 한 정지용 입니다.
+
+## [1. 개요]
+
+요즘 자바와 ORM을 기반으로 개발을 하게되어 직접적으로 쿼리를 보는 일이 예전보다 현저히 줄어들었다고는 하나 아직도 데이터가 저장되는 저장소는 대부분 데이터베이스입니다.
+
+결국 그 말은 즉슨 아무리 데이터베이스에 의존을 최소화 하더라도 어쩔 수 없이 데이터베이스에 대해 잘 알아야 한다는 이야기이기도 합니다.
+
+이번 시간에는 RDBMS에서 다양한 기능을 많이 지원하지만 가장 많이 쓰이는 조회과정과 이와 연관되어있는 쿼리실행계획의 중요성을 알아보는 시간을 가져보고자 합니다.
+
+
+
+## [2. RDBMS란?]
+
+진행하기 앞서, 데이터베이스(Database, 이하 DB)란 무엇일까요?
+
+짧고 명료하게 이야기 하자면 집합과 명제를 근간으로 하는 체계적인 데이터 모음입니다.
+
+RDBMS (관계형 데이터베이스 관리 시스템 :: Relational Database Management System)는 이름에서도 유추가 되듯 데이터베이스의 관리 시스템입니다.
+
+이 RDBMS에선 보통 일반적으로 4가지의 명령어를 지원합니다.
+
+
+
+DDL(Data Definition Language)은 데이터 정의어로 DB 구조를 정의하거나 변경하는데 쓰입니다.
+
+DML(Data Manipolation Language)은 데이터 조작어로 등록(insert) 조회(select) 수정(update) 삭제(delete)를 수행합니다.
+
+DCL(Data Control Language)은 데이터 제어어로 DB에 접근하는 사용자의 권한관리를 담당합니다.
+
+TCL(Trangection Control Language)은 트랜잭션 제어어로 작업수행의 대한 승인(commit), 철회(rollback)을 담당합니다.
+
+이 중 우리가 알아볼 명령어는 DML에 속하는 SELECT이며 DBA가 아닌 이상 우리같은 개발자는 보통 DML과 TCL을 세트로 많이 사용합니다.
+
+DML의 가장 큰 특징은 DDL과 다르게 수행을 한 뒤 데이터가 즉시 DB에 반영되지 않으므로 TCL을 통해 최종 수행여부를 결정 해야합니다.
+
+
+
+## [3. SELECT의 조회 과정]
+
+DBMS의 명령어는 직관적인 편이며 SELECT의 문법도 이와 마찬가지입니다.
+
+SELECT, 선택한다. 무엇을? 컬럼을.
+
+FROM, 어디로부터? TABLE에서
+
+WHERE, 어떤 기준으로? 조건에 따라
+
+GROUP BY 어떻게 묶어? 컬럼에 맞춰서
+
+HAVING 어떤 기준으로? 조건에 따라
+
+ORDER BY 정렬은? 오름차순 / 내림차순
+
+
+
+위의 이미지에서 노란 박스안의 문법들은 옵션을 의미합니다.
+
+옆의 예제 SQL문법이 한눈에 읽히신다면 여러분들은 SELECT 쿼리를 쓸 줄 아시게 된겁니다.
+
+문법을 알아보았으니 이제 실행 과정을 살펴볼건데 이해하기 쉽게 뷔페에서 요리 담는 것으로 비유를 해봤습니다.
+
+
+
+
+FROM → 뷔페에 모든 요리들이 잔뜩 있는 상태입니다.
+
+WHERE → 내가 먹고 싶은 음식을 생각해봅시다.
+
+GROUP BY → 에피타이저, 메인, 디저트처럼 종류에 따라 나눠봅니다.
+
+HAVING → 나눈 음식중에 생각해보니 국수랑 튀김은 아니다 싶어 빼기로 했어요.
+
+SELECT → 이제 먹을 음식을 다 골랐고, 접시에 담았습니다.
+
+ORDER BY → 이 음식을 순서대로 먹습니다.
+
+결과로 보면 아래와 같은 이미지처럼 흐르게됩니다.
+
+
+
+
+
+
+## [4. SELECT의 활용]
+
+SELECT는 활용도가 아주 높은 DML이고, 서브쿼리(sub-query)라는 특별한 기능을 제공합니다.
+
+서브쿼리란 쿼리 안에 또 쓰이는 다른 쿼리를 뜻합니다.
+
+DML에선 포괄적으로 쓰일 수 있고, DDL과의 혼용도 일부 지원을 합니다.
+
+대표적으로 자주 쓰이는 응용 3가지를 예시로 설명드리겠습니다.
+
+
+
+첫째로 백업, CREATE 명령어와 조합하면 테이블 백업으로도 쓸 수 있습니다.
+
+노란박스의 조건을 보면 1은1로 할 경우 데이터까지 복사
+
+1은0으로 하면 테이블 스키마만 복사합니다.
+
+
+
+둘째로 필터링입니다. 예를 들어 INSERT명령어와 조합하면 조건에 맞는 데이터만 뽑아 넣을 수 있습니다.
+
+
+
+셋째로 SELECT안에 SELECT를 써서 임시 테이블, 즉 버추얼 뷰처럼 쓸 수 있는데 이것을 인라인 뷰라고 합니다.
+
+
+
+위 이미지에 보이는 쿼리에서 첫번째는 조인을 이용한 쿼리 실행이고, 두번째는 인라인 뷰를 이용한 쿼리 실행 입니다.
+
+둘이 같은 결과를 보여주는 쿼리인데 어느 쪽이 더 빠르게 될까요? 쿼리를 다루게 된다면 항상 고민하게되는 포인트입니다.
+
+지금껏 이야기 한 SELECT 과정을 실제 RDBMS에서 수행되는 과정을 풀어보면 아래와 같은 이미지처럼 나오게 됩니다.
+
+DBMS에 관심이 있어 자세히 알아가고자 한다면 아래의 내용에 대해서도 공부해봄직합니다. 🫡
+
+
+
+
+
+## [5. 쿼리실행계획]
+
+우리의 입장에서 이것보다 더 먼저 알아야 할 것은 SELECT 쿼리가 실행 될 때 발생하는 실행계획(query-plan) 이란 것이 있습니다.
+
+이 실행계획은 말 그대로 쿼리가 실행 할 때 어떠한 계획을 가지고 수행하는가를 나타내는 계획서입니다. 이 실행계획의 각 단계를 COST, 즉 비용이라고 부르는데 말그대로 수행에 필요한 비용을 뜻합니다.
+
+우리같은 서민은 가성비를 좋아하듯, 쿼리의 성능도 가성비가 중요합니다. 🙃 보통 다른 환경이 동일하다는 가정하에 코스트가 낮을수록 결과를 빠르게 가져옵니다.
+
+같은 결과를 뽑더라도 이 실행 계획에 따라 성능이 좌지우지되므로 얼마나 중요한지 알려드리고자 아주 극단적이지만 심플한 예시를 통해 말씀드리겠습니다.
+
+## [6. 실행계획을 직접 확인해보자]
+
+
+
+자 우리가 취업을 하게되서 회사에서 '통계 쿼리를 만들어라' 업무 지시를 받았다고 시나리오를 두고 위와 같은 구조를 가진 회원 정보 테이블이 있다 가정합시다.
+
+이 데이터를 토대로 전체 회원 수, 월 가입자 수, 6개월 이상 미접속자 수 3개를 가져오고자 합니다.
+
+
+
+쿼리를 써본지 얼마 안된 초보자의 입장에선 방금전 문법을 알아가는 과정을 통해 SELECT를 가지고 세가지의 값을 가져와야 한다는 것은 인지 할 것입니다.
+
+그런데 각각 성격이 다른 값을 어떻게 하나로 묶어야할지 고민이 될겁니다.
+
+일단 각각의 결과를 뽑는 쿼리를 써보자면 보시는 그림과 같이 나올 것입니다.
+
+
+
+이제 이것을 하나의 결과로 보여주기위해 FROM절엔 테이블이 들어가야 한다는 문법을 생각해서 다음과 같이 작성했다고 가정해봅시다.
+
+FROM절에 아까 작성한 각각의 결과를 가져오는 쿼리를 넣어주고, SELECT절에서 값을 가져오게 했습니다. 문법상 아주 정확하고, 올바른 결과를 나타냅니다.
+
+앞으로 이와 같은 두번의 과정이 더 있는데 결과는 모두 동일함을 미리 말씀드립니다.
+
+
+
+작성한 쿼리 앞에 실행 계획을 확인하는 EXPLAIN을 넣고 다시 쿼리를 실행해보면 다음과 같이 실행 계획이 6개나 잡혀있는 것을 확인 할 수 있습니다.
+
+FROM절에 나온 서브쿼리 SELECT가 3번 사용되어 같은 테이블에 3번 요청을 하고, SELECT절에서도 3번의 결과를 가져온 꼴이 되어 결과적으로 3 더하기 3 = 6이 나왔습니다.
+
+회사에서 쿼리를 이렇게 짜고 보고를 하면 어떻게 될까요? 아이고 고생많았으니 얼른 퇴근하세요 ~ 라고 할까요? 안타깝게도 칼퇴는 커녕 야근으로 직행입니다.🫠
+
+
+
+자, 야근을 피하기 위해 이번엔 SELECT절 처음부터 각각의 값을 가져오도록 바꿔보았습니다.
+
+위의 코드에서 MYSQL은 문법상 보이진 않지만 FROM절이 있다고 가정을 해서 보는 것이 맞습니다.
+
+참고로 오라클에선 문법 가독성을 위해 FROM DUAL이라는 것을 지원합니다.
+
+FROM절을 가상의 테이블로 취급하여 1개, 서브쿼리로 뽑아오는 부분 3개로 아까보다 무려 2개나 줄었으니 이번엔 칼퇴각일 것 같죠??
+
+여러분들께서 이 쿼리를 보고 만족한다면 안타깝게도 또 하루 야근의 길로 당첨입니다.
+
+그럼 여기서 또 어떻게 줄여야할까요?
+
+
+
+DBMS에서 지원하는 SUM 함수와 자바의 IF와 비슷한 CASE, WHEN, THEN 문법을 이용해서 단 한번으로 데이터를 가져오도록 바꿔보았습니다.
+
+와우, 코스트가 단 하나로 바뀌었네요. 이정도면 고생했단 칭찬과 함께 칼퇴 할 만 합니다.
+
+이렇게해서 같은 결과를 보여도 쿼리를 어떻게 짜느냐에 따라 효율이 올라가는지,
+
+그 효율을 보는 실행계획은 어떻게 보는지 아주 기초적인 내용으로 알려드렸습니다.
From a5876163e0f273cc71455ada5b8c810c6ac1eb73 Mon Sep 17 00:00:00 2001
From: gunsight <103917282+gunsight1@users.noreply.github.com>
Date: Wed, 14 Feb 2024 14:29:34 +0900
Subject: [PATCH 07/14] =?UTF-8?q?=ED=8F=AC=EC=8A=A4=ED=8C=85=20=EB=A0=88?=
=?UTF-8?q?=EC=9D=B4=EC=96=B4=20=EC=B6=94=EA=B0=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
코드 내 최상단 레이어 정보 추가하였음.
---
_posts/2023-12-01-RDBMS.md | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/_posts/2023-12-01-RDBMS.md b/_posts/2023-12-01-RDBMS.md
index d2ab64d..03ab6ad 100644
--- a/_posts/2023-12-01-RDBMS.md
+++ b/_posts/2023-12-01-RDBMS.md
@@ -1,3 +1,18 @@
+---
+layout: post
+title: RDBMS의 조회과정, 쿼리실행계획 중요성
+author: 정지용
+categories: 기술세미나
+banner:
+ image: https://github.com/gunsight1/blog/assets/103917282/6c386616-902b-4bc5-98b6-f6b26c15b2e8
+ background: "#000"
+ height: "100vh"
+ min_height: "38vh"
+ heading_style: "font-size: 4.25em; font-weight: bold; text-decoration: underline"
+ tags: [RDBMS, 오라클, MYSQL, DML, QUERYPLAN, 기술세미나]
+---
+
+
# RDBMS의 조회과정, 쿼리실행계획 중요성
반갑습니다.
From 5e42f9c076a579722903722541e0d9a6e906c670 Mon Sep 17 00:00:00 2001
From: gunsight <103917282+gunsight1@users.noreply.github.com>
Date: Wed, 14 Feb 2024 14:36:44 +0900
Subject: [PATCH 08/14] =?UTF-8?q?=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?=
=?UTF-8?q?=202023-12-01-RDBMS.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
오타 수정
---
_posts/2023-12-01-RDBMS.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/_posts/2023-12-01-RDBMS.md b/_posts/2023-12-01-RDBMS.md
index 03ab6ad..7e1376c 100644
--- a/_posts/2023-12-01-RDBMS.md
+++ b/_posts/2023-12-01-RDBMS.md
@@ -42,11 +42,11 @@ RDBMS (관계형 데이터베이스 관리 시스템 :: Relational Database Mana
DDL(Data Definition Language)은 데이터 정의어로 DB 구조를 정의하거나 변경하는데 쓰입니다.
-DML(Data Manipolation Language)은 데이터 조작어로 등록(insert) 조회(select) 수정(update) 삭제(delete)를 수행합니다.
+DML(Data Manipulation Language)은 데이터 조작어로 등록(insert) 조회(select) 수정(update) 삭제(delete)를 수행합니다.
DCL(Data Control Language)은 데이터 제어어로 DB에 접근하는 사용자의 권한관리를 담당합니다.
-TCL(Trangection Control Language)은 트랜잭션 제어어로 작업수행의 대한 승인(commit), 철회(rollback)을 담당합니다.
+TCL(Transaction Control Language)은 트랜잭션 제어어로 작업수행의 대한 승인(commit), 철회(rollback)을 담당합니다.
이 중 우리가 알아볼 명령어는 DML에 속하는 SELECT이며 DBA가 아닌 이상 우리같은 개발자는 보통 DML과 TCL을 세트로 많이 사용합니다.
@@ -200,8 +200,8 @@ FROM절을 가상의 테이블로 취급하여 1개, 서브쿼리로 뽑아오
DBMS에서 지원하는 SUM 함수와 자바의 IF와 비슷한 CASE, WHEN, THEN 문법을 이용해서 단 한번으로 데이터를 가져오도록 바꿔보았습니다.
-와우, 코스트가 단 하나로 바뀌었네요. 이정도면 고생했단 칭찬과 함께 칼퇴 할 만 합니다.
+와우 코스트가 단 하나로 바뀌었네요. 이정도면 고생했단 칭찬과 함께 칼퇴 할 만 합니다.
+
+이렇게해서 같은 결과를 보여도 쿼리를 어떻게 짜느냐에 따라 효율이 올라가는지, 그 효율을 보는 실행계획은 어떻게 보는지 아주 기초적인 내용으로 알려드렸습니다.
-이렇게해서 같은 결과를 보여도 쿼리를 어떻게 짜느냐에 따라 효율이 올라가는지,
-그 효율을 보는 실행계획은 어떻게 보는지 아주 기초적인 내용으로 알려드렸습니다.
From 0c00786c43be990b9c502a82814ba33d4bf3486d Mon Sep 17 00:00:00 2001
From: isevou__
Date: Wed, 14 Feb 2024 17:31:37 +0900
Subject: [PATCH 09/14] =?UTF-8?q?feat=20:=2020240125=5F=EC=BD=94=EB=94=A9?=
=?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=5F=EA=B3=A0=EB=B3=91=EB=A3=A1.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
_posts/2023-01-25-coding-test.md | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/_posts/2023-01-25-coding-test.md b/_posts/2023-01-25-coding-test.md
index dc5b74c..fb9eab9 100644
--- a/_posts/2023-01-25-coding-test.md
+++ b/_posts/2023-01-25-coding-test.md
@@ -4,7 +4,7 @@ title: 주저하는 개발자들을 위해 - 코딩 테스트
author: 고병룡
categories: 기술세미나
banner:
- image: https://docs.oracle.com/cd/E19340-01/820-6424/images/to_MOM.gif
+ image: https://www.hanbit.co.kr/data/editor/20200918163925_xyypndmo.png
background: "#000"
height: "100vh"
min_height: "38vh"
@@ -139,11 +139,9 @@ banner:
## 참고 자료
-이것이 코딩 테스트다
+이것이 코딩 테스트다, 나동빈 저, pg 46 - 50
[개발자 취업을 위한 코딩 테스트 준비 방법](https://katfun.tistory.com/192)
[알고리즘 분류 참고 - 백준 온라인 저지 알고리즘 별 문제 분류](https://www.acmicpc.net/problem/tags)
-
-헤더 이미지 붙이고 글 내용 읽고 수정해서 오늘 업로드 할 것
\ No newline at end of file
From f0dd89d6af77191cc89673b08e0309dbc3ec0bfa Mon Sep 17 00:00:00 2001
From: mooncw <97713997+mooncw@users.noreply.github.com>
Date: Wed, 14 Feb 2024 20:20:41 +0900
Subject: [PATCH 10/14] =?UTF-8?q?fix=20:=2020240126=5Fstomp=20=EC=9B=B9?=
=?UTF-8?q?=EC=86=8C=EC=BC=93=20=ED=94=84=EB=A1=9C=EA=B7=B8=EB=9E=98?=
=?UTF-8?q?=EB=B0=8D=5F=EB=AC=B8=EC=B0=AC=EC=9A=B1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
썸네일 주소 오타 수정
---
_posts/2024-01-26-stomp-websocket-programing.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/_posts/2024-01-26-stomp-websocket-programing.md b/_posts/2024-01-26-stomp-websocket-programing.md
index 16505bf..177798b 100644
--- a/_posts/2024-01-26-stomp-websocket-programing.md
+++ b/_posts/2024-01-26-stomp-websocket-programing.md
@@ -4,7 +4,7 @@ title: STOMP 웹소켓 프로그래밍
author: 문찬욱
categories: 기술세미나
banner:
- image: https://raw.githubusercontent.com/Kernel360/blog-image/main/2024/0126/thumb.jpg
+ image: https://raw.githubusercontent.com/Kernel360/blog-image/main/2024/0126/thumb.png
background: "#000"
height: "100vh"
min_height: "38vh"
From 5d342bc982ebaf307ebcb13a0bb9b27115e5dbee Mon Sep 17 00:00:00 2001
From: Wonsang Kim
Date: Thu, 15 Feb 2024 20:08:51 +0900
Subject: [PATCH 11/14] [docs] dynamic programming post
---
_posts/2024-02-08-dynamicprogramming.md | 42 +++++++++++++++++++++++++
1 file changed, 42 insertions(+)
create mode 100644 _posts/2024-02-08-dynamicprogramming.md
diff --git a/_posts/2024-02-08-dynamicprogramming.md b/_posts/2024-02-08-dynamicprogramming.md
new file mode 100644
index 0000000..86bde1c
--- /dev/null
+++ b/_posts/2024-02-08-dynamicprogramming.md
@@ -0,0 +1,42 @@
+---
+layout: post
+title: 다이나믹 프로그래밍
+author: 김원상
+categories: 기술세미나
+banner:
+ image: https://github.com/Kernel360/blog-image/blob/main/2024/0208/1.png?raw=true
+ background: "#000"
+ height: "100vh"
+ min_height: "38vh"
+ heading_style: "font-size: 4.25em; font-weight: bold; text-decoration: underline"
+ tags: [알고리즘, 다이나믹프로그래밍]
+---
+
+
+
+안녕하세요. 이번에 다이나믹프로그래밍에 관하여 기술세미나를 드릴 김원상입니다.
+
+
+
+## 1. 웹소켓
+
+
+
+
+## 2. HTTP vs 웹소켓
+
+
+
+
+
+
+
+
+
+
+
+## 4. STOMP
+
+
+## 5. 마무리
+
From 90959a2a88bf1290e88e9a7ee2c1b937d7d66e2e Mon Sep 17 00:00:00 2001
From: Wonsang Kim
Date: Thu, 15 Feb 2024 20:13:26 +0900
Subject: [PATCH 12/14] [docs] dynamic programming post
---
_posts/2024-02-08-dynamicprogramming.md | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/_posts/2024-02-08-dynamicprogramming.md b/_posts/2024-02-08-dynamicprogramming.md
index 86bde1c..b50b3f7 100644
--- a/_posts/2024-02-08-dynamicprogramming.md
+++ b/_posts/2024-02-08-dynamicprogramming.md
@@ -12,9 +12,11 @@ banner:
tags: [알고리즘, 다이나믹프로그래밍]
---
+안녕하세요. 이번에 다이나믹 프로그래밍에 관하여 기술세미나를 드릴 김원상입니다.
-
-안녕하세요. 이번에 다이나믹프로그래밍에 관하여 기술세미나를 드릴 김원상입니다.
+$$
+\int_{a}^{b} f(x) \, dx
+$$
From d0a55c4b8705be5ed23d5b90fb4aedc73dd44d34 Mon Sep 17 00:00:00 2001
From: Wonsang Kim
Date: Thu, 15 Feb 2024 20:41:56 +0900
Subject: [PATCH 13/14] [docs] dynamic programming post
---
_posts/2024-02-08-dynamicprogramming.md | 18 ++++++------------
1 file changed, 6 insertions(+), 12 deletions(-)
diff --git a/_posts/2024-02-08-dynamicprogramming.md b/_posts/2024-02-08-dynamicprogramming.md
index b50b3f7..b33bf76 100644
--- a/_posts/2024-02-08-dynamicprogramming.md
+++ b/_posts/2024-02-08-dynamicprogramming.md
@@ -14,18 +14,17 @@ banner:
안녕하세요. 이번에 다이나믹 프로그래밍에 관하여 기술세미나를 드릴 김원상입니다.
-$$
-\int_{a}^{b} f(x) \, dx
-$$
+다이나믹 프로그래밍은 코딩테스트를 처음 접하시는 분들에게는 진입장벽, 조금 익숙하신 분들에게는 알다가도 모를것 같은 알고리즙인데요. 제 나름대로 다이나믹 프로그래밍 문제를 접근하는 방법과 어떤 식으로 공부하면 좋을지에 대한 생각을 나눌 수 있을 것 같아 선택한 주제입니다. 커널360 코딩테스트에도 나왔고, 다른 기업 코딩테스트 후기를 봐도 조금씩 나오기 때문에 연습을 많이 해두시면 분명 원하는 회사를 가시는데 도움이 될 거라 생각합니다.
-
+### 1. 리처드 E. 벨만
-## 1. 웹소켓
+다이나믹 프로그래밍은 리처드 E. 벨만이라는 수학자가 처음 고안한 알고리즘입니다. 어떤 과목이든지
+$$
+\int_{a}^{b} f(x) \, dx
+$$
-
-## 2. HTTP vs 웹소켓

@@ -37,8 +36,3 @@ $$
-## 4. STOMP
-
-
-## 5. 마무리
-
From 170ae2e622d5bedeb54fb6e0081f612974bd4463 Mon Sep 17 00:00:00 2001
From: Byungryong Ko
Date: Thu, 15 Feb 2024 21:40:18 +0900
Subject: [PATCH 14/14] Update 2023-01-25-coding-test.md
---
_posts/2023-01-25-coding-test.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/_posts/2023-01-25-coding-test.md b/_posts/2023-01-25-coding-test.md
index fb9eab9..41c7c80 100644
--- a/_posts/2023-01-25-coding-test.md
+++ b/_posts/2023-01-25-coding-test.md
@@ -54,7 +54,7 @@ banner:
착각하는 분들이 있는데 우리는 대회를 나가자고 하는 게 아니다. 코테를 쳐보는 것만으로도 소중한 자산이다. 이걸로 상을 타는 게 아니라 우리는 취업이 목적이기에....
>7. 어떻게 준비해야 될지 모르겠다.
-그러면 이제부터 알아보자! 만약 필자가 뭐하는 사람인지 의심이 간다면.. 그래도 나름 [열심히(?)](https://solved.ac/profile/hodako97) 준비해오고 [알고리즘을 좋아하고](https://github.com/fingersdanny/PS_note), [알고리즘 스터디](https://github.com/Kernel360-cell1/algorithm-study)를 운영 중인 사람 중 하나로써 여러분들이 코테에서 더 행복해지길 바라는 마음에서 준비했다.
+그러면 이제부터 알아보자! 만약 필자가 뭐하는 사람인지 의심이 간다면.. 그래도 나름 [열심히(?)](https://solved.ac/profile/hodako97) 준비해오고 [알고리즘을 좋아하고](https://github.com/fingersdanny/PS_note), [알고리즘 스터디](https://github.com/Kernel360-cell1/algorithm-study)를 운영 중인 사람 중 하나로서 여러분들이 코테에서 더 행복해지길 바라는 마음에서 준비했다.
## 코딩테스트 어떻게 준비해야 할까?