[Tistory] Kafka 전체 흐름 이해하기

KafkaKafka는 링크드인에서 개발한 분산형 이벤트 스트리밍 플랫폼데이터 파이프라인을 단순화하기 위해 만들어졌고 현재는 아파치 재단에서 관리    이벤트 스트리밍이벤트 스트리밍은 데이터베이스, 센서, 모바일, 클라우드 서비스, 소프트웨어 애플리케이션과 같은 이벤스 소스에서 실시간으로 데이터를 캡처하고, 나중에 검색할 수 있도록 내구성있게 저장하고, 이러한 데이터들을 처리하여 다양한 대상 기술로 라우팅하는 방식  어디에 사용될까?은행, 증권 거래소와 같은 곳에서 금융, 결제 데이터 실시간 처리회사의 여러 부서에서 생산된 데이터를 연결, 저장 및 사용할 때데이터 플랫폼, 이벤트 중심의 아키텍처, 마이크로 서비스의 기반 역할    Kafka 전체 구조크게 보면 프로듀서와 컨슈머, 그리고 중간에서 연결해주는..

[Tistory] [09] 파일 시스템

파일과 디렉터리파일하드디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합파일 관련 부가 정보를 속성 or 메타데이터라고 함파일 속성과 유형확장자를 읽기가 가능해야 파일을 열 수 있음!파일 연산을 위한 시스템 호출1. 파일 생성2. 파일 삭제3. 파일 열기4. 파일 닫기5. 파일 읽기6. 파일 쓰기 디렉터리파일들을 일목요연하게 관리하기 위해 디렉터리를 이용폴더라고도 부름옛날 운영체제에서는 하나의 디렉터리만 존재하여 모든 파일이 하나의 디렉터리 아래에 있었음이를 1단계 디렉터리라고 함현재는 트리 구조 디렉터리를 사용해당 파일의 위치를 알기 위해, 경로(Path)를 사용절대 경로와 상대 경로절대 경로파일이 가지는 절대적인 경로루트 디렉터리에서의 자신까지의 경로상대 경로해당 파일을 불러오는 위치에서의..

[Tistory] 배포 정리하기 (1) ec2 발급, ufw 설정, swap 메모리 설정

대략적인 배포 순서…ec2 발급ufw 설정 및 port 구성도swap 메모리 설정docker 설치docker-compose jenkins 설치jenkins gitlab 연동(project-build) 및 플러그인 설치dockerHub 설치 및 연동(docker-build)dockerScript 작성(pipeline)NginxS3 설치 및 설정RDS 설치 및 설정 EC2 설정 EC2 (Elastic Compute Cloud) ???- 아마존 웹 서비스(AWS) 에서 제공하는 클라우드 컴퓨팅 서비스- 클라우드 컴퓨팅 인터넷(클라우드)을 통해 서버, 스토리지, 데이터베이스 등의 컴퓨팅 서비스를 제공  => AWS 에서 원격으로 제어할 수 있는 가상의 컴퓨터를 한 대 빌리는 것- 사용한 만큼 비용을 지불하기..

[Tistory] [Java] 자바는 컴파일 언어? 인터프리터 언어?

컴파일러와 인터프리터컴파일러와 인터프리터 모두 high-level language를 machine language로 번역한다. 1. 컴파일 언어컴파일 언어는 내가 작성한 소스 코드 전체를 기계어로 번역한 뒤, 이 번역된 코드를 한 번에 실행하는 두 단계를 거쳐 진행된다. 즉, 번역과 실행이 완전이 따로 이루어진다.번역은 컴파일러를 통해 수행되고, 대표적인 예시로는 C, C++이 있다. – 특징1. 컴파일은 오래 걸릴 수 있다.2. 이미 컴파일 된 프로그램이라면 빠른 속도로 실행이 가능하다.3. OS 이식성이 낮다. 다른 OS에서 실행하려면 그에 맞는 컴파일러로 다시 컴파일 해주어야 한다. 2. 인터프리터 언어인터프리터 언어는 소스 코드를 한 줄씩, 번역과 실행을 동시에 진행한다. 번역은 인터프리터를 통해..

[Tistory] 리팩토링 4 – WEBFLUX

이번 프로젝트에 참여하기 전에, 개인적으로 결제 시스템의 핵심은 비동기라고 판단했다.  하여 결제에 대한 부분을 비동기적인 형태로 완성했다.   하지만 리팩토링을 하면서 보니, 비동기적인 통신 형태에 대해 조금 더 명확하게정리하고 이를 비동기적으로 설계하면 어땠을까 라는 아쉬움이 있었다.  WEB FLUX VS MVC? 먼저, WEBFLUX와 MVC 패턴에 대한 예시를 보아야 한다.  이와 같이, WEB FLUX와 MVC는 아키택처부터 다르다. MVC는 MODEL -VIEW- CONTROLLER 아키택처를 따른다.이는 현재 가장 많이 상용화된 아키택처로써, 서브 시스템을 호출하고 해당 시스템에MODEL이라는 정보를 전달, VIEW는 그것을 표현하는 시스템이다.  하지만 WEBFLUX는, 아키택처부터 다른..

[Tistory] 59일차 TIL

모의면접 시뮬레이션 Q&A Q6. 두 검색 결과를 datetime 필드를 이용해 정렬하여 출력하는 방법을 설명해 주세요.A: 먼저, 두 검색 결과 리스트를 하나의 리스트로 병합합니다. 그다음, datetime 문자열을 Date 객체로 변환하기 위해 DateFormatter를 생성합니다. 병합된 리스트에서 각 항목의 datetime 문자열을 Date 객체로 변환한 후, 이를 기준으로 리스트를 정렬합니다. 정렬된 리스트를 원하는 형식으로 출력하면 두 검색 결과 리스트를 datetime 필드를 기준으로 합치고 정렬할 수 있습니다.  git add .잘못했을 때!git reset .을 해주면 add 한 거 없어짐 ㅎㅎ 단어장에서 단어장 삭제 시 단어가 남아있는 오류가 있다. ㄴ NSManagedObjcet를 사..

[Tistory] 추천 시스템: Introduction

수많은 상품, 콘텐츠, 서비스들이 생겨나면서 정보가 폭증함에 따라 나에게 딱 맞는 것을 찾는 일이 쉽지 않아졌다. 내가 원하는 것을 찾고 얻기 위해서는 많은 비용이 든다. 이러한 상황에서 사용자들이 필요로하는 정보를 쉽게 효과적으로 찾을 수 있도록 도와주는 기술과 방법론을 다루는 분야가 바로 ‘정보 필터링’이다. 정보 필터링의 대표적인 분야는 두 가지가 있다.  1. 검색- 사용자가 입력한 검색어(쿼리)에 맞는 정보를 데이터베이스에서 찾아 제공하는 시스템- 사용자가 명확한 요구를 갖고 검색어로 입력하면 검색어와의 매칭 정도에 따라 정보를 제공한다. ⇒ active(능동적) 2. 추천- 사용자의 과거 행동, 선호도, 다른 사용자와의 유사성을 분석하여 사용자에게 맞춤형 정보를 제공하는 시스템- 사용자가 명시..

[Tistory] 에러코드 설계 벤치마킹 & NestJS에서 에러 응답 커스텀 방법

문제상황 Nest.js에서 기본 에러 응답 형식은 위와 같습니다. 이렇게 응답을 주면 협업에 어려움이 있을 것 같습니다.일단 에러가 어느 API에서 발생했는지, 언제 발생했는지 알기 어렵습니다.하나의 상태 코드에 대해서도 세부적으로 분류하기 위한 에러 코드도 필요해보입니다. 벤치마킹다른 기업들에서는 어떤 에러 코드 체계를 가지고 운영 중인지 살펴보겠습니다. 1. NAVER WORKS Developers링크 : https://developers.worksmobile.com/kr/docs/error-codesHTTP 상태 코드와 별도의 에러 코드 체계를 가지고, 해당 코드를 응답 본문에 포함시켜주고 있습니다.동일한 상태 코드에 대해서 여러 종류의 에러 코드를 지정해놓았다는 점에서 어떤 에러인지 파악하기 쉬워..

[Tistory] [TIL-27/230918][넷마블문화재단] 리팩토링을 위한 MVC 패턴

현재 회원가입과 로그인 개발을 완료하였다. 공부했던 내용대로 Model, View, Controller를 구분하여 개발하고 싶었으나, 아직 MVC 패턴이 익숙하지 않아 우선 돌아가는 쓰레기라도 만든다는 생각으로 login.jsp에서 입력받은 값을 loginAction.jsp로 보내서 처리하고 DAO, DTO는 따로 만드는 방식으로 개발하였다. 확실히 이렇게 코드를 짜니 MVC 패턴으로 짰을 때보다 당장 구현하는 것은 쉬웠으나, 유지보수 측면에서 어려움이 있었다. 그래서 오늘은 이 프로젝트에 MVC 패턴을 적용시키고 싶어서 MVC 모델에 대해서 추가 공부를 하였다. (인강, 구글링 ..) 기업형으로 레이어를 나누는 이유 Servlet이라는 단일 구조에서 MVC로 코드를 분리한다. Servlet(Contro..

[Tistory] [TIL] 24_0205 git push하면서 reject 발생

git push 하며 뜬 rejected git switch 하기 전에 commit과 push를 마치고 이동해서 새 데이터를 add, commit했는데도 head위치가 불안정하게 이동한 줄 알았는데 이동한 브랜치에서 그전에 원격저장소에서 직접 수정한 내역을 로컬로 안 가져와서 생긴 문제였어. 리드미를 원격저장소에서 직접 수정했거든. 아래 같은 오류가 떠서 해결했어. 이건 두번째로 뜨는 건데 이전엔 git rebase로 해결했는데 이런 방법도 있더라구. 해결한 방법 $ git log $ git reset 628b04ecf2f8c1a3d6fb8f5c307fbd647fb5b284 $ git stash $ git pull origin props-drilling $ git stash pop $ git add . ..