EC2에 express로 서버를 띄우고 docker container에 postgresQL을 실행시켰다.
그런데 서버와 db가 연결이 안되는 문제가 발생했다.
생각을 해보니 서버에서 EC2로 띄운 db주소를 어떻게 알지??
TypeORM
의 DataSource인스턴스 생성 설정을 계속 확인하게 되었다.
그런데 host가 'db'로 되어있는게 이상했다.
분명 강사님은 db로 입력하라고 했다.. 그래서 헷갈렸다
아래 코드처럼 host에 'db'가 아닌 EC2 도메인주소를 입력해야 한다.
// server/src/data-source.ts
import "reflect-metadata";
import { DataSource } from "typeorm";
export const AppDataSource = new DataSource({
type: "postgres",
host: "db", // 여기에 EC2 도메인 주소를 입력해야 한다.
port: 5432,
username: "postgres",
password: "password",
database: "postgres",
synchronize: true,
logging: false,
entities: ["./src/entities/**/*.ts"],
migrations: [],
subscribers: [],
});
EC2에 올리고서 부터 로컬환경에서는 문제없던 쿠키문제가 생겼다.
서버에서 쿠키가 브라우저(클라이언트)로 넘어오지 않는 문제가 생겼다.
원인은 아래 코드처럼 serialize 옵션중 secure를 설정했기 때문이다.
secure가 true일 때 https 프로토콜에서만 response.header를 통해 쿠키가 전달이 된다.
그런데 생성한 EC2는 http프로토콜로 통신 중이었다.
const login = async (req: Request, res: Response) => {
// ...
res.set(
"Set-Cookie",
cookie.serialize("token", token, {
httpOnly: true,
secure: process.env.NODE_ENV === "production",
maxAge: 60 * 60 * 24 * 7,
path: "/",
})
);
return res.json({ user, token });
} catch (error) {
// ...
}
};
임시방편으로 토이프로젝트 한정으로 주석처리 하는걸로 해결했다.
실무에서는 어떤식으로 해결해야 하는지 확인이 필요하겠다.
const login = async (req: Request, res: Response) => {
// ...
res.set(
"Set-Cookie",
cookie.serialize("token", token, {
httpOnly: true,
// ❌secure: process.env.NODE_ENV === "production",
maxAge: 60 * 60 * 24 * 7,
path: "/",
})
);
return res.json({ user, token });
} catch (error) {
// ...
}
};