<aside> ❤️🔥 새롭게 배운 기능
</aside>
NestJs에서 환경변수에 접근하기 위해서는 process.env.환경변수명
과 같이 긴 코드가 발생하게 된다.
이를 조금더 보기 좋게, 그리고 기능별로 관리하기 위해서 각 기능별 config 파일을 만들고 해당 모듈에 import하여 환경변수를 관리할 수 있게 해주는 것이 바로 @nestjs/config
패키지이다.
아래 참고에 자세히 설명되어 있으니 이를 통해 환경변수를 관리하여 가독성있는 코드를 작성하면 좋을 것 같다.
이번 과제에서 내가 socket 통신을 다루는 부분은 한정적이었으나, API와 다르면서도 비슷한 socket을 통해 client와 응답을 주고받는 것은 재밌는 경험이었다.
API
에 Get, Post
와 같은 데코레이터가 있다면, socket
에는 SubscribeMessage
라는 데코레이터가 있었다. 또한, emit 함수를 통해 frontend로 하여금 지정된 함수를 실행시킬 수 있도록 하는 점도 새로웠다.
API의 경우 front의 메소드 호출에 따라 지정된 응답을 보내면 front가 해당 응답을 해석하여 다음 행동을 정한다면, socket은 front가 보낸 메시지를 받아 emit을 통해 내가 직접 front가 해야할 행동을 지정해 준다. front에 startGame이라는 메소드가 규정되어있다면 socket.emit(”startGame”, data)
; 함수를 호출하여 front가 바로 해당 화면을 그릴 수 있도록 하는것이다.
<aside> 🥲 어려웠던 것
</aside>
Spring Boot
기반의 웹 개발 후 두번째로 경험해보는 백엔드 웹 개발이었다. 첫 개발 당시 ORM으로 JPA
를 사용하였었는데, 이에 익숙해져있다 보니 Prisma
를 사용하며 상당히 많은 어려움을 겪었었다.
Spring Boot
의 경우 같은 transaction
에서 객체를 변경시 DB에도 변경 값이 그대로 적용되어 따로 내가 처리 해줘야할 필요성을 느끼지 못했는데, Prisma
의 경우 꼭 Prisma
함수를 통해야만 변경할 수 있었다.
Prisma는 기존 ORM들이 객체 지향 방식으로 관계형 데이터 베이스 테이블을 매핑하는 것이 문제라고 보고 이를 Schema를 통해 해결하려고 했다고 하는데, ‘관계형 데이터가 오브젝트에 쉽게 매핑 될 수 있다’는 문제점
이 솔직히 무엇인지 잘 이해하지 못하고 있다. 나중에 더 알아봐야 할 것 같다.