To design a full-stack web application using TypeScript, React, Node.js/Express, MongoDB, and Socket.IO for creating, sharing, and voting on polls, follow these steps:

1. Set up the project structure

Create a new directory for your project and initialize it with npm.

```
mkdir poll-app
cd poll-app
npm init -y
```

2. Install dependencies

Install necessary dependencies for both frontend and backend development.

```
npm install typescript ts-node nodemon express socket.io mongodb react react-dom @types/react @types/react-dom @types/node @types/express @types/socket.io @types/mongodb
```

3. Configure TypeScript

Create a `tsconfig.json` file in the root of your project folder and add the following configuration:

```json
{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "jsx": "react",
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}
```

4. Create source directories

Create `src` directories for both frontend and backend code.

```
mkdir src
cd src
mkdir client server
cd ..
```

5. Set up the Express server

Inside the `src/server` directory, create an `index.ts` file with the following content:

```typescript
import express from 'express';
import http from 'http';
import { Server } from 'socket.io';
import { MongoClient } from 'mongodb';

const app = express();
const server = http.createServer(app);
const io = new Server(server);

(async () => {
  const mongoClient = await MongoClient.connect('mongodb://localhost:27017');
  const db = mongoClient.db('poll-app');

  io.on('connection', (socket) => {
    // Handle events and database operations here
  });

  server.listen(3001, () => {
    console.log('Server listening on port 3001');
  });
})();
```

6. Set up the React frontend

Inside the `src/client` directory, create an `index.tsx` file with the following content:

```typescript
import React from 'react';
import ReactDOM from 'react-dom';

const App: React.FC = () => {
  return (
    <div>
      <h1>Poll App</h1>
    </div>
  );
};

ReactDOM.render(<App />, document.getElementById('root'));
```

7. Create a simple HTML template

Create an `index.html` file in the root of your project folder with the following content:

```html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Poll App</title>
</head>
<body>
  <div id="root"></div>
  <script src="/dist/client/index.js"></script>
</body>
</html>
```

8. Configure Nodemon

Create a `nodemon.json` file in the root of your project folder and add the following configuration:

```json
{
  "watch": ["src"],
  "ext": "ts",
  "ignore": ["src/client/*"],
  "exec": "ts-node ./src/server/index.ts"
}
```

9. Update package.json scripts

Add the following scripts to your `package.json` file:

```json
"scripts": {
  "start": "npm run build && npm run serve",
  "build": "tsc",
  "serve": "nodemon",
  "client": "parcel src/client/index.html"
},
```

10. Implement the application logic

Now that your project is set up, you can start implementing the application logic for creating, sharing, and voting on polls. This includes:

- Creating RESTful API routes in Express to handle poll creation, retrieval, and voting.
- Setting up Socket.IO events to broadcast real-time updates when a new vote is cast or a new poll is created.
- Designing React components for displaying and interacting with polls.
- Connecting the frontend to the backend using Axios or Fetch API.

11. Run the application

To run the application, open two terminal windows. In one window, run `npm run serve` to start the server. In the other window, run `npm run client` to start the development server for the frontend. Open your browser and navigate to `http://localhost:1234`.
설문조사 생성, 공유, 투표를 위해 TypeScript, React, Node.js/Express, MongoDB, Socket.IO를 사용하여 풀스택 웹 애플리케이션을 디자인하려면 다음 단계를 따르세요. 프로젝트 구조 설정

프로젝트를 위한 새 디렉터리를 만들고 npm으로 초기화합니다.

```
mkdir poll-app
cd poll-app
npm init -y
```

2. 종속성 설치

프론트엔드 및 백엔드 개발에 필요한 종속성을 설치합니다.

```
npm install typescript ts-node nodemon express socket.io mongodb react react-dom @types/react @types/react-dom @types/node @types/express @types/socket.io @types/mongodb
```

3. 타입스크립트 구성

프로젝트 폴더의 루트에 `tsconfig.json` 파일을 생성하고 다음 구성을 추가합니다:

```json
{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "jsx": "react",
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}
```

4. 소스 디렉토리 만들기

프론트엔드 및 백엔드 코드 모두에 대해 `src` 디렉터리를 만듭니다.

```
mkdir src
cd src
mkdir client server
cd ..
```

5. Express 서버 설정

`src/server` 디렉터리 내에 다음 내용으로 `index.ts` 파일을 생성합니다:

```typescript
import express from 'express';
import http from 'http';
import { Server } from 'socket.io';
import { MongoClient } from 'mongodb';

const app = express();
const server = http.createServer(app);
const io = new Server(server);

(async () => {
  const mongoClient = await MongoClient.connect('mongodb://localhost:27017');
  const db = mongoClient.db('poll-app');

  io.on('connection', (socket) => {
    // Handle events and database operations here
  });

  server.listen(3001, () => {
    console.log('Server listening on port 3001');
  });
})();
```

6. React 프론트엔드 설정

`src/client` 디렉토리 안에 다음 내용으로 `index.tsx` 파일을 생성합니다:

```typescript
import React from 'react';
import ReactDOM from 'react-dom';

const App: React.FC = () => {
  return (
    <div>
      <h1>Poll App</h1>
    </div>
  );
};

ReactDOM.render(<App />, document.getElementById('root'));
```

7. 간단한 HTML 템플릿 만들기

프로젝트 폴더의 루트에 다음 내용으로 `index.html` 파일을 생성합니다:

```html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Poll App</title>
</head>
<body>
  <div id="root"></div>
  <script src="/dist/client/index.js"></script>
</body>
</html>
```

8. Nodemon 설정

프로젝트 폴더의 루트에 `nodemon.json` 파일을 생성하고 다음 구성을 추가합니다:

```json
{
  "watch": ["src"],
  "ext": "ts",
  "ignore": ["src/client/*"],
  "exec": "ts-node ./src/server/index.ts"
}
```

9. 패키지.json 스크립트 업데이트

다음 스크립트를 `package.json` 파일에 추가합니다:

```json
"scripts": {
  "start": "npm run build && npm run serve",
  "build": "tsc",
  "serve": "nodemon",
  "client": "parcel src/client/index.html"
},
```

10. Implement the application logic

이제 프로젝트가 설정되었으므로 투표를 생성, 공유 및 투표하기 위한 애플리케이션 로직 구현을 시작할 수 있습니다. 여기에는 다음이 포함됩니다.

- 설문조사 생성, 검색 및 투표를 처리하기 위해 Express에서 RESTful API 경로 생성.
- 새 투표가 진행되거나 새 설문조사가 생성될 때 실시간 업데이트를 브로드캐스트하도록 Socket.IO 이벤트 설정.
- 설문조사 표시 및 상호작용을 위한 React 컴포넌트 설계.
- Axios 또는 Fetch API를 사용하여 프론트엔드와 백엔드 연결.

11. 애플리케이션 실행

애플리케이션을 실행하려면 두 개의 터미널 창을 엽니다. 한 창에서 `npm run serve`를 실행하여 서버를 시작합니다. 다른 창에서 `npm run client`를 실행하여 프론트엔드용 개발 서버를 시작합니다. 브라우저를 열고 `http://localhost:1234`으로 이동합니다.