diff --git a/backend/package-lock.json b/backend/package-lock.json index 07a4010..5d36156 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -9,6 +9,7 @@ "version": "2.0.0", "dependencies": { "@aws-sdk/client-s3": "^3.970.0", + "@fastify/cors": "^11.2.0", "@fastify/jwt": "^10.0.0", "@fastify/multipart": "^9.3.0", "@fastify/static": "^8.0.0", @@ -978,6 +979,26 @@ "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==", "license": "MIT" }, + "node_modules/@fastify/cors": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@fastify/cors/-/cors-11.2.0.tgz", + "integrity": "sha512-LbLHBuSAdGdSFZYTLVA3+Ch2t+sA6nq3Ejc6XLAKiQ6ViS2qFnvicpj0htsx03FyYeLs04HfRNBsz/a8SvbcUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "fastify-plugin": "^5.0.0", + "toad-cache": "^3.7.0" + } + }, "node_modules/@fastify/deepmerge": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-3.1.0.tgz", diff --git a/backend/package.json b/backend/package.json index 1723d67..b9764d2 100644 --- a/backend/package.json +++ b/backend/package.json @@ -8,6 +8,7 @@ }, "dependencies": { "@aws-sdk/client-s3": "^3.970.0", + "@fastify/cors": "^11.2.0", "@fastify/jwt": "^10.0.0", "@fastify/multipart": "^9.3.0", "@fastify/static": "^8.0.0", diff --git a/backend/src/app.js b/backend/src/app.js index b77c5f7..b9c3277 100644 --- a/backend/src/app.js +++ b/backend/src/app.js @@ -2,6 +2,7 @@ import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; import Fastify from 'fastify'; +import fastifyCors from '@fastify/cors'; import fastifyStatic from '@fastify/static'; import fastifySwagger from '@fastify/swagger'; import multipart from '@fastify/multipart'; @@ -34,6 +35,14 @@ export async function buildApp(opts = {}) { // config 데코레이터 등록 fastify.decorate('config', config); + // CORS 설정 (API 문서 포털에서 테스트 요청 허용) + await fastify.register(fastifyCors, { + origin: ['https://docs.caadiq.co.kr'], + methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], + allowedHeaders: ['Content-Type', 'Authorization'], + credentials: true, + }); + // multipart 플러그인 등록 (파일 업로드용) await fastify.register(multipart, { limits: { @@ -91,10 +100,8 @@ export async function buildApp(opts = {}) { }, }); - // OpenAPI JSON 엔드포인트 (CORS 허용 - API 문서 포털용) - fastify.get('/docs/json', { schema: { hide: true } }, async (request, reply) => { - reply.header('Access-Control-Allow-Origin', 'https://docs.caadiq.co.kr'); - reply.header('Access-Control-Allow-Methods', 'GET'); + // OpenAPI JSON 엔드포인트 + fastify.get('/docs/json', { schema: { hide: true } }, async () => { return fastify.swagger(); }); diff --git a/backend/src/services/meilisearch/index.js b/backend/src/services/meilisearch/index.js index 65f19e0..f75fd6e 100644 --- a/backend/src/services/meilisearch/index.js +++ b/backend/src/services/meilisearch/index.js @@ -151,7 +151,6 @@ function formatScheduleResponse(hit) { }, source, members, - _rankingScore: hit._rankingScore, }; }