회고: ASP.NET Core 3.0 웹 응용프로그램을 도커 컨테이너로 실행

ASP.NET Core 3.0 웹 응용프로그램을 도커 컨테이너로 실행하는 외주 작업 회고입니다.

작업기간: 일주일
비용: 비공개

목표

ASP.NET 2.0 프로젝트를 ASP.NET Core 3.0 으로 대상 프레임워크 변경해서 Ubuntu 서버에서 도커 컨테이너로 실행합니다.

컨테이너 요약

웹 응용프로그램

웹사이트 형식의 ASP.NET 2.0 프로젝트를 ASP.NET Core 3.0 으로 대상 프레임워크를 변경하고, 리팩터링합니다.

  • 사용되지 않는 코드를 제거합니다.
  • 상수를 한 곳으로 모아서 관리하기 편하도록 합니다.
  • 구성값으로 처리하면 관리에 도움이 되는 상수는 구성값으로 분리합니다.
  • IoC 를 적용해서 클래스간 의존도를 낮추도록 노력합니다.
  • .NET Core 로 데이터베이스 프로바이더가 제공되는 데이터베이스를 모두 지원할 수 있도록 데이터 처리 계층을 분리합니다.
  • 응답 데이터는 text/xml 또는 application/json 중 하나를 기본값으로 지정할 수 있어야 하고, 요청 헤더 Accept 에 따라 처리되어야 합니다.
  • 모든 엔드포인트는 미들웨어에서 처리합니다.

⚠ 응용프로그램을 가상화하지 않고, ASP.NET Core 3.0 런타임 이미지를 사용해서 컨테이너를 실행하고, 로컬 디렉터리를 마운트해서 ASP.NET Core 웹 응용프로그램을 실행합니다.

ASP.NET Core 웹 응용프로그램은 호스트 장치에서 빌드, 동작 확인 후 게시합니다.
게시 위치는 ASP.NET Core 런타임 컨테이너에 마운트된 디렉터리입니다.

게시

Nginx 를 역방향 프록시 서버로 사용합니다.
Nginx 도 도커 컨테이너로 실행합니다.

데이터베이스

대상 데이터베이스를 Microsoft SQL Server 에서 MySQL Server로 변경하려고 하였으나, 저장 프로시져를 재작성해야 해서 대상 데이터베이스는 Microsoft로 지정합니다.

MySQL Server 에서 사용할 저장 프로시져 작성 후 사용할 수 있도록 데이터베이스 변경에 대한 지원이 필요합니다.

Microsoft SQL Server 도 도커 컨테이너로 실행합니다.

진행

기존 프로젝트에 대한 설명을 자세하게 해주셔서 코드 확인을 큰 문제없이 진행했습니다.

슬랙노션으로 자료를 잘 정리해 주셨습니다.

코드 재작성 후 Hyper-V 에서 Ubuntu 18.04 를 실행하고, 세개의 도커 컨테이너로 동작을 확인한 후 전달 해드리고 프로젝트를 마무리했습니다.

ASP.NET Core 3.0

미들웨어로 요청을 처리합니다.

요청 본문 데이터 정의
IDictionary<string, string> 으로 결정

응답 본문 데이터 정의
– 처리 결과 데이터로 결정

요청 본문의 데이터를 객체로 변환하는 변환기 작성

  • .NET Core 3.0 에 추가된 System.Text.Json 네임스페이스 사용
  • .NET Core 3.0 의 System.Text.Json 네임스페이스의 기본 직렬화 처리기로 IDictionary<stirng, string> 또는 IDictionary<string, object> 처리 불가능합니다. ➡ 역직렬화를 위해 Json 변환기 작성
  • 요청 내용의 형식에 따른 분기 필요 application/json 또는 multipart/form-data
public class RequestModelJsonConverter : JsonConverter<RequestModel>
{
    public override RequestModel Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        // ❤❤❤
    }
}

처리 결과 객체를 응답 본문의 내용으로 변환하는 변환기 작성
– .NET core 3.0 에 추가된 System.Text.Json 네임스페이스 사용
– XML 직렬화 처리기 작성
– Json 직렬화 처리기 작성

public interface ISerializer
{
    string Serialize(ResponseModel model);
}
public class XmlSerializer : ISerializer
{
    public string Serialize(ResponseModel model)
    {
        // ❤❤❤
    }
}
public class JsonSerializer : ISerializer
{
    public string Serialize(ResponseModel model)
    {
        // ❤❤❤
    }
}

기능 기반 클래스 설계

  • 파일 처리
  • 데이터 처리
  • 데이터베이스 질의
  • 그 외 …

마무리

docker-compose.yml 파일 전달

  • Nginx 컨테이너
  • ASP.NET Core 3.0 runtime 컨테이너
  • Microsoft SQL Server 컨테이너

docker-compose 로 세개의 컨테이너를 순차적으로 실행할 때, 문제가 발생해서 각각 실행하는 것으로 마무리합니다.

노션으로 문서화

따라하기 형식의 문서를 노션으로 작성하여 전달합니다.

회고

이렇게 잘 지원해주시는 분과 작업을 한다면 외주 작업만 해도 좋을 것 같아요. ❤❤❤

이 사이트는 광고를 포함하고 있습니다.
광고로 발생한 수익금은 서버 유지 관리에 사용되고 있습니다.

This site contains advertisements.
Revenue generated by the ad servers are being used for maintenance.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다