Bedrock 크리티컬 이슈(?)

위 글 올렸던 작성자 입니다.
크래시 리포트 올려드렸지만 아직 별다른 답변이 없으신 동안
해결이 되지 않아서 출시 예정일은 미뤄지고 있고 삽질은 계속 하고 있었습니다.

문제상황을 여러가지 케이스로 재현해보고
원인을 발견한 것 같아서 제보드립니다.

우선 bedrock에서 네트워크 요청시 응답 파싱과정에서 무언가 작업을 하는것인지,
응답 json의 첫번째 depth에 data라는 키로 string값이 있을경우 크래시가 발생합니다.
이것은 비단 POST 요청만의 문제는 아니었고 GET 요청시에도 응답JSON에 string값을 가진 data 필드가 포함되면 발생합니다.
data에 array, object, number 가 내려올 경우에는 문제 없습니다.

이 부분 빠르게 검토 및 패치 해주시면 감사하겠습니다.
이것때문에 3일을 삽질하고 출시를 못하고 있었어서.. 좀 허무하고 황당하네요..

@Dylan 샌드박스 앱 2025-10-28 버전 올라온것 지금 확인해서, 혹시 해결되었을까 싶어서 iOS 2025-10-28으로 테스트 해봐도 동일합니다.

안녕하세요,
지금 한번 확인해보겠습니다 :man_bowing:

1개의 좋아요

조금전 nest 로컬 서버를 두고
미니앱 > POST > nest 로컬 서버로 테스트해보았는데요..!
문제없이 응답을 받아오는 것을 확인했습니다 :cry:

혹시 재현 환경을 자세히 알 수 있을까요 ?

@Dylan 확인해주셔서 감사합니다.

client

const setUserName = async () => {
  try {
    const response = await fetch('https://4e323e4b0b77.ngrok-free.app/users', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        name: 'somestring',
      }),
    });
    const data = await response.json();
    console.log('data', data);
  } catch (error) {
    console.error('setUserName error:', error);
  }
};

server

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Post()
  create(@Body() createUserDto: CreateUserDto) {
    return { data: 'Hello! Test!' };
  }
}

environment

  • simulator
    • iPhone 16 Plus / iOS 18.6
  • package.json
    • 
        "dependencies": {
          "@apps-in-toss/framework": "^1.3.0",
          "@granite-js/native": "0.1.29",
          "@granite-js/react-native": "0.1.29",
          "@toss/tds-react-native": "^1.3.3",
          "dayjs": "^1.11.18",
          "react": "18.2.0",
          "react-native": "0.72.6"
        },
      

이런 구성에서 발생했습니다.
혹시 더 알려드리면 좋을 환경 값이 있다면 알려주세요.

재현 안되었던 환경 알려주시면 저도 그렇게 세팅하고 테스트 해봐도 좋을 것 같습니다.

제 쪽에서 재현되는 문제의 원인은 파악되었으니, 서버 개발할 때 문제 상황을 만들지 않는 방향으로 하면 될 것 같아서 긴급도는 낮은 것 같습니다.

//react
    const handleTestPost = useCallback(async () => {
        const baseUrl = (import.meta as any).env?.VITE_API_URL || 'http://localhost:4000';
        try {
            const res = await fetch(`${baseUrl}/test`, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                },
                body: JSON.stringify({ ts: Date.now() }),
            });
            const data = await res.json().catch(() => ({}));
            if (!res.ok) throw new Error(data?.error || `HTTP ${res.status}`);
            alert(`POST 성공: ${JSON.stringify(data)}`);
        } catch (e: any) {
            console.error('POST 실패:', e);
            alert(`POST 실패: ${e?.message || e}`);
        }
    }, []);
// nest 서버단
import { Controller, Get, Post, Body } from '@nestjs/common';

@Controller('test')
export class TestController {
  @Get()
  getTest() {
    return { data: 'Hello from NestJS!' };
  }

  @Post()
  createTest(@Body() body: any) {
    return {
      data: 'Hello! Test!',
    };
  }
}

이렇게 호출하였습니다.
엇 혹시 어떤 문제였는지 알 수 있을까요 ?

제가 사용한 workaround는 data필드에 값 내릴때는 string이 아닌 object로 내리는 것 입니다.
network 요청/응답에 interceptor 걸어봐도 request interceptor는 걸리는데, response interceptor는 걸리지도 않는걸 봐서는 샌드박스앱 또는 기타 프레임워크에서 json응답의 data필드를 처리하는 로직이 있고, string 타입 데이터 처리할때 오작동 하는게 있는게 아닐까 추측하고 있습니다.

남겨주신 샘플코드로 테스트해봐도 저는 크래시 재현되네요.
제가 디버깅을 꼼꼼히 해볼 수 없는 상황이라, 단지 data 키워드에 무언가 이슈가 있다 정도로 추측밖에 하지 못하겠네요.
어떤 환경적 요인이 이슈를 발생시키는건지.. 저도 너무 궁금하네요.