본문 바로가기

분류 전체보기

(111)
chat.server.js 서비스 코드 해석 import WebSocket from 'ws'; import { ChatMessage, ChatLog, getTimes } from './db/mongoose'; 채팅을 위한 소켓 연결은 npm으로 설치한 ws 모듈로 합니다. socket.io가 아니라 ws인 이유는 ws의 데이터는 따로 파싱할 필요가 없고 socket.io보다 데이터가 가볍기 때문에 차용했습니다. mongodb와의 상호작용을 위한 모듈을 import했습니다. ChatMessage는 메세지의 저장, ChatLog는 메세지의 저장 시간, getTimes는 과거의 채팅 이력을 불러오는 기능을 합니다. export default class ChatServer { constructor(port, onMessage) { this.port = p..
(기술면접 대비)동기vs비동기, 프레임워크vs라이브러리 동기와 비동기의 차이를 설명 해 주세요. ☝🏻 답변 시, 동기/비동기 방식의 장단점과 예시까지 들어서 설명하면 더 좋습니다. 동기 (Synchronous) 순서에 맞추어 진행되기 때문에 제어하기 쉽고 직관적입니다. 여러가지 요청을 동시에 처리 할 수 없어 효율이 낮고 작업 속도가 느릴 수 있습니다. 동기방식의 예시로는 콜센터 종업원이 일을 처리하는 방식이 될 수 있습니다. 콜센터의 직원은 한 손님의 전화 응대가 끝난 후에 다음 손님의 응대를 진행 비동기 (Asynchronous) 작업이 완료되는 시간을 기다릴 필요가 없어, 자원을 효율적으로 사용 할 수 있습니다. 다른 작업의 응답에 상관없이 진행되므로, 작업이 완료된 결과를 제어하기 어렵습니다. 비동기 방식의 예제로는 이메일이 있습니다. 누군가에게 이메..
MONGODB 구조 및 스키마, 함수 변경으로 채팅 기능 개선 기존 mongodb 구조 ChatMessage = message: String, timestamp: { type: Date, default: Date.now }, ChatOpenLog = nickname: String, sequence: Number, timestamp: { type: Date, default: Date.now }, ChatCloseLog = nickname: String, sequence: Number, timestamp: { type: Date, default: Date.now }, chatOpenLogSchema,ChatCloseLog.pre = 닉네임 별 채팅 순서 증가, 닉네임 별 로그 저장 수 5개 이상이면 FIFO로 데이터 최신화 ChatOpenLog 저장 ▷ 소켓 conne..
웹소켓을 이용한 채팅 구현하기 (웹소켓 채팅 서버 코드 전문 링크)먼저 ws 모듈 및 필요한 모듈을 가져온다.import WebSocket from 'ws';import { ChatMessage, ChatLog, getTimes } from './db/mongoose'; 마이크로 서비스 아키텍쳐이기 때문에 챗 서비스 또한 독립적인 서버를 통해서 서비스를 구현해야 한다.TcpServer 클래스 처럼 ChatServer 클래스를 사용해서 채팅 서버를 구현한다.xport default class ChatServer { constructor(port, onMessage) { this.port = port; this.onMessage = onMessage; this.clients = new Set(); // 연결된 클라이언트..
TCP서버를 기반으로 MSA 구현 MSA의 특징은 '독립적인 서비스', '데이터의 분리', 'API Gateway', '서비스 간 통신' 이 있다. http://clipsoft.co.kr/wp/blog/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98msa-%EA%B0%9C%EB%85%90/ 마이크로서비스 아키텍처(MSA) 개념 소개 - CLIPSOFT 작성자 : 이응호 과장 마이크로서비스 아키텍처(MSA) 개념 소개 프리랜서로 일하고 있는 지인이 최근 구직을 하고 있었습니다. 그러면서 하는 말이 요즘 IT업계 구직시장에서 최고의 화두가 M clipsoft.co.kr 독립적인 서비스 구현 class TcpSe..
2023-08-30 대용량 트래픽 발생 시 어떻게 대응해야 하나요? 더 많은 사용자를 수용하기 위해서는 서버 리소스(CPU, RAM)를 늘려야 합니다. 기존 서버의 성능을 높이는 수직확장과 동일한 목적을 갖는 서버를 여러대 추가하는 수평확장이 있습니다. 수평확장의 경우 로드밸런서를 사용할 수 있습니다. 로드 밸런서는 부하 분산을 위해 가상 IP를 통해 여러 서버에 접속하도록 부하를 분배하는 기능입니다.
2023-08-29 객체지향 프로그래밍이란 무엇이고 어떻게 활용할 수 있나요? 객체지향 프로그래밍(Object-Oriented Programming, OOP)은 객체들의 협력과 결합을 통해 시스템을 구축하는 프로그래밍 패러다임입니다. 추상화, 상속, 다형성, 캡슐화 등의 특징을 활용하여 코드의 재사용성과 유지보수성을 높이며 복잡한 시스템을 체계적으로 구조화할 수 있습니다. 이로 인해 객체지향 프로그래밍은 소프트웨어 개발의 효율성과 품질 향상에 기여합니다. 추상화: 복잡한 현실 세계를 단순화하여 핵심만 추출하는 과정, 상위 개념을 정의함으로써 복잡성을 감추고 필요한 부분을 강조합니다. 상속: 기존 클래스의 특징을 다른 클래스에서 재사용하거나 확장하여 새로운 클래스를 생성하는 개념, 코드 재사용성과 구조의 확장성을 제공합니다. 다형성: 동일한 이름의 메서드나 인터페이스를 다른 클래스에..
2023-08-27 DI, IoC에 대해 설명해주세요. DI(의존성 주입)은 객체 간의 결합도를 낮추기 위해 한 객체가 다른 객체를 외부에서 받아오는 패턴입니다. IoC(제어의 역전)은 객체의 생성 및 관리를 프레임워크나 컨테이너에 위임하여 유연한 애플리케이션을 구축하는 개념입니다. DI는 IoC의 구현 방식 중 하나로, 객체가 필요한 의존성을 주입받아 동작합니다.