목록전체 글 (18)
yesolje
들어가며제가 이번에 맡은 프로젝트는 4개의 독립된 서비스가 유기적으로 맞물려 돌아가는 구조로 설계되었습니다. 서비스 특성상 개발과 시연이 매우 빠른 주기로 반복되었고, 그만큼 코드 수정과 배포가 빈번하게 일어날 수밖에 없었습니다.하지만 프로젝트마다 배포 방식이 다르고, 특히 운영 서버와 개발 서버의 환경 차이까지 존재하여 매번 수동으로 배포하기에는 한계가 있었습니다. 잦은 배포 과정에서 발생하는 인적 실수를 방지하고, 개발자가 오직 코드 구현에만 집중할 수 있는 환경을 만들기 위해 'Git Push만으로 완료되는 자동화 시스템'이 절실했습니다.이를 해결하고자 GitLab Runner를 중심으로 전체 CI/CD 파이프라인을 구축했습니다. 각 서비스의 특성에 맞춰 프론트엔드는 PM2를, 백엔드와 워커(Wor..
들어가며네트워크 트래픽 분석은 사이버 보안과 디지털 포렌식에 있어 필수적입니다. 특히 다크웹 활동을 추적하고 분석하는 과정에서 TCP 패킷에 포함된 페이로드와 raw 데이터를 수집하는 것은 불법 활동의 패턴을 파악하는 데 중요한 역할을 합니다.이 프로젝트에서는 회사의 다크웹 추적 애플리케이션 개발의 일환으로, Python의 Scapy 라이브러리를 활용하여 다크웹 네트워크 요청에서 발생하는 TCP 패킷을 수집하고, Kafka를 통해 데이터를 전송하며, 최종적으로 데이터베이스에 저장하는 파이프라인을 구축하였습니다아키텍쳐 설계전체 시스템은 다음과 같은 세 가지 주요 컴포넌트로 구성되어 있습니다 :데이터 수집 레이어: Scapy를 활용한 TCP 패킷 스니핑 및 Queue를 통한 비동기 처리데이터 전송 레이어: ..
🌿난 스프링에서 ml 서빙을 해봤어요 ML 서빙이란 무엇이고, 기존 방식의 한계는 무엇일까?머신러닝(ML) 서빙이란, 학습된 모델을 실제 서비스 환경에 배포해 실시간 혹은 배치 방식으로 예측 결과를 제공하는 것을 의미한다. 예를 들어 사용자가 웹 서비스에서 상품 리뷰를 입력하면, 이를 실시간으로 분석하여 긍정/부정을 판단해주는 기능이 바로 ML 서빙의 대표적인 예다. 현재 대부분의 ML 서빙은 파이썬 기반으로 진행된다. 파이썬은 머신러닝 생태계에서 가장 널리 사용되는 언어이며, TensorFlow, PyTorch 등 풍부한 라이브러리와 프레임워크를 통해 빠르게 모델을 개발하고 실험할 수 있다.하지만 개발을 넘어 ‘서빙’의 단계로 진입하게 되면 상황은 달라진다. 파이썬은 인터프리터 언어이고, 대규모 트래..
클래스에 대한 관심사를 분리하기 위한 방법 중 하나는 상속이다. 슈퍼클래스의 기본적인 로직의 흐름 외에, 변경/확장의 가능성이 있는 일부 기능을 추상메소드로 만들어 놓고, 구현체에서 이를 재정의하여 사용한다. 이를 통해 변경이 용이하고, 확장이 쉬운 코드를 만들 수 있다. ✔️ 템플릿 메소드 패턴(팩토리 메소드 패턴) 🔹슈퍼클래스에 기본적인 로직의 흐름을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만든 뒤, 서브클래스에서 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법 🔹예시- UserDao(슈퍼클래스)package com.tobySpringStudy.user.dao;import com.tobySpringStudy.user.domain.User;i..
✔️ 스프링 빈(Bean) 이란? 빈(Bean)은 스프링 컨테이너에 의해 관리되는 재사용 가능한 소프트웨어 컴포넌트이다. 즉, 스프링 컨테이너가 관리하는 자바 객체를 뜻하며, 하나 이상의 빈(Bean)을 관리한다. 빈은 인스턴스화된 객체를 의미하며, 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다. new 로 생성한 인스턴스 → 빈 아님@Component , @Bean 등으로 생성한 인스턴스 → 빈 ✔️ 스프링 빈(Bean) 사용이유 ? 가장 큰 이유는 스프링 간 객체가 의존관계를 관리하도록 하는 것에 가장 큰 목적이 있다. 객체가 의존관계를 등록할 때 스프링 컨테이너에서 해당하는 빈을 찾고, 그 빈과 의존성을 만든다. ✔️ 스프링 빈(Bean) 등록 방법🔹 xml에 직접 등록 🔹 @Be..
1. 캐시란?자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다.캐시는 저장 공간이 작고 비용이 비싼 대신 빠른 성능을 제공한다.데이터 저장 공간은 속도와 용량 등 특성에 맞게 역할을 나눠서 사용하는데, 이를 메모리 계층 구조라고 한다.컴퓨터 메모리 계층 다이어그램에서 각 계층은 아래로 갈수록 더 느리지만 크고 저렴하며, 위로 갈 수록 더 빠르지만 작고 비싸며, CPU에 가까워지는 구조를 보여준다. 위 그림처럼 데이터 처리속도를 높이기 위해 자주 사용되는 데이터를 캐시에 담아두고, 해당 데이터가 필요할 때 접근한다. 2. 캐시를 사용하는 과정캐시를 사용하는 과정은 다음 다이어그램과 같다.(1) 클라이언트가 서버로 데이터를 요청한다(ex. 이미지, 값 등등)(2) 서버가 요청받은 데이터를 ..
오늘은 단일모듈 기반의 프로젝트를 멀티모듈 구조로 리팩토링한 경험과, 멀티모듈이 왜 필요한지 - 어떤 방식으로 구성해야 하는지 고민한 기록들을 정리해 보려고 합니다. 1. 멀티모듈이란멀티모듈은 하나의 큰 프로젝트를 역할별로 작은 모듈(서브 프로젝트) 로 나누어 구성하는 방식을 말합니다. 사실, 대부분의 서비스는 단일 프로젝트로 구성하는 일이 드뭅니다. 프로젝트가 일정 규모 이상으로 커지게 되면 사용자와의 접점을 담당하는 서버, 각종 api 및 batch를 비롯한 시스템의 부피가 늘어나게 되고, 이 경우 단일 프로젝트에서 구성할 경우 동일한 Domain을 시스템 갯수만큼 복사 붙여넣기 해야 하기 때문입니다. 이를 보완하기 위해 프로젝트를 멀티모듈 구조로 구성하는 방법은 공통으로 사용하는 코드를 모아놓기 때..
풀이import java.io.IOException;import java.util.Scanner;public class Main { public static void main(String[] args) throws IOException { /* * https://www.acmicpc.net/problem/2609 * 최대공약수와 최소공배수 */ Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int result1 = 0 ; int result2 = a*b ; while(a%b..