데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      OpenLab - Kotlin, 코틀린 토이 프로젝트 아키텍처

      KIDO 24.06.03
      120 1 0
      DEVOTEE 요약
      Kotlin 오픈랩 스터디에서는 Spring, Kotlin, OpenAPI를 사용한 아키텍처를 구성하고 이를 위한 Docker-Compose 설정을 학습했습니다. 주요 기술 스택에는 Kotlin, SpringBoot, Redis, JPA, MySQL 등이 포함되며, Kafka와 Redis, MySQL을 주요 인프라 컴포넌트로 사용합니다. 설정된 Docker-Compose 파일을 활용해 여러 컨테이너들을 관리하고, 명령어를 통해 환경을 쉽게 시작하고 정지할 수 있습니다.
      DEVOTEE 추천 블로그

      안녕하세요.

      이번 시간에는 Kotlin 오픈랩 스터디에서 사용할 아키텍처 스택을 정리해 보는 시간을 가졌습니다.

      우리의 주 목적이 Spring + Kotlin + OpenAPI 이기 때문에 프로젝트 구성을 위한 아키텍처를 공유하였습니다.

      이어 이러한 아키텍처를 구성하기 위한 인프라 구성을 위한 Docker-Compose에 대해서도 배우는 시간을 가졌답니다.




      아키텍처 및 기술스택 선정하기

      Architecture Overview

      • 사용자

        • MySQL: 사용자 정보 저장

        • Kafka: 사용자 관련 처리를 위한 발송관리용

        • Redis: 사용자 토큰, 사용자 정보 캐싱

      • 프로젝트

        • MySQL: 프로젝트 정보 저장

        • Redis: 프로젝트 정보 캐싱

      • API 스펙관리

        • MySQL: 스펙 메타정보 저장

        • Kafka: 파일 후처리 전용 (삭제, git/S3/HostFile 동기화)

        • Redis: 스펙정보 캐싱


      기술스택 선정

      • Language: kotlin

      • Web Framework: SpringBoot

      • Cache Tool: Redis

      • ORM: JPA + query dsl + jooQ

      • DBMS: MySQL

      • Event Broker: Kafka

      • File Storage: S3

      • Source Version Control: GitHub

      • ETC:

        • Tika: File Media Type Check Library

        • ...


      Docker Compose

      • Docker Compose는 여러 Docker 컨테이너들을 하나의 환경에서 수행될 수 있도록 컨테이너 관리를 수행할 수 있는 도구이다.

      설정

      • 우리는 다음과 같은 툴을 설치할 것이다.

      • Kafka 설정

        • ZooKeeper: Kafka의 메타정보 및 상태관리

        • Kafka 1 ~ 3: Kafka Broker

        • Kafka-UI: UI for Apache kafka 로 카프카 모니터링 수행

      • Redis 설정

      • MySQL 설정

      version: '3.7'
      services:
        zookeeper-1:
          image: confluentinc/cp-zookeeper:5.5.1
          platform: linux/amd64
          ports:
            - '32181:32181'
          environment:
            ZOOKEEPER_CLIENT_PORT: 32181
            ZOOKEEPER_TICK_TIME: 2000
      
        kafka-1:
          image: confluentinc/cp-kafka:5.5.1
          platform: linux/amd64
          ports:
            - '9092:9092'
          depends_on:
            - zookeeper-1
          environment:
            KAFKA_BROKER_ID: 1
            KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:32181
            KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
            KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
            KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-1:29092,EXTERNAL://localhost:9092
            KAFKA_DEFAULT_REPLICATION_FACTOR: 3
            KAFKA_NUM_PARTITIONS: 3
      
        kafka-2:
          image: confluentinc/cp-kafka:5.5.1
          platform: linux/amd64
          ports:
            - '9093:9093'
          depends_on:
            - zookeeper-1
          environment:
            KAFKA_BROKER_ID: 2
            KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:32181
            KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
            KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
            KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-2:29093,EXTERNAL://localhost:9093
            KAFKA_DEFAULT_REPLICATION_FACTOR: 3
            KAFKA_NUM_PARTITIONS: 3
      
        kafka-3:
          image: confluentinc/cp-kafka:5.5.1
          platform: linux/amd64
          ports:
            - '9094:9094'
          depends_on:
            - zookeeper-1
          environment:
            KAFKA_BROKER_ID: 3
            KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:32181
            KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
            KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
            KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-3:29094,EXTERNAL://localhost:9094
            KAFKA_DEFAULT_REPLICATION_FACTOR: 3
            KAFKA_NUM_PARTITIONS: 3
      
        redis_container:
          image: redis:latest
          container_name: redis_test
          ports:
            - 6379:6379
          volumes:
            - ./redis/data:/data
            - ./redis/conf/redis.conf:/usr/local/conf/redis.conf
          labels:
            - "name=redis"
            - "mode=standalone"
          restart: always
          command: redis-server /usr/local/conf/redis.conf
      
        mysql:
          image: mysql:latest
          platform: linux/arm64
          restart: always
          volumes:
            - ./db/mysql/data:/var/lib/mysql
            - ./db/mysql/init:/docker-entrypoint-initdb.d
          ports:
            - 3306:3306
          environment:
            MYSQL_ROOT_PASSWORD: root1234
            TZ: Asia/Seoul
            MYSQL_DATABASE: myDb
            MYSQL_USER: testuser
            MYSQL_PASSWORD: testuser1234
      
        kafka-ui:
          container_name: kafka-ui
          image: provectuslabs/kafka-ui:latest
          ports:
            - 8080:8080
          depends_on:
            - kafka-1
            - kafka-2
            - kafka-3
          environment:
            KAFKA_CLUSTERS_0_NAME: local
            KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: INTERNAL://kafka-1:29092,INTERNAL://kafka-2:29093,INTERNAL://kafka-3:29094
            KAFKA_CLUSTERS_0_ZOOKEEPER: "zookeeper-1:32181"

      실행

      • docker-compose.yaml 파일이 존재하는 위치로 이동한다.

      • 이후 docker-compose -f docker-compose.yaml up -d 를 수행한다.

      cd sources/infra-sources
      
      docker-compose -f docker-compose.yaml up -d
      • 다음과 같은 결과를 얻을 수 있다.

      [+] Running 11/11
       ✔ Container redis_test2                                                                                                                                           Started      3.7s 
       ✔ Container infra-sources-zookeeper-1-1                                                                                                                           Started      3.6s 
       ✔ Container my-dynamodb                                                                                                                                           Started      3.7s 
       ✔ Container infra-sources-mysql-1                                                                                                                                 Started      3.8s 
       ✔ Container redis_test                                                                                                                                            Started      3.7s 
       ! redis_container2 The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested              0.0s 
       ! redis_container The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested               0.0s 
       ✔ Container infra-sources-kafka-3-1                                                                                                                               Started      5.4s 
       ✔ Container infra-sources-kafka-1-1                                                                                                                               Started      5.3s 
       ✔ Container infra-sources-kafka-2-1                                                                                                                               Started      5.3s 
       ✔ Container kafka-ui                                                                                                                                              Started      5.8s

      정지하기

      • 정지하기 위해서는 다음과 같은 명령어를 수행한다.

      docker-compose -f docker-compose.yaml down

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      KIDO 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기