# 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");
});
```