전체 글 159

ELK 스택으로 MSA 로그 한곳에 모으기

1. 왜 중앙화된 로그 시스템이 필요할까?마이크로서비스 환경에서 장애가 발생하면 곤란한 상황에 빠질 수 있다. 현재 나의 devnote를 예로 들면 요청 하나를 추적하기 위해 6개의 서비스 컨테이너에 각각 접속해 로그 파일을 뒤지는 것은 상당히 비효율적일것이다. 이 문제를 해결하기 위해 모든 서비스의 로그를 한곳으로 모아 검색하고 분석할 수 있는 중앙화된 로그 시스템으로 ELK 스택을 구축했다. 2. Devnote 프로젝트의 로그 아키텍처로그는 Filebeat → Logstash → Elasticsearch → Kibana 순서로 흐르도록 구성했다. 각 컴포넌트는 아래처럼 명확한 역할을 수행한다. MSA 서비스 → 호스트의 로그 파일 → Filebeat (수집) → Logstash (가공) → Elas..

Kafka와 AI로 콘텐츠 자동 수집 및 분류 시스템 만들기

DevNote개발 관련 YouTube/News Aggregator - 최신 개발 트렌드와 뉴스를 한 곳에서devnote.kr1. 왜 이벤트 기반 데이터 파이프라인인가?devnote 프로젝트의 핵심은 외부 콘텐츠를 가져와 가공하는 것이다. 만약 데이터 수집, AI 분류, DB 저장을 하나의 동기적 흐름으로 짰다면 AI 분류 API가 느려지거나 실패했을 때 전체 데이터 수집 프로세스가 멈춰버리는 문제가 발생했을 것이다. 이러한 문제를 해결하고 각 기능의 독립성을 보장하기 위해, Kafka를 이용한 이벤트 기반 비동기 데이터 파이프라인을 구축했다. 2. 전체 데이터 파이프라인 아키텍처데이터의 흐름은 명확한 역할 분담을 따르도록 설계했다. 1. 데이터 생산 (Produce): news-youtube-servic..

개인 프로젝트에 MSA를 도입한 이유

DevNote개발 관련 YouTube/News Aggregator - 최신 개발 트렌드와 뉴스를 한 곳에서devnote.kr 1. 개인 프로젝트에서 MSA는 오버 엔지니어링일까?포트폴리오를 위한 개인 프로젝트를 시작할 때면 늘 같은 고민에 빠진다. "어떤 아키텍처를 선택할 것인가?" 가장 익숙하고 빠른 방법은 모든 기능을 하나의 프로젝트에 담는 모놀리식 방식이다. 하지만 MSA를 경험해보고 싶은 마음을 무시할 수 없었다. 과연 학습 목적의 개인 프로젝트에 오버 엔지니어링은 아닐까?devnote 프로젝트를 시작하며 나는 이 질문에 "그럼에도 불구하고 MSA로 가자"고 답했다. 이번 글에서는 그 결정의 이유와 초기 설계 과정을 작성했다. 2. 이번 프로젝트에 MSA를 선택한 이유이번에 진행한 개인 프로젝트 ..

Devnote 프로젝트

DevNote개발 관련 YouTube/News Aggregator - 최신 개발 트렌드와 뉴스를 한 곳에서devnote.kr 1. 개발자 콘텐츠 플랫폼흩어져 있는 최신 개발 소식과 유튜브 영상을 한곳에서 모아볼 수 있는 개발자 콘텐츠 허브 플랫폼으로 Devnote 프로젝트를 기획했다. 단순히 링크를 모아두는 것을 넘어, AI를 통해 모든 콘텐츠를 알맞은 카테고리별로 자동 분류하고 검색 기능과 커뮤니티 기능을 통해 사용자가 원하는 정보를 쉽고 깊이 있게 탐색할 수 있도록 설계했다. 2. 주요 기능개발자에게 유용한 정보를 제공하기 위해 다음과 같은 핵심 기능들을 구현했다. 2-1. 콘텐츠 자동 수집 및 분류외부 뉴스 사이트의 RSS와 YouTube API를 통해 개발 관련 콘텐츠를 주기적으로 수집하고, G..

[Spring Boot] 실시간검색어 구현하기

1. 요구사항 정리- 실시간 집계사용자가 검색 즉시 “인기 검색어” 점수에 반영- 조작 방지동일 IP(또는 로그인 유저)가 같은 키워드를 반복 검색해 점수를 부당하게 올리는 행위 차단 - 시간 가중치 적용최근 검색일수록 더 큰 가중치를 부여 - 시간대 보정새벽 시간대에는 보정값을 높여 점수를 낮게, 오후 시간대엔 보정값을 낮춰 점수를 높게 - 전체 검색량 보정평소 검색량(과거 일주일 등)이 많은 키워드는 보정값으로 점수를 낮춤 - 지속성 확보Redis 인메모리 휘발성 대비 RDBMS 백업위 내용으로 요구사항을 정리한 뒤 구현에 들어갔다. 2. 구현2-1. 새로운 로직 추가 (Trending)package com.example.footprint.trending.controller;import com.exa..

개인 서버 구축(9) - nginx 설정하고 SSL 인증서로 HTTPS 받기 [마지막]

1. Nginx 설치sudo apt updatesudo apt install -y nginxsudo systemctl status nginx- sudo apt update로 패키지 목록을 업데이트해준다.- sudo apt install -y nginx로 Nginx를 설치해 준다.- sudo systemctl status nginx로 서비스 상태를 조회한다. 초록색으로 활성화가 떴다고 조회되면 올바르게 설치된 것이다. sudo rm /etc/nginx/sites-enabled/default기본으로 들어있는 /etc/nginx/sites-enabled/default 파일을 지워준다.default 설정을 지우는 이유는 어차피 사용하지 않을 것이고, 기본값이 내가 따로 설정할 값과 충돌할 수 있기 때문에 지워줬..

[웹 프로젝트] 피드백 적용하기 5 - 프로젝트 목적에 맞는 디테일 설정

문제 정의피드백 5.여행인데 지도가 없네요.물론 사진으로 대체가 된다지만 개발자 입장에선 구글 맵 api라도 연동해서 지도를 달아두고..이동 경로 패스를 여행 패스와 싱크를 시켜주면 좋을 것 같아요.그리고.. 여행기록을 작성하였지만..0다녀온 나라 수0여행 횟수0여행 기간(일)최근 여행지아직 첫 여행을 떠나지 않았어요이라고 나오네요.여행 게임이라고 생각하고 어디에 갔는데 이 아이템을 획득했다. 그리고 이 아이템을 팔겠다.이런 프로세스라도 있으면 더 재미가 있지 않을까요?아니면 어떻게 하면 된다라는 예제라도 작성을 해두어야… 해결 방향여행기록 게시판, 카드 로직 통합- 기존에 별도로 구현된 여행기록 카드 로직을 제거하고, 사용자가 게시판에 글을 작성하면 해당 글의 데이터를 가져와 여행기록 카드에 노출되..

[웹 프로젝트] 피드백 적용하기 4 - JWT 토큰 관리 확인

문제 정의피드백 4.로그인후 창을 두개띄우고 로그아웃시 하나의 창은 채팅이 계속쳐지네요.개발자모드보니 로그아웃시에 쿠키가없어지던데 프론트에서 jwt토큰을 다루고있는건가요? 해결 방향토큰 검증 로직 추가- 로그아웃해도 기존 WebSocket 연결이 끊기지 않아, 다른 탭에서 여전히 채팅 메시지를 보낼 수 있었음 서버에서 WebSocket 세션을 즉시 종료하기 복잡하므로, 메시지 전송 시마다 클라이언트와 서버에서 JWT 유효성을 확인하도록 수정 구현 상세토큰 검증 로직 추가 탭 두 개로 채팅방을 켰다. 그 뒤 한쪽에서 로그아웃하고 한쪽에서는 채팅을 쳐봤다. 근데 채팅이 전송된다..그래서 다른 것도 테스트해 봤다. 게시글 작성버튼을 눌렀을 때 로그인이 안되어있다면 작성페이지로 넘어가지 않는다. 이 테스트..

[웹 프로젝트] 피드백 적용하기 3 - 메뉴별 UI 차별화

문제 정의피드백 3.만드느라 수고가 많으셨습니다.사이트를 둘러보니 디테일한 부분도 꽤 많아 보이는데 고생 많이 하셨겠네요!개선의 여지는 아래 분들이 많이 피드백주셨지만 지금 기능에서 디자인을 좀더 개선하면 많이 좋아질거 같습니다.어떤 UI 컴포넌트를 사용했는지 모르겠지만 bootstrap같은걸 쓰면 좀 더 깔끔해 질거 같습니다.UI 적으로는 항목은 다른데(최신글, 여행기록등등) UI가 다 비슷비슷해서 메뉴별 카테고리별로디자인 차별화를 주는것도 좋을거 같습니다.고생하셨어요. 좀 더 디벨롭해서 좋은 사이트 만들어주세요 해결 방향메뉴, 카테고리별 디자인 차별화- 주요 메뉴마다 스타일을 다르게 지정해 사용자가 컨텐츠 성격을 한눈에 구분할 수 있도록 함 구현 상세메뉴, 카테고리별 디자인 차별화현재 메인페이지는..

[웹 프로젝트] 피드백 적용하기 2 - 게시글 상세 페이지 연결 UX 개선

문제 정의피드백 2.멋집니다! 기능도 많이 구현되어있네요!제목만 클릭이 아니라 카드 클릭하면 상세로 넘어가면 편할거같아요 ㅎㅎ 해결 방향카드 클릭 UX 개선- 기존에는 게시글 제목을 클릭해야만 상세페이지로 이동했으나, 카드 전체를 클릭하면 상세페이지로 이동하도록 변경하여 편의성을 높임 구현 상세공지사항 게시판- 기존 빨간 박스 안을 클릭해야 게시글 상세 보기로 넘어갔다. 수정 후에는 초록색 박스 안을 클릭해도 넘어가도록 했다. navigate(`/posts/NOTICE/${post.id}${type && keyword ? `?type=${type}&keyword=${keyword}&sortOption=${sortOption}&pageNumber=${pageNumber}` : `?sortO..

프로필사진

남건욱's 공부기록

반응형