---
# System prepended metadata

title: SDK 는 어떻게 데이터를 보낼 것 인가.

---

# SDK 는 어떻게 데이터를 보낼 것 인가.
1. mongoDB DSN 을 이용해서 sdk 에서 db 로 보낸다. ( SDK => mongoDB server?? )
    - 하는 방법에 대해서 잘 모름 (data source name)
    - 왜 사용했을까?
    - 기존 Sentry 에서는 이부분을 설정 하는 것을 보면 이 방법을 사용한 듯 ??
        - [예시 DSN 주소](https://84a4c6a448f447f78fb1f6983a567be9@o477808.ingest.sentry.io/5519343)
    - [mongoDB](https://docs.mongodb.com/bi-connector/master/tutorial/create-system-dsn)
    - DSN 을 어디서,어떻게 만들것 인가 생각해보아야한다. ( Sentry 에서는 사이트에서 받아서 코드에 넣는 것을 보면, 서버에서 만드는 것 같다. )
    - dsn 클래스에서 받은것들을 요소로 가지고 있다가 조합해서 httpRequest 에 담아서 보내는 것 같다 ? 
        - [HttpRequest](https://github.com/getsentry/sentry-javascript/blob/73b9bbd4c42efa5f95a7d5446b3390dd859f82fa/packages/node/src/transports/base.ts#L56)
        - [api](https://github.com/getsentry/sentry-javascript/blob/73b9bbd4c42efa5f95a7d5446b3390dd859f82fa/packages/core/src/api.ts#L7)
        - [DSN](https://github.com/getsentry/sentry-javascript/blob/master/packages/utils/src/dsn.ts)
    - [Sentry DSN](https://docs.sentry.io/product/sentry-basics/dsn-explainer/)
    - DSN이란 주소를 분석해서 SDK내에서 POST 방식으로 요청을 보낸다. 예상으로 3번방법이랑 차이점이 거의 없다고 볼수 있을거 같다?

2. 그냥 db 를 연결해서 보낸다. ( SDK => DB )
    - db 설정이 들어가야한다
    - 보안 문제가 있을 것 같음
    - 사용자 권한으로 읽기쓰기를 줄수 밖에 없기 때문에, 원치 않는 데이터가 삭제될 가능성이 존재한다.

3. cURL post 로 보내기 (node의 http 이용) (SDK => Backend => DB) (1번과 달리 백엔드 서버가 1개)
    - 백엔드 서버 정보를 아는 것은 별로 일것 같다.
    - 세 방법중 가장 구현하기 쉽다.
    - SDK.init에 로그인 정보를 포함하여 미들웨어에서 걸러준다.
    - 요청이 왔을 때 업데이트를 고려하면 되기 때문에 DB를 계속 모니터링하는 것 보다 효율적일 수 있다? 
        한편으로는 요청이 너무 많을 수 있으므로 시간 간격으로 DB에 쌓인 정보를 가져오는게 좋을 수도 있다.
    - SDK에서 정보 가공할 필요 없이 백엔드 측에서 가공해서 정보를 입력할 수 있다.


4. 질문사항
    - sentry의 dsn 동작 원리, SDK의 의존성
        - 의존성을 쓰지 않고 따로 만들경우 성능 상 이점이 있다.
        - Axios등 모듈을 쓰면 개발 시간상 이점이 있다.
    - event가 발생될 때 마다 요청을 보내면 서버와의 통신이 너무 잦아질 것 같은데 queue로 모아서 보낸다거나 시간간격을 두고 보내는 방법에 대해서 어떻게 생각하시는지..?
        - mongoDB의 성능을 생각해서 고려하지 않아도 된다.
    - 통신이 너무 잦은 것에 대한 성능 테스트를 해볼 수 있을지
        - nGrinder, Artillery

5. 조언
    - Oauth
    - 테스트 코드 (Jest를 이용해서 꼭)
    - SonarQube 정적 분석도구

```json
{
	"dsn": "https://public@sentry.example.com/1" post
}

=>
POST

{
	"URI" = "https://sentry.example.com", // Sentry 의 경우 여러 백엔드 서버가 존재하기에 필요하지만, 없어도 된다.
	"Public Key" = "public", // Header => Authorization?
	"Secret Key" = "", // Not Use
	"Project ID" = 1 // URL Params
}

결론
header
{
    "ProjectID" = 1,
    "Public KEy" = "token"
}

body
{
    "sdk" = 1

}
```

----

```jsx
// Javascript



Sentry.init({
  dsn: "https://35bb12ec2c8f4c8f8236617ff6182186@o477285.ingest.sentry.io/5520903",
  integrations: [
    new Integrations.BrowserTracing(),
  ],

  // We recommend adjusting this value in production, or using tracesSampler
  // for finer control
  tracesSampleRate: 1.0,
});
```
```jsx
// React
Sentry.init({
  dsn: 'https://e1f3c014d2a04409a03d6dafc9b54ae8@o477285.ingest.sentry.io/5520910',
  integrations: [
    new Integrations.BrowserTracing(),
  ],

  tracesSampleRate: 1.0,
});
```
```java
// Java
import io.sentry.Sentry;

Sentry.init(options -> {
  options.setDsn("https://6051bdc78c084f4c9785a191a3b0061b@o477285.ingest.sentry.io/5520911");
});
```