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.