이전글에서 채팅데이터를 담기 위한 DB로 Mongodb를 사용할 계획이라고 말했지만 , 데브옵스 팀원분께서 다른 의견을 주셨다. 1. 그냥 기존에 사용하는 MYSQL을 사용하는건? 2. NoSql을 사용한다면 관리포인트가 더 늘어나는데 Mongodb랑 DynamoDb중 어떤게 관리포인트 측면에서 좋을까? 3. Redis같은걸 써서 batch transcation을 사용하는건? 4. Kafka는 이전 데이터를 삭제하지 않기 때문에 Kafka를 Db처럼 사용할 수 있나? 결국 내가 채팅 데이터를 DB에 저장하는 이유는 이전에 했던 채팅내역을 그대로 들고오기 위함이다. 해당 내용을 기반으로 글을 작성해볼까 한다. 기존 MYSQL을 사용한다면... 우선 NOSQL이 기존의 RDB보다 더 빠른 읽기 쓰기 성능을 ..
해당 프로젝트에서 채팅 구현을 맡고 있었다. 이전까지는 단지 STOMP프로토콜을 사용해 직접 client에게 메세지르 바로 보내는 것을 구현하였다. 하지만 해당 과정은 synchronize하기 때문에 다량의 트래픽이 몰린다면 문제가 발생될 수 있었다. 이것을 해결하기 위해서 pub/sub 구조인 Message queue를 도입하고자한다. Message queue의 후보지는 2가지가 있다. 1. Kafka 2. Redis 이 두개의 차이점을 비교하고 현재 나의 프로젝트에 맞는 Message Queue를 선택하고자 한다. 또한 DB도 문제이다. 현재는 MYSQL에다 채팅 데이터를 저장하고 있다. 항상 고민됐던게 MYSQL에 트랜잭션도 자주 발생하고 성능도 고려가 된다... 만약 채팅을 위한 DB를 구성하고 ..
이번에 처음으로 관리자 페이지 구축계획도 세워볼까 한다. 나아가 로그관련해서는 한번도 다루어 본적이 없기에 왜 로그가 필요하며, 이번 프로젝트에서 로그를 저장하고 어떻게 관리 및 시각화 할것인가에 대해 고민해보고자 한다. 왜 로그가 필요할까? 우선적으론 '더 나은 서비스를 창출하기 위해' 라고 답할 수 있다. 한 예시로 다음과 같이 회원가입 관련 로그를 다룬다고 가정해보자 로그를 보면 한 A사용자가 10분에 회원가입 방문 페이지를 방문하였고 20분에 회원가입 완료 페이지를 방문한것을 알 수 있다. 물론 이렇게 하나의 로그만을 가지고 있다면 활용가치가 없을 수 있다. 만약 이것이 1000개가 된다면?? 1000명이 회원가입 방문 페이지를 만들었는데 회원가입 완료 페이지를 방문한 숫자는 400명밖에 되지 않..
NOSQL vs RDB 항목 NOSQL RDB(관계형) 사용 툴 MONGO-DB 사용예정 MYSQL, ORACLE, POSTGRES 중 선택 장점 스키마가 없기때문에 자유로움 -> 정형화된 스키마가 없는 경우 저장 용이(ex 빅데이터) 언제든 데이터 변형 가능 Scale-out에 용이 정해진 스키마와 이에따른 명확한 데이터 구조를 가짐 각 데이터를 중복없이 저장 ACID (Atomic, Consistency, Integrity, Duarabity)보장 - 원자가는 완벽하게 실행하거나 혹은 전혀 실행하지 않는 트랜잭션을 필요로 합니다. - 일관성은 트랜잭션이 커밋되면 데이터가 데이터베이스 스키마를 준수하도록 요구합니다. - 격리성은 동시에 일어나는 트랜잭션들이 각기 별도로 실행되어야 함을 의미합니다. - ..
SpringBoot에서 Kafka - Producer https://devbksheen.tistory.com/entry/Kafka-Spring-Boot%EC%97%90-Kafka%EB%A5%BC-%EC%97%B0%EB%8F%99?category=1024738 Spring Boot에 Kafka 연동 [Kafka] Local에서 Kafka 명령어 날리기 [Kafka] EC2 생성 후 접속, Kafka 설치 및 설정 AWS EC2 생성 후 Inbound rule 추가 1. AWS Console 로그인 후 EC2에 접속 2. EC2 인스턴스 생성 3. 키 페어 생성 4. Inbou.. devbksheen.tistory.com springboot와 kafka 연동은 다음을 참고하였음 public static St..
AS IS 현재 상황은 다음과 같다. * 데이터가 기니까 주의하세요 더보기 { "latestTwentyRecords": { "averageKill": "1.9", "averageKillRate": "6%", "lose": "10", "averageKda": "2.77", "draw": "0", "winRate": "50%", "win": "10", "averageAssist": "11.6", "averageDeath": "4.9" }, "gameRecord": [ { "death": "8", "playtimeMinutes": 35, "csPerMinutes": "1.3", "playtime": "35분44초", "semiRuneImg": "https://ddragon.canisback.com/img/pe..
구성방법 현재 구성되어 있는 방법은 다음과같다. 1.kafka topic을 -line_info -most_champion -user_info -full_record 와 같이 4개로 나누고 해당 토픽에 대응하는 컨슈머그룹을 총 4개운영한다. 현재 프로젝트 directory 구조는 다음과 같다 하나의 샘플을 예시로 들자면 샘플코드 Producer @Service public class FullRecordProducer { private static final String TOPIC = "full_record"; private final KafkaTemplate kafkaTemplate; @Autowired public FullRecordProducer(KafkaTemplate kafkaTemplate) { ..
삽질정리 # 1. node 이미지 사용 FROM node:16-alpine # 2. 패키지 우선 복사 COPY ./troller/package* /usr/src/app/ WORKDIR /usr/src/app RUN npm install # 3. 소스 복사 COPY ./troller /usr/src/app # 4. WEB 서버 실행 (Listen 포트 정의) EXPOSE 3000 CMD npm start 지금까지 사용해오던 react와 관련된 dockerfile이다 그중 RUN npm install에서 자꾸 에러가 떴다. jenkins에서 빌드해보니 [0m[91mnpm[0m[91m [0m[91mERR![0m[91m Could not resolve dependency: [0m[91mnpm..