-
Notifications
You must be signed in to change notification settings - Fork 3
Web Trouble Shooting
Kyung Deok Si edited this page Nov 6, 2020
·
10 revisions
일자 | 작성자 | 요약 |
---|---|---|
2020/11/04 02:16 | 시경덕 |
sequelize.findByPk() 사용 간 오류 해결 |
-
위와 같이 사용하는 경우 실제로 호출되는 쿼리에서
Model.findByPk(pk, { where: { isDeleted: false, }, });
isDeleted
조건을 무시 -
pk
조건 외 다른 조건이 필요한 경우 다음과 같이findOne()
메소드를 사용해야 의도한 조건을 충족하는 데이터를 가져올 수 있음Model.findOne({ where: { pk, isDeleted: false }, });
일자 | 작성자 | 요약 |
---|---|---|
2020/11/04 02:46 | 시경덕 |
include 옵션을 통한 LEFT OUTER JOIN
|
-
include
를 통해 조인할 모델을 감싸는 객체에require
옵션을false
로 설정할 경우,LEFT OUTER JOIN
으로 작동 -
include
를 통해 조인할 모델을 감싸는 객체에require
옵션을true
로 설정할 경우,INNER JOIN
으로 작동 -
require
옵션의default
값은 where 조건이 있을 경우true
, 그렇지 않을 경우false
-
참고링크에서
Params
항목 내options.include[].required
참고
일자 | 작성자 | 요약 |
---|---|---|
2020/11/04 21:17 | 시경덕 |
include 를 사용한 관계 데이터 호출 시 as 옵션 설정 |
- 관계를 설정할 두
model
클래스의associate()
메소드를 통해 관계 설정- 관계 설정 시 옵션으로 외래키와 관계 정보를 위한 테이블 명(
through
) 등을 동일하게 설정
// model/issue.js class Issue extends Model { ... static associate({ Issue, User }) { Issue.belongsToMany(User, { foreignKey: 'issue_num', through: 'assignments', // 두 관계를 표현할 테이블 명을 동일하게 설정 timestamps: false, }); } } // model/user.js class User extends Model { ... static associate({ User, Issue }) { User.belongsToMany(Issue, { foreignKey: 'user_num', through: 'assignments', // 두 관계를 표현할 테이블 명을 동일하게 설정 timestamps: false, }); } }
- 관계 설정 시 옵션으로 외래키와 관계 정보를 위한 테이블 명(
-
model
을 통해 데이터 호출 시, 관계 데이터를 참조할property
명을as
옵션으로 설정Issue.findAll({ include: [ { model: User, as: 'assignees', // issue['assignees'] 로 User 데이터 참조 }, ] });
- 데이터를 호출한
model
클래스의 관계 설정 옵션에서, 데이터를 호출할 때 사용한as
옵션을 동일한 값으로 추가// model/issue.js class Issue extends Model { ... static associate({ Issue, User }) { Issue.belongsToMany(User, { ... as: 'assignees', // include 시 설정한 as 옵션 값과 동일하게 설정 }); } }
일자 | 작성자 | 요약 |
---|---|---|
2020/11/05 20:00 | 시경덕 | NGINX를 사용한 배포 간 이슈 해결 |
-
NGINX 란?
Nginx(엔진 x라 읽는다)는 웹 서버 소프트웨어로, 가벼움과 높은 성능을 목표로 한다. 웹 서버, 리버스 프록시 및 메일 프록시 기능을 가진다.
- Nginx는 요청에 응답하기 위해 비동기 이벤트 기반 구조로 가진다. 스레드/프로세스 기반 구조를 가지는 아파치 HTTP 서버와 다르게 요청 수만큼 자식 프로세스를 생성하지 않기 때문에 CPU 부하와 메모리 사용량이 적다.
- 다른 웹 서버와 비교하여 구성 파일을 읽고 조작하기 쉽다.
- 위키백과 Nginx 문서 참고
-
왜 때문에 NGINX를 사용했는가
-
웹 서버로써의 NGINX
-
React
로 개발한 웹 어플리케이션의build
산출물인html
,css
,js
와 같은 정적 파일들을 배포하기 위한 웹 서버로 사용
-
-
리버스 프록시로써의 NGINX
-
프론트 엔드 개발 환경으로
webpack-dev-server
를 다음과 같은 옵션으로 사용devServer: { port: 4000, compress: true, hot: true, proxy: { '/api': { target: 'http://localhost:3000', }, historyApiFallback: { rewrites: [{ from: /^\/*$/, to: '/index.html' }], }, }
-
로컬에서는
webpack-dev-server
로 접근하는URI
의path
가/api
로 시작하면 API 서버를 호출하도록proxy
옵션을 설정fetch('/api/issues'); // -> http://localhost:4000/api/issues // -> [webpack-dev-server] // -> http://localhost:3000/api/issues // -> [API server]
-
배포 환경에서도
webpack-dev-server
와 같은 역할을 수행하는 프록시 서버가 필요
-
-
-
NGINX 설치 및 구성 파일 설정
-
설치 과정
-
처음에
sudo apt-get install nginx
명령으로 설치를 하려 했으나, 다음과 같은 오류가 발생dpkg: dependency problems prevent configuration of nginx: nginx depends on nginx-core (>= 1.10.3-0ubuntu0.16.04.2) | nginx-full (>= 1.10.3-0ubuntu0.16.04.2) | nginx-light (>= 1.10.3-0ubuntu0.16.04.2) | nginx-extras (>= 1.10.3-0ubuntu0.16.04.2); however: Package nginx-core is not configured yet. Package nginx-full is not installed. Package nginx-light is not installed. Package nginx-extras is not installed. nginx depends on nginx-core (<< 1.10.3-0ubuntu0.16.04.2.1~) | nginx-full (<< 1.10.3-0ubuntu0.16.04.2.1~) | nginx-light (<< 1.10.3-0ubuntu0.16.04.2.1~) | nginx-extras (<< 1.10.3-0ubuntu0.16.04.2.1~); however: Package nginx-core is not configured yet. Package nginx-full is not installed. Package nginx-light is not installed. Package nginx-extras is not installed.
-
nginx 저장소와 공개 키를 추가하여 재설치
# nginx 저장소 추가 $ sudo vi /etc/apt/sources.list.d/nginx.list # 파일내 내용 추가 deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ bionic nginx deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx # nginx 공개 키 추가 $ wget http://nginx.org/keys/nginx_signing.key $ sudo apt-key add nginx_signing.key
-
-
구성 파일 설정
-
/etc/nginx/nginx.conf
설정# /etc/nginx/nginx.conf events { worker_connections 768; } http { server { listen 80; location / { root /home/boostcamp/IssueTracker-16/web/client/public; index index.html index.htm; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://localhost:3000; } } }
-
-