2023-07-13 내용 추가

배민 회원시스템쪽에서 자세히 설명해두셔서 링크 추가

기타 참고 글들

  • Transactional Outbox pattern with Spring Boot (링크)

Transactonal Outbox Pattern

 

 

테이블 DDL 샘플

----

 

분산트랙잭션을 구현하는 여러 가지 방법이 있는데 그 중 outbox 패턴 방식 메모

 - 많이 쓰는 로컬 RDB를 이용하는 방법이라서 쉽게 적용 가능한 장점이 있음

 

참고 링크

 - https://www.popit.kr/msa%EC%97%90%EC%84%9C-%EB%A9%94%EC%8B%9C%EC%A7%95-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0

 

MSA에서 메시징 트랜잭션 처리하기 | Popit

비동기 메시지를 사용하여 상호 간에 통신하는 방식을 메시징 Messaging[1] 이라고 부른다. 마이크로서비스 환경에서 비동기 처리 시 보통 카프카 Kafka 나 래빗엠큐 RabbitMQ 같은 메시지 브로커 Message

www.popit.kr

 - https://debezium.io/blog/2019/02/19/reliable-microservices-data-exchange-with-the-outbox-pattern/

 

Reliable Microservices Data Exchange With the Outbox Pattern · Debezium

In order to provide their functionality, microservices will typically have their own local data store. For instance, the order service may use a relational database to persist the information about purchase orders. When a new order is placed, this may resu

debezium.io

 

- https://sarc.io/index.php/cloud/1944-msa-transactional-outbox-pattern

 

MSA - Transactional Outbox Pattern

Tech Note 정보 애리얼 님이 작성하신 글입니다. 카테고리: [ Cloud Computing & MSA ] 게시됨: 19 May 2020 작성됨: 19 May 2020 최종 변경: 26 May 2020 조회수: 3664 1. 개요 MSA에서는 서비스 간 결합도가 낮아야 하기

sarc.io

 

  1. MongoDB 드라이버를 maven pom.xml에 추가

<!-- MongoDB 드라이버를 maven pom.xml에 추가 -->

<dependency>

<groupId>org.mongodb</groupId>

<artifactId>mongodb-driver-sync</artifactId>

<version>4.0.4</version>

</dependency>

 

  1. MongoDB에 계정 생성 추가 방법

#root 권한으로 계정 생성

use admin;

db.createUser({ user: "ID입력", pwd: "암호입력", roles: [ "root" ] })

 

 

#특정 DB만 엑세스 가능한 계정 생성

use DB명 입력;

db.createUser({ user: "ID입력", pwd: "암호입력", roles: [ "readWrite" ] })

 

 

  1. java 샘플 소스

 

import com.mongodb.Block;

import com.mongodb.MongoClientSettings;

import com.mongodb.MongoCredential;

import com.mongodb.ServerAddress;

import com.mongodb.client.MongoClient;

import com.mongodb.client.MongoClients;

import com.mongodb.connection.ConnectionPoolSettings;

import org.bson.Document;

 

 

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.concurrent.TimeUnit;

 

 

/**

* 몽고DB java 4.0.4 드라이버 사용시 커넥션 소스 샘플

*  - 몽고DB 4.2에 데이터 저장하는 샘플소스

*  - DB서버는 인증모드와 replica모드가 적용되어 있음

*

* @author 엄승하

*/

public class MongoDBConnectWithAuth {

 

 

   public static void main(String[] args) {

 

 

      final String dbAddr = "DB서버주소";

 

 

      final String dbName = "DB명입력필요";

      final String user = "ID입력필요";

      final String pwd = "암호입력필요";

 

 

      final String colNm = "저장할 컬렉션명 입력 필요";

 

 

      //인증정보

      MongoCredential credential = MongoCredential.createCredential(user, dbName, pwd.toCharArray());

 

 

      //커넥션풀 설정

      Block<ConnectionPoolSettings.Builder> poolSetting = builder -> builder.maxWaitTime(4, TimeUnit.SECONDS).maxConnectionIdleTime(10000,

         TimeUnit.SECONDS).maxConnectionLifeTime(58, TimeUnit.SECONDS);

 

 

      //클러스터 또는 replica 설정

      List<ServerAddress> serverList = Arrays.asList(new ServerAddress(dbAddr, 27017));

      Block<com.mongodb.connection.ClusterSettings.Builder> clusterSettings = builder -> builder.hosts(serverList);

 

 

      //mongo와 실제 커넥션 생성(mongo client생성)

      MongoClient mongoClient = MongoClients.create(

         MongoClientSettings.builder().credential(credential).applyToConnectionPoolSettings(poolSetting).applyToClusterSettings(clusterSettings).build());

 

 

      int docsCnt = 10000;

      List<Document> docs = new ArrayList<>(docsCnt);

 

 

      for (int i = 1; i <= docsCnt; i++) {

         Document doc = new Document();

         doc.put("doc_id", i);

         doc.put("dt_ms", System.currentTimeMillis());

 

 

         docs.add(doc);

      }

 

 

      mongoClient.getDatabase(dbName).getCollection(colNm).insertMany(docs); //bulk insert

      mongoClient.close(); //자원 반환

   }

}

 

 

  1. 결과

    1. 아래와 같이 데이터가 정상적으로 저장됨을 확인 가능

 

 

www.eversql.com

'DB > 기타' 카테고리의 다른 글

웹에서 ERD 그릴수 있는 툴(무료)  (0) 2017.05.25

import org.apache.commons.validator.routines.InetAddressValidator;

위 import 후에 아래 소스

String decodedIp = URLDecoder.decode(nidIp, "UTF-8"); //IPV6의 경우 인코딩되어서 들어옴
if (InetAddressValidator.getInstance().isValid(decodedIp) == false) {
return null;
}

 

 

/**

* private key 내용을 얻어옴

* - -----BEGIN PRIVATE KEY----- 또는 -----END PRIVATE KEY----- 와 같은 가이드라인 줄은 제외하고 실제 사용하는 부분만 파일에서 가져옴

*

* @param privateKeyFile

* @return

*/

private String getPrivateKeyBody(MultipartFile privateKeyFile) {

 

try (BufferedReader br = new BufferedReader(new InputStreamReader(privateKeyFile.getInputStream()))) {

 

String line;

StringBuilder sb = new StringBuilder();

while ((line = br.readLine()) != null) {

if (line.contains("PRIVATE KEY")) { //guard line은 pass

continue;

}

sb.append(line);

}

 

return sb.toString();

 

} catch (Exception e) {

log.error(e.getMessage(), e);

throw new RuntimeException(e.getMessage(), e);

}

}

 

 

 
후배의 원래글
 
 
1) 임시 폴더 생성 후 생성된 폴더로 이동
$ mkdir temp $ cd temp
2) 이동해야할 repository를 임시 폴더 하위에 clone파일을 생성
$ git clone --bare https://github.com/exampleuser/old-repository.git
3) 생성된 clone 폴더로 이동
$ cd old-repository.git
4) 신규 repository에 push
$ git push --mirror https://github.com/exampleuser/new-repository.git
 

백엔드 API를 많이 개발하다보니 postman을 많이 사용합니다.

그런데 얼마전에 HTTP/2로 개발하는데(최신 애플서버 API나 IOT, 내부 성능 요하는 쪽 등에서 HTTP/2를 많이 사용 중) postman으로는 정상 작동 안하더군요.

 

그래서 postman git쪽 이슈를 찾아보니 개선 요청이 있더군요.

웃긴게 해당 이슈에 +1 댓글놀이(?)가 생겼습니다. ㅎㅎ

해결해줄 것 같지 않아서 일단 크롬 확장 프로그램 툴 중에 괜찮은 것 같아서 바꿧고요

 

'개발툴' 카테고리의 다른 글

Top 35 Git Commands With Examples  (0) 2021.08.24
putty세션 색깔 변경  (0) 2020.01.21
  1. 개발환경 셋팅에 앞서

    1. Flutter는 Visual Studio Code또는 Android Studio And IntelliJ 2가지를 공식적으로 지원함(링크

    2. 앱을 배포하기 위해 필요한 도구들이 Android Studio에 있고, 기타 셋팅도 편해서(intelliJ를 평소 사용하기에) Android Studio를 사용해서 셋팅을 진행

  2. Android Studio 설치

    1. https://developer.android.com/studio

    2. SDK 설치

      1. ANDROID_HOME 환경 변수 등록

      2. Sdk 하위의 platform-tools를 path에 등록

  3. Flutter SDK 다운로드

    1. https://flutter.dev/docs/development/tools/sdk/releases?tab=windows 

      1. path 설정

        1. flutter\bin path에 등록

  4. Flutter Plugin 설치

    1. Flutter Plugin 설치

    2. dart도 함께 설치

  1. Flutter 프로젝트 생성

    1. SDK Path 셋팅

       

    2. New Project

       

    3. 앱 구동 테스트

 

 

 

+ Recent posts