분류 전체보기 161

[Spring] 제어의 역전(Inversion of Control, IoC) 이란 무엇일까?

1. DI와 IoChttps://ngwdeveloper.tistory.com/205 [Spring] 의존성 주입(Dependency injection, DI) 이란 무엇일까?spring을 사용해 개발을 하다보면 @Autowired나 생성자로 객체를 주입받아 쓴다. 너무나 당연하게 써왔었다. 그런데 문득 궁금해졌다. "그냥 내가 만들어 쓰면 안되나?" 라는 생각이 들었다. 이 의존ngwdeveloper.tistory.com 이전 글에서 DI가 객체 간의 결합도를 낮추는 기술임을 알게됐다. 이전 글 3.3 섹션에서 "객체의 생성과 관계 설정의 제어권이 개발자로부터 프레임워크로 넘어간 것을 제어의 역전(IoC)이라 부르며, DI는 이 IoC를 구현하는 핵심 방식이다."라고 말했었다.DI에 대해서는 이해했지만,..

[Spring] 의존성 주입(Dependency injection, DI) 이란 무엇일까?

spring을 사용해 개발을 하다보면 @Autowired나 생성자로 객체를 주입받아 쓴다. 너무나 당연하게 써왔었다. 그런데 문득 궁금해졌다. "그냥 내가 만들어 쓰면 안되나?" 라는 생각이 들었다. 이 의존성 주입이 왜 스프링의 핵심 개념인지 비유를 통해 이해해보자. 1. 스프링의 핵심중 하나인 DI스프링 프레임워크를 사용한다는 것은 의존성 주입(Dependency Injection, DI)의 개념 위에서 개발한다는 것과 같다. DI는 스프링의 3대 핵심 프로그래밍 모델 중 하나이며, 현대적인 객체지향 설계를 가능하게 하는 기반 기술이다.많은 개발자가 DI를 단순히 어노테이션(@Autowired)을 통해 객체를 받아오는 기술 정도로 이해하지만, DI의 본질은 객체 간의 결합도를 낮추고 유연성을 극대화하..

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 유효성을 확인하도록 수정 구현 상세토큰 검증 로직 추가 탭 두 개로 채팅방을 켰다. 그 뒤 한쪽에서 로그아웃하고 한쪽에서는 채팅을 쳐봤다. 근데 채팅이 전송된다..그래서 다른 것도 테스트해 봤다. 게시글 작성버튼을 눌렀을 때 로그인이 안되어있다면 작성페이지로 넘어가지 않는다. 이 테스트..

프로필사진

남건욱's 공부기록

반응형