[TIL] # 46 node

ddalkigum·2021년 2월 19일
1
post-thumbnail

기본 세팅

DB

const connectionOptions: ConnectionOptions = {
  type: "mysql",
  host: process.env.HOST,
  port: 3306,
  username: process.env.USER,
  password: process.env.PASSWORD,
  database: process.env.NAME,
  synchronize: true,
  entities: ["Entities/**/*.*"],
};

세팅은 mysql로 진행했고,
entities를 설정하여 Entity 디렉토리를 바라볼 수 있게 설정해주어야 한다
DB관련된 세팅은 이부분 이외에는 server.ts에서 서버를 on 하면서 db연결을 해준다

app.ts

const app: Express = express()

app.use(express.json());
app.options("*", cors());
app.use(logger("dev"));
app.use(routes);
app.use(generalErrorHandler)

처음 만들었던 함수형 app.ts이고,
이후에 class로 만들려면 어떻게 만들어야 할까 생각해보고 만들어봤다

class App {
  public app: Express = express();
  constructor() {
    this.middlewares();
  }

  private middlewares = (): void => {
    this.app.use(express.json());
    this.app.options("*", cors());
    this.app.use(logger("dev"));
    this.app.use(routes);
    this.app.use(generalErrorHandler);
  };

}

처음 만들고 나서는 미들웨어가 실행이 안되서 왜그런가 했는데
this.middlewares()에서 괄호를 빼먹어서 실행이 안됬엇다
괄호빠진걸로는 에러났다고도 안나오고 에러는 없는데 연결은 안되고해서
1시간은 왜 안되나 별짓을 다했던거 같다 ....

server.ts

const PORT = process.env.PORT;

const server: Server = createServer(app);

const start = async () => {
  try {
    await createConnection(connectionOptions).then(() => {
      console.log("DB Connection Success");
    }),
      server.listen(PORT, () =>
        console.log(`Server start on http://127.0.0.1:${PORT}`)
      );
  } catch (error) {
    console.log(error);
  }
};
start();

app을 이용하여 server를 만들어주고,
server에서는 내가 설정한 PORT로 listen을 해줘서 연결해준다

아마 진행하다보면 소켓부분을 추가해서

let socketIo = new Socket.Server();

export const socketServer = socketIo.listen(server);

이 부분을 추가해서 socket이 server를 바라본다는 느낌으로?

아직 소켓부분은 완전히 이해한게 아니라 일단은 놔뒀다...

export를 한 이유는 Controller에서 모듈화한 socketServer를 이용하기 위해서이고,
Controller에서 같은 socketServer를 사용하기 위해서는 모듈화를해서
내보내야 하지 않을까? 생각이 들어서 실험을 해봤고

결과적으로는 연결에는 성공했다


구조

  • 3계층 구조를 사용하자
  • 비지니스 로직은 service에서 처리하자

가장 상위 파일부터 server - app - route - controller - service - entity

공부를 하다보니 controller와 service의 차이가 뭘까 생각이 들었고
이러한 구조에 관한 부분은 좀 더 찾아봐야 할 것같다

분할을 하고, 모듈화를 하면서 깔끔한 코드를 짜기위해 어떻게 해야할까
생각하는 시간은 갖는건 재밌는 부분이고, 노드의 매력이라고 생각한다

깔끔한 구조를 짜고싶지만...
첫 시작부터 분할정복을 하면서 하기에는 너무 어렵다
우선은 코드를 완성시키면서, 유닛테스트와 함꼐 진행해볼 예정이고

유닛테스트는 jest를 이용해서 해볼 생각이다


그냥....

해보고 싶은게 많지만, 정리하는 시간이 늘어나게 되면서 시간을
효율적으로 쓰기가 쉽지 않다

기본적인 부분을 놓치게 되서 연차만 늘어나고, 노력을 안하는 개발자가 되고 싶지는 않다

계획대로 되지않아서 오는 스트레스도 있고,
생각보다 개념이 어려워서 공부하는 시간을 많이 잡아먹는 부분도 있고

아무튼... 어렵다 ㅋㅋㅋㅋㅋㅋㅋ

내가 생각하는 개발자가 될수 있도록 노력해야겠다

profile
딸기검 -본캐🐒 , 김준형 - 현실 본캐 🐒

0개의 댓글