import http from 'k6/http';
import { check, sleep } from 'k6';
import { randomItem } from '<https://jslib.k6.io/k6-utils/1.2.0/index.js>';
// ===========================================================================
// 1. [설정] 로그에서 확보한 "진짜 토큰"
// ===========================================================================
const ACCESS_TOKEN = '진짜 토큰을 작성해주면 됨(내 db에 있는 token)';
const BASE_URL = '<http://host.docker.internal:8000>';
// ===========================================================================
// 2. 테스트 옵션
// ===========================================================================
export const options = {
scenarios: {
write_heavy: {
executor: 'ramping-vus',
startVUs: 0,
stages: [
{ duration: '5s', target: 5 },
{ duration: '10s', target: 5 },
{ duration: '5s', target: 0 },
],
},
},
thresholds: {
http_req_failed: ['rate<0.01'],
http_req_duration: ['p(95)<1000'],
},
};
// ===========================================================================
// 3. 메인 테스트 로직
// ===========================================================================
export default function () {
const params = {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${ACCESS_TOKEN}`,
'Cookie': `accessToken=${ACCESS_TOKEN}`
},
};
const payload = JSON.stringify({
title: `k6 진짜 토큰 테스트`,
category: randomItem(['커피챗', '보드게임', '카공', '기타']),
description: '로그에서 딴 실제 토큰으로 테스트 중입니다.',
location: {
latitude: 37.5,
longitude: 127.0,
},
locationName: '테스트 카페',
maxCapacity: 4,
date: '2025-05-05',
startTime: '14:00:00',
});
const res = http.post(`${BASE_URL}/api/v1/boards`, payload, params);
check(res, {
'성공 (201)': (r) => r.status === 201,
'실패 (권한없음 401)': (r) => r.status !== 401,
});
sleep(1);
}
docker run --rm -i grafana/k6 run - < (k6파일이름).js
# docker-compose 파일에 k6를 넣지 않아도 docker로 돌릴수있음
026-02-04 16:37:06 <--- Last few GCs --->
2026-02-04 16:37:06
2026-02-04 16:37:06 [47:0x1b2ef8a0] 54421 ms: Scavenge (reduce) 2046.0 (2082.9) -> 2045.4 (2083.1) MB, 19.7 / 0.0 ms (average mu = 0.210, current mu = 0.003) allocation failure;
2026-02-04 16:37:06 [47:0x1b2ef8a0] 55254 ms: Mark-sweep (reduce) 2046.2 (2083.1) -> 2045.7 (2083.4) MB, 745.3 / 0.0 ms (+ 765.6 ms in 164 steps since start of marking, biggest step 19.9 ms, walltime since start of marking 1992 ms) (average mu = 0.330, current mu = 0.440
2026-02-04 16:37:06
2026-02-04 16:37:06 <--- JS stacktrace --->
2026-02-04 16:37:06
2026-02-04 16:37:06 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
2026-02-04 16:37:06 1: 0xb826e4 node::Abort() [node]
2026-02-04 16:37:07 ELIFECYCLE Command failed with exit code 134.
2026-02-04 16:37:06 2: 0xa9bf08 [node]
2026-02-04 16:37:06 3: 0xd43e90 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
2026-02-04 16:37:06 4: 0xd44060 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node]
2026-02-04 16:37:06 5: 0xf22814 [node]
2026-02-04 16:37:06 6: 0xf2347c v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [node]
2026-02-04 16:37:06 7: 0xf339c4 [node]
2026-02-04 16:37:06 8: 0xf34588 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [node]
2026-02-04 16:37:06 9: 0xf10930 v8::internal::HeapAllocator::AllocateRawWithLightRetrySlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [node]
2026-02-04 16:37:06 10: 0xf11908 v8::internal::HeapAllocator::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [node]
2026-02-04 16:37:06 11: 0xef4598 v8::internal::Factory::NewFillerObject(int, v8::internal::AllocationAlignment, v8::internal::AllocationType, v8::internal::AllocationOrigin) [node]
2026-02-04 16:37:06 12: 0x129acd4 v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [node]
2026-02-04 16:37:06 13: 0x167f6ec [node]
2026-02-04 16:37:07 Aborted
이런 에러가 뜸
backend/src/global/config/typeorm.config.ts
logging: ['warn','error'],
maxQueryExecutionTime: 1000,
# 2줄 추가해줌. 그러면 에러가 나면 확실하게 알려줌
docker-compose up --build
# docker 앱 내에서 다시 restart하면 안보임. 터미널에서 보이는거라서
nest | Decorator token: { sub: 1, iat: 1770190582, exp: 1770194182 }
nest |
nest | <--- Last few GCs --->
nest |
nest | [47:0x1b2ef8a0] 54421 ms: Scavenge (reduce) 2046.0 (2082.9) -> 2045.4 (2083.1) MB, 19.7 / 0.0 ms (average mu = 0.210, current mu = 0.003) allocation failure;
nest | [47:0x1b2ef8a0] 55254 ms: Mark-sweep (reduce) 2046.2 (2083.1) -> 2045.7 (2083.4) MB, 745.3 / 0.0 ms (+ 765.6 ms in 164 steps since start of marking, biggest step 19.9 ms, walltime since start of marking 1992 ms) (average mu = 0.330, current mu = 0.440
nest |
nest | <--- JS stacktrace --->
nest |
nest | FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
nest | 1: 0xb826e4 node::Abort() [node]
nest | 2: 0xa9bf08 [node]
nest | 3: 0xd43e90 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
nest | 4: 0xd44060 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node]
nest | 5: 0xf22814 [node]
nest | 6: 0xf2347c v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [node]
nest | 7: 0xf339c4 [node]
nest | 8: 0xf34588 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [node]
nest | 9: 0xf10930 v8::internal::HeapAllocator::AllocateRawWithLightRetrySlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [node]
nest | 10: 0xf11908 v8::internal::HeapAllocator::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [node]
nest | 11: 0xef4598 v8::internal::Factory::NewFillerObject(int, v8::internal::AllocationAlignment, v8::internal::AllocationType, v8::internal::AllocationOrigin) [node]
nest | 12: 0x129acd4 v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [node]
nest | 13: 0x167f6ec [node]
postgres | 2026-02-04 07:37:07.103 UTC [105] LOG: could not send data to client: Connection reset by peer
postgres | 2026-02-04 07:37:07.103 UTC [105] STATEMENT: SELECT "User"."created_at" AS "User_created_at", "User"."updated_at" AS "User_updated_at", "User"."deleted_at" AS "User_deleted_at", "User"."id" AS "User_id", "User"."kakao_id" AS "User_kakao_id", "User"."username" AS "User_username", "User"."region" AS "User_region", "User__User_boards"."created_at" AS "User__User_boards_created_at", "User__User_boards"."updated_at" AS "User__User_boards_updated_at", "User__User_boards"."deleted_at" AS "User__User_boards_deleted_at", "User__User_boards"."id" AS "User__User_boards_id", "User__User_boards"."title" AS "User__User_boards_title", "User__User_boards"."description" AS "User__User_boards_description", "User__User_boards"."start_time" AS "User__User_boards_start_time", "User__User_boards"."date" AS "User__User_boards_date", "User__User_boards"."category" AS "User__User_boards_category", "User__User_boards"."user_id" AS "User__User_boards_user_id", "User__User_boards"."location_id" AS "User__User_boards_location_id", "User__User_boards"."chat_room_id" AS "User__User_boards_chat_room_id", "User__User_userChatRooms"."id" AS "User__User_userChatRooms_id", "User__User_userChatRooms"."user_id" AS "User__User_userChatRooms_user_id", "User__User_userChatRooms"."chat_room_id" AS "User__User_userChatRooms_chat_room_id", "User__User_boards__User__User_boards_chatRoom"."created_at" AS "User__User_boards__User__User_boards_chatRoom_created_at", "User__User_boards__User__User_boards_chatRoom"."updated_at" AS "User__User_boards__User__User_boards_chatRoom_updated_at", "User__User_boards__User__User_boards_chatRoom"."deleted_at" AS "User__User_boards__User__User_boards_chatRoom_deleted_at", "User__User_boards__User__User_boards_chatRoom"."id" AS "User__User_boards__User__User_boards_chatRoom_id", "User__User_boards__User__User_boards_chatRoom"."chat_name" AS "User__User_boards__User__User_boards_chatRoom_chat_name", "User__User_boards__User__User_boards_chatRoom"."member_count" AS "User__User_boards__User__User_boards_chatRoom_member_count", "User__User_boards__User__User_boards_chatRoom"."max_member_count" AS "User__User_boards__User__User_boards_chatRoom_max_member_count", "User__User_boards__User__User_boards_chatRoom"."boardId" AS "User__User_boards__User__User_boards_chatRoom_boardId" FROM "user" "User" LEFT JOIN "board" "User__User_boards" ON "User__User_boards"."user_id"="User"."id" AND ("User__User_boards"."deleted_at" IS NULL) LEFT JOIN "user_chat_room" "User__User_userChatRooms" ON "User__User_userChatRooms"."user_id"="User"."id" LEFT JOIN "chat_room" "User__User_boards__User__User_boards_chatRoom" ON "User__User_boards__User__User_boards_chatRoom"."id"="User__User_boards"."chat_room_id" AND ("User__User_boards__User__User_boards_chatRoom"."deleted_at" IS NULL) WHERE ( (("User"."id" = $1)) ) AND ( "User"."deleted_at" IS NULL ) AND ( "User"."id" IN (1) )
postgres | 2026-02-04 07:37:07.104 UTC [105] FATAL: connection to client lost
postgres | 2026-02-04 07:37:07.104 UTC [105] STATEMENT: SELECT "User"."created_at" AS "User_created_at", "User"."updated_at" AS "User_updated_at", "User"."deleted_at" AS "User_deleted_at", "User"."id" AS "User_id", "User"."kakao_id" AS "User_kakao_id", "User"."username" AS "User_username", "User"."region" AS "User_region", "User__User_boards"."created_at" AS "User__User_boards_created_at", "User__User_boards"."updated_at" AS "User__User_boards_updated_at", "User__User_boards"."deleted_at" AS "User__User_boards_deleted_at", "User__User_boards"."id" AS "User__User_boards_id", "User__User_boards"."title" AS "User__User_boards_title", "User__User_boards"."description" AS "User__User_boards_description", "User__User_boards"."start_time" AS "User__User_boards_start_time", "User__User_boards"."date" AS "User__User_boards_date", "User__User_boards"."category" AS "User__User_boards_category", "User__User_boards"."user_id" AS "User__User_boards_user_id", "User__User_boards"."location_id" AS "User__User_boards_location_id", "User__User_boards"."chat_room_id" AS "User__User_boards_chat_room_id", "User__User_userChatRooms"."id" AS "User__User_userChatRooms_id", "User__User_userChatRooms"."user_id" AS "User__User_userChatRooms_user_id", "User__User_userChatRooms"."chat_room_id" AS "User__User_userChatRooms_chat_room_id", "User__User_boards__User__User_boards_chatRoom"."created_at" AS "User__User_boards__User__User_boards_chatRoom_created_at", "User__User_boards__User__User_boards_chatRoom"."updated_at" AS "User__User_boards__User__User_boards_chatRoom_updated_at", "User__User_boards__User__User_boards_chatRoom"."deleted_at" AS "User__User_boards__User__User_boards_chatRoom_deleted_at", "User__User_boards__User__User_boards_chatRoom"."id" AS "User__User_boards__User__User_boards_chatRoom_id", "User__User_boards__User__User_boards_chatRoom"."chat_name" AS "User__User_boards__User__User_boards_chatRoom_chat_name", "User__User_boards__User__User_boards_chatRoom"."member_count" AS "User__User_boards__User__User_boards_chatRoom_member_count", "User__User_boards__User__User_boards_chatRoom"."max_member_count" AS "User__User_boards__User__User_boards_chatRoom_max_member_count", "User__User_boards__User__User_boards_chatRoom"."boardId" AS "User__User_boards__User__User_boards_chatRoom_boardId" FROM "user" "User" LEFT JOIN "board" "User__User_boards" ON "User__User_boards"."user_id"="User"."id" AND ("User__User_boards"."deleted_at" IS NULL) LEFT JOIN "user_chat_room" "User__User_userChatRooms" ON "User__User_userChatRooms"."user_id"="User"."id" LEFT JOIN "chat_room" "User__User_boards__User__User_boards_chatRoom" ON "User__User_boards__User__User_boards_chatRoom"."id"="User__User_boards"."chat_room_id" AND ("User__User_boards__User__User_boards_chatRoom"."deleted_at" IS NULL) WHERE ( (("User"."id" = $1)) ) AND ( "User"."deleted_at" IS NULL ) AND ( "User"."id" IN (1) )
postgres | 2026-02-04 07:37:07.113 UTC [97] LOG: could not send data to client: Connection reset by peer
postgres | 2026-02-04 07:37:07.113 UTC [97] STATEMENT: SELECT "User"."created_at" AS "User_created_at", "User"."updated_at" AS "User_updated_at", "User"."deleted_at" AS "User_deleted_at", "User"."id" AS "User_id", "User"."kakao_id" AS "User_kakao_id", "User"."username" AS "User_username", "User"."region" AS "User_region", "User__User_boards"."created_at" AS "User__User_boards_created_at", "User__User_boards"."updated_at" AS "User__User_boards_updated_at", "User__User_boards"."deleted_at" AS "User__User_boards_deleted_at", "User__User_boards"."id" AS "User__User_boards_id", "User__User_boards"."title" AS "User__User_boards_title", "User__User_boards"."description" AS "User__User_boards_description", "User__User_boards"."start_time" AS "User__User_boards_start_time", "User__User_boards"."date" AS "User__User_boards_date", "User__User_boards"."category" AS "User__User_boards_category", "User__User_boards"."user_id" AS "User__User_boards_user_id", "User__User_boards"."location_id" AS "User__User_boards_location_id", "User__User_boards"."chat_room_id" AS "User__User_boards_chat_room_id", "User__User_userChatRooms"."id" AS "User__User_userChatRooms_id", "User__User_userChatRooms"."user_id" AS "User__User_userChatRooms_user_id", "User__User_userChatRooms"."chat_room_id" AS "User__User_userChatRooms_chat_room_id", "User__User_boards__User__User_boards_chatRoom"."created_at" AS "User__User_boards__User__User_boards_chatRoom_created_at", "User__User_boards__User__User_boards_chatRoom"."updated_at" AS "User__User_boards__User__User_boards_chatRoom_updated_at", "User__User_boards__User__User_boards_chatRoom"."deleted_at" AS "User__User_boards__User__User_boards_chatRoom_deleted_at", "User__User_boards__User__User_boards_chatRoom"."id" AS "User__User_boards__User__User_boards_chatRoom_id", "User__User_boards__User__User_boards_chatRoom"."chat_name" AS "User__User_boards__User__User_boards_chatRoom_chat_name", "User__User_boards__User__User_boards_chatRoom"."member_count" AS "User__User_boards__User__User_boards_chatRoom_member_count", "User__User_boards__User__User_boards_chatRoom"."max_member_count" AS "User__User_boards__User__User_boards_chatRoom_max_member_count", "User__User_boards__User__User_boards_chatRoom"."boardId" AS "User__User_boards__User__User_boards_chatRoom_boardId" FROM "user" "User" LEFT JOIN "board" "User__User_boards" ON "User__User_boards"."user_id"="User"."id" AND ("User__User_boards"."deleted_at" IS NULL) LEFT JOIN "user_chat_room" "User__User_userChatRooms" ON "User__User_userChatRooms"."user_id"="User"."id" LEFT JOIN "chat_room" "User__User_boards__User__User_boards_chatRoom" ON "User__User_boards__User__User_boards_chatRoom"."id"="User__User_boards"."chat_room_id" AND ("User__User_boards__User__User_boards_chatRoom"."deleted_at" IS NULL) WHERE ( (("User"."id" = $1)) ) AND ( "User"."deleted_at" IS NULL ) AND ( "User"."id" IN (1) )
postgres | 2026-02-04 07:37:07.113 UTC [97] FATAL: connection to client lost
postgres | 2026-02-04 07:37:07.113 UTC [97] STATEMENT: SELECT "User"."created_at" AS "User_created_at", "User"."updated_at" AS "User_updated_at", "User"."deleted_at" AS "User_deleted_at", "User"."id" AS "User_id", "User"."kakao_id" AS "User_kakao_id", "User"."username" AS "User_username", "User"."region" AS "User_region", "User__User_boards"."created_at" AS "User__User_boards_created_at", "User__User_boards"."updated_at" AS "User__User_boards_updated_at", "User__User_boards"."deleted_at" AS "User__User_boards_deleted_at", "User__User_boards"."id" AS "User__User_boards_id", "User__User_boards"."title" AS "User__User_boards_title", "User__User_boards"."description" AS "User__User_boards_description", "User__User_boards"."start_time" AS "User__User_boards_start_time", "User__User_boards"."date" AS "User__User_boards_date", "User__User_boards"."category" AS "User__User_boards_category", "User__User_boards"."user_id" AS "User__User_boards_user_id", "User__User_boards"."location_id" AS "User__User_boards_location_id", "User__User_boards"."chat_room_id" AS "User__User_boards_chat_room_id", "User__User_userChatRooms"."id" AS "User__User_userChatRooms_id", "User__User_userChatRooms"."user_id" AS "User__User_userChatRooms_user_id", "User__User_userChatRooms"."chat_room_id" AS "User__User_userChatRooms_chat_room_id", "User__User_boards__User__User_boards_chatRoom"."created_at" AS "User__User_boards__User__User_boards_chatRoom_created_at", "User__User_boards__User__User_boards_chatRoom"."updated_at" AS "User__User_boards__User__User_boards_chatRoom_updated_at", "User__User_boards__User__User_boards_chatRoom"."deleted_at" AS "User__User_boards__User__User_boards_chatRoom_deleted_at", "User__User_boards__User__User_boards_chatRoom"."id" AS "User__User_boards__User__User_boards_chatRoom_id", "User__User_boards__User__User_boards_chatRoom"."chat_name" AS "User__User_boards__User__User_boards_chatRoom_chat_name", "User__User_boards__User__User_boards_chatRoom"."member_count" AS "User__User_boards__User__User_boards_chatRoom_member_count", "User__User_boards__User__User_boards_chatRoom"."max_member_count" AS "User__User_boards__User__User_boards_chatRoom_max_member_count", "User__User_boards__User__User_boards_chatRoom"."boardId" AS "User__User_boards__User__User_boards_chatRoom_boardId" FROM "user" "User" LEFT JOIN "board" "User__User_boards" ON "User__User_boards"."user_id"="User"."id" AND ("User__User_boards"."deleted_at" IS NULL) LEFT JOIN "user_chat_room" "User__User_userChatRooms" ON "User__User_userChatRooms"."user_id"="User"."id" LEFT JOIN "chat_room" "User__User_boards__User__User_boards_chatRoom" ON "User__User_boards__User__User_boards_chatRoom"."id"="User__User_boards"."chat_room_id" AND ("User__User_boards__User__User_boards_chatRoom"."deleted_at" IS NULL) WHERE ( (("User"."id" = $1)) ) AND ( "User"."deleted_at" IS NULL ) AND ( "User"."id" IN (1) )
nest | Aborted
nest | ELIFECYCLE Command failed with exit code 134.
nest exited with code 134
src/user/user.service.ts
/** 유저 정보 조회(작성한 게시글 포함) */
async getUserById(
id: number,
createdBoardsPagingParams: PagingParams,
joinedBoardsPagingParams: PagingParams,
): Promise<UserResponseDto> {
const user = await this.userRepository.findOne({
where: { id },
relations: ['boards', 'userChatRooms'], #여기가 문제임.
});