three.js로 체스, 볼링 게임 웹 만들기

three.js를 이용해 웹에서 어떠한 플러그인 없이도 멋진 3차원 그래픽 웹페이지를 개발할 수 있는데요. 게임 느낌의 3D 웹 개발에 대한 컨텐츠입니다. 내용이 다소 길지만 차근 차근 따라하시다보면 금새 완성하실 수 있습니다.


node.js로 server 개발 프로젝트 생성 절차

프로젝트 폴더를 만들어 VS.Code에서 오픈 후 package.json 파일 생성을 위해 터미널에서 다음 명령을 실행한 뒤에 생성된 파일을 편집함

npm init -y

{
  "name": "tstServer",
  "version": "1.0.0",
  "description": "",
  "keywords": [],
  "author": "",
  "license": "ISC"
}

nodemon 설치를 위해 다음 명령 실행

npm i nodemon -D

babel.config.json 파일과 nodemon.json 파일을 생성하고 각각 다음 내용으로 입력

{
    "presets": [ "@babel/preset-env" ]
}
{
    "exec": "babel-node src/index.js"
}

babel 설치를 위해 다음 명령 실행

npm i @babel/core @babel/cli @babel/node @babel/preset-env -D

express 설치를 위해 다음 명령 실행

npm i express

필요할 경우 pug 설치를 위해 다음 명령 실행

npm i pug

package.json에 설치된 항목에 대한 종속성(Dependency)가 존재하는지 확인하고 다음처럼 scripts 속성을 추가(또는 변경)

{
  "name": "tstServer",

  ..

  "scripts": {
    "dev": "nodemon"
  },

  "devDependencies": {
    "@babel/cli": "^7.20.7",
    "@babel/core": "^7.20.7",
    "@babel/node": "^7.20.7",
    "@babel/preset-env": "^7.20.2",
    "nodemon": "^2.0.20"
  },
  "dependencies": {
    "express": "^4.18.2",
    "pug": "^3.0.2"
  }
}

src 폴더 만들어 주고 index.js 파일 생성하고 다음처럼 입력

import express from "express";

const app = express();


const port = 7777;
const handleListen = () => console.log(`Listening on http://localhost:${port}`)
app.listen(port, handleListen);

다음 명령을 실행하여 서버 실행하고 웹브라우저에서 http://localhost:7777/로 접속해서 확인

npm run dev

C#의 Parallel API를 이용하여 CPU 100% 활용하기

CPU는 여러 개의 Core로 구성되어 있고 각 Core 단위로 동시에 연산을 처리할 수 있습니다. C#에서 CPU를 최대한 이용하기 위해서 Parallel API를 이용한 코드를 정리합니다.

Task.Factory.StartNew(() => {
    Parallel.ForEach(addressData, new ParallelOptions { MaxDegreeOfParallelism = cntCores },
        (task) => {
            int iAddress = task.Index;
            string Address = task.Address;
            
            /* 
                시간이 많이 걸리는 연산을 처리하는 스코프
            */

            Invoke(new Action(() => {
                // UI 처리가 가능한 스코프
            }));

            //Application.DoEvents(); -> 더 이상 필요치 않음
        }
    );
});

중요한 점은 Parallel에서 만들어진 스레드는 Main 스레드에서 구동되면 안됩니다. 그래서 Task.Factory.StartNew를 통해 별도의 스레드를 하나 만들고.. 만들어진 스레드에서 Parallel의 스레드를 구동하게 합니다. Task.Factory.StartNew를 사용한 이유는 스레드를 간단하게 만들 수 있기 때문으로 다른 스레드를 만드는 코드도 유효합니다. addressData는 스레드를 통해 처리해야할 데이터가 담긴 컨테이너입니다. 예를 들어 다음과 같습니다.

List<ADDRESS_DATA> addressData = new List<ADDRESS_DATA>();

ADDRESS_DATA는 다음과 같구요. (올바른 캡슐화를 적용하지 않은 코드입니다)

private class ADDRESS_DATA
{
    public int Index;
    public String Address;

    public ADDRESS_DATA(int Index, String Address)
    {
        this.Index = Index;
        this.Address = Address;
    }
}

Paralleld의 ForEach 매서드에서 task를 통해 ADDRESS_DATA의 필드값에 접근할 수 있습니다. 그리고 cntCores는 CPU의 코어 수인데, 동시에 실행할 수 있는 스레드의 개수로 지정하기 적당한 값입니다. 다음처럼 얻을 수 있습니다.

int cntCores = Environment.ProcessorCount;

Rust 개발 환경 구성

VS.Code를 이용하므로 이 사이트에서 Rust 개발환경 구성을 참조하였음.

매우 간단한데 rustup-init.exe를 다운로드 받아 실행시키면 콘솔에서 설치가 진행됨. Rust 컴파일러와 Cargo 실행 파일 등이 최신 버전으로 설치가 되며 Path까지 잡아줌. 나중에 Uninstall은 어찌하라는 것인지… 그냥 폴더와 Path 잡힌 것만 제거하면 되는 것인가? VS.Code에서 확장은 rust-analyzer와 CodeLLDB를 설치해주면 됨. 각각 코드 하일라이팅 등의 기능 제공과 디버깅 기능을 제공함.

Rust 프로젝트를 하나 생성하기 위해서는 콘설에서 다음 코드를 실행하면 됨. 원하는 폴더에서 아래 명령을 실행하면 hello_world라는 폴더가 만들어지고 필요한 파일도 생성됨.

cargo new hello_world

VS.Code를 실행하고 hello_world 폴더를 열면 됨. 그리고 컴파일은 VS.Code의 Shell에서 다음 명령을 실행하면 됨. 아래 명령을 통해 실행 파일이 만들어짐.

cargo build

컴파일과 함께 실행을 동시에 하고 싶다면 다음 명령.

cargo run

물론 VS.Code에서도 그냥 실행이 가능하고 라인 단위 디버깅도 가능함. (단, launch.json 파일 생성이 필요하고 앞서 언급한 CodeLLDB 확장 기능 설치가 필요함.

Python 가상환경 만들고 VS.Code에서 사용하기

가상환경 생성하고 VS.Code에서 원하는 가상환경을 선택하도록 하는 과정을 정리해 둡니다.

일단 콘설창을 실행하고, 생성하고자 하는 가상환경 가상환경이 저장될 폴더로 이동한 뒤 아래의 명령을 입력합니다.

python -m venv python_virtualenv

그러면 python_virtualenv 폴더가 생성된 것을 확인할 수 있습니다. 여기까지가 파이선에서 가상환경 생성의 전부입니다.

이제 VS.Code에서 이 가성환경을 통해 코드를 실행하기 위한 설정입니다.

VS.Code를 실행하고 단축키 F1를 누르면 Python에 대한 인터프리터를 선택할 수 있는 항목이 표시됩니다. 이 항목을 클릭합니다.

“+ 인터프리터 경로 입력…”을 클릭하고 “찾기…”에서 이전에 생성한 가상환경 폴더에 위치한 Scripts/python.exe 파일을 선택합니다.

이제 새로운 터미널이 표시될때마다 다음처럼 가상환경 이름 표시와 함께 명령 프롬프트가 표시됩니다.

그리고 GDAL 설치는 다음과 같습니다.

먼저 WHL 파일을 다운로드(https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal) 받고 다음 명령으로 설치하면 됩니다.

pip install .\GDAL-3.4.3-cp311-cp311-win_amd64.whl