디렉토리 구조
Opened this issue · 1 comments
디렉토리 구조
project/
├── config/
├── logs/
├── node_modules/
├── public/
├── src/
| ├── constants/
| ├── controllers/
| ├── models/
| ├── routes/
| ├── repository/
| ├── services/
| ├── middlewares/
| ├── utils/
| └── app.js
├── views/
└── .env
config/
설정 파일을 포함하는 디렉토리
- config는 설정이라는 의미로, 소프트웨어나 시스템이 동작하는 방식을 정의하는 매개변수들의 집합
- github에 commit 되지 않도록 주의
.env
- 환경 변수를 설정하는 **파일
- 보통 시스템 레벨이나 프로세스 레벨에서 설정, application 실행 시간에 읽을 수 있는 변수
- nodeJS module로 npm을 사용하여 설치하고, 사용할 수 있다(dotenv)
- process.env.NAME과 같은 방법으로 접근
- .env파일을 불러오는 코드는 코드의 최상단에 위치하도록
config와 env의 차이점
- config는 application 범위에 국한되어 사용되는 반면, env는 시스템 전반에 사용
- 환경변수는 민감한 정보를 application 코드 밖에 저장하는데 사용 되어 보안 강화, config는 코드 내부에 저장되기 때문에 민감한 정보 저장하기에 부적절
- 환경변수는 운영체제 또는 호스팅 환경에 따라 쉽게 변경될 수 있어 이식성이 높음/ 반면, config파일은 환경에 맞게 여러 버전을 관리!
logs/
로그(기록) 파일을 저장
application log 또는 server log 관련 파일
node_modules/
프로젝트의 종속성인 nodeJS모듈이 설치되는 디렉토리
일반적으로 패키지 매니저가 이 디렉토리에 모듈을 설치
public/
정적파일(이미지, CSS, JavaScript등)이 위치하는 디렉토리
웹서버에서 정적 파일을 제공할 때 사용됨
정적파일
- HTML을 제외하고 웹페이지를 렌더링할 때 필요한 추가 파일
웹서버에 미리 저장되어있으로 css, image파일 같이 컨텐츠가 고정, 사용자의 요청에 따라 변하지 않는다.- static : 개발자가 미리 준비한 데이터
- 반대되는 개념인 media : 사용자가 업로드한 데이터
src/
소스코드를 포함하는 주요 디렉토리
constants
애플리케이션에서 사용되는 상수값을 정의하는 디렉토리
controllers
- Model과 View를 이어주는 부분
- 요청에 따라 로직 처리를 하기 위한 분기를 당담하고, 사용자에게 서버에서 처리된 데이터를 포함한 VIEW를 리턴한다.
models
db 모델과 관련된 스키마를 정의
routes
어떤 네트워크 안에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 라우팅 파일을 포함하는 디렉토리
repository
db작업을 처리하는 repo파일을 포함하는 dir
services
서비스 함수를 포함하는 디렉토리 (비지니스로직, 데이터처리와 관련된 서비스 계층을 포함하는 dir )
비지니스 로직 : 도출된 요구사항을 구현하기 위한 처리 로직
서비스 계층 : 요청에 필요한 요구사항을 구현(데이터 연동)
- 하나의 페이지가 구현해야하는 기능 중 저수준의 데이터 처리로직(SQL수행)과 웹 고유의 기능(요청에 대한 응답, UI(사용자인터페이스)구현)을 분리하고, 이를 연결해주는 역할 수행
- 데이터 베이스를 처리하는 코드를 모듈화 시키는 것이 서비스 계층의 취지
middlewares
라우트 핸들러에 적용되는 미들웨어 함수를 포함하는 dir(인증, 로깅등과 같은 공통 기능 구현)
라우트 핸들러를 사용하면 웹 요청 및 응답 API를 사용하여 지정된 경로에 대한 사용자 지정 요청 핸들러를 만들 수 있습니다.
utils
재사용이 가능한 utility함수, 헬퍼 함수 등을 포함하는 dir(예 : 날짜계산, 주어진 객체가 배열인지)
app.js
application의 진입전 파일, server 설정, 필요 middleware, route를 등록하는 역할
views
서버측 렌더링을 위한 view템플릿 파일이 위치하는 dir
- 예 : express.js에서는 이 디렉토리에 ejs, pug와 같은 뷰엔진 템플릿 파일을 저장
- 응답으로 보내줄 웹페이지 모양을 미리 만들어 표준화한 것 = 템플릿
server 3layer architecture
1. presentation 계층
일반 사용자가 application과 상호작용하는 application의 사용자 인터페이스 및 communication계층
- 주요 목적 : 정보 표시, 사용자로부터 정보 수집
- 이 최상위 레벨 계층은 예를 들어 웹 브라우저, 데스크탑 애플리케이션, 그래픽 사용자 인터페이스에서 실행 가능
2. application 계층(논리 계층, 중간 계층)
application의 핵심
- 특정 비지니스 규칙 세트인 비지니스 논리 사용-> 프리젠테이션 계층에서 수집된 정보가 처리(경우에 따라 데이터 계층의 다른 정보와 관련하여 처리)
- 데이터 계층의 데이터를 추가, 삭제, 수정 가능
3. data계층
데이터베이스 계층, 데이터 액세스 계층, 백엔드라고 불림
- application이 처리하는 정보가 저장 및 관리되는 곳
- 이는 관계형 데이터 베이스 관리 시스템(예 : MySQL), NoSQL 데이터베이스 서버(예: Cassandra, CouchDB, MongoDB)일 수 있음.
- 3계층 application에는 모든 통신이 application계층을 통과함, presentation계층/data계층은 서로 간에 직접 통신 불가능!
참고
express 기본구조, services 계층, config디렉토리와 .env폴더의 차이 , config디렉토리와 .env폴더의 차이2, util 폴더
수정 시자악!!!!(오전 12:11~)