본문 바로가기

전체 글

[사이드] SNS와 실시간 채팅을 구현해보기 - 기능 과 DB 설계 1. 서비스 기획 (기능 명세)기능 목록:소셜 네트워크사용자 관리: 회원가입, 로그인, 프로필 관리게시물 관리: 게시물 작성, 수정, 삭제댓글 및 좋아요: 댓글 작성, 좋아요 추가/삭제팔로우 시스템: 팔로우/언팔로우알림: 댓글, 좋아요, 팔로우에 대한 알림실시간 채팅1:1 채팅 및 그룹 채팅실시간 메시지 전송읽음 상태 표시채팅 알림2. DB 설계PostgreSQL과 MongoDB의 테이블 및 컬렉션 PostgreSQL 테이블-- Users 테이블CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, password VARCHAR(255) NOT NULL, email VARCHAR(100) UN.. 더보기
[사이드] SNS와 실시간 채팅을 구현해보기 공부도 할겸 SNS와 실시간 채팅을 구현해보려한다. 소셜 네트워크은 댓글, 좋아요, 팔로우에 대한 알림 실시간 채팅은 대화에 대한 알림을 포함 하여 구현하고 개발은1. 서비스 기획(기능 명세)2. DB 설계3. 백엔드 기능 개발4. 서버 구성5. 프론트 개발 순서로 진행할거다  프론트는 디자인 할줄 몰라서 그냥 기능만 보여주게만...ㅎ 아래는 사용할 기술 스택에 대한 설명이다.데이터베이스PostgreSQL: 관계형 데이터베이스로, 소셜 네트워크의 구조화된 데이터(유저, 게시물, 댓글, 팔로우 관계 등)를 관리하기에 적합MongoDB: 비정형 데이터와 고속의 읽기/쓰기 작업에 적합한 NoSQL 데이터베이스로, 실시간 채팅 메시지 기록에 활용할 수 있습니다. 대량의 채팅 로그를 효율적으로 처리 가능백엔드 프.. 더보기
시스템 설계란 시스템 설계(System Design)는 소프트웨어 애플리케이션의 구조와 작동 방식을 정의하고 계획하는 과정입니다. 이는 요구 사항을 기반으로 시스템의 다양한 구성 요소(데이터베이스, 서버, API, 캐시, 로드 밸런서 등)를 설계하고, 이들 간의 상호작용을 정의하여 시스템이 효율적이고 안정적으로 작동하도록 하는 것을 목표로 합니다. 시스템 설계는 대규모 애플리케이션을 구축하는 데 필수적인 단계로, 성능, 확장성, 보안성, 유지보수성 등을 고려하여 최적의 아키텍처를 구성합니다. 장점:문제 해결 및 요구 사항 충족: 요구 사항 분석을 통해 시스템이 해결해야 할 문제와 필요 기능을 명확히 하여 적절한 솔루션을 제공합니다.성능 최적화: 적절한 캐싱 전략, 데이터베이스 구조, API 설계 등을 통해 시스템의 응.. 더보기
Spring과 Node.js Spring과 Node.js는 웹 애플리케이션 개발을 위한 백엔드 기술 스택이지만,근본적으로 다른 언어와 아키텍처를 사용Spring은 Java를 기반으로 하는 프레임워크이고, Node.js는 JavaScript를 기반으로 하는 런타임 환경  Spring: Spring은 Java로 개발된 강력한 엔터프라이즈급 애플리케이션 프레임워크 대규모 애플리케이션을 위한 구조화된 개발을 지원하며, 모듈화, 의존성 주입, 트랜잭션 관리, 보안 등 다양한 엔터프라이즈 기능을 기본으로 제공 Spring Boot는 Spring 애플리케이션을 보다 쉽게 설정하고 시작할 수 있게 해주는 확장Node.js: Node.js는 Chrome V8 JavaScript 엔진을 기반으로 하는 서버 사이드 JavaScript 런타임 환경비동기.. 더보기
백엔드 아키텍처란 백엔드 아키텍처는 서버, 데이터베이스, 애플리케이션 로직, API, 보안, 성능 최적화 등 서버 사이드의 구조와 설계 방식이는 애플리케이션의 안정성, 확장성, 유지보수성, 성능을 결정하는 중요한 요소로, 비즈니스 요구 사항과 기술 스택에 따라 다양한 형태로 설계주요 백엔드 아키텍처 유형에는 모놀리식 아키텍처, 마이크로서비스 아키텍처, 서버리스 아키텍처 등 장점:모놀리식 아키텍처:단일 코드베이스로 관리되어 개발 및 배포가 간단통합된 환경으로 테스트와 디버깅이 용이초기 개발 비용과 복잡도가 낮음마이크로서비스 아키텍처:각 서비스가 독립적으로 개발, 배포, 확장될 수 있어 유연성이 높음특정 기능의 문제로 전체 시스템에 영향이 미치는 것을 방지다양한 기술 스택을 서비스별로 사용가능서버리스 아키텍처:인프라 관리 부.. 더보기
RDBMS와 NoSQL의 차이 RDBMS(Relational Database Management System)와 NoSQL은 데이터를 저장하고 관리하는 두 가지 주요 유형의 데이터베이스 시스템각 시스템은 고유한 데이터 모델과 사용 사례에 맞게 설계RDBMS: 관계형 데이터베이스 관리 시스템으로, 데이터를 테이블 형식으로 저장하며, 각 테이블은 열(필드)과 행(레코드)로 구성SQL(Structured Query Language)을 사용하여 데이터를 정의, 관리, 쿼리 데이터 간의 관계를 명확히 정의하고, 스키마를 통해 데이터 무결성을 유지하는 것이 특징예시로 MySQL, PostgreSQL, Oracle, SQL Server 등NoSQL: 관계형 데이터베이스의 제약을 벗어나 다양한 데이터 저장 모델(문서, 키-값, 그래프, 열 기반 등.. 더보기
블록킹(Blocking), 논블록킹(Non-Blocking)이란? 블록킹과 논블록킹은 코드 실행의 흐름과 자원의 사용 방식에 관한 개념블록킹 (Blocking): 블록킹은 해당 작업이 완료될 때까지 프로그램의 실행이 멈추는 방식 예를 들어, 데이터베이스에서 데이터를 가져오는 동안 다른 작업을 수행할 수 없고, 데이터가 준비될 때까지 기다려야함 일반적으로 동기식 호출과 연관이 있으며, 처리 순서가 직관적논블록킹 (Non-Blocking): 논블록킹 호출은 작업이 즉시 반환, 해당 작업이 완료될 때까지 기다리지 않는 방식 프로그램은 다른 작업을 계속해서 수행할 수 있으며, 작업이 완료되면 그 결과를 처리 비동기식 호출과 관련이 있으며, 자원 활용을 최적화 가능장점:블록킹:코드가 간단하고 이해하기 쉬움직관적인 흐름으로 디버깅이 용이요청이 적거나 성능이 중요한 요소가 아닌 경.. 더보기
추천 시스템을 위한 MLFlow 환경 구축하기 모델 배포를 위해 mlflow환경을 docker를 통해 구축하고자 한다. 첫번째로 모델을 저장할 버킷에 대한 설정을 해주는데 minio라는 것을 사용하려한다.사용 이유 첫번째는 공식문서에서 mlflow와 함께 사용하는 방법을 명시해두었기 때문이다.내 설정에 맞게 사용하기 편하기 때문에 선택했다https://blog.min.io/setting-up-a-development-machine-with-mlflow-and-minio/ 두번째 추후 배포할 때를 고려해 AWS s3의 API와 호환되어서 추후에 변경이 용이하다.(mlflow에서 S3를 권장하고 있는것도 한 몫함) mlflow-artifact-store: env_file: - .env image: minio/minio con.. 더보기