이전 포스트에서는 Dapper 혹은 Entity 클래스 내에서 각각 SQL Server 문자열을 생성해줘야 했다.
이러면 SQL Server가 변경되는 경우, 수정 노가다가 반드시 발생한다.
이러한 문제를 해결하기 위해서, json 파일로 기본 구성요소를 제작하여, 전역으로 사용할 수 있도록 한다.
우선, appSettings.json
을 루트 디렉토리에 생성한다.
그리고 ConnectionStrings
키로 맵핑하여, DefaultConnection
을 작성한다.
ConnectionStrings
는 이후 있을 IConfiguration
의 기본 구성 요소이다.
Configuration 을 구성하기 위한 패키지들을 추가해준다.
IConfiguration config = new ConfigurationBuilder().AddJsonFile("appSettings.json").Build();
IConfiguration
클래스로 config 객체를 생성한다.
이 때, ConfigurationBuilder
를 이용해 우리가 생성한 json
파일을 등록하고 빌드하여 객체를 생성한다.
public DataContextDapper(IConfiguration config)
{
_config = config;
_connectionString = config.GetConnectionString("DefaultConnection");
}
config
객체롤 부터 ConnectionString
에 있는 Value
(object) 내부에 DefaultConnection
으로 맵핑된 값을 찾는다.
위와 같은 방식으로 구현하여 코드의 재사용성이 높아지고, 유지보수가 간편해진다.
어디서든 appSettings.json
에 있는 config 설정 값을 따라가기 때문에, 해당 파일에서만 수정해주면 되는 것이다.
Unhandled exception. System.IO.FileNotFoundException: The configuration file 'appSettings.json' was not found and is not optional. The expected physical path was '/Users/sarumani/dev/study/HelloWorld/bin/Debug/net8.0/appSettings.json'.
하지만, 바로 실행하면 위와 같은 에러가 발생할텐데, 이는 실제 프로젝트가 실행되는 경로에 appSettings.json
이 존재하지 않기 때문이다.
그래서 csproj
파일에 appSettings.json
을 등록해 주어야 한다.
<None Update="appSettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
위와 같은 내용을 <ItemGroup>
에 추가해준다.
코드 해석
이 XML 스니펫은 .NET 프로젝트 파일(예: .csproj)에서 특정 파일의 빌드 동작을 정의하는 항목입니다. 각 요소의 의미는 다음과 같습니다:
<None Update="appSettings.json">: 이 라인은 appSettings.json 파일을 가리키고 있으며, 파일의 속성을 업데이트하고 있음을 나타냅니다. None 요소는 빌드 시 특정 동작을 수행하지 않는 파일을 정의하는 데 사용됩니다.
<CopyToOutputDirectory>Always</CopyToOutputDirectory>: 이 속성은 파일을 출력 디렉터리로 복사하는 방법을 지정합니다. Always 값은 파일이 빌드될 때마다 출력 디렉터리(예: bin/Debug 또는 bin/Release)로 항상 복사되도록 합니다.
종합하면, 이 코드는 appSettings.json 파일이 빌드될 때마다 항상 출력 디렉터리에 복사되도록 설정하고 있습니다. 이를 통해 빌드된 애플리케이션이 실행될 때 해당 설정 파일을 사용할 수 있도록 보장합니다.