인프런 커뮤니티 질문&답변
AWS관련 질문드립니다.
작성
·
189
답변 1
0
제로초(조현영)
지식공유자
대부분 문제 없다고 보셔도 됩니다. 백엔드 주소를 노출하지 않으려면 넥스트 서버에서 proxy를 백엔드로 설정해서 넥스트 서버로 요청을 보내면 자동으로 백엔드 서버로 가게 만드는 방법이 있습니다.
하늘의개혁
질문자
답변감사합니다 . 말씀하신대로 proxy를 설정했는데 새로고침하면 로그인이 자꾸 풀리네요...
이유가 뭘까요?? 프론트단 설정과 백엔드단 소스 공유드립니다.
//exports.backUrl = 'http://api.theky.co.kr';
//exports.backUrl = 'http://localhost:3065/api';
exports.backUrl = '/api';
import axios from 'axios';
import { all, fork } from 'redux-saga/effects';
import loginSaga from './login';
import curItemStockSaga from './stock/cur_item';
import curItemDStockSaga from './stock/cur_itemD';
import curItemComparedStockSaga from './stock/cur_item_compared';
import curItemInOutWaitAvailableStockSaga from './stock/cur_item_inout_wait_available_stock';
import curItemOutLotComparedStockSaga from './stock/cur_item_out_lot_compared_stock';
import periodInoutStockListSaga from './stock/inout/periodStockList';
import ceterInfoSaga from './common/center';
import brandInfoSaga from './common/brand';
import itemInfoSaga from './common/item';
import deliveryInfoSaga from './common/delivery';
import common from './common/common';
import outboundItemPeriodListSaga from './outbound/item_period_list';
import { backUrl } from '../config/config';
axios.defaults.baseURL = `${backUrl}`;
//axios.defaults.baseURL = 'http://localhost:3065';
axios.defaults.withCredentials = true;
export default function* rootSaga() {
yield all([
fork(common),
fork(loginSaga),
fork(ceterInfoSaga),
fork(brandInfoSaga),
fork(deliveryInfoSaga),
fork(itemInfoSaga),
fork(curItemStockSaga),
fork(curItemDStockSaga),
fork(curItemComparedStockSaga),
fork(curItemInOutWaitAvailableStockSaga),
fork(curItemOutLotComparedStockSaga),
fork(periodInoutStockListSaga),
fork(outboundItemPeriodListSaga),
]);
}
const withBundleAnalyzer = require('@next/bundle-analyzer')({
enabled: process.env.ANALYZE === 'true',
});
module.exports = withBundleAnalyzer({
async rewrites() {
return [
{
source: '/api/:path*',
destination: 'http://localhost:3065/:path*',
},
{
source: '/api/:path*/:path*',
destination: 'http://localhost:3065/:path*/:path*',
},
]
},
distDir: '.next',
webpack(config, { webpack }) {
const prod = process.env.NODE_ENV === 'production';
const plugins = [
...config.plugins,
new webpack.ContextReplacementPlugin(/moment[/\\]locale$/, /^\.\/ko$/),
];
return {
...config,
mode: prod ? 'production' : 'development',
devtool: prod ? 'hidden-source-map' : 'eval',
plugins,
};
},
});
const swaggerDoc = require('./public/swaggerDoc');
const express = require('express');
const cors = require('cors');
const expressSession = require('express-session');
const cookieParser = require('cookie-parser');
const passport = require('passport');
const centerRouter = require('./routes/center');
const deliveryRouter = require('./routes/delivery');
const brandRouter = require('./routes/brand');
const itemRouter = require('./routes/item');
const curStockRouter = require('./routes/stock/cur_stock');
const stockRouter = require('./routes/stock/cur_compared_stock');
const CurInOutWaitAvailableRouter = require('./routes/stock/cur_inout_wait_available_stock');
const userRouter = require('./routes/user');
const oracledb = require('oracledb');
const getConnection = require('./config/poolConnection');
const passportConfig = require('./passport');
const dotenv = require('dotenv');
const morgan = require('morgan');
const hpp = require('hpp');
const helmet = require('helmet');
const { isTest } = require('./routes/stock/cur_item_send');
const { inBounds } = require('./routes/inbound/inbound_send');
const { returnBounds } = require('./routes/returnbound/returnbound_send');
const { Maters } = require('./routes/master/master_send');
const { dashBoards } = require('./routes/dashboard/dashboard_send');
const prod = process.env.NODE_ENV === 'production';
dotenv.config();
const app = express();
passportConfig();
if (prod) {
app.use(hpp());
app.use(helmet());
app.use(morgan('combined'));
app.use(cors({
origin: /theky\.co.kr$/,
credentials: true,
}));
} else {
app.use(morgan('dev'));
app.use(cors({
origin: true,
credentials: true,
}));
}
//커넥션 풀 생성
async function init() {
getConnection();
}
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(expressSession({
resave: false,
saveUninitialized: false,
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false, // https를 쓸 때 true
domain: prod && '.nodebird.com',
},
name: 'rnbck',
}));
// app.use(session({
// saveUninitialized: false,
// resave: false,
// secret: process.env.COOKIE_SECRET,
// cookie: {
// httpOnly: true,
// secure: false,
// domain: prod && '.theky.co.kr',
// }
// }));
// app.use(session({
// saveUninitialized: false,
// resave: false,
// secret: process.env.COOKIE_SECRET,
// }));
app.use(passport.initialize());
app.use(passport.session());
swaggerDoc(app);
app.get('/', (req, res) => {
res.send('백엔드 정상 동작!');
});
app.use('/user', userRouter);
app.use('/getCenterInfo', centerRouter);
app.use('/getDeliveryInfo', deliveryRouter);
app.use('/getBrandInfo', brandRouter);
app.use('/getItemInfo', itemRouter);
app.use('/getStockInfo', curStockRouter);
app.use('/', stockRouter);
app.use('/stock', CurInOutWaitAvailableRouter);
//app.use('/stock', isTest);
isTest(app);
inBounds(app);
returnBounds(app);
Maters(app);
dashBoards(app);
app.listen(3065, () => {
console.log('서버 실행 중')
});
async function closePoolAndExit() {
console.log("\nTerminating");
try {
await oracledb.getPool().close(10);
console.log("Pool closed");
process.exit(0);
} catch (err) {
console.error(err.message);
process.exit(1);
}
}
process
.once('SIGTERM', closePoolAndExit)
.once('SIGINT', closePoolAndExit);
init();





아 백엔드도 모두허용으로 해야되는군요 그렇게 해도 보안적으로 문제가 없을까요?
실무에서는 어떤식으로 해야 좋을까요?
전부 SSR로 변경하거나 해야될까요...?ㅜㅜ