TIL

TIL_2025-01-07

explosion149 2025. 1. 7. 09:25

 

오늘 할일 순서

 

 

영단어

점심 - 밥을 하면서 수면 상태에 들어가자!

tcp-game 서버 코드 분석

코드카타

 

 

최근 잊어 먹은 단어

단어
knew know 의 과거형 <알고 있다는 듯이>
already 이미, 벌써 <yet은 부정문에 already는 긍정문에 사용>
watch 보다, 지켜보다, 주시하다 <watch는 주의깊게 본것 see는 우연히 본것>
just 딱, 꼭, 정확히, 똑같이 <아무때나 사용하는듯함>
all right 자, 저 <말하기전에 어그로를 끌기 위함>
spent - spend 의 과거형 <use는 효율적인 사용, spend는 소비나 소모에 초점>

 

 

 

 

 

 

server.js - [code] 서버 실행 코드

더보기
/* 
이 코드는 TCP 서버를 초기화하고 실행하는 기능을 제공합니다.
서버는 클라이언트의 연결을 처리하기 위해 `onConnection` 이벤트 핸들러를 사용하며,
서버가 성공적으로 시작되면 실행 중인 주소를 로그로 출력합니다.
초기화 과정에서 오류가 발생할 경우, 오류 메시지를 출력하고 프로세스를 종료합니다.
*/

import net from 'net';  // net 모듈 임포트
import initServer from './init/index.js';  // 서버 초기화 함수 임포트
import { config } from './config/config.js';  // 설정 파일 임포트
import { onConnection } from './events/onConnection.js';  // 연결 이벤트 핸들러 임포트

const server = net.createServer(onConnection);  // 서버 생성

// 서버 초기화 및 실행
const startServer = async () => {
  try {
    await initServer(); // 서버 초기화
    server.listen(config.server.port, config.server.host, () => {
      console.log(`서버가 ${config.server.host}:${config.server.port}에서 실행 중입니다.`);
      console.log(server.address()); // 서버 주소 출력
    });
  } catch (err) {
    console.error(err); // 오류 로그 출력
    process.exit(1); // 오류 발생 시 프로세스 종료
  }
};

// 서버 초기화 및 실행
startServer();

 

index.js - [code] 서버 초기화 코드

더보기
/* 
이 코드는 서버 초기화 작업을 수행하는 함수를 정의합니다.
게임 자산과 프로토타입을 로드하고, 데이터베이스 연결을 테스트합니다.
오류가 발생하면 로그를 출력하고 프로세스를 종료합니다.
*/

import { loadGameAssets } from './assets.js';  // 게임 자산 로드 함수
import { loadProtos } from './loadProtos.js';  // 프로토타입 로드 함수
import { testAllConnections } from '../utils/db/testConnection.js';  // 데이터베이스 연결 테스트 함수
import pools from '../db/database.js';  // 데이터베이스 풀

// 서버 초기화 함수
const initServer = async () => {
  try {
    await loadGameAssets();  // 게임 자산 로드
    await loadProtos();  // 프로토타입 로드
    await testAllConnections(pools);  // 데이터베이스 연결 테스트
    // 다음 작업
  } catch (e) {
    console.error(e);  // 오류 로그 출력
    process.exit(1);  // 오류 발생 시 프로세스 종료
  }
};

export default initServer;  // 초기화 함수 내보내기

 

 

 

assets.js - [code] 게임 자산 관리

더보기
/* 
이 코드는 게임 자산을 로드하고 관리하는 기능을 구현합니다.
JSON 파일에서 게임 자산을 비동기적으로 읽어와 전역 객체에 저장하며,
자산을 반환하는 함수도 포함되어 있습니다.
*/

import fs from 'fs';  // 파일 시스템 모듈
import path from 'path';  // 경로 모듈
import { fileURLToPath } from 'url';  // URL 모듈

// import.meta.url은 현재 모듈의 URL을 나타내는 문자열
// fileURLToPath는 URL 문자열을 파일 시스템의 경로로 변환

// 현재 파일의 절대 경로. 이 경로는 파일의 이름을 포함한 전체 경로
const __filename = fileURLToPath(import.meta.url);

// path.dirname() 함수는 파일 경로에서 디렉토리 경로만 추출 (파일 이름을 제외한 디렉토리의 전체 경로)
const __dirname = path.dirname(__filename);
const basePath = path.join(__dirname, '../../assets');  // 자산 파일이 저장된 기본 경로
let gameAssets = {};  // 전역 변수로 게임 자산을 저장

// 파일을 비동기적으로 읽는 함수
const readFileAsync = (filename) => {
  return new Promise((resolve, reject) => {
    fs.readFile(path.join(basePath, filename), 'utf8', (err, data) => {
      if (err) {
        reject(err);  // 오류 발생 시 거부
        return;
      }
      resolve(JSON.parse(data));  // JSON 데이터를 객체로 변환하여 해결
    });
  });
};

// 게임 자산을 로드하는 비동기 함수
export const loadGameAssets = async () => {
  try {
    // 여러 파일을 비동기적으로 읽기
    const [stages, items, itemUnlocks] = await Promise.all([
      readFileAsync('stage.json'),
      readFileAsync('item.json'),
      readFileAsync('item_unlock.json'),
    ]);
    gameAssets = { stages, items, itemUnlocks };  // 읽어온 데이터 저장
    return gameAssets;  // 게임 자산 반환
  } catch (error) {
    throw new Error('Failed to load game assets: ' + error.message);  // 오류 발생 시 예외 처리
  }
};

// 게임 자산을 반환하는 함수
export const getGameAssets = () => {
  return gameAssets;  // 전역 변수에서 게임 자산 반환
};

 

 

 

 

 

 

삼각함수

 

 

 
 
소흐-카흐-토아
 
 
 
 
 
 
 
 
역삼각 함수
 
 
 
 
 
 
 
 
단위원과 삼각함수 애니메이션