코딩 기록소
article thumbnail
Kafka와 RabbitMQ를 알아보자

이번에 알아볼 Kafka와 RabbitMQ는 두 어플리케이션, 프로세스 등 간의 메세지를 교환할 때 사용하는 플랫폼입니다.첫 번 째 게시글은 Kafka와 RabbitMQ에 대해 이론적으로 알아보고, 다음 게시글은 Spring boot + Python을 사용하여 Kafka로 통신하는 방법에 대해서 알아볼 것입니다. 메시지 큐 (MQ)먼저, Kafka와 RabbitMQ에 대해서 알아보기 전 필수적인 개념인 메시지 큐에 대해서 알아보겠습니다. 정의 프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할 때 사용하는 통신 방법 독립적인 애플리케이션과 서비스에서 정보를 교환할 수 있도록 지원하며, 한 애플리케이션이 큐에 메세지를 보내고, 다른 애플리케이션이 큐에서 메시지를 받아 사용하는 통신 방법입니다.즉, 발신..

article thumbnail
[Nextjs] Tiptap 사용법과 커스텀마이징 기능 구현

소스 코드 보기https://github.com/seungyong/blog/blob/main/tiptap/README.md Tiptap이란?공식 문서 사이트에서는 Tiptap을 다음과 같이 소개하고 있습니다. Tiptap is an open source headless content editor and real-time collaboration framework to craft exactly the content experience you’d like to have Tiptab은 사용자가 원하는대로 정확하게 만들 수 있는 오픈 소스 헤드리스 텍스트 편집기이자 실시간 협업 프레임워크입니다.Headless란?사용자 인터페이스를 갖고 있지 않는 것을 의미합니다. 즉, 사용자 인터페이스를 가지지 않고, 텍스트 ..

article thumbnail
IoC, DI, DPI 확실히 개념 잡기

IoC (제어의 역전) 정의 제어 흐름이 반전되는 디자인 원칙으로, 시스템의 제어 흐름을 외부 컨테이너나 프레임워크로 전환하는 것을 말합니다. 이것은 라이브러리와 프레임워크의 큰 차이점이기도 합니다. 라이브러리는 개발자가 언제 사용할지 결정하는 제어권을 갖지만 프레임워크는 내가 작성한 코드를 제어하고, 대신 실행해주므로 제어권을 프레임워크가 갖게 됩니다. 쉽게 말해, 제어권이 누구한테 있냐의 문제라고 보시면 됩니다. IoC가 필요한 이유 class PotatoPizza { public void make() { System.out.println("포테이토 피자를 만듭니다!"); } } class PizzaShop { private PotatoPizza potatoPizza; public PizzaShop(..

article thumbnail
REST API 확실히 개념 잡기

오늘 소개할 것은 대충 어떻게 사용하는지만 보고 확실한 개념을 잡지 않았던 REST API에 대해서 알아볼 것이다. 용어 정의 클라이언트 웹에서 정보에 액세스하려는 모든 것을 사용자라고 한다. 클라이언트는 API를 사용하는 사람이 될 수도 있고 소프트웨어 시스템일 수도 있다. 리소스와 서버 리소스는 API를 통해 클라이언트에게 제공하는 정보이다. 리소스는 이미지, 동영상, 텍스트, 숫자 또는 모든 유형의 데이터일 수도 있습니다. 또한 클라이언트에 리소스를 제공하는 시스템을 서버를 말한다. API 애플리케이션 프로그래밍 인터페이스(API)는 다른 소프트웨어 시스템과 통신하기 위해 따라야하는 규칙을 말한다. 개발자는 다른 애플리케이션이 프로그래밍 방식으로 애플리케이션과 통신할 수 있도록 API를 표시하거나 ..

article thumbnail
백엔드에서 이미지 업로드는 어떻게 하면 좋을까?

시험 기간으로 밀려서 마저 올리지 못했던 프로젝트에서 발생한 궁금증과 그 해결 시간이다. 이번에 프로젝트하면서 단일 이미지 업로드, 다중 이미지 업로드를 처리하는데 많은 시간과 어려움을 겪었다. 그리고 내가 선택한 해결 방법과 그 이유에 대해서 알아보자. 이미지 업로드 방식에는 무엇이 있을까? 나는 이미지 업로드 방식에서 크게 5가지로 나눌 수 있었다. blob을 사용하여 db에 저장 (권장 X) 설명 이것은 db에 데이터 타입 중 하나인 blob이라는 자료형을 사용하여 파일을 저장하는 방식이다. Binary Large Object의 줄임말으로써, 말 그대로 대용량 바이너리 데이터 즉, 이진 데이터를 저장하는 방법이다. MySQL에서는 다음과 같은 크기를 가지고 있다. BLOB 타입 용량 TINYBLOB..

article thumbnail
[Python 알고리즘] 백준 2212번 : 센서
Python 알고리즘 2023. 7. 31. 11:20

문제 한국도로공사는 고속도로의 유비쿼터스화를 위해 고속도로 위에 N개의 센서를 설치하였다. 문제는 이 센서들이 수집한 자료들을 모으고 분석할 몇 개의 집중국을 세우는 일인데, 예산상의 문제로, 고속도로 위에 최대 K개의 집중국을 세울 수 있다고 한다. 각 집중국은 센서의 수신 가능 영역을 조절할 수 있다. 집중국의 수신 가능 영역은 고속도로 상에서 연결된 구간으로 나타나게 된다. N개의 센서가 적어도 하나의 집중국과는 통신이 가능해야 하며, 집중국의 유지비 문제로 인해 각 집중국의 수신 가능 영역의 길이의 합을 최소화해야 한다. 편의를 위해 고속도로는 평면상의 직선이라고 가정하고, 센서들은 이 직선 위의 한 기점인 원점으로부터의 정수 거리의 위치에 놓여 있다고 하자. 따라서, 각 센서의 좌표는 정수 하나..

[Python 알고리즘] 백준 13164번 : 행복한 유치원
Python 알고리즘 2023. 7. 23. 00:18

문제 행복 유치원 원장인 태양이는 어느 날 N명의 원생들을 키 순서대로 일렬로 줄 세우고, 총 K개의 조로 나누려고 한다. 각 조에는 원생이 적어도 한 명 있어야 하며, 같은 조에 속한 원생들은 서로 인접해 있어야 한다. 조별로 인원수가 같을 필요는 없다. 이렇게 나뉘어진 조들은 각자 단체 티셔츠를 맞추려고 한다. 조마다 티셔츠를 맞추는 비용은 조에서 가장 키가 큰 원생과 가장 키가 작은 원생의 키 차이만큼 든다. 최대한 비용을 아끼고 싶어 하는 태양이는 K개의 조에 대해 티셔츠 만드는 비용의 합을 최소로 하고 싶어한다. 태양이를 도와 최소의 비용을 구하자. 입력 입력의 첫 줄에는 유치원에 있는 원생의 수를 나타내는 자연수 N(1 ≤ N ≤ 300,000)과 나누려고 하는 조의 개수를 나타내는 자연수 K..

typescript ?(Optional Parameters)와 | undefined(Union)의 차이

Typescript 하면서 undefined를 지정하는 방법은 2가지가 있다. // Optional Parameters로 지정하는 방법 interface Fruit { cost?: number } // Union으로 지정하는 방법 interface Fruit { cost: number | undefined } 2개의 방법 중에서 한 가지 차이점이 존재한다. union으로 지정했을 때는 속성이 존재해야하고, optional parameters로 지정했을 때는 속성을 정의해주지 않아도 된다. Union으로 정의를 했다면 다음과 같이 사용하면 에러가 발생한다. // Union으로 지정하는 방법 interface Fruit { cost: number | undefined } // Property 'cost' i..