[리팩토링] 폴더 구조의 변경
2022. 11. 15. 17:30
포트폴리오/JJINCAFE IN SEOUL
들어가며 처음 개인 프로젝트를 진행했을 당시 Express 프레임워크는 자유도가 너무 높아 디렉토리 구조에 대한 엄격한 룰이 존재하지 않아 어떻게 구조를 정해야 할 지 정말 막막했습니다. 당시 프로젝트 디렉토리 구조는 같은 이름을 가지는 파일들(*.router.js, *.controller.js) 끼리 하나의 디렉토리 안에 저장하는 형태였습니다. 예시) 라우터들은 routers 디렉토리 하위에 저장, 컨트롤러는 controllers 디렉토리 하위에 저장 한편, 개인 프로젝트 이후 회사 실무 프로젝트에서 NestJS 프레임워크를 사용하며 Nest 의 디렉토리 구조는 유지 보수 및 확장성 측면에서 괜찮은 구조라는 생각이 들었습니다. 참고) NestJS 는 비슷한 기능을 하는 컨트롤러, 서비스 등을 묶어 각 ..
[리팩토링] 회원가입 API 트랜잭션 처리 및 관심사 분리
2022. 11. 15. 17:22
포트폴리오/JJINCAFE IN SEOUL
들어가며 5월에 종료했던 개인 프로젝트 코드를 다시 열어 보았는데 내가 왜 이렇게 코드를 작성했었지? 라는 생각이 제일 먼저 들었습니다. 대표적으로 기존에 작성했던 회원가입 API 코드를 다시 보니 다음의 두 가지 문제점을 발견했습니다. 회원 정보 저장 쿼리에 대해 트랜잭션 처리가 되어 있지 않았습니다. 이는 회원가입이 실패하더라도 회원 정보가 저장되는 사이드 이펙트를 발생시킬 수 있습니다. 컨트롤러에 요청, 응답을 처리하는 로직과 데이터베이스에 데이터를 저장하는 로직이 혼재되어 있어 가독성과 유지 보수성이 떨어집니다. 문제점을 발견했으니 가만히 있을 수 없어 코드 리팩토링을 진행했고 리팩토링 과정을 기록으로 남기고자 합니다. 기존에 작성했던 회원가입 API 코드 class AuthController {..
[Docker 적용] MySQL 서비스 컨테이너에 .sql 파일 Import 후 데이터베이스에 적용하기
2022. 11. 15. 16:49
포트폴리오/JJINCAFE IN SEOUL
들어가며 이후의 나에게 혹은 같은 상황을 겪는 다른 사람에게 도움이 되고자 MySQL 서비스 컨테이너에 DB 데이터 백업 파일을 Import 후 데이터베이스에 적용한 과정을 기록으로 남깁니다. Import 하려는 파일 정보 및 위치 현재 배포 서버의 루트 디렉토리 내 3_backend_ron_cafe_curation_db_data 디렉토리에 백업해 둔 DB 데이터가 기록된 .sql 파일이 있습니다. pwd 명령 실행 시 현재 디렉토리의 위치를 보여줍니다. ls 명령 실행 시 현재 디렉토리 내부에 존재하는 모든 파일 목록을 보여줍니다. 호스트에서 MySQL 서비스 컨테이너로 파일 Import 3_backend_ron_cafe_curation_db_data 디렉토리의 하위 파일들을 MySQL 서비스 컨테이너..
서버 실행할 때 왜 .env.production 파일이 파싱되지 않지?
2022. 11. 14. 17:16
포트폴리오/JJINCAFE IN SEOUL
에러 발생 상황 데이터베이스 관련 정보는 소중하기 때문에 production 전용 환경변수 파일은 서버에 접속 후에 envs 디렉토리 하위에 직접 .env.production 파일을 생성했습니다. 이후 cross-env NODE_ENV=production pm2 start src/bin/www.js 명령 스크립트를 실행해 서버를 실행시켰습니다. 그러나 NODE_ENV 값이 설정되지 않는 경우 예외 처리 로직이 실행되어 로그 메세지 상에는 'process.env.NODE_ENV를 설정하지 않았습니다.' 가 보여질 뿐이었습니다. 위에서 보시다시피 명령 스크립트 상에 NODE_ENV 를 production 으로 설정했음에도 불구하구요. 로그 메세지 상에 환경변수 파일을 파싱하는 config.js 쪽에서 에러가..