Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Image Loader Service 구성 #35

Open
5 of 13 tasks
SAgiKPJH opened this issue Oct 10, 2024 · 6 comments
Open
5 of 13 tasks

Image Loader Service 구성 #35

SAgiKPJH opened this issue Oct 10, 2024 · 6 comments
Assignees

Comments

@SAgiKPJH
Copy link
Contributor

SAgiKPJH commented Oct 10, 2024

진행 과정

기초

서비스 구성

서비스 구현

  • 기능별 서비스 TDD로 구현
  • client 구현

모니터링 구현

  • log 서비스 모니터링 구현
  • 서비스 자원 모니터링 구현
  • grafana 구현
@SAgiKPJH SAgiKPJH self-assigned this Oct 10, 2024
@SAgiKPJH
Copy link
Contributor Author

SAgiKPJH commented Oct 10, 2024

docker 기반 hellow world 서비스 구성

  • 참고 링크
  • 새프로젝트 -> C# 콘솔앱 -> 추가정보(아래 이미지 설정) -> 만들기
    • image
// Program.cs
Console.WriteLine("Hello, World!");

@SAgiKPJH
Copy link
Contributor Author

SAgiKPJH commented Oct 10, 2024

docker 기반 di 서비스 구성

  • 참고 링크
  • DockerHelloWorld와 동일하게 구성 링크
  • Nuget Package 추가
    • Microsoft.Extensions.Hosting
  • appsettings.json 추가
    • image
    • {
      }
// Program.cs
using DockerDIService.PrintService;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var build = new ConfigurationBuilder();

build.SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
    .AddEnvironmentVariables();

var host = Host.CreateDefaultBuilder()
    .ConfigureServices((context, services) =>
    {
        services.AddTransient<IPrint, PrintConsole>();
    })
    .Build();

var printService = host.Services.GetRequiredService<IPrint>();
printService.Print("Hello World!");
public interface IPrint
{
    public void Print(string message);
}

public class PrintConsole : IPrint
{
    public void Print(string message) =>
        Console.WriteLine(message);
}

image

@SAgiKPJH
Copy link
Contributor Author

SAgiKPJH commented Oct 10, 2024

docker 기반 grpc 서비스 구성

  • 참고 링크
  • Protos
    • image
    • syntax = "proto3";
      
      option csharp_namespace = "DockerGrpcServer.Protos";
      
      service Hello {
      	rpc Hello (HelloRequest) return (HelloReply);
      }
      
      message HelloRequest {
      	string message = 1;
      }
      
      message HelloReply {
      	string reply = 1;
      }
      
  • 빌드 후 실행한 뒤 -> Hello Service 구성 가능
    • image
using DockerGrpcServer.Protos;
using Grpc.Core;

namespace DockerGrpcServer.Services;

public class HelloService : Hello.HelloBase
{
    public HelloService() { }

    public override async Task<HelloReply> Hello(HelloRequest request, ServerCallContext context)
    {
        await Task.CompletedTask;
        return new HelloReply() { Reply = "Hello World!" };
    }
}
using DockerGrpcServer.Services;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddGrpc();

var app = builder.Build();

// Configure the HTTP request pipeline.
app.MapGrpcService<HelloService>();
app.MapGet("/", () => "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");

app.Run();

image

  • grpc 수신 대기 상태입니다.

@SAgiKPJH
Copy link
Contributor Author

SAgiKPJH commented Oct 10, 2024

docker 기반 grpc 서비스 2개간 통신 구성

  • 참고 링크
  • Docker DI Service와 동일하게 구성 링크
  • Add Nuget Package
    • Google.Protobuf
    • Grpc.Net.Client : grpc 서버와 통신
    • Grpc.Tools : Visual Studio 도구 사용하기 위함
  • Server에서 Proto 파일 복사 -> Client에 붙여넣기 후 속성 -> Build Actiion : Protobuf Compiler, Stub Classas : Client Only 변경
    • image
  • 이후 빌드 및 실행 후 client 함수 작성

Docker-Compose

  • 여러 Docker를 연결시키기 위해 docker-compose 구현합니다.
  • 서비스 > 추가 > 컨테이너 오케스트라
    • image
    • image
    • image

내부 외부 포트 설정 방법

  • image
  • launchSettings.json 파일에 명시되어 있습니다.
    • https의 포트에 해당하는 port를 연결합니다.
    • 하지만 docker에서 같은 네트워크간에 포트 설정은 필요하지 않습니다.
  • 서비스 끼리 같은 네트워크 공간에 연결시킬 수 있습니다.
  • server port
# Server launchSettings.json의 https를 확인합니다.
# Local 연결의 경우
"applicationUrl": "https://localhost:63461;http://localhost:63462"
# Docker 연결의 경우
    "Container (Dockerfile)": {
      "commandName": "Docker",
      "launchBrowser": true,
      "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
      "environmentVariables": {
        "ASPNETCORE_HTTPS_PORTS": "8081",
        "ASPNETCORE_HTTP_PORTS": "8080"
      },
  • 여기서, client에서는 launchUri에 접근하면 됩니다.
    • ServiceHost는 Docker 실행의 이름 (docker-compose.yml에 명시되어 있습니다)
  • client에서는 다음과 같이 연결합니다.
# client appsettings.json
{
  "GrpcSettings": {
    "ServerUrl": "https://dockergrpcserver:63461"
  }
}

[tip] 일반 프로젝트 도커화

  • 프로젝트 도커화
    • 프로젝트 > 추가 > Docker 지원
    • image

@SAgiKPJH
Copy link
Contributor Author

SAgiKPJH commented Oct 28, 2024

docker 기반 grpc 서비스 2개간 통신 구성 (서버 - 서버)

image

  • DockerGrpcServer2_1
    • image
  • DockerGrpcServer2_2
    • image
  • Example

@SAgiKPJH
Copy link
Contributor Author

SAgiKPJH commented Nov 2, 2024

Docker db 구성

  • 예제
    • image
  • 구성
    • image

Docker Project 관리법

  1. ClassLibrary 프로젝트 관리
    • image
    • 프로젝트 폴더에 Dockerfile이 존재하면 빌드시 프로잭트를 Docker 프로젝트로 인식하여 오류가 발생합니다.
      • 반드시 하위 폴더 또는 다른 이름의 이름으로 명명합니다.
    • docker-compose에서는 다음과 같이 dockerfile을 명시합니다.
services:
  dockerdb.platform.db.postgre:
    build: 
      dockerfile: Docker DB/DockerDB.Platform.DB/Postgre/Dockerfile # 파일 지정 방법
    build: Docker DB/DockerDB.Platform.DB/Postgre/ # 디렉토리 지정 방법
    ports:
      - "5432:5432"
  1. 도커 이미지로 dockerfile 구성
    • dockerfile을 사전에 빌드하여 이미지를 만들고 docker hub에 등록을 한 뒤, 그 이름을 갖고 docker-compose에서 등록합니다.
  2. docker-compose에서 명시
    • 별도의 dockerfile 없이 바로 docker-compose에서 구성합니다.
services:
  dockerdb.platform.db.postgre:
    image: postgres:latest
    environment:
      POSTGRES_DB: ImageHandlerServiceDB
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: @@@@@
    ports:
      - "5432:5432"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant