ํ์ฌ System.Data.Common ์ ๋ํ ๊ฒ์์ ์ธํฐํ์ด์ค(IDbCommand, IDbConnection ๋ฑ)๋ ์ถ์ ํด๋์ค ์ฌ์ฉ์ ์ํด ์ ๊ฑฐ๋์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ API์์๋ ๋๋ถ๋ถ์ ์ฃผ์ ๋ฉ์๋๊ฐ ๊ฐ์ ๋๋ ์ถ์์ด ์๋๋๋ค. DbCommand์์๋ง ๋ค์์ ๋ณผ ์ ์์ต๋๋ค.
public DbConnection Connection { get; set; }
public DbParameterCollection Parameters { get; }
public DbTransaction Transaction { get; set; }
public DbParameter CreateParameter();
public Task<int> ExecuteNonQueryAsync();
public DbDataReader ExecuteReader();
public DbDataReader ExecuteReader(CommandBehavior behavior);
public Task<DbDataReader> ExecuteReaderAsync();
public Task<DbDataReader> ExecuteReaderAsync(CommandBehavior behavior);
public Task<DbDataReader> ExecuteReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken);
public Task<DbDataReader> ExecuteReaderAsync(CancellationToken cancellationToken);
public Task<object> ExecuteScalarAsync();
์ด๋ฌํ ๋ฉ์๋๋ ํ์คํ ๊ฐ์ ๋๋ ์ถ์์ผ๋ก ๋ง๋ค ์ ์์ง๋ง ์ค์ ์ธํฐํ์ด์ค๋ฅผ ๋ค์ ์ฌ์ฉํ๊ณ ๋ชจ๋ ๊ณต์ฉ API๊ฐ ์ถ์ ํด๋์ค ๋์ ์ด๋ฌํ ์ธํฐํ์ด์ค์ ์ข ์๋๋๋ก ํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ ์ฉํฉ๋๋ค.
์ด๊ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ๋ฐํ ๋ ์ฃผ๋ก ์ ์ฉํฉ๋๋ค. ์ค๋๋ ๋ฐ์ดํฐ ๋ฆฌ๋๋ฅผ ์กฐ๋กฑํ์ฌ ํ ์คํธ ๋ชฉ์ ์ผ๋ก ํน์ ๊ฐ์ ๋ฐํํ๋๋ก ํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ExecuteReader๊ฐ ์๋ ExecuteReaderAsync๊ฐ ํธ์ถ๋์๋์ง ํ์ธํ๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
๋์ ์ ๊ณต์ ํฉํ ๋ฆฌ๋ฅผ ์ธํฐํ์ด์ค๋ก ๋ง๋ค์ด์ผ ํ๋ค๊ณ ์ ์ํฉ๋๋ค.
public interface IDbProviderFactory {
IDbCommand CreateCommand();
IDbConnection CreateConnection();
IDbConnectionStringBuilder CreateConnectionStringBuilder();
IDbParameter CreateParameter();
}
๊ทธ๋ฐ ๋ค์ IDbDataReader
, IDbTransaction
๋ฑ๊ณผ ๊ฐ์ ๊ณต๊ธ์์ ๋๋จธ์ง ๋ถ๋ถ์ผ๋ก ์ด๋ํฉ๋๋ค.
์ธํฐํ์ด์ค๊ฐ ๊ณผ๊ฑฐ์ ์ด๋ค ์ด์ ๋ก ๋๊ธฐํ๋์ง ์์๊ณ ์ถ์ ํด๋์ค๊ฐ ๊ณต์ API๊ฐ ๋์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง corefx์์๋ ๋ ์ด์ ๊ทธ๋ด ํ์๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ ์ด๋ค ์์ผ๋ก๋ System.Data.Common์ ์ ๊ฑฐํ๋ ๊ฒ์ ์๋ฏธํ์ง ์์ง๋ง ๋์ Common ํด๋์ค๊ฐ ์ด๋ฌํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ก ํ๊ณ ๊ณต๊ธ์๋ฅผ ๊ตฌํํ์ง ์๋ ํ System.Data.Common์ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ ๋์ ์ธํฐํ์ด์ค์๋ง ์์กดํฉ๋๋ค.
corefx 1.0์์ API๋ฅผ ๋ณด๋ค ์ฝ๊ฒ โโํ ์คํธํ ์ ์๋๋ก ์ด ์ ์ ๊ณ ๋ คํ์ญ์์ค.
dotnet/runtime#14302 ๋ฐ dotnet/runtime#15269์ ๋ํ ํ ๋ก ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค.
์ธํฐํ์ด์ค์ ๋ฒ์ ์ ์ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ถ์ ๊ธฐ๋ณธ ํด๋์ค๋ก ์ ํํ์ ๊ฒ์ ๋๋ค.
๊ฐ์์ด ์๋ ๋ฉ์๋๊ฐ ๊ฐ์์ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค๊ณ ์ถ์ธกํ๊ณ ์์ต๋๋ค. ๊ฐ์ ๋ฉ์๋๋ ์ฑ๋ฅ์ ์ ํ์ํค๋ฏ๋ก ๋ถํ์ํ๊ฒ ๊ฐ์์ผ๋ก ๋ง๋ค๊ณ ์ถ์ง ์์ต๋๋ค.
@JamesNK ์๊ฒ ์ต๋๋ค . ๊ทธ๋ฌ๋ .NET Core๊ฐ ์๋ก์ด API์ด๊ณ ADO.NET API๊ฐ ๊ฑฐ์ 10๋ ์ ๊ฑธ์ณ ๋งค์ฐ ์์ ์ ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ฌ์ ํ ์ ํจํ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ญ๋๊น? ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ธ์ค์ ๋ํด ์ด์ผ๊ธฐํ ๋ ๊ฐ์ ๋ฉ์๋์ ๋น์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ธ์ค ๋น์ฉ์ ๋นํด ์์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@NickCraver , @roji , @FransBouma ์ฌ๋ฌ๋ถ์ด ADO.NET API์ ๊ด์ฌ์ด ์๋ ๊ฒ ๊ฐ์ผ๋ ์ด์ ๋ํด ํ ๋ง์ด ์์ต๋๊น?
@YoungGah , ์ด๊ฑด ์ถ๊ตฌํ ๊ฐ์น๊ฐ ์๋ ์ผ์ธ๊ฐ์?
๊ฐ์์ด ์๋ ๋ฉ์๋๊ฐ ๊ฐ์์ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค๊ณ ์ถ์ธกํ๊ณ ์์ต๋๋ค. ๊ฐ์ ๋ฉ์๋๋ ์ฑ๋ฅ์ ์ ํ์ํค๋ฏ๋ก ๋ถํ์ํ๊ฒ ๊ฐ์์ผ๋ก ๋ง๋ค๊ณ ์ถ์ง ์์ต๋๋ค.
์๊ฒฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์์ virtcall์์ ์์ค๋๋ ๋๋ ธ์ด๋ ๋ฌด์ํ ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ADO.NET์ ์ฒ์๋ถํฐ ์ด ์์คํ ์ ์ฌ์ฉํ์ผ๋ฉฐ(.NET์ ๋ค๋ฅธ ๋ง์ API๋ ๋ง์ฐฌ๊ฐ์ง) ๊ฐ์ ๋ฉ์๋ ํธ์ถ๋ก ์ธํด DB ์ฝ๋๊ฐ ๋๋ฌด ๋๋ฆฌ๋ค๊ณ ๋ถํํ๋ ์ฌ๋์ ์๋ฌด๋ ์์์ต๋๋ค.
๋ชฉ๋ก์์ ๋น๋๊ธฐ ๋ฉ์๋๋ฅผ ๋ณผ ์ ์์ผ๋ฏ๋ก ๋ช ๋ ์ ๋ง ํด๋ MS๋ IDbCommand์ ๋น๋๊ธฐ๋ฅผ ์ถ๊ฐํ ์ ์์์ต๋๋ค. ์๋ก์ด ๋ฐฉ๋ฒ์ด๋ ์์ฑ์ด ํ์ํ ๋ด์ผ์ด ๋ฌด์์ธ์ง ๋๊ฐ ์๊ฒ ์ต๋๊น?
์ธํฐํ์ด์ค๋ ๋ฒ์ ์ ์ง์ ํ์ง ์์ต๋๋ค.
์ฑ๋ฅ์ ๋ฌด์ธ๊ฐ๋ฅผ ๊ฐ์์ผ๋ก ๋ง๋ค์ง ์๋ ํ ๊ฐ์ง ์ด์ ์ผ ๋ฟ์ ๋๋ค. ์ํ๋ํธ๋ฅผ ์ํ ํ๋ฉด์ ์ ์ค์ด๋ ๊ฒ์ด ๊ฐ๋ฅํ ๊น์? ๋๋ MS์ ๋๊ตฐ๊ฐ๊ฐ ์ ๊ทธ๋ ๊ฒ ํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํ๋์ง ๋งํ๊ฒ ํ ๊ฒ์ ๋๋ค. ์ ๋ ADO.NET์ ๋ํด ๋ง์ด ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ถ์ธก๋ง ํ ๋ฟ์ ๋๋ค.
@JamesNK ๊ทํ์ ์ฐ๋ ค๊ฐ ํ๋นํ๋ค๊ณ ์๊ฐํ์ง๋ง ๊ณ ๋ คํด์ผ ํ ๋ ๊ฐ์ง ์ค์ํ ์ฌํญ์ด ์์ต๋๋ค.
"localhost"์ ์๋ SQL ์๋ฒ๋ผ๋ ์ฐ๊ฒฐํ๊ณ ๋น ์ฟผ๋ฆฌ๋ฅผ ๋ฐํํ๋ ๋ฐ ์ต์ํ ๋ช ms๋ฅผ ์๋นํ๋ค๋ ์ ์ ๊ณ ๋ คํ์ญ์์ค. ์ค์ ๋ก ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ๋๋ถ๋ถ์ _fast_ ์ฟผ๋ฆฌ๋ ~20ms๊ฐ ๊ฑธ๋ฆฝ๋๋ค.
NSubstitute ๋๋ Moq์ ๊ฐ์ ํ์ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ API๋ฅผ ์กฐ๋กฑํ ์ ์๋ค๋ ๊ฒ์ ๊ฐ์ ๋ฉ์๋ ์กฐํ์์ ๋ง์ดํฌ๋ก์ด๋ฅผ ์ ์ฝํ๋ ๊ฒ๋ณด๋ค ์ค๋๋ ๊ฐ๋ฐ์์๊ฒ ํจ์ฌ ๋ ๊ฐ์น๊ฐ ์์ต๋๋ค.
๋๋ ์ฌ๊ธฐ์ ๋งค์ฐ ๊ฐํ ์๊ฒฌ์ ๊ฐ์ง๊ณ ์์ง ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ฌ๊ธฐ์ ๋ช ๊ฐ์ง ์๊ฒฌ์ด ์์ต๋๋ค.
CommandBehavior.Default
๋ฅผ ์ค๋ฒ๋ก๋์ ์ ๋ฌํฉ๋๋ค. ๊ทธ๋ ๊ตฐ์. ์ธํฐํ์ด์ค๋ก ์ ํํ๋ฉด ๋ชจ๋ ๊ณต๊ธ์๋ ์ ํํ ๋์ผํ ์์ฉ๊ตฌ๋ก ExecuteReader()๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค...๋ฐ๋ผ์ ๊ธฐ๋ณธ ํด๋์ค๋ ์ธํฐํ์ด์ค ์ค ํ๋๋ฅผ ์ญ์ ํ๋ค๋ ์์ด๋์ด๋ ์ ๋ฐ์ ์ผ๋ก ์ข์ ๋ณด์ ๋๋ค(๋ ๊ฐ๋จํฉ๋๋ค). ์ธํฐํ์ด์ค์ ๋ํ ์ด์ ์ด ์๋ค๊ณ ์๊ฐํ๊ณ (์กฐ๋กฑ์ ์ฉ์ด์ฑ์ ๋ํด ๋ด๊ฐ ํ๋ฆฌ์ง ์๋ ํ) ๊ธฐ๋ณธ ํด๋์ค๋ ๊ณตํต ๊ธฐ๋ฅ(์ฆ, ๊ฐ์์ด ์๋ ๋น์ถ์ ๋ฉ์๋)์ ์ ๊ณตํ ์ ์๊ธฐ ๋๋ฌธ์ ์ธํฐํ์ด์ค๋ฅผ ๋คํํ๋ Microsoft์ ์ ๊ทผ ๋ฐฉ์์ ์ถ์ธกํฉ๋๋ค. ๋์๊ฒ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค ...
๋๋ ๊ทธ์ ๋ชจ๋ ์์ ์ ๋ํด
@roji ๋ ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด ์๋๋ผ ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ณธ API๋ก ์ถ๊ฐํ๋ ๊ฒ์ ์ ์ํฉ๋๋ค. ๊ธฐ๋ณธ ํด๋์ค๋ ์ฌ์ ํ ๊ธฐ๋ณธ ๋์์ ๊ตฌํํ ์ ์์ต๋๋ค.
ํ ์คํธ์ ๊ดํด์๋ ๋ด API๊ฐ ์ฌ๋ฐ๋ฅธ ๋ฉ์๋๋ฅผ ํธ์ถํ๋์ง ํ ์คํธํ๋ ๋ฐ ํฐ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์๋ฅผ ๋ค์ด ExecuteDataReader๊ฐ ์ฌ๋ฐ๋ฅธ ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ๋์ง ํ์ธํ๋ ค๋ฉด ๋ด๋ถ์ ์ผ๋ก ๋ค๋ฅธ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํธ์ถ๋๋ ๋ค๋ฅธ ๋ณดํธ๋ ๋ฉ์๋๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ด์์ ์ด์ง ์์ต๋๋ค.
ํ์ฌ ๋ด๊ฐ ์ค์ํ์ง ์๋ ํ ADO.NET API๋ฅผ ์กฐ๋กฑํ ์ ์๋ ์ ์ผํ ํ๋ ์์ํฌ๋ ํธ์ถ์ ๊ฐ๋ก์ฑ์ ๋ชจ๋ ๊ฒ์ ์กฐ๋กฑํ ์ ์๋ MS Fakes ํ๋ ์์ํฌ์ ๋๋ค. Moq์ ๋ค๋ฅธ ์ฌ๋๋ค์ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค.
๋ค๋ฅธ ์ฌ๋๋ค๋ ๋น์ทํ ๋ฌธ์ ๊ฐ ์๋์ง ์๊ณ ์ถ์ต๋๋ค.
@roji ๋ ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด ์๋๋ผ ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ณธ API๋ก ์ถ๊ฐํ๋ ๊ฒ์ ์ ์ํฉ๋๋ค. ๊ธฐ๋ณธ ํด๋์ค๋ ์ฌ์ ํ ๊ธฐ๋ณธ ๋์์ ๊ตฌํํ ์ ์์ต๋๋ค.
์ฃ์กํฉ๋๋ค. ์ ๊ฐ ์๋ชป ์ดํดํ์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ๋น์ ์ ์ ์์ .NET์์ ์๋ ๊ทธ๋๋ก๋ฅผ ์ ์งํ๊ณ ์์ง ์์ต๋๊น(๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ ์๋๋๋ค)?
ํ ์คํธ์ ๊ดํด์๋ ๋ด API๊ฐ ์ฌ๋ฐ๋ฅธ ๋ฉ์๋๋ฅผ ํธ์ถํ๋์ง ํ ์คํธํ๋ ๋ฐ ํฐ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์๋ฅผ ๋ค์ด ExecuteDataReader๊ฐ ์ฌ๋ฐ๋ฅธ ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ๋์ง ํ์ธํ๋ ค๋ฉด ๋ด๋ถ์ ์ผ๋ก ๋ค๋ฅธ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํธ์ถ๋๋ ๋ค๋ฅธ ๋ณดํธ๋ ๋ฉ์๋๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ด์์ ์ด์ง ์์ต๋๋ค.
๊ทํ์ ์๋๋ฆฌ์ค๋ฅผ ์ดํดํ๋ค๋ฉด(ํ์คํ์ง ์์) Moq์ CallBase
๋ ์ด๋ฐ ์ข
๋ฅ์ ์๋๋ฆฌ์ค์ ์ ์ฉํฉ๋๋ค. ๊ธฐ๋ณธ ๊ตฌํ์ ๊ธฐ๋ณธ ํด๋์ค์์ ์์๋ฉ๋๋ค.
@roji
๋น์ ์ ์ ์์ .NET์ ์๋ ๊ทธ๋๋ก๋ฅผ ์ ์งํ๊ณ ์์ง ์์ต๋๊น(๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ ์๋๋๋ค)?
์ ํํ. ์ธํฐํ์ด์ค API๋ .NET 1.0์ ์ถ๊ฐ๋์์ผ๋ฉฐ 2.0์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. 2.0๋ถํฐ ์ธํฐํ์ด์ค๋ ํธํ์ฑ์ ์ํด ์กด์ฌํ์ง๋ง Data.Common์๋ ProviderFactory ๋๋ ๋ค๋ฅธ ํด๋์ค์ ๋ํ ์ธํฐํ์ด์ค๊ฐ ์์ต๋๋ค. ๋น๋๊ธฐ API ๋๋ 2.0 ๋๋ ์ต์ ๋ฉ์๋์ ๋ํ ๊ฒ๋ ์์ต๋๋ค.
Moq๋ ์กฐ๋กฑํ ์ ์๋ ๊ฒ๋ง ์กฐ๋กฑํ ์ ์์ต๋๋ค. ์ฌ์ ์ํ ์ ์๋ ๊ฐ์ ๋๋ ์ถ์ ๋ฉ์๋ ๋๋ ํธ์ถํ ์ ์๋ ๋ณดํธ๋ ๋ฉ์๋๊ฐ ์์ด์ผ ํฉ๋๋ค. ํ์ฌ API๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ง๋ง ๋๋ถ๋ถ์ ๊ทธ๋ ์ง ์์ต๋๋ค. ๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ์ง ์๋ ํ ๋ด๋ถ์ ์ด๊ณ ์ฌ์ ์ด๋ฉฐ ์์ด ๋ฟ์ง ์๋ ๋ง์ ๊ฒ๋ค์ด ์์ต๋๋ค. ์ฐธ์กฐ๋ฅผ shim์ผ๋ก ๋์ฒดํ๊ธฐ ๋๋ฌธ์ MS Fakes๋ง ์ด๋ฅผ ์ํํ ์ ์์ง๋ง ์ด๋ VS Enterprise์์๋ง ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์คํ ์์ค ํ๋ก์ ํธ์๋ ์ธ๋ชจ๊ฐ ์์ต๋๋ค.
๋งค์ฐ ๊ตฌ์ฒด์ ์ธ ์ฌ๋ก๊ฐ ์๋ ๊ฒ ๊ฐ์ง๋ง ํ์คํ ์ด API๋ฅผ ์กฐ๋กฑํ๋ ค๊ณ ์๋ํ ์ฌ๋์ด๋ผ๋ฉด ๋๊ตฌ๋ ์ด ๋ฌธ์ ์ ์ง๋ฉดํ์ต๋๋ค. ๊ทธ๋ฅ ๊ตฌ๊ธ, ๊ฑฐ์ ๋ชจ๋ ์๋ฃจ์ ์ "๋ ๊ฑฐ์ ์ธํฐํ์ด์ค API๋ฅผ ์กฐ๋กฑํ๊ฑฐ๋ ์กฐ๋กฑํ ์ ์๋ ๋ํผ๋ฅผ ๋น๋"๋ก ๋๋ฉ๋๋ค.
@nvivo ๋ค , ์ถ๊ฐ ์ธ๋ถ ์ ๋ณด์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ ๋ ADO.NET์ ์กฐ๋กฑํ๋ ๋ฐ ๊ทธ๋ฆฌ ๋ฉ๋ฆฌ ๊ฐ์ง ์์๋ค๋ ๊ฒ์ ์ธ์ ํฉ๋๋ค.
๋ด๊ฐ ์ดํดํ์ง ๋ชปํ๋ ๊ฒ์ API์ ๋ด๋ถ, ๋น๊ณต๊ฐ ๋ฐ ๊ธฐํ ๋ฐฉ๋ฒ์ด ๋ฟ์ง ์๋ ๋ฐฉ๋ฒ์ ์กฐ๋กฑํ๋ ค๋ ์ด์ ์ ๋๋ค. ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋(ํ ์คํธํ๋ ค๋ ์ฝ๋)์ ์ง์ ์ฌ์ฉํ ์ ์๋ ๊ณต๊ฐ ๋ฉ์๋๋ฅผ ์กฐ๋กฑํด์ผ ํ์ง ์์ต๋๊น? ๊ฐ์์ด ์๋ ๋ฉ์๋(์: 0 ๋งค๊ฐ ๋ณ์ ExecuteReader() ์ค๋ฒ๋ก๋)์ ๋ฌธ์ ๊ฐ ์์ง๋ง ADO.NET์์ ์ด๋ฌํ ๋ฉ์๋๊ฐ ํญ์(?) ๊ฐ์ ์ค๋ฒ๋ก๋(์: ExecuteReader(CommandBehavior))๋ฅผ ํธ์ถํ๋ค๋ ์ ์ ๊ฐ์ํ ๋ ์ฌ๊ธฐ์ ์ง์ง ๋ฌธ์ ?
๋ฌธ์ ์๋๋ฆฌ์ค๋ฅผ ์ดํดํ๋ ค๊ณ ํ ๋ ๊ฐ๋จํ ์๋ฅผ ๋ค์ด ์ฃผ์๊ฒ ์ต๋๊น?
@nvivo ์ด ์ค๋ ๋์ ์ฌ๋ฌ ์ฌ๋๋ค์ด ์ด๋ฏธ ์ง์ ํ ๋ฒ์ ๋ฌธ์ ๋ก ์ธํด ํ์ฌ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ ธ์ฌ ๊ณํ์ด ์์ต๋๋ค. ๋ค์ณ์ง๋ ์ธํฐํ์ด์ค์ ์ข์ ์๋ .NET Framework 4.5์ ๋น๋๊ธฐ ๋ฐ ์คํธ๋ฆฌ๋ฐ ๋ฉ์๋๊ฐ ์ถ๊ฐ๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ด๋ฌํ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ์ธํฐํ์ด์ค ํ์ฅ์ ์ฃผ์ ๊น๊ฒ ์ดํด๋ณด์์ต๋๋ค. ๋น์ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง ์ต์ ์ InterfaceFooV2๋ฅผ ์ ๊ณตํ๊ฑฐ๋ asyn ๋ฐ ์คํธ๋ฆฌ๋ฐ์ ์ํ ๋ณ๋์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด์์ต๋๋ค. ์์ผ๋ก ๋ ๋ง์ API๋ฅผ ์ถ๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ InterfaceFooV2๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ง ์์์ต๋๋ค. ๊ฐ๊ฐ์ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํด ๋ณ๋์ ์ธํฐํ์ด์ค๋ฅผ ๊ณ์ ์ถ๊ฐํ๋ฉด ๊ธฐ์กด ์ธํฐํ์ด์ค์ ์ฐ๊ฒฐ๋์ง ์๊ธฐ ๋๋ฌธ์ ํผ๋์ค๋ฌ์ธ ์ ์์ต๋๋ค.
@roji "์ค๋ฒ๋ก๋"๊ฐ ์๋ ExecuteReader์ ํน์ ์ค๋ฒ๋ก๋๊ฐ ํธ์ถ๋์๋์ง ํ์ธํ๋ ค๋ ๊ฒฝ์ฐ๊ฐ ์์์ต๋๋ค. ๊ทธ๊ฒ์ ์ฌ์ฉ์ ์ฝ๋๊ฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ง ์๋ ์ข ๋ฅ์ ๋๋ค.
@YoungGah ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค. ๊ทธ๋ผ ๋ซ๊ฒ ์ต๋๋ค.
์ด ๋ณ๊ฒฝ์ ์ฑ ์์ด ์๋ ์ฌ๋๋ค์ด ๊ทธ ํจ๊ณผ์ ๋ํด ์๊ณ ์์ต๋๊น? ํต์ฌ ADO.NET ์ธํฐํ์ด์ค๋ 10๋ ์ด์ ์ฌ์ฉ๋์ด ์์ผ๋ฉฐ ๋ฐ์ดํฐ ์ก์ธ์ค๊ฐ ๋๋ถ๋ถ์ ๋น์ฆ๋์ค ์ฑ์ ์ค์ฌ์ด์์ต๋๋ค. ์๋์ ์ผ๋ก ๊ทธ๋ ๊ฒ ๋ง์ ๊ธฐ์กด ์ฝ๋ ๊ธฐ๋ฐ์ ๊นจ๋จ๋ฆฌ์ง ์๋ ๊ฒ์ด ์ต์ฐ์ ์์๊ฐ ์๋๋ผ๋ ์ ์ ์ดํดํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๋ค์ .NET์์ ๊ฐ์ฅ ์ค์ํ ๊ณ ๊ธ ์ธํฐํ์ด์ค ์ค ์ผ๋ถ์ด๋ฉฐ, ์ด๋ฌํ ์ค๋จ์ ์ ๊ฑฐํ๋ฉด ๋ชจ๋ ADO .NET ๋ฐ์ดํฐ ์ก์ธ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค๋จ๋๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ํ๋ก์ ํธ๊ฐ ์ค๋จ๋ฉ๋๋ค. ์ด๋ฅผ ์ ๊ฑฐํ๋ฉด ์ธ์์ ์ธ ์กฐ๊ฐํ๊ฐ ์์ฑ๋์ด CoreCLR ์ฑํ์ ๋ฐฉํดํ๋ ์ข์ ๊ณผ ํผ๋์ ์ผ๊ธฐํฉ๋๋ค.
์๋ก์ด API์ IDbCommand
๋ํ ํ์ฅ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ์ธํฐํ์ด์ค ๋ฒ์ ์ ์ ์งํ๊ณ ์์ค ํธํ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์:
public interface IDbCommand
{
//...
}
public class DbCommand : IDbCommand
{
void NewApi();
}
public static class DbCommandExtensions
{
public static void NewApi(this IDbCommand cmd)
{
((DbCommand)cmd).NewApi();
}
}
ํต์ฌ IDbCommand
์ธํฐํ์ด์ค๋ DNX๊ฐ ์ถ์๋ ํ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ผ๋ฉฐ ์์ ์ ๋ต์ผ๋ก ๊ณ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ํ ๋์ค์(์ฃผ์ ๋ธ๋ ์ดํน ๋ฒ์ ์์) ์ด๋ฌํ ํ์ฅ์ ๋กค์
ํ์ฌ ํต์ฌ ์ธํฐํ์ด์ค์ ๋ณํฉํ ์๋ ์์ต๋๋ค. ์ด๋ ์ชฝ์ด๋ ๊ธฐ์กด ์ฝ๋ ๊ธฐ๋ฐ์ ๋ง์ด๊ทธ๋ ์ด์
ํ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก CoreCLR์ ์ฑํํ๋ ๋ฐ ์ค์ํ ์์ ์ ์ธ ํต์ฌ ADO.NET ์ธํฐํ์ด์ค๋ฅผ ์ป์ต๋๋ค.
์ ๋ @davkean ์ผ๋ก๋ถํฐ ํต์ฌ ADO .NET ์ธํฐํ์ด์ค๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ด๋ค ์ํฅ์ ํ๋ผ๋ ์์ฒญ ์ ๋ฐ์์ต๋๋ค . ์ด ๋ณ๊ฒฝ ์ฌํญ์ด ๊ธฐ์กด .NET ์์ฝ์์คํ ์ ๋ฏธ์น ์ธก๋ํ ์ ์๋ ์ํฅ์ ํ๊ฐํ์ง ์๊ณ ๊ณ ๋ ค๋์๋ค๊ณ ์์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ค์ ์ํ๋์์ผ๋ฏ๋ก ๊ณ ๋ ค๋์ง ์์์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ์ฌ๊ธฐ์์ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ๊ทธ๋ ์ง ์์์ต๋๋ค.
.NET์ ๊ธฐ๋ณธ ORM์ด ๋๋ EF์ ์ญํ ๊ณผ ๋๋ค์์ ์์ฅ ์ ์ ์จ์ ํ๋ณดํ๋ ๋ฐ ํ์ํ ์ฑ๊ณต์ ๊ฑฐ๋์์์๋ ๋ถ๊ตฌํ๊ณ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ๋์ฒด ORM์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํ๋ .NET ๊ฐ๋ฐ์๊ฐ ์ฌ์ ํ ๋ง์ต๋๋ค. ์๋ฅผ ๋ค์ด CoreCLR๊ณผ ๊ด๋ จ๋ ์ค์ํ ๊ธฐ๋ฅ์ Mono/Linux/OSX์์ ์คํ๋๋ ์ผ๊ธ ์ง์๊ณผ ์ฌ๋ฌ ๋์ฒด RDBMS๋ฅผ ์ง์ํ๋ค๋ ๊ฒ์ ๋๋ค. CoreCLR์ Linux/OSX ๊ฐ๋ฐ์ ์์ฅ์ ๋ํด ๋ง์ ํ๋ณด๋ฅผ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ alt RDBM์ ๋ํ ์ง์์ด ๋ง์์๋ก ์ข์ต๋๋ค. Micro ORM์ ์ฑํํ ๊ฐ๋ฐ์ ์ง๋จ์ ๋ ๋ค๋ฅธ ์ค์ํ ํน์ฑ์ ์์ ์๊ฒ ๊ฐ์ฅ ์ ํฉํ ORM์ ์ ํํ๊ธฐ ์ํด MS ์ํ๊ณ ๊ธฐ๋ณธ๊ฐ ์ธ๋ถ์์ ํ๊ฐํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ด๊ฐ ๋ณธ ๋ชจ๋ ๊ฒ์์ ํ์ฑ .NET OSS(์ฆ, ์ํ ๋ฌผ์ง ๋ฐฉ์ง) ๊ฐ๋ฐ์์ Micro ORM์ ์ฑํํ ๊ฐ๋ฐ์ ์ฌ์ด์๋ ๋์ ์๊ด ๊ด๊ณ๊ฐ ์์ผ๋ฉฐ ๋ง์ฐฌ๊ฐ์ง๋ก CoreCLR์ ์ผ๋ฆฌ ์ด๋ตํฐ์ ๋์ ์๊ด ๊ด๊ณ๊ฐ ์์ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ์ฃผ์ ๊ฐ์น ์ ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. OSX/Linux์์ ๊ฐ๋ฐํฉ๋๋ค. ์ด๊ฒ์ด ์ด์ ๊ฐ์ ๊ทผ๋ณธ์ ์ธ ์ค๊ณ ์ ํ์ ํ ๋ ์์ฌ ๊ฒฐ์ ์ ์ฃผ๋ณ .NET ์์ฝ์์คํ ์ ํฌํจํ๋ ๊ฒ์ด ์ ์ตํ ์ด์ ์ค ์ผ๋ถ์ ๋๋ค.
NuGet ๋ค์ด๋ก๋๋ฅผ ์ผํ ๋ณด๋ฉด ๋นEF ์์ฅ ์ ์ ์จ์ด ์ด๋ค ๊ฒ์ธ์ง ์ ์ ์์ต๋๋ค.
์ต๋ ์ ์ ๋ชจ๋ - 1M+
๋ฉ์์ด - 100๋ง ์ด์
OrmLite - 500k+
๋จ์.๋ฐ์ดํฐ - 300k+
ํํํฌ์ฝ - ~100k
NPoco - 30k+
Dapper, Massive, PetaPoco, NPoco ๋ฑ๊ณผ ๊ฐ์ ๋ง์ Micro ORM์ด ๋จ์ผ ๋๋กญ์ธ .cs์ ๋ง๊ฒ ์ค๊ณ๋์ด NuGet์ด ์ค์ ์ฌ์ฉ๋์ ๋ณด๊ณ ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ค์ ์ซ์๋ ์ด๋ณด๋ค ํจ์ฌ ๋ง์ต๋๋ค. ๋ํ LLBLGen Pro์ ๊ฐ์ ํ์ํ ์์ค ORM์ด ์์ต๋๋ค. ์ด ORM์ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ด ํฌ์ง๋ง NuGet์์ ๊ทธ ์ฌ์ฉ๋ฒ์ ๋ณด๊ณ ํ์ง ์์ต๋๋ค.
GitHub ๋๋ถ์ ์ฝ์ด๊ฐ ํฌํจ๋ ๋ค์ํ ์์ค ํ์ผ์ ์๋ฅผ ๋น ๋ฅด๊ฒ ๊ฒ์ํ ์ ์์ต๋๋ค.
IDbConnection
, IDbCommand
๋ฐ IDataReader
์ด ๋ณ๊ฒฝ์ ์ํฅ์ ๋ฐ๋ ADO .NET ์ธํฐํ์ด์ค:
IDb์ฐ๊ฒฐ | IDb๋ช ๋ น | IDataReader | |
์ต๋ ์ ์ ๋ชจ๋ | 59 | 181 | 132 |
๋ ์ฌํ | 17 | 21 | 17 |
์ค๋ฅด๋ผ์ดํธ | 179 | 54 | 26 |
๋จ์.๋ฐ์ดํฐ | 29 | 27 | 6 |
์ํฌ์ฝ | 4 | 10 | ์ผ |
์ฐธ๊ณ : ์ด ๊ฒฐ๊ณผ๋ ์์ค ํ์ผ๋ง ๋ณด์ฌ์ฃผ๋ฉฐ, ๊นจ์ง ์ฐธ์กฐ์ ์ค์ ์๋ ํจ์ฌ ๋ ๋ง์ต๋๋ค.
์ด ๋ณ๊ฒฝ์ ์ค์ ์ํฅ์ ์ด๋ฌํ ORM์ ์ฌ์ฉํ๋ ๋ชจ๋ ํ๋ก์ ํธ ์ข
์์ฑ์๋ ํ์ฅ๋ฉ๋๋ค.
๋ถํํ๋ ๊ทธ ํจ๊ณผ๋ ๋ด๋ถ ๊ตฌํ์๋ง ๊ตญํ๋์ง ์์ต๋๋ค.
๋ง์ Micro ORM์ ์์ค ์ฝ๋๋ ADO.NET ์ธํฐํ์ด์ค๋ฅผ ํตํ ํ์ฅ ๋ฉ์๋์ด๋ฏ๋ก ํด๋ผ์ด์ธํธ
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
IDbConnection db = ...
//Dapper
db.Query<Dog>("select Age = <strong i="49">@Age</strong>, Id = @Id", new { Age = (int?)null, Id = guid });
//OrmLite
db.Select<Author>(q => q.Name.StartsWith("A"));
ํ์ฅ ๋ฐฉ๋ฒ ์ฌ์ฉ์ ํ ๊ฐ์ง ํ์ฅ ๊ธฐ๋ฅ์ ์ด๋ฌํ ORM์ด "๊ฐ๋ฐฉํ"์ด๊ณ ๊ณ ๊ฐ์ด ์์ฒด ํ๋ก์ ํธ์ ํ์ฅ ๋ฐฉ๋ฒ์ ์ถ๊ฐํ์ฌ ์์ฒด ์ผ๊ธ API๋ก ORM์ ํ์ฅํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
๋ถ๋ช
ํ IDbConnection
๋ฅผ ์ ๋ฌํ๋ ๋ชจ๋ ์์ค ์ฝ๋๋ ์ด์ CoreCLR์์ ์๋ํ๋ ๊ฒ๋ ๊ธ์ง๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ํต์ฌ ADO.NET ์ธํฐํ์ด์ค๋ ๋ค์ค RDBMS ๋ฐ์ดํฐ ์ก์ธ์ค๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ต์ ์ข ์์ฑ ๋๋ฌธ์ ์ฑํ๋ ServiceStack๊ณผ ๊ฐ์ ๊ณ ๊ธ ํ๋ ์์ํฌ ์ ๋ฐ์ ๊ฑธ์ณ ๋ง์ด ์ฌ์ฉ ๋ฉ๋๋ค. ๋ํ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ๊ฑฐ์ ์๋ ๋ชจ๋ ํด๋์ค ์ค์์ ํต์ฌ ADO.NET ์ธํฐํ์ด์ค๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ์ต๋๋ค.
์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ด๋ฌํ ์ธํฐํ์ด์ค๊ฐ ์๋ .NET์ ๋ฏธ๋๊ฐ ์๋ค๋ ์ฌ์ค์ ๋๋์ต๋๋ค.
์ธํฐํ์ด์ค๋ ๋ค์ค ๊ตฌํ์ ํ์ฉํ๋๋ก ์ค๊ณ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ ADO.NET์ ํ๋์
๋๋ค.
.NET์์ ๊ฐ์ฅ ์ค์ํ "๊ณต๊ฐ ๊ณต๊ธ์ ๋ชจ๋ธ" ์ค ํ๋์
๋๋ค. ์ด๋ค ์ฐ์ ์์๋ก ์ธํด ์ด๋ฌํ ์ธํฐํ์ด์ค๊ฐ ์ ๊ฑฐ๋์๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋์ฒด EF .NET ์์ฝ์์คํ
๊ณผ ํจ๊ป ์ด๋ฌํ ์ธํฐํ์ด์ค์ ์์กดํ๋ ๊ธฐ์กด์ ๋ฐฉ๋ํ .NET ์ฝ๋ ๊ธฐ๋ฐ ๋ชจ๋์ ํจ์ฌ ๋ ๋์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํด์ผ ํฉ๋๋ค. ์ด๋ก ์ธํด ์๋นํ ์ค๋จ์ด ๋ฐ์ํ๊ณ ๊ธฐ์กด .NET 4.x ๋ฐ CoreCLR ํ๋ซํผ์ ๋ชจ๋ ์ง์ํ๋ ๋ฐ ํ์ํ ์ฃผ์ ์ฅ๋ฒฝ์ด ๋์ด ์ด์ ์ํด ์ํฅ์ ๋ฐ๋ ๋ชจ๋ ๊ธฐ์กด ์ฝ๋ ๊ธฐ๋ฐ์ ์ ์ฉํด์ผ ํ๋ ์ฌ์ํ์ง ์์ ์ถ๊ฐ ๋ณต์ก์ฑ์ด ๋ฐ์ํฉ๋๋ค.
ํ์ฌ ์ธ์์ ADO.NET/CoreCLR์ด EF ๋ฐ SQL Server์ ๋ํ ์ต๊ณ ์์ค์ ์ง์์ ์ ๊ณตํ๋๋ก ์ฌ์ค๊ณ๋๊ณ ๋๋จธ์ง ์์ฝ์์คํ ์ ๋ฌด์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด์ ๊ฐ์ ๋ถํฌ๋ช ํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ ์ด ๊ณ ์ ๊ด๋ ์ ๋ค์ ์ํํ๊ธฐ ์ํ ๊ฒ์ผ ๋ฟ์ ๋๋ค. .
.NET ํ์ ์ด์ ๋ฉค๋ฒ(ํ์ฌ Roslyn์์ ์ผํ๊ณ ์์)๋ก์ ์ ๋ SQL ๋ฐ Entity Framework ํ๊ณผ ํจ๊ป ์ ๋ฐ์ดํฐ ๊ณตํต์ ์๋ ๋์์ธ์ ํฌ๊ฒ ์ฐธ์ฌํ์ต๋๋ค. ์ง๊ธ์ ๊ด์ฌํ์ง ์์ง๋ง ํธ์ํฐ์ ๊ทธ ์ด์์์ ๋ณด๊ณ ์๋ ์ผ๋ถ ์ง์ ์ ์์ ํ๋ ๋ฐ ๋์์ด ๋๋๋ก ๋ฐฐ๊ฒฝ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
.NET Core์ฉ System.Data.Common์ ํ์ฌ ๋์์ธ์ ์ฐ๋ฆฌ๊ฐ ์์ค๋ฅผ ๊ณต๊ฐํ๊ธฐ ์ฝ 2๋ ์ ์ธ 2012๋ 12์์ ์์๋์์ต๋๋ค.
๋ชฉํ:
IDbConnection
vs DbConnection
), ํผ๋, ์ค์ ๋ฐ ๊ณ์ธตํ ๋ฌธ์ (DataCommon์์ SqlClient ๋ถํ , ํต์ฌ ์ถ์ํ์์ DataSet ๋ถํ )๋ฅผ ์ค์
๋๋ค. .NET 1.0์ ์๋ ๋์์ธ. ๊ธฐ์กด ์๋น์์ _new_ ๊ฐ๋ฐ์ ๋ชจ๋ .NET Framework์ ์ฝ๊ฒ ์ ํํ ์ ์๋ ๊ฒ์
๋๋ค.์ฃผ๋ณ์ ํผ์ง๊ณ ์๋ ๋ช ๊ฐ์ง ์์ :
๋ด๊ฐ ์ดํดํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ:
์ธํฐํ์ด์ค์ ๊ตฌ์ฑ์์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์์ง CoreCLR ์ธํฐํ์ด์ค์ ๊ตฌ์ฑ์์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ง ์์ต๋๋ค. ์์ ํ ์ ๊ฑฐํด๋ ๊ด์ฐฎ์ต๋๊น?
ํ์ฅ ๋ฉ์๋๋ฅผ ํตํด @mythz๊ฐ ์ ๊ณตํ ์์ ์ ์์ ๊ณต๊ธ์๊ฐ ์ด์จ๋ ์ถ์ ๊ธฐ๋ณธ ํด๋์ค์์ ํ์๋๋๋ก ์๊ตฌํฉ๋๋ค.
์ค์ํ ๋ถ๋ถ์ ์ธํฐํ์ด์ค๊ฐ ์กด์ฌํ๊ณ ์ด๋ฅผ ์ฐธ์กฐํ๋ ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ธํฐํ์ด์ค์ ๋ฒ์ ์ ์ง์ ํ์ง ์์ผ๋ ค๋ฉด EOL์ ์ ๊ฑฐํ๊ณ ์ ๊ฑฐ๋๊ธฐ ์ ์ ์ธํฐํ์ด์ค๋ฅผ ๋ณต์ํ๊ณ ์ด์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ถ๊ณผ๋๋ ๋ถ๋ด์ ์ํํ์ญ์์ค. ๋ด ๋ง์ ์ด๋ฌํ ํต์ฌ ์ธํฐํ์ด์ค๋ ๊ฒฝ๊ณ ๋ ๋ง์ด๊ทธ๋ ์ด์ ๊ฒฝ๋ก๊ฐ ์ ๊ณต๋์ง ์์ ์ฑ ํ๊ธฐ๋ ์ ์ด ์๋ค๋ ์๋ฏธ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ฒ์๋๊ณ ์ ์๋ ค์ง ์์ ์ ์ธ API๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์์ ์ธ ๋ถ๋ถ์ผ๋ก ์ฑํํ ๊ฒ์ ๋ํด ์ฒ๋ฒ์ ๋ฐ๊ณ ์์ต๋๊น?
๊ธฐ๋ณธ ํด๋์ค๋ก ์ด๋ํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํ ํฌํธ์ ๋๋ค.
์ด๊ฒ์ ADO.NET ์ธํฐํ์ด์ค๋ฅผ ์ฐธ์กฐํ๋ ๋ชจ๋ ์์ค ํ์ผ์ ์ถ๊ฐํด์ผ ํ๋ฉฐ ๊ณ ๊ฐ์ด ์ฌ์ฉ์ ์ ์ ๋น๋ ๊ธฐํธ๋ก ์ฝ๋๋ฅผ ํฉ์ด์ง๊ฒ ํฉ๋๋ค.
์ฌ๊ธฐ์๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๋ํ ๋์ผํ ๊ด์ฌ์ด ์๋ ๊ฒ ๊ฐ์ง๋ง ํฅํ ๋ฆด๋ฆฌ์ค์์ ์๋์ ์ผ๋ก ๊ธฐ์กด ๊ณ ๊ฐ์ ์ค๋จํ๋ ๊ฒ์ ์ ํ ์ฌํญ์ด ์๋๋๋ค(ADO .NET์ ํจ์ฌ ๋ ํฐ ์์ฅ ์ ์ ์จ์ ๊ณ ๋ คํ ๊ฒ์กฐ์ฐจ ๋๋์ต๋๋ค). ๊ธฐ์กด 4.x ๊ณ ๊ฐ์ ์ค๋จ์ํฌ ์๋ ์์ง๋ง CoreCLR์ ์ง์ํ๋ผ๋ ์์ฒญ์ ๋ฐ๊ณ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ธฐ์กด์ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ ์งํ๊ณ CoreCLR๋ ์ง์ํ๋ ค๋ ๊ธฐ์กด 4.x ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋์ ๋จ์๊น์? ๋ฌธ์/์์ ๋ ๋ณต์ ํด์ผ ํฉ๋๊น?
์์ง CoreCLR ์ธํฐํ์ด์ค์ ๊ตฌ์ฑ์์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ง ์์ต๋๋ค. ์์ ํ ์ ๊ฑฐํด๋ ๊ด์ฐฎ์ต๋๊น?
์์ฌ ๋ฐ ํ์ฌ๊ฐ .NET Core์ ๋ํด ๋น๋ํ๊ณ .NET Framework์์ ๋ณ๊ฒฝ ์์ด ์ด์์ฑ์ ์คํํ ์ ์๋๋ก .NET Core์ ๋ ธ์ถ ์์ญ์ .NET Framework์ ๋ฐ์ด๋๋ฆฌ ํธํ๋์ด์ผ ํฉ๋๋ค. ์ธํฐํ์ด์ค์ ๊ตฌ์ฑ์์ ์ถ๊ฐํ๋ฉด ํด๋น ๊ตฌ์ฑ์์ ์๋น์๊ฐ .NET Framework์์ ์คํ๋ ๋ ์คํจํ๋ฏ๋ก ์ด๋ฅผ ์๋ฐํฉ๋๋ค.
๋๋ ์ด๋ฌํ ์ธํฐํ์ด์ค์ ์ ๊ฑฐ ๋๋ ์ถ๊ฐ๋ฅผ ์ฃผ์ฅํ๋ ๊ฒ์ด ์๋๋ผ ๋์์ธ์ด ํ์ฌ ์์น์ ์๋ ์ด์ ์ ๋ํ ๋ฐฐ๊ฒฝ์ ์ถ๊ฐํ๊ณ ์ถ์์ ๋ฟ์ ๋๋ค. @YoungGah ๋ฐ @saurabh500์ ํฌํจํ ํ์ฌ ์์ ์๊ฐ ํด๊ฒฐํ๋๋ก
์ค๋ ๋๋ฅผ ์์ฝํ์๋ฉด Microsoft๊ฐ ์ด๋ฌํ ์ธํฐํ์ด์ค๋ฅผ ์ด์ํด์ผ ํ๋ค๊ณ ์๊ฐํ๋ ์ด์ ๋ ์์ฝ์์คํ ์ด .NET Framework ๊ตฌํ์ ์ ์งํ๋ฉด์ .NET Core๋ก ์ฝ๊ฒ ์ด์ํ ์ ์๋๋ก ํ๊ธฐ ์ํด์์ ๋๊น?
์ํ๊ณ๊ฐ .NET Framework ๊ตฌํ์ ์ ์งํ๋ฉด์ .NET Core๋ก ์ฝ๊ฒ ์ด์ํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๊น?
์.
์ค๋ ๋๋ฅผ ์์ฝํ์๋ฉด Microsoft๊ฐ ์ด๋ฌํ ์ธํฐํ์ด์ค๋ฅผ ์ด์ํด์ผ ํ๋ค๊ณ ์๊ฐํ๋ ์ด์ ๋ ์์ฝ์์คํ ์ด .NET Framework ๊ตฌํ์ ์ ์งํ๋ฉด์ .NET Core๋ก ์ฝ๊ฒ ์ด์ํ ์ ์๋๋ก ํ๊ธฐ ์ํด์์ ๋๊น?
์. ์ด์ ๋ด ์ฝ๋๋ฒ ์ด์ค(LLBLGen Pro)๋ฅผ corefx๋ก ์ด์ํ๋ฉด ์ธ๋ถ API๊ฐ ์์๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ 2๊ฐ์ api๋ฅผ ๋ ธ์ถํ๊ฑฐ๋ ๋ชจ๋ ์ฌ์ฉ์์ ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์์์์ผ์ผ ํฉ๋๋ค.
๋น์ ์ด ๊ณ ํต์ ๋๋ผ์ง ์๊ธฐ ๋๋ฌธ์ ๋น์ ์ด ์ฐ๋ฆฌ ๋ฌผ๊ฑด์ ๋ถ์๋ ๊ฒ์ด ์ข์ ์๋ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ ์ต๋๋ค. ๊ทธ๊ฒ์ ๋์๊ฒ ์ข์ง ์์ต๋๋ค. ๋๋ ๋์ด ๋ ์ฝ๋ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ณ ๊ฐ์ ์ผ์ํ๋ 2 ๊ฐ์ API๋ฅผ ์ ์งํ๊ฑฐ๋ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ด ์ฌ์ฉ์์ ์ฝ๋๋ฅผ ๊นจ์ผํฉ๋๋ค.
๋๋ ๋ํ ์ธํฐํ์ด์ค๊ฐ ๋ฒ์ ์ด ์ง์ ๋์ง ์๋ ์ด์ ๋ฅผ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ํด๋์ค์๋ ์ธํฐํ์ด์ค๊ฐ ์๋ ๊ฒ์ฒ๋ผ ์ธํฐํ์ด์ค์ผ ๋ฟ์ ๋๋ค. CoreFX๋ ์ธํฐํ์ด์ค์ ๋น๋๊ธฐ ๋ฉ์๋๋ฅผ ์๋ฒฝํ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์์ฌ ๋ฐ ํ์ฌ๊ฐ .NET Core์ ๋ํด ๋น๋ํ๊ณ .NET Framework์์ ๋ณ๊ฒฝ ์์ด ์ด์์ฑ์ ์คํํ ์ ์๋๋ก .NET Core์ ๋ ธ์ถ ์์ญ์ .NET Framework์ ๋ฐ์ด๋๋ฆฌ ํธํ๋์ด์ผ ํฉ๋๋ค. ์ธํฐํ์ด์ค์ ๊ตฌ์ฑ์์ ์ถ๊ฐํ๋ฉด ํด๋น ๊ตฌ์ฑ์์ ์๋น์๊ฐ .NET Framework์์ ์คํ๋ ๋ ์คํจํ๋ฏ๋ก ์ด๋ฅผ ์๋ฐํฉ๋๋ค.
์ฌ์ด ์๋ฃจ์ : ์ธํฐํ์ด์ค๋ฅผ ์๋ ๊ทธ๋๋ก ์ถ๊ฐํ์ญ์์ค. ๊ทธ๋ฆฌ๊ณ ์์ ์ด ๊ท์น์ด ์ค์ ๋ก ๋ค์ ์ด๋ฆฌ์๋ค๋ ๊ฒ์ ๋ชจ๋ ๋๋ผ๋ฉด ์ค๋ ์ ์ ์ธํฐํ์ด์ค์ ์ถ๊ฐํ๋ ๋ฐ ํ์ํ ๋ฉ์๋๋ฅผ ์ธํฐํ์ด์ค์ ์ถ๊ฐํ๊ณ ๊ณ์ ์งํํ ์ ์์ต๋๋ค.
๋๋ ์์ ๊ฐ์ ๊ท์น์ด ์๋ฅ์์ผ๋ก๋ ํ๋ฅญํ์ง๋ง ์ค์ ๋ก๋ ์ค์ํ MS ํ์ด ์ด๋ฅผ ๊นจ์ผ ํ๋ ์๊ฐ์ ๊นจ์ง ์ ์์ ๋งํผ ์ถฉ๋ถํ ์ค๋ซ๋์ MS ์ํํธ์จ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. CoreFX ๋ง์ผํ /ํ๋ณด์์ ๋งํ๋ ๊ฒ์ฒ๋ผ '๊ฐ๋ฐฉ์ '์ด๊ณ '๋ค๋ฅด๋ค๋ฉด' ๋ณด์ฌ์ฃผ์ธ์. System.Data ๋ฐ CoreFX์ ๊ด๋ จํ์ฌ ๋ด๊ฐ ๋ณผ ์ ์๋ ๊ฒ์ 'MS๊ฐ ํ์๋ก ํ๋ ๊ฒ์ ์๋ฃ๋๊ณ ๋ค๋ฅธ ๋ชจ๋ ์ฌ๋์ด ํ์๋ก ํ๋ ๊ฒ์ ๋ฐฑ๋ฒ๋์ ์๊ฑฐ๋ ๋ฌด์๋ฉ๋๋ค'์ ๋๋ค.
๋ด๊ฐ ์ธ๊ธํ๋ ๊ฒ์ ์์ ๋ ๋ค๋ฅธ ๊ฒ: Fowler๋ ์ด์ Twitter์์ ๋ชจ๋ ์ฌ๋์ด ์์ ์ ๋ฌผ๊ฑด์ ์ด์ํด์ผ ํ๋ค๊ณ ์ธ๊ธํ์ต๋๋ค. 500K LoC ์ฝ๋๋ฒ ์ด์ค๋ฅผ CoreFX๋ก ์ง์ ์ด์ํ๋ ๋ฐ ๋น์ฉ์ ์ง๋ถํด์ผ ํ๋ฉฐ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ํ์ํ๋ฉฐ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ ๋๋ค. ์์ ํ ์ธ๊ณต์ ์ธ ์ถ๊ฐ ๋ง์ฐฐ(์๋ก์ด ํ๋ซํผ์ ๋๋ค! ์ด๋ป๊ฒ ์ ํ์ ์ธ ๊ท์น์ด ์์ ์ ์์ต๋๊น?)์ ์ค์ ๋ก ์ ํ ๋์์ด ๋์ง ์์ต๋๋ค. ์ถ๊ฐ ์ ์ง ๊ด๋ฆฌ ๋น์ฉ์ด ์ถ๊ฐ๋๊ณ ์ฝ๋๋ฅผ ์ด์ํ๊ณ ํ ์คํธํ๋ ๋ฐ ์ถ๊ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฉฐ ์ฌ์ฉ์์๊ฒ ์ถ๊ฐ ๋ถ๋ด์ด ๋ฉ๋๋ค.
๊ทธ๊ฒ์ ๋ชจ๋ ๋น์ ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๊ณ ๋น์ ์ ๊ด์ฌ์ฌ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ง๋ง ํ ๊ฐ์ง ์์ด๋ฒ๋ ธ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฝ๋๋ฅผ ์ด์ํ์ง ์๊ณ ๋ ๋ง์ ์ฌ๋์ด ๋์ ํจ๊ป ํ๋ค๋ฉด? ๋๋ ๋น์ ์ ์๋ก์ด ๋น๋๋ ํ๋ ์์ํฌ์ ๋ด ํฐ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ด์ํ๊ธฐ ์ํด ์๊ฐ๊ณผ ๋ด ์์ ์ ๋์ ๊ธฐ๊บผ์ด ํฌ์ํ ์ํฅ์ด ์์ต๋๋ค. . Iow: ๋๋ ๋งค์ฐ ์ธ๋ก์ ๊ณ ๋์์ ๋น์ ์ ์ฐ๋ฆฌ๊ฐ ๋น์ ์ ์๋ก์ด ๋ฐ์ง์ด๋ ํ๋ ์์ํฌ๋ฅผ ์ข์ํ๊ธฐ๋ฅผ ๊ฐ์ ํ ๋ฐ๋ผ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
๋ด๊ฐ ์ค๋ ์ ์ ๋งํ๋ฏ ์ด: ์ด ํ๋ ์์ํฌ, ์ด ์๋ก์ด CoreFX๋ฅผ ๋์๊ฒ ํ๋งคํ์ญ์์ค. ๊ธ์, ๋ง์ฐฐ์ ์ ์งํ๊ณ ๋ง์ ์ด๋ ๋ฐ ์ ๊ฑฐ ์น์ฆ๋ฅผ ๋์ ํ๋ ๊ฒ์ ์ฌ๊ธฐ์ ๋ง์ ์๊ฐ(๋ฐ ๋)์ ํฌ์ํ ํฐ ์ธ์ผํฐ๋ธ๋ฅผ ์์ฑํ์ง ์์ต๋๋ค.
๊ทธ๋ฅ ๋ด 2์ผํธ.
@FransBouma ์ด ๋ํ๋ฅผ ์ ๋ฌธ์ ์ด๊ณ ์์ฐ์ ์ด๋ฉฐ ์ฌ์ค์ ์ด์ ์ ๋ง์ถ๋๋ก ํฉ์๋ค.
๋๋ ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋ํด ์ฐฌ์ฑํ๊ฑฐ๋ ๋ฐ๋ํ๋ ๊ฒ์ด ์๋๋๋ค. ๊ทธ๋ฌ๋ ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ํธํ๋์ง ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1) .NET Core์ IDbConnection.OpenAsync ์ถ๊ฐ
2) ์ด ๋ฐฉ๋ฒ์ ํธ์ถํ๋ ์ฌ๋์ ์ด์ .NET Framework์์ ์คํ์ ์คํจํฉ๋๋ค(์์์ ์ธ๊ธํ ํต์ฌ ์์น/๋ชฉํ ์๋ฐ). ์ด๊ฒ์ ๋ํ XAML ๋์์ด๋์ ๋ฐ๋ก ์ด ์ฌ์ค์ ์์กดํ๋ ๋ช ๊ฐ์ง ๋ค๋ฅธ VS ๊ธฐ๋ฅ์ ์์์ํต๋๋ค.
3) .NET Framework๋ฅผ ์ต์ ์ํ๋ก ๋ง๋ค๊ธฐ ์ํด IDbConnection.OpenAsync๊ฐ ํฌํจ๋ ์ ๋ฒ์ ์ .NET Framework "4.7"์ ์ ๊ณตํฉ๋๋ค.
4) ์ด ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์ IDbConnection์ ๊ตฌํํ ๋ชจ๋ ๋จ์ผ ์ ํ์ด ์ด์ .NET Framework "4.7"์์ ๋ก๋๋์ง ์์ต๋๋ค.
์ด๊ฒ์ด ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์๋ ์ด์ ์ ๋๋ค.
MS์์ ์ปค๋ฎค๋์ผ์ด์ ๋ฌธ์ ์ ๊ด๋ จํ์ฌ ์ํฉ์ด ์ด๋ป๊ฒ ์งํ๋๋์ง์ ๋ํ ์ข์ ๊ฐ์ ๊ณ์ ์ ์งํ๋ฉด ๋ชจ๋๊ฐ ๊ทธ๊ฒ์ ๋ํด ์์ง ๋ชปํ๊ณ ๋ชจ๋ ๊ฒ์ด ์ฅ๋ฏธ์ ๋ฌด์ง๊ฐ๋ผ๊ณ ์๊ฐํ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ด ๋น์ ๋ฌธ์ ์ผ๋ก ๋ณด์ด๋๋ผ๋ MS๊ฐ ๋ด๊ฐ ์ ๋ฌธ๊ฐ๋ผ๊ณ ์๊ฐํ๋์ง ์ฌ๋ถ๋ ์ ๊ฒฝ์ฐ์ง ์์ต๋๋ค.
์ฆ: ๋๋ ์ธํฐํ์ด์ค์ ๊ฒฐํผํ์ง ์์์ผ๋ฏ๋ก ์ธํฐํ์ด์ค๊ฐ ์ฌ๋ผ์ง๋ฉด ๊ทธ๋๋ถํฐ ํด๋์ค๊ฐ ์๊ณ ์ด๋ก ์ ์ผ๋ก ์์ ํ ์ธํฐํ์ด์ค๊ฐ ์๋ค๋ ์ฌ์ค์ด ๋๋ฅผ ์ฌํ ํฌ๋๋ก ๋ง๋ค์ง ์์ต๋๋ค. ํด์ผ ํ ์ผ ์ค๋๋ ๋ชจ๋ ์ฃผ์ ADO.NET ๊ณต๊ธ์๊ฐ ํ๋ฅญํ๊ฒ ์๋ํ๊ณ ๊ธฐ๋ณธ ํด๋์ค์์ ํ์๋๊ธฐ ๋๋ฌธ์ ์ค๋๋ ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ํตํด ์ด๋ก ์์ผ๋ก ์ํํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ ํด๋์ค์์ ํ์๋จ). ์ด๊ฒ์ ๋ด๊ฐ ์ด ์ค๋ ๋์ ์๋ถ๋ถ์์ ์ฒ์์ ๊ทธ๊ฒ๋ค์ ์ ๊ฑฐํ๋ ๊ฒ์ด ํฐ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ง ์์ ์ด์ ์ด๊ธฐ๋ ํฉ๋๋ค. ๊ทธ ์ดํ๋ก ๋๋ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ ์๊ฐ์ด ์์๊ณ ๋๋ ๊ทธ๊ฒ์ด _ํฐ ์ผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฐ๋ฆฌ๋ ํ์ฑ์ ์ง๊ณต ์ํ์ ์ด๊ณ ์์ง ์์ผ๋ฉฐ ์คํ ๋งจ ์๋์ ์๋ ๋ฏธ๋ค์จ์ด/ํ๋ ์์ํฌ์๋ ํ์ฌ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ํ๋ ์์ํฌ์ ํ์ฌ .NET ์ ์ ๋ฒ์ ์ฌ์ฉ์๋ ์ด๋ฌํ ํ๋ ์์ํฌ๋ฅผ ์๊ณ ์๊ธฐ ๋๋ฌธ์ CoreFX์์ ๊ณ์ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ CoreFX๋ก ํฌํ ํ๋ ๊ฒ์ ์๋ง์ ์ด์ ๋๋ฌธ์ ํฐ PITA์ ๋๋ค. ๊ทธ ์ค ํ๋๋ CoreFX์ ์๋ ๊ณต๊ฐ API์ ๋ ธ์ถ๋ ์ธํฐํ์ด์ค๋ก ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค(์ด ์ค๋ ๋์ ์ด์ ).
๊ทธ ์ด์ ๋ง์ผ๋ก๋ ์ธํฐํ์ด์ค๋ฅผ ๋ค์ ๋ณด๊ณ ์ถ์ต๋๋ค. ์ ์๊ฒ๋ ๊ฐ์ธ์ ์ผ๋ก ๊ธฐ์ ์ ์ธ ์ด์ ๊ฐ ์๋๋๋ค(์: ๋น๋๊ธฐ์๋ ๊ธฐ๋ณธ ํด๋์ค๊ฐ ํ์ํฉ๋๋ค. ์ด๋ฏธ ์๋ง์ ๋๋ค). ๋๋ ๊ทธ๋ค์ด ํน์ ํ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๊ทธ๊ฒ์ ๋น์ ์ ๋ฌธ์ ์ด์ง ๋ด ๋ฌธ์ ๊ฐ ์๋๋๋ค. ๊ทธ๊ฒ๋ค์ ์ ๊ฑฐํ๋ฉด ๋ด ๋ฌธ์ ๊ฐ๋๊ณ (์ง๊ธ ๋ฐ๊ฟ ๋งํ๋ฉด) MS ์๋ต์ "ํ ์ ์์ต๋๋ค!"๋ก ์์ ๋์ง์ญ์์ค. ํ์ง๋ง ๋์๊ฒ๋ ๊ทธ๋ฐ ์ฌ์น๊ฐ ์๋ค. ๋น์ ์ด ์ด ๋์ฅํ์ ๋ง๋ค์๊ณ , ๋น์ ์ด ํด๊ฒฐํ์ต๋๋ค. ๋น์ ์ ๋ด๊ฐ ๋น์ ์ ์๋ก์ด ํ๋ ์์ํฌ๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋ด ์ฝ๋๋ฅผ ์ด์ํ๊ณ ๋ง์ ์๊ฐ๊ณผ ๋์ ํฌ์ํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
4๋จ๊ณ ์๋๋ฆฌ์ค๋ฅผ ์ดํด๋ณด๋ฉด CoreFX๋ฅผ ๋ณ๋์ ํ๋ ์์ํฌ๋ก ๋ณด๋ ๊ฒฝ์ฐ ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์จ๋ ๊ทธ๋ ์ง ์์ต๋๊น? ๊ทธ๊ฒ์ ๋ช ๋ ์ Compact Framework์ ๋์ผํฉ๋๋ค(๋ด ํ๋ ์์ํฌ๋ฅผ ์ด์ํ๊ณ CoreFX๋ก ์ด์ํ๋ ๊ฒ์ด ๊ฐ๋จํ๊ณ ๋น ๋ฅด๋ฉฐ ์ฝ์ง ์๊ณ ๋ ๊ฐ์ ์ฝ๋ ๊ธฐ๋ฐ์ ์ ์งํ๋ ๊ฒ์ด ์๋๋ผ๋ ๋ช ๊ฐ์ง ์ด๋ ค์ด ๊ตํ์ ๋ฐฐ์ ์ต๋๋ค. ๋ ์ค ํ๋๋ ์๋): ์ฐ๋ฆฌ๋ 1๊ฐ์ API๋ก ์์ํ ๋ค์ ๋๊ตฐ๊ฐ๊ฐ ๋ฌด์ธ๊ฐ๋ฅผ ์์ด๋ฒ๋ ธ๊ฑฐ๋ MS ๋ด์ ์ผ๋ถ ํ์ด ๋ฌด์ธ๊ฐ๋ฅผ ํ์๋ก ํฉ๋๋ค.
(์: Compact Framework๋ 'SerializableAttribute'๋ฅผ ์์ด๋ฒ๋ ธ์ต๋๋ค. ๊ทธ๋ค์ ์ดํ ๋ฒ์ ์์ ์๋ฌด ๊ฒ๋ ํ์ง ์๋ ๋๋ฏธ ์์ฑ๊ณผ ํจ๊ป ์ถ๊ฐํ์ง๋ง ์กด์ฌํ์ง ์์ ๊ฒ์ผ๋ก ์์ํ๊ณ ์์ฒด์ ์ผ๋ก ์ ์ํ ์ฝ๋๋ฅผ ๊นจ๋จ๋ ธ์ต๋๋ค)
ํ์ง๋ง ๋๋ก๋ฅผ ๋๋๋ ๊ฒ์ ์ดํดํ ์ ์์ต๋๋ค. ํธํ์ฑ์ ์ ์งํ๋ ค๊ณ ํ๋ ๊ฒ์ ๋๋ฌด ์ ํ์ ์ ๋๋ค. ๋๋ ์ด ๊ท์น์ด ๋ฏธ๋์ ๊นจ์ง ๊ฒ์ด๋ผ๊ณ ์ง๊ธ ์ฌ๊ธฐ์์ ์์ธกํฉ๋๋ค.
์ฌ๋ฌผ์ 'ํธํ์ฑ'์ผ๋ก ๋ณด๋ ๊ฒ์ API ์๋ช ์์ค๋ฟ๋ง ์๋๋ผ API _๋์_ ์์ค์์๋ ์ค์ํฉ๋๋ค. API ๋์์์ ์ด ๋(CoreFX ๋ฐ .NET Full)์ด ์์ ํ ๋์ผํ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ๋ ๊ฒ์ ๋๋ฌด ์ํํฉ๋๋ค. ํ๋ ์์ํฌ ๊ฐ๋ฐ์๋ CoreFX ๋ฐ .NET ์ ์ฒด์์ ๋์ผํ ๊ธฐ๋ฅ์ ํ ์คํธํด์ผ ํ๋ฏ๋ก CoreFX ๋จ๋ ํ ์คํธ๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ฝ๋๊ฐ ํฅํ .NET ์ ์ฒด์์ 100% ๋์ผํ๊ฒ ์๋ํ๋ค๊ณ ๊ฐ์ ํ๊ธฐ์ ์ถฉ๋ถํฉ๋๋ค. ์ด๋ป๊ฒ ๋ณด์ฅํ ์ ์์ต๋๊น? CoreFX์ ๋ํ ์ฌ์ธต์ ์ธ ํธ์ถ ์คํ 20 ํธ์ถ์ .NET ์ ์ฒด์์๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ๋ค๋ฅธ ์ฝ๋๋ฅผ ๊ฑด๋๋ ธ๊ณ ์ฌ๊ธฐ์ ๊ธฐ์ ์์ ์ธ๋ถ ์ฌํญ๊ณผ ์ํฉ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ์์ ์ ๋ณ๋์ ํ๋ ์์ํฌ์ ๋๋ค. CoreFX์ ๋ํด ์ปดํ์ผ๋ ์ฝ๋๋ .NET ์ ์ฒด์ ๋ํด ์ปดํ์ผ๋ ์ฝ๋์ ๋ค๋ฅผ ์ ์์ต๋๋ค.
๋ช ๊ฐ์ง ์ํฉ์ด ์์ต๋๋ค.
1) ํ๋ ์์ํฌ์๋ CoreFX์์ 100% ์ปดํ์ผ๋๋ ์ฝ๋ ๊ธฐ๋ฐ์ด ์์ต๋๋ค. ์ด๊ฒ์ .NET ์ ์ฒด์์ ์คํํ ์ ์๋ dll์ ์ ๊ณตํฉ๋๋ค.
2) ํ๋ ์์ํฌ์๋ CoreFX์์ 70% ์ปดํ์ผ๋๊ณ .NET ์ ์ฒด์์ 100% ์ปดํ์ผ๋๋ ์ฝ๋ ๊ธฐ๋ฐ์ด ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด CoreFX์ฉ๊ณผ .NET ์ ์ฒด์ฉ์ 2๊ฐ์ dll์ด ์ ๊ณต๋ฉ๋๋ค. .NET ์ ์ฒด์์ CoreFX ๋ฒ์ ์ ์คํํ๋ ๊ฒ์ ๊ธฐ๋ฅ์ 30%๋ฅผ ๋์น๊ธฐ ๋๋ฌธ์ ์ด๋ฆฌ์์ ์ผ์
๋๋ค.
1)์ ๊ฒฝ์ฐ ๊ทํ์ ์์ ์ ์ดํดํฉ๋๋ค. 2)์ ๊ฒฝ์ฐ(ํ์ฌ์ ๋ชจ๋ .NET ์ ์ฒด ๋์ ํ๋ ์์ํฌ, ๊ทธ ์ค _all_ ํ์ฌ ORM์ ๊ฒฝ์ฐ) 2๊ฐ์ dll๊ณผ ํจ๊ป ์์ ํด์ผ ํ๋ฏ๋ก ์์ ์ ์ค์ ๋ก ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋ณ๋๋ก ์ ์ง ๊ด๋ฆฌํ๊ณ ๋ณ๋๋ก ํ ์คํธํ๊ณ ์์ฒด ์ ๋ฒ์ ์ผ๋ก ๋ณ๋๋ก ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค. ํนํ CoreFX๊ฐ ์์ง .NET ์ ์ฒด์ ์ผ๋ถ๊ฐ ์๋(์ด ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์) ์๋ก์ด ๊ธฐ๋ฅ์ ์ป๋ ๊ฒฝ์ฐ. (btw: DataTable๊ณผ ๋ค๋ฅธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ฐํํ๋ CoreFX์ DbDataReader.GetSchemaTable()์ ์ถ๊ฐํ๋ฉด MS๊ฐ ์ด์์ ๊ฑฐ๋ถํ๊ธฐ ๋๋ฌธ์ CoreFX์์ DbDataReader.GetSchemaTable์ ์ฌ์ฉํ๋ ์ฝ๋๋ .NET ์ ์ฒด์์๋ ์ค๋จ๋ฉ๋๋ค. ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ์ง์ ํ๋ฉด ๋ฉ์๋๊ฐ ์์ ๋ฟ ์๋๋ผ ๊นจ์ง ๊ฒ์ ๋๋ค. Iow: _both_ ํ๋ ์์ํฌ์ ์๋ ๊ฒ์ด ์ฌ์ฉ๋๋ฉด ์ฝ๋๊ฐ ๊นจ์ง๋๋ค. ๊ทธ๋ ๋ค๊ณ ํด์ CoreFX์ ์กด์ฌํ์ง ์์์ผ ํ๋ค๋ ์๋ฏธ๋ ์๋๋๋ค.
CoreFX์ ์ธํฐํ์ด์ค๊ฐ ์๋ค๋ ๊ฒ์ ์ํฉ 2)์ ํ๋ ์์ํฌ ์ํฉ์ ์๊ตฌ์ ์ธ ๊ฒ์ผ๋ก ๋ง๋ญ๋๋ค. ์๋ฅผ ๋ค์ด API๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๋ ธ์ถํ๊ธฐ ๋๋ฌธ์ 1)์ ๋ง๋ ํ๋ ์์ํฌ๊ฐ ๋๋๋ก ์ด๋ํ ์ ์์ต๋๋ค.
Microsoft๋ ์ํฉ 1)์์ ํ๋ ์์ํฌ๊ฐ ํ๋ ์์ํฌ๊ฐ ๋๋๋ก ์์ฒด ํญ๋ชฉ์ ๋ค์ ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ์๊ฒ๋ ๋ฐฑ๋ง ๋ฌ๋ฌ์ ์์ฐ์ด ์๊ณ ORM ๋ฐํ์์ 15๋ช ์ด์์ ์ฌ๋๋ค์ด ์๊ณ ์ฐ๋ฆฌ ์ธก์ ์ฃผ๋ฆ์ ๋ถ๋๋ฝ๊ฒ ํ ๋๊ท๋ชจ PR ๊ธฐ๊ณ๊ฐ ์์ต๋๋ค. ๋ชจ๋ ์ฑ์ ๊นจ๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ 2)์ ๊ฐํ ์๊ฑฐ๋ 1)์ผ๋ก ์ด๋ํ๊ธฐ ์ํด MS์ ์ฝ๊ฐ์ ๋์์ด ํ์ํฉ๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ์ฌ๊ธฐ์์ ๋ฌธ์ ๊ฐ ๋๋ ๊ฒ์ ๋๋ค. ๋น์ ์ ํธ์ํฐ์์ "ํ์ํ ๊ฒ์ ๋งํด์ฃผ์ธ์"๋ผ๊ณ ๋งํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ๋ค. ์๊พธ. ํนํ System.Data์ ๊ดํด์๋ ํต์ ์ด ์์ต๋๋ค . ์๋ฌด๊ฒ๋. ๋ฏธ๋ ๊ณํ๋ ์๊ณ , ๋ฌด์์ ํด์ผ ํ ์ง ๋ ผ์๋ ์๊ณ ๋ง๋ค๋ฅธ ๊ณจ๋ชฉ์ ์์ผ๋ฉฐ ๋๋ก๋ MS ์ง์์ด ๊ฐ์ ํ๋ฉด ๋ฌธ์ ์ ์ง์ ํ ์ดํด ๊ด๊ณ๊ฐ ์๋ ์ฌ๋์ ๋๋ค. ์๊ฐ์ ํ ์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ฐฐ๊ฒฝ์ด ๋ง์์๋ก ๋ ์ข์์ง์ง๋ง ๋์์ ๋๋ฃ์ ์ด ๋ฌธ์ ์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ๋ด๋น์๊ฐ ๋ถ์ฌ ์ค์ด๊ณ ๋ถ์ฌ์ค์ด์ด์ ํด๊ฒฐ๋์ง ์์ต๋๋ค. ํ ๋ก ์ ์ฐธ์ฌ.
๊ทธ๊ฒ์ด ๋๋ฅผ ์ข์ ํ๊ฒ ๋ง๋ค๊ณ ์ ์ด '๋น์ ๋ฌธ๊ฐ'๋ฅผ ๊ธ์งํ๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ์ญ์์ค.
๋ฃ๊ธฐ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. Btw ๋๋ ํ์์ด ์์ต๋๋ค wrt System.Data: ์ฝ๋๋ฅผ ํฌํ ํ๋ ๊ฒ์ API์ ๋ํ์ ์ด ๋ ๊ฒ์ด๋ฉฐ API ์์ ํต์ฌ ํ๋ ์์ํฌ๋ฅผ ์์ฑํ๋ ๊ฐ๋ฐ์์ ์ฐ๋ฝ์ด ์๊ธฐ ๋๋ฌธ์ ํฌ๋ง ์ฌํญ์ด ๊ฑฐ์ ๋๋ ์ ํ ์์ต๋๋ค. ๋ฐ๋ ๊ฒ์ด๋ค. ๋น์ ์ ์๋ชป์ด ์๋๋๋ค. @davkean , ๊ฐ์ธ์ ์ธ ๊ฒ์ด ์๋๋๋ค.
๋๋ ์์ฌ ์ํต์ ๋ถ์กฑ์ ๋ํ ์์ ์ข์ ๊ฐ์ ๋ํ์ดํด์ผํฉ๋๋ค. ๋๋ ์ฝ์ ๋ฐ ์คํค๋ง ์ ๋ณด๋ ํ์ํฉ๋๋ค. ์ด๋ฌํ ๋๋ฝ๋ ์ฝ์ด(์๋ฐฉํฅ ๋ชจ๋) ๊ธฐ๋ฅ์ ํ ๋ฌ ๋๊ฒ(dotnet/runtime#15269 ๋ฐ dotnet/runtime#14302 ์ฐธ์กฐ) ๋ฐ์ ์ด๋ ์ปค๋ฎค๋์ผ์ด์ ์ด ์์์ต๋๋ค. ๊ทธ๋ฌ๋ Microsoft๋ ํ์ฌ ์ฝ๋๋ฅผ "์ถ์ ํ๋ณด"๋ก ์ง์ ํ๊ณ ์์ผ๋ฉฐ, ๊ทธ ์์ฒด๊ฐ "์ถฉ๋ถํ ์ข์ต๋๋ค"๋ผ๋ ๋ฉ์์ง์ ๋๋ค. ๊ทธ๋ ์ง ์๋ค. ์ถ๊ฐํด์ผ ํ ํต์ฌ ์ฌํญ์ด ๋๋ฝ๋์์ผ๋ฉฐ ์ด๋ฌํ ์ค๋ ๋๋ฅผ ๋ฐ๋ฅด๋ ๊ฒฝ์ฐ ์ ์ฌํ ๋ฒ์ ๊ด๋ฆฌ ์ด์ ๋ก ์ฒซ ๋ฒ์งธ ๋ฒ์ ์
dotnet/runtime#14302("DataTable/View/Set Absent๊ฐ ์๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?")์ ๋ง์ง๋ง ์ ๋ฐ์ดํธ๋ฅผ ๋ณด๋ฉด 22์ผ ์ ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฌป์ต๋๋ค.
์ด์ CoreCLR์ V1์ ๋ํ System.Data.Common ๊ธฐ๋ฅ์ด ์์ฑ๋์์ต๋๊น?
์, ์ข์ ์ ๋น์ ๋ฌธ์ผ๋ก ๋ณด์ผ ์ ์์ต๋๋ค. ํ
์คํธ์ ์ด์กฐ์ ๋งฅ๋ฝ์ ํํธ์๊ณ ํญ์ ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์์ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ด ์ ํ๋ฉ๋๋ค. ๋๋ ๋ชจ๋๊ฐ ์ฌ๊ธฐ์์ ์์ฐ์ ์ธ ์ผ์ ํ๋ ค๊ณ ๋
ธ๋ ฅํ๊ณ ์๋ค๊ณ ์๊ฐํ์ง๋ง, ์ฐ๋ฆฌ๋ System.Data
์์ญ์ ์ค์ ์งํ ์ํฉ์ ๋ํด CoreFX ์ธก์์ ๊ฝค ๋ง์ ๋ฒฝ์ ํ๋ฌผ๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋นํธ์ ์ฌ์ฉ์.
์ฐ๋ฆฌ๋ ์ด๋ฌํ ํต์ฌ ๊ธฐ๋ฅ ์กฐ๊ฐ, ์ธํฐํ์ด์ค๊ฐ ํ์ํฉ๋๋ค. ์ ๋ ์ธํฐํ์ด์ค์ ๋ํด ์๊ฒฉํ์ง ์์ผ๋ฉฐ ์ธํฐํ์ด์ค ์์ด Dapper๋ฅผ ์ด์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ DataTable์ ๋ถ์กฑ, ๊ฒฐ๊ณผ ์คํค๋ง ์ ๋ณด, ๋๋ ์ฝ์ ๋ฑ์ "๋ฆด๋ฆฌ์ค ํ๋ณด"์์ ํ์ฉ๋์ง ์์ต๋๋ค. Microsoft๋ ํ์ฌ ์ฝ๋์ RC๋ก ๋ ์ด๋ธ์ ์ง์ ํ๋ ๊ฒ์ ๋ํ ๋ถ๋ง์ ์ฆ๊ฐ์ํค๋ ์ฌ๋์ ๋๋ค. ํ์ฌ ์ฝ๋๊ฐ ์ถ์๋ ์ค๋น๊ฐ ๋์ง ์์๋ค๋ ๋ฐ ๊ฑฐ์ ๋ณดํธ์ ์ผ๋ก ๋์ํ๊ณ ์์ต๋๋ค. ๋ค, ๊ทธ๋ฅ ๋ ์ด๋ธ์ ๋๋ค. ํ์ง๋ง ์๋ชป๋ ๋ ์ด๋ธ์ด์ ์์์ ์ผ์ (ํ์ค์ ๋ฐ์ํ๋๋ก ๋ณ๊ฒฝ๋์ด์ผ ํจ)์ ๊ธฐ๋ฐํ๊ธฐ ๋๋ฌธ์ ๊ธด๊ธ๋๋ฅผ ํฌ๊ฒ ๋์ด๋ ๋ ์ด๋ธ์ ๋๋ค. ์ด ์ค๋ ๋์ ๋๊ตฌ๋ ๊ทธ ์ผ์ ์ ์ฑ ์์ด ์๋ค๊ณ ์๊ฐํ์ง ์์ง๋ง _level_ ์ข์ ์ ์ฃผ์ ์์ธ์ผ๋ก ์ธ๊ธํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
๊ทผ๋ณธ ๋ฌธ์ ๋ก ๋์๊ฐ์. ์ฐ๋ฆฌ๋ ์ด๋ฌํ ์กฐ๊ฐ์ด ํ์ํ๋ฉฐ ์๋ฐฑ๋ง ๋ช ์ ์ฌ์ฉ์๊ฐ ํ์ํฉ๋๋ค. ์์ ํ๊ฒ ์ต๋๋ค.
1๋ฐฑ๋ง ๊ฐ ์ด์์ ๋ค์ด๋ก๋๋ก NHibernate๋ฅผ ์์ง ๋ง์:
| ์์ด๋๋น์ปค๋ฅ์
| IDb๋ช
๋ น | IDataReader |
| --- | --- | --- |
| 59 | 181 | 132 |
ํ์ฌ ์ธ์์ ADO.NET/CoreCLR์ด EF ๋ฐ SQL Server์ ๋ํ ์ต๊ณ ์์ค์ ์ง์์ ์ ๊ณตํ๋๋ก ์ฌ์ค๊ณ๋๊ณ ๋๋จธ์ง ์์ฝ์์คํ ์ ๋ฌด์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด์ ๊ฐ์ ๋ถํฌ๋ช ํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ ์ด ๊ณ ์ ๊ด๋ ์ ๋ค์ ์ํํ๊ธฐ ์ํ ๊ฒ์ผ ๋ฟ์ ๋๋ค. .
๊ทธ ์ธ์์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ ์ํด ๊ฐํ๋ฉ๋๋ค: https://github.com/dotnet/corefx/issues/4646
๋ด๊ฐ ๋งํ ์ ์๋ ํ, SqlClient ์ด์ ๋ธ๋ฆฌ ์ธ๋ถ์์ ์ ์ฉํ ๋ฐฉ๋ฒ์ผ๋ก ํด๋น API๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ ์ ์์ต๋๋ค.
์ ๋ ํ์ฌ ์ธํฐํ์ด์ค ์์ด ํ ์คํธํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์งํ ์ธํฐํ์ด์ค ๋ฒ์ ๊ด๋ฆฌ ๋ฐ ํธํ์ฑ์ ๋ํ ์ถ๋ก ์ ์ดํดํ์ง ๋ชปํฉ๋๋ค.
.NET Core์ ์์ด๋์ด๋ ํธํ์ฑ์ ๋ํ ๋ถ๋ด์ด ์๋ ์๋ก์ด ํ๋ ์์ํฌ์ด๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํจ๊ป ๋ฒ๋ค๋ก ์ ๊ณต๋๋ฏ๋ก ๊ทธ๋ฐ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ด ์๋๋๊น? ๊ณต๊ธ์๋ ์คํค๋ง ๋ฐ ๋ฐ์ดํฐ ํ ์ด๋ธ๊ณผ ๊ฐ์ ํญ๋ชฉ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ .NET์ ๊ณต๊ธ์์ ํธํ๋์ง ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ํธํ์ฑ์ด ์์๋๋ ๊ฒ์ ๋ฌด์์ ๋๊น? ์ธํฐํ์ด์ค๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ ๋ฒ์ ์ ๋ํด ์ปดํ์ผํ๊ณ ์ฑ๊ณผ ๋ฒ๋ค๋ก ๋ฌถ์ผ๋ฉด ๋ฉ๋๋ค.
๋์์ธ์ ๋ํ ๋๋ถ๋ถ์ ํ๊ณ๋ ์ ํ๋ ์์ํฌ์ ์ ์ฉํ ์ ์๋ ๊ธฐ์กด ํ๋ ์์ํฌ์ ๊ฑฑ์ ๊ฑฐ๋ฆฌ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ด์จ๋ ์ค์ ๋ก ์ด๋ป๊ฒ ๋๋์ง ๋ด ์๋ค.
์ฌ๋ฌ ํ๋ ์์ํฌ๋ฅผ ์ง์ํ๊ณ ์ญ์ฌ์ ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ๋ชฉํ๋ก ์ผ๊ณ ์๋ ์ฌ์ฉ์๋ฅผ ์ํด... ์ ๋ Dapper๊ฐ ์ฌ์ฉํ๋ ์ถ์ ํ ๋๋ฏธ๋ฅผ ๊ณต์ ํ๊ณ ์ถ์ต๋๋ค. ์ด๊ฒ์ด _good_์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์ ์๋์ง๋ง ์ปดํ์ผํ๊ธฐ์๋ ์ถฉ๋ถํฉ๋๋ค. ๋ฌผ๋ก , ๊ทธ๊ฒ์ ์์ฒญ๋ ํ์ผ ๋๋ฏธ์ ๋ณต์ ๋ฉ๋๋ค... ์ ๋ ์ฃผ๋ก ๋ ๋ค๋ฅธ ์ํฅ์ ๊ฐ์กฐํ๊ธฐ ์ํด ์ด๊ฒ์ ๊ณต์ ํ๊ณ ์์ต๋๋ค.
https://github.com/StackExchange/dapper-dot-net/blob/master/Dapper/SqlMapper.cs#L6 -L16
์ธํฐํ์ด์ค์ ๊ตฌ์ฑ์์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
๋ง์ต๋๋ค. ์ธํฐํ์ด์ค์ _์ข์_ ๊ธฐ๋ฅ์ ๋๋ค. ์ถ์ ๊ธฐ๋ณธ ํด๋์ค์ ๋ํ ๊ธฐ๋ณธ ์ค์ ์ API ์ํธ๋กํผ์ ์ธ์ฐ๋ ๋์ API ์ํธ๋กํผ๋ฅผ ๋๋ ๊ฐ์ฅ ์์ ํ ๋ฐฉ๋ฒ์ ๋๋ค.
OOD ์์น ์ ๋ฐ๋ผ์ผ _ํ์ง_๋ ์์ง๋ง OO API๋ฅผ ๋ง๋ค ๋ ์ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ฐ๋จํ ๋งํด์ ISP( ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น )๋ _์ด๋ค ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ๊ฐ์ ๋ก ์์กดํด์๋ ์ ๋๋ค๊ณ ๋ช ์ํฉ๋๋ค.
๊ธฐ์กด ์ถ์ํ์ ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ฉด ์๋์ผ๋ก ISP๋ฅผ ์๋ฐํ๊ฒ ๋ฉ๋๋ค.
๋น์ ์ Microsoft์ด๊ณ BCL๋ก ์์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ 'SOLID๋ฅผ ๊ณ ์ํ ํ์๊ฐ ์๋ค'๊ณ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ๋ฐ๋ ์ฃผ์ฅ).
6-7๋ ๋์ ๋ช ๊ฐ์ ์คํ ์์ค ํ๋ก์ ํธ๋ฅผ ์ ์งํด ์จ ๊ฒฝํ์ ์ธํฐํ์ด์ค๋ฅผ ์๊ฒ ์ ์งํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ถ์ํ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ผ ํ๋ ๊ฒฝ์ฐ ์ ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ์ธ์.
์ฌ๊ธฐ์ ์ฐฌ์ฑ ํฌํ๊ฐ ์์๋ค๋ฉด @ploeh ๋ ์ ์๊ฒฌ์ +1000์
ํ์์ ๊ฐ์ด @ploeh์ ํต์ฐฐ๋ ฅ์๋ ์๊ฒฌ.
@FransBouma , ์ฐ๋ฆฌ๋ ์ ์ฒด ํ๋ ์์ํฌ๋ฅผ ์์์ํค์ง ์๋ ๋ฐฉ์์ผ๋ก DbDataReader.GetSchemaTable()์ ๋์ฒด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒ์
๋๋ค.
@NickCraver , SqlBulkCopy๋ ์ฐ๋ฆฌ์ ๋ฏธ๋ ๊ณํ์ ์์ผ๋ฉฐ ์คํค๋ง์ ๋ํด ์์
์ค์
๋๋ค. ์ฐ๋ฆฌ๋ ๋ํ x-ํ๋ซํผ์์ ์๋ํ๋๋ก ์คํ์ ๋ง๋๋ ๋ฐ ํฉ๋ฆฌ์ ์ธ ์งํ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์คํค๋ง์ ๋ํ ์งํ์ด ๋๋ฆฝ๋๋ค.
@mythz , ๊ณ ๊ฐ ์ํฅ์ ๋ํ ์์ , ์ซ์ ๋ฐ ํ๊ฐ๋ฅผ ์ ๊ณตํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ค์ ๊ฒํ ํ ๊ฒ์
๋๋ค.
@YoungGah ์ ๋ณด์ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ์ต์ ์ํ๋ก ์ ์ง๋๋๋ก ํ์ญ์์ค( ์:
@FransBouma ์, ๋ค๋ฅธ ์ค๋ ๋๋ ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค. ์ธ์ ๊ทธ๋ฆฌ๊ณ ๋ฌด์์ ์ฌ์ฉํ ์ ์๋์ง์ ๋ํ ์ถ๊ฐ ์ ๋ณด์ ๋ํ ๊ทํ์ ์์ฒญ๊ณผ ๊ด๋ จํ์ฌ ๊ทํ๊ฐ ํ์๋ก ํ๋ ์ด์ ๋ฅผ ์ถฉ๋ถํ ์ดํดํฉ๋๋ค. ๊ธฐ๋ฅ/๊ธฐ๋ฅ์ v1์์ ์ฌ์ฉํ ์ ์๋์ง, ์๋์ ์ผ๋ก ์ ๊ฑฐ๋์๋์ง, v1 ์ดํ์ ์ฌ์ฉํ ์ ์๋์ง ๋๋ ํฅํ ์ฌ์ฉ ๊ฐ๋ฅ์ฑ์ ๋ํ ๋์์ธ์ด ๋ณด๋ฅ ์ค์ธ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๋ชฉ๋ก์ ๊ฒ์ํ ๊ฒ์ ๋๋ค. ์์ผ๋ก 2์ฃผ๋์ ํฌ์คํ ํ๋๋ก ๋ ธ๋ ฅํ๊ฒ ์ต๋๋ค. DbDataReader์ ๋ํ ์คํค๋ง ๊ฐ์ ธ์ค๊ธฐ ๊ธฐ๋ฅ๊ณผ DbConnection ๊ธฐ๋ฅ์ ๋ํด์๋ rc2 ๋ฆด๋ฆฌ์ค์์ ์ฌ์ฉํ ์ ์๋๋ก ํ ๊ณํ์ ๋๋ค. ์์ธกํ ์ ์๋ ์ด์ ๋ก ๊ณํ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ์ปค๋ฎค๋ํฐ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
์ฌ๊ธฐ์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ , ๋์ค์ ์ฐธ๊ณ ํ ์ ์๋๋ก @YoungGah; IDataReader์๋ DataSet์ ๋ํ ์ข ์์ฑ์ด ์๋ DataTable์ ๋ํ ์ข ์์ฑ์ด ์์ต๋๋ค(์ฐ๋ฆฌ๋ ๋ณ๋์ ๊ณ์ธต์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค. ์ ์ฑ ์ด ์๋ ์ด๋ฌํ ์ ํ๊ณผ ๋ฌ๋ฆฌ ์ ์ฑ ์ด ๋ฌด๊ฒ๊ธฐ ๋๋ฌธ์). ๋ฐ๋ผ์ ์ด๋ฌํ ์ธํฐํ์ด์ค๊ฐ ๋ค์ ๊ฐ์ ธ.
@ploeh ์ ์ ๊ทผ ๋ฐฉ์์ ๋ํด ์ฌ๊ธฐ์ ๋ค๋ฅธ ํฌํ๋ฅผ ํ๊ณ ์ถ์ต๋๋ค. ์ธํฐํ์ด์ค๊ฐ ์์ง๋ง ํ์ฌ BCL์ ์๋ ๋๋ถ๋ถ์ ์ธํฐํ์ด์ค๋ณด๋ค ํจ์ฌ ๋ ์ธ๋ถํ๋์ด ์์ต๋๋ค. ์ด๊ฒ์ ๋ถ๋ฆฌ์ ๋ฒ์ ๊ด๋ฆฌ์ ๋ํ @davkean ์ ์๊ฒฌ์ ๋ชจ๋ ๋ค๋ฃน๋๋ค.
์ด์ ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ ์ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ์ ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ค๋๋ ๊ฒ์ ํ๊ธฐํ์ญ์์ค. ์์ผ๋ก ์ค๋๋ ๊ฒ์ ์ ๊ฑฐํ์ญ์์ค. ์ ์ด๋ ํ์ฅํ๊ณ ๊ธฐ์กด ์ฌ์ฉ์ ์ค๋จํ์ง ์์ ์ ์์ต๋๋ค.
๋๋ ์ฌ๋ฌ ๊ฐ์ ์์ ์ธํฐํ์ด์ค. ๋๊ธ์ ๋ฌ๊ฒ ๋์์ต๋๋ค.
์๋ณธ .NET๊ณผ์ ์๋ฒฝํ ํธํ์ฑ์ด ํ์ํ๋ค๋ ๊ฒ์ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ์ฌ๊ธฐ์ ๋์ ๊ฒ์ด ์์ต๋๋ค. ์ด๊ฒ์ ์๋ก์ด ํ๋ ์์ํฌ์ด๋ฉฐ ๋ ๊ฑฐ์ ์ฝ๋์์ ๊ด๊ณ๋ฅผ ๋๊ณ ์ค๋ซ๋์ ํ์ํ์ง๋ง ์๋ ํ๋ ์์ํฌ์์ ์์๋ ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ์ ์๋ ์๋ฒฝํ ๊ธฐํ์ ๋๋ค.
์ธํฐํ์ด์ค๋ฅผ ๋ค์ ์ ์ํ์ ๋ ์๋ 1.1 ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ ธ์ฌ ์๊ฐ์ด ์๋๋ผ ์๋ก์ด ๋์์ธ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ์ ๋ฐ์ดํธํ์ต๋๋ค. @ploeh๊ฐ ๋งํ๋ฏ์ด ๋ ๋ง์ ๊ฒ์ด ์์ ์ ์์ต๋๋ค.
์ธํฐํ์ด์ค๋ ๊ฐ๋ฅํ๋ฉด ๋ ๊ฑฐ์ ์ง์์ด ๊ฐ๋ฅํ์ง๋ง ์ด ์์ ์์ ์ฐ์ ์์๊ฐ ๋์ด์๋ ์ ๋ฉ๋๋ค.
์ด ์ฃผ์ ์ ๋ง์ ๊ด์ฌ์ด ์์ด์ ์ฌ๊ฐํฉ๋๋ค.
์ฌ๊ธฐ์ ๋์ ๊ฒ์ด ์์ต๋๋ค. ์ด๊ฒ์ ์๋ก์ด ํ๋ ์์ํฌ์ด๋ฉฐ ๋ ๊ฑฐ์ ์ฝ๋์์ ๊ด๊ณ๋ฅผ ๋๊ณ ์ค๋ซ๋์ ํ์ํ์ง๋ง ์๋ ํ๋ ์์ํฌ์์ ์์๋ ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ์ ์๋ ์๋ฒฝํ ๊ธฐํ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์๋ ์๋ชป ์ค๊ณ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ฑฐํ๊ณ ADO.NET๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ํด๋์ค์์ ํ์คํํ ์ ์๋ ์๋ฒฝํ ๊ธฐํ๊ฐ ์ด๋ฏธ ์ด๋ฃจ์ด์ง๊ณ ์์ต๋๊น? :ํธ๋กคํ์ด์ค:
์ง์งํ๊ฒ ๋งํ์ง๋ง ๊นจ๋ํ API ๋๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ ์ค์์ ์ ํํ ์ ์์ต๋๋ค. ํ๋๋ฅผ ์ ํ. ๋๋ ๋น์ ์ ์ผ์ดํฌ๋ฅผ ๊ฐ์ง๊ณ ๊ทธ๊ฒ์ ๋จน๋ ๋ฐฉ๋ฒ์ ๋ณผ ์ ์์ต๋๋ค.
@JamesNK ํ์ง๋ง ๊ทธ๊ฒ ์ ํํ ์์ ์ ๋๋ค. ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ํ์ํ์ง ์์ต๋๋ค.
๋๋ด์ด์ง๋ง โโ์ธํฐํ์ด์ค๊ฐ ์๋ ์๋ชป ์ค๊ณ๋ API๋ ์ธํฐํ์ด์ค๊ฐ ์๋๋ผ ์๋ชป ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์ ๋์ ๊ฒ์ ๋๋ค. =) ์ธํฐํ์ด์ค๊ฐ NET์ ๋ชจ๋ ๊ณณ์์ ์ ๋์ ์ผ๋ก ์ฌ์ฉ๋์ง ์๊ฑฐ๋ ์ด๊ฒ์ ์๋ก์ด ๊ฒ์ด ์๋๋๋ค. ์ด๋ฒ์๋ ์ฌ๋ฐ๋ฅด๊ฒ ๋์์ธํ๊ณ ๊ณ์ ์งํํ์ญ์์ค.
ADO.NET์ ๋ชจ๋ .NET์์ ๊ฐ์ฅ ์์ ์ ์ธ ์ฝ๋ ์ค ํ๋์ ๋๋ค. 15๋ ๋์ ๋์ธ ์ฐจ๋ก์ ์ฌ๊ฐํ ๋ณํ๊ฐ ์์์ต๋๋ค. ์ธํฐํ์ด์ค์ ์์ ํ๋๊ณ ๋ชจ๋๋ฅผ ์ํด ๋ ๊ฐ๋จํ๊ฒ ๋ง๋๋ ์๋ฒฝํ API์ ๋๋ค.
์ฐธ๊ณ ๋ก ์ด ์ฃผ์ ๋ ๊ฐ์ฅ ๋ง์ด ์ธ๊ธ๋ ๋ฌธ์ ์ค ํ๋์ด๋ฉฐ ์ธํฐํ์ด์ค ๋ ๊ฐ์ ๋ฉ์๋, ํ ์คํธ ๊ฐ๋ฅ์ฑ ๋ฐ ๊ธฐํ ํญ๋ชฉ์ ๋ํด ์ค๋ซ๋์ ๋์ผํ ํ ๋ก ์ ํ์ต๋๋ค.
@nvivo ๋๋ ํผ๋ ์ค๋ฝ์ต๋๋ค. ๊ธฐ๋ณธ ํด๋์ค๊ฐ ํ ์คํธ ๊ฐ๋ฅ์ฑ์ ํ์ฑํํ๋ค๋ ๊ฒ์ ํ์ธํ ํ ์ด ์ค๋ ๋๋ .NET Framework ์ฝ๋๋ฅผ .NET Core๋ก ์ด์ํ ์ ์๋๋ก ์ธํฐํ์ด์ค๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ค๊ณํ๊ณ ์๋ก์ด ๊ฒ์ ๋์ ํ๋ฉด ์ด๋ป๊ฒ ๋์์ด ๋ ๊น์?
์ ์ฐ๋ฆฌ๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ํ ๋
์ฐฝ์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ์ ์๊ณ ๋น์ ์ด ์ ํํ ๋ฌด์์ด๋ (์ถ์ ํด๋์ค ๋๋ ์์ ์ธํฐํ์ด์ค) ์์ผ๋ก ๋์๊ฐ ์ ์์ต๋๊น? ์๋ ์ธํฐํ์ด์ค๋ ์ ์คํ์ ๋งจ ์์ ์๊ณ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด ๋ถ๋ถ๋ ์ ํ ์ฌํญ์ด ๋ ์ ์์ต๋๋ค.
๊ทธ๊ฒ์ ์ด์์ ์ฝ๊ฒ ๋ง๋ค๊ณ ์ฌ์ ํ ์๋ก์ด ๋ฐฉ๋ฒ์ ํ์ฉํฉ๋๋ค.
@davkean
์ฌ๊ธฐ์ ๋๊ธ์ ๋ค์ ๋ชจ๋ ๋ถ๋ค์๊ฒ ๋ต๋ณ์ ๋๋ฆด ์๋ ์์ต๋๋ค. ๋๋ ์๋ก์ด ํ์ฌ API๋ก ์ ๋ฐ์ดํธ๋ ADO.NET์ API๋ก ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ ์ ์ํ์ต๋๋ค. ์๋ ์ธํฐํ์ด์ค์ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ๊ฐ์ ธ์ค๋ผ๊ณ ์์ฒญํ์ง ์์์ต๋๋ค. ๋ชฉ์ ์ API๋ฅผ ๋ณด๋ค ๋ช ํํ๊ฒ ์ ์ํ๊ณ API๋ฅผ ์กฐ๋กฑํ๊ณ ์ด์ ์์กดํ๋ ์ฝ๋(๋๋ถ๋ถ ์ฌ์ฉ์ ์ฝ๋๊ฐ ์๋ ๋ฐ์ดํฐ ์ถ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ฅผ ํ ์คํธํ ์ ์๋๋ก ํ๋ ๊ฒ์ด์์ต๋๋ค.
@ploeh๊ฐ ํ๋ช ํ๊ฒ ๋งํ๋ฏ์ด ์ธํฐํ์ด์ค๋ API๋ฅผ ์ค๋ช ํ๋ ๋ฐ ๋
์ด์ ํด๋์ค๊ฐ ์ด๋ฏธ ์ด๋ป๊ฒ ๋์ ๋์์ธ์ ๋ง๋ค๊ณ ์๋์ง ๋ณด๊ธฐ ์ํด:
Get
๋ฉ์๋๋ฅผ ์ ์ํ์ง๋ง GetByteArray()
๋ฐ GetDateTimeOffset()
์ ๊ฐ์ ๋ค๋ฅธ ์ ํ์ ๋ํด์๋ ์ถ๊ฐํ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ๋ฌธ์์ด์ด๋ ์คํธ๋ฆผ์ ์ฌ์ฉํ์ฌ ์ธ๋ถ์์ ์ํํ ์ ์๋ ๊ฒฝ์ฐ์๋ TextReader๋ฅผ ๊ฒ์ ํด์ผ ํฉ๋๊น? ์ด๊ฒ์ด ์ธํฐํ์ด์ค๋ผ๋ฉด ์ด์ ๊ฐ์ ๋ฉ์๋๊ฐ API์ ์ถ๊ฐ๋๊ฑฐ๋ ๊ตฌ์ฒด์ ์ธ ํด๋์ค(์ GetSql*
SqlDataReader์ ์ด๊ฒ๋ค์ ๋ชจ๋ ์์ฌํ์ ์ง๋ฌธ์ ๋๋ค. ๋๋ ๊ทธ๋ค ๋ชจ๋๊ฐ ์ค๋๋ ฅ ์๋ ๋ต๋ณ์ ๊ฐ์ง๊ณ ์๊ณ ๋ชจ๋ ๊ฒ์ ๊ณ ๋ คํ๋ค๊ณ ํ์ ํฉ๋๋ค. ์์ ์ ํ์ฌ ๋์์ธ์ด ๋ถ๋ช ํ API ์ ์๋ก ์๊ฐ๋์๋ ๊ฒ์ด ์๋๋ผ ์ธํฐํ์ด์ค์์ ๋ ๋ง์ ๊ด์ฌ์ ๋ฐ์ ๊ฒ์ด๋ผ๋ ์ ์ ๋๋ค.
์์งํ, ์ธ๋ถ์์ ๋์์ธ์ ๋ํ ๋ ผ์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ค๋ฆฝ๋๋ค.
์, ๊ฑฐ๊ธฐ์๋ ์ฝ๊ฐ์ ํธ์ธ์ฅ๋ด์ด ์๊ณ ์ด ํ ๋ก ์ ์๋ฌด๋ฐ๋ ๊ฐ์ง ์๊ณ ์์ต๋๋ค =)... ํ์ง๋ง ์ด๊ฒ์ ๋ด ๊ฐ์ด์์ ๊บผ๋ด๊ณ ์ถ์์ต๋๋ค. 2015๋ , ๋ชจ๋ ๊ฒ์ด ํญ์ ๊นจ์ง๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ต์ํด์ ธ ์์ต๋๋ค. ADO.NET์ ์ธํฐํ์ด์ค ๋ณ๊ฒฝ ์ฌํญ๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ผ๊ธฐํ ASP.NET MVC์ ๋ํ 20๊ฐ์ ์ ๋ฐ์ดํธ๊ฐ ํฅํ ๋ช ๋ ๋์ ์์ ๊ฒ์ ๋๋ค.
์ ๋ ์ฌ์ ํ .NET์ ์ฌ๋ํ๊ณ ์ผ๋ฐ์ ์ผ๋ก .NET Core v1์ ์ ์๊ฐ์ ์ถ์ํ๋ ๊ฒ์ด ์๋๋ฅด๊ณ ๋ชจ๋ ๊ฒ์ด ์๋ฒฝํ์ง๋ ์์ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค. ๋๋ ๋จ์ง ์ปค๋ฎค๋ํฐ๊ฐ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ด๊ฒ์ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ์กฐ์ข ํ๋ ๋ฐ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ ์ฐ๋ฆฌ๊ฐ ์์ง์ผ ๋ ๋ฌผ๊ฑด์ ๋ถ์๋ ๊ฒ์ ๋๋ ค์ํ์ง ์์ต๋๋ค.
ORM ์ ์ง ๊ด๋ฆฌ์์ ๊ฒฝ์ฐ ํ์ง ์๋ ์ด์
``` C#
๋ค์์คํ์ด์ค System.Data {
๊ณต๊ฐ ์ธํฐํ์ด์ค IDbConnection { ... }
}
```
์ด๋ํฐ ํจํด์ ์ฌ์ฉํ์ฌ ์ System.Data๋ฅผ ๊ณ ์ ํ ๊ตฌํ์ผ๋ก ๋ํํ์๊ฒ ์ต๋๊น? ์ค์ ๋ก ์ด๋ฅผ ์ํ ์คํ ์์ค ์ฝ๋ ํจํค์ง๋ฅผ ๋ง๋ค๊ณ ๊ณต์ ํ ์ ์์ต๋๋ค.
It's 2015, everything breaks all the time and we're used to it. There will be 20 updates to ASP.NET MVC in the next years that will cause a lot more breaking changes than interface changes in ADO.NET.
I still love .NET and what you're doing with it in general, I'm sure it's a rush to get .NET Core v1 out in time and not everything will be perfect. I just hope the community can help steer this to other directions as the time goes and you're not afraid to break things as we move.
- nvivo
์ด๊ฒ ๋ฌธ์ ์ผ; ๊ณ ๋ ค๋ ์ ๊ทผ ๋ฐฉ์๋ณด๋ค๋ ์์์ ๋ง๊ฐ์ผ์ ๋ง์ถ๊ธฐ ์ํด ๊ธํ๊ฒ ๋ค์ ์์ฑํ๊ณ ์์ต๋๋ค.
ํ์ํ ๊ฒฝ์ฐ 4/16์ ๋ฆ๋ ๊ฒ์ด ๋ฐ์ง์ด๋ ์ ๊นจ์ง ์ฐ๋ ๊ธฐ๋ฅผ ์ป๋ ๊ฒ๋ณด๋ค ๋น ๋ฅผ ๊ฒ์
๋๋ค. 2015๋
์ด๊ณ ๋ชจ๋ ๊ณ ์ฅ์ ๋์ฐํ ์ ๋นํ์
๋๋ค.
@thefringeninja ๋ ์์คํ
์ ์ ๋ฐ(๊ณต์ ์ ๊ฒฝ์ฐ)์์๋ง ์๋ํ๋ ์์ ํ ๋ถํ์ํ๊ณ ํผ๋์ค๋ฌ์ด ์ข
์์ฑ์ ์ถ๊ฐํ๊ฑฐ๋ extern alias
๋ฅผ ์ ํ ํด์ ํด์ผ ํ๋ ์ด๋ฆ ์ถฉ๋๋ก ์ด์ด์ง๋๋ค. a System.Data.IDbConnection
์(๋) ๋ค๋ฅด์ง๋ง ๋์ผํ System.Data.IDbConnection
๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก, ๊ทธ๊ฒ์ ์ํฉ์ 10๋ฐฐ ๋ ์
ํ์ํฌ ๊ฒ์
๋๋ค.
@mgravell ์ ๊ตฌ์ฒด์ ์ธ ์๋ฅผ ๋ค์ด Type.GetType("System.Data.IDbConnection, System.Data")
์ ์ฌ์ฉํ๊ฑฐ๋ PCL ์๋๋ฆฌ์ค์์ ์ด๊ฒ์ด ์ด๋ป๊ฒ ์ค๋จ๋๋์ง ์ ์ ์์ต๋๋ค.
orm A๊ฐ System.Data.IDbConnection์ ์ ์ํ๊ณ orm B๊ฐ ์ ์ํ๋ ๊ฒฝ์ฐ
System.Data.IDbConnection, ์ด์ ์์ ํ ๋ค๋ฅธ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
๋์ผํ ์ด๋ฆ/๋ค์์คํ์ด์ค, ์ถฉ๋ ๋ฐ
์ค์ ๋ก DB ์ ๊ณต์์์ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ์๋ฌด๊ฒ๋ ํด๊ฒฐํ์ง ์์ต๋๋ค,
์๋. ๋ ๋์ ์ : ๋๊ตฐ๊ฐ๊ฐ ํต๊ณผํ ๊ฒ์ผ๋ก ์์๋๋ ์ฌ์ฉํ ์ ์๋ API๋ฅผ ์๋ํฉ๋๋ค.
SqlConnection ๋๋ NgpSqlConnection์์ - ์๋ํ์ง ์์ต๋๋ค.
์ค์ ๋ก ์ด๋ฅผ ์ํ ์คํ ์์ค ์ฝ๋ ํจํค์ง๋ฅผ ๋ง๋ค๊ณ ๊ณต์ ํ ์ ์์ต๋๋ค.
System.Data.Common์ด ์๋๋ฉด DbConnection์ด ์ด๋ฅผ ๊ตฌํํ์ง ์๋๋ค๋ ์๋ฏธ์ด๋ฉฐ, ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋ฉ๋๋ค.
๋ชจ๋ ORM ๋๋ ADO .NET ๊ณต๊ธ์ ์ ์ง ๊ด๋ฆฌ์๊ฐ ์ธ๋ถ ์ 3์ ์ข ์์ฑ(SQL Server๋ ๊ฑฐ์ ๋ณด์ฅํ์ง ์์)์ ์ทจํ๋ ๊ฒ์ ๋ํ ํฉ์๋ฅผ ์ป์ง ๋ชปํ ๊ฒ์ด๋ฉฐ ํต์ฌ BCL ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ ์ํ๋ 2๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. Core libs(์ด์ ์ ์ํด์ผ ํจ)์์ System.Data ์ธํฐํ์ด์ค๋ฅผ ์ฐธ์กฐํ๋ ์์ ์์ค ํ๋ ์์ํฌ(์: ServiceStack)์์๋ ๋ ์ด์ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ์ฐธ์กฐํ์ง ์๋ ORM์ ์ฌ์ฉํ ์ ์์ต๋๋ค. - ํ๊ฑฐ๋ ํด์ผ ํฉ๋๋ค.
๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์ผํ System.Data ์ธํฐํ์ด์ค๋ฅผ ์ฐธ์กฐํ๋๋ก ํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ธฐ๋ณธ ํด๋์ค๋ก ๋ณต์๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ด๊ฒ์ด ์ด๋ค ํผํด๋ฅผ ์ฃผ๋์ง ์์ง ํ์คํ์ง ์์ต๋๋ค.
@mgravell ์ ์ ์ด ์ข ์์ฑ, ๊ทธ๊ฒ์ ๊ณ ๋ คํ์ง ์์์ต๋๋ค. :+1:
์์ ํ์ง ์์ ์ฝ๋์ ์ฝ๋๋ฅผ ๊ธด๋ฐํ๊ฒ ์ฐ๊ฒฐํ์ง ์๋ ํ ์ด๊ฒ์ด ์ ๋ฌธ์ ์ธ์ง ์ ์ ์์ต๋๋ค. ์ข ์์ฑ์ผ๋ก๋ถํฐ ์ฝ๋๋ฅผ ๋ณดํธํ์ญ์์ค! ๊ฐ์ธ์ ์ถ์ํํ์ญ์์ค. ์ด๋ฅผ ์ํํ๊ณ ์ฝ๋๋ฅผ ํ ์คํธ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ๋ง์ ์ฌ๋๋ค์ด ์์์ ์ธ๊ธ๋์์ต๋๋ค. ๋น์ ์ ๋น์ ์ด ์์ ํ์ง ์์ ๋นํธ๋ฅผ ํตํฉ ํ ์คํธํฉ๋๋ค. ๊ทธ๊ฒ์ด ์๋ํ๋ ๋ฐฉ์์ ๋๋ค. BCL ๊ฐ์ฒด๋ฅผ ์กฐ๋กฑํด์๋ ์๋ฉ๋๋ค! ๊ทธ๋ ๋ค๋ฉด ๋์์ธ์ด ์ข์ง ์์ต๋๋ค.
@nvivo ์ด๊ฒ์ด ๊ทํ์ ์๋ ๋ฌธ์ ๋ผ๋ ๊ฒ์ ์์ง๋ง, ์ด์ ๊ทธ ๋ฐฉํฅ์ด ํธํ์ฑ์ ์ํด v1 ์๋ ์ธํฐํ์ด์ค๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ํ ์ค๋ ๋๋ก ๋ฐ๋์์ต๋๋ค. ๊ทธ๊ฒ์ ์ด์ ์ ๋ง์ถ๋๋ก ํฉ์๋ค. ํ์ฌ ๋ ธ์ถ ์์ญ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ํด ๋ ผ์ํ๋ ค๋ฉด ์ ๋ฌธ์ ๋ฅผ ์ ์ถํ์ธ์.
@mythz ์ธํฐํ์ด์ค์ ๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. 1) ์ ์ฑ ์๋ ์ถ์ํ์ ์ํ์ง ์๋ DataSet์ ๋ํ (๋ฌด๊ฑฐ์ด) ์ข ์์ฑ์ ๊ฐ์ ธ์๊ณ 2) ๊ธฐ๋ณธ ํด๋์ค์ ๋ณ๋ ฌ ์ถ์ํ ์งํฉ์ ๊ฐ์ ธ์ค์ง๋ง v1 ๋ ธ์ถ ์์ญ์ผ๋ก ์ ๊ฒจ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ ํผ๋์ ํผํ๊ณ ์ถ์์ต๋๋ค.
์ 3์๊ฐ ์ด๋ฌํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์คํ ๊ฐ๋ฅํ์ง ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ์ ์ฉํ๋ ค๋ฉด ํต์ฌ ์ถ์ํ์์ ๊ตฌํํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ด ๊ทํ์ ์๋ ๋ฌธ์ ๋ผ๋ ๊ฒ์ ์์ง๋ง, ๊ทธ ๋ฐฉํฅ์ ์ด์ ํธํ์ฑ์ ์ํด v1 ์๋ ์ธํฐํ์ด์ค๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ํ ์ค๋ ๋๋ก ๋ฐ๋์์ต๋๋ค. ๊ทธ๊ฒ์ ์ด์ ์ ๋ง์ถ๋๋ก ํฉ์๋ค. ํ์ฌ ๋ ธ์ถ ์์ญ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ํด ๋ ผ์ํ๋ ค๋ฉด ์ ๋ฌธ์ ๋ฅผ ์ ์ถํ์ธ์.
์ด๊ฒ์ ์ ํ ๋ง์ด ๋์ง ์์ต๋๋ค.
@nvivo ๊ทธ๊ฒ์ ๋น์ ์ด ๊ทธ๊ฒ์ ์ ์ถํ์์๋ ๋ถ๊ตฌํ๊ณ ๋ฌธ์ ๊ฐ ์๋ ์ฌ๋์ด ์๋๋ผ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ฌธ์ ๋ System.Data ์ธํฐํ์ด์ค๋ฅผ ๋ณต์ํ์ฌ ์ด์ ์์กดํ๋ ์ ์ฒด ์ํ๊ณ๋ฅผ ์ง์ํ๋ ๋ถ๋ด์ ์ค์ด๋ ๊ฒ์ ๋๋ค. ๋น์ ์ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค:
2015๋ , ๋ชจ๋ ๊ฒ์ด ํญ์ ๊นจ์ง๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ต์ํด์ ธ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ์ ๊ธฐ์กด ์ฝ๋ ๊ธฐ๋ฐ๊ณผ ๊ณ ๊ฐ์ ์ฝ๋ ๊ธฐ๋ฐ์ ์ง์ํด์ผ ํ๋ ์ฐ๋ฆฌ์๊ฒ ๋ง์กฑ์ค๋ฌ์ด ์ ๋ต์ด ์๋๋ฉฐ ๋ชจ๋ .NET์ ์ํฅ์ ๋ฏธ์น๋ BCL ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ์๋ฅผ ์ํ ๊ธฐ๋ณธ ์ ๋ต์ด ์๋์ด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ์ ๊ธฐ์กด ์ฝ๋ ๊ธฐ๋ฐ์ ์ง์ํด์ผ ํ๋ ์ฐ๋ฆฌ์๊ฒ ๋ง์กฑ์ค๋ฌ์ด ์ ๋ต์ด ์๋๋๋ค.
@mythz ์ด๊ฒ์ ๋ฌธ๋งฅ์ ๋ง์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ด๊ฐ ์๋ ํ ๊ฒ ์๋์๋ค. ์ฌ๊ธฐ ์๋ ๋ชจ๋ ์ฌ๋์ ๊ธฐ์กด ์ฝ๋ ๊ธฐ๋ฐ์ ์ง์ํด์ผ ํฉ๋๋ค. ํ ๋ก ์ .NET์ ์๋ก ์จ ์ฌ๋์ด ์๋์ง ์์ฌ์ค๋ฝ์ต๋๋ค.
์ด ๋ํ๊ฐ ๋ฌด์์ผ๋ก ๋ฐ๋์๋์ง ๋ฌธ์ ๋ ๊ทธ๊ฒ์ด ๋ณ๋ก ์๋ฏธ๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. .NET Core๋ ์ ๊ทธ๋ ์ด๋๊ฐ ์๋๋ผ ์๋ก์ด ํ๋ ์์ํฌ์ ๋๋ค. ๊ธฐ์กด์ ๋ง์ .NET API๋ ์กด์ฌํ์ง ์์ผ๋ฉฐ ์์ผ๋ก๋ ์์ ๊ฒ์ ๋๋ค. ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ด์จ๋ ๊ทธ๋ ๊ฒ ์๋ํ์ง ์์ต๋๋ค.
@nvivo ์ด ์ ํํ ๊ฐ์ ์ด ์ด ๋ฌธ์ ๊ฐ ๋น์ ์๊ฒ ์ ์ฉ๋์ง ์๋ ์ด์ ์ ๋๋ค. ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ด ์ค์ํ์ง ์๋ค๊ณ ์๊ฐํ๋ค๋ฉด ์ฌ๋ฌ ํ๋ซํผ์ ๋์์ผ๋ก ํ๋ ์๋ฏธ ์๋ ์ฝ๋ ๊ธฐ๋ฐ ์ง์์ ์๋ํ ์ ์ด ์์ต๋๋ค. CoreCLR ํ์ ๋์ ํ์ฌ ๋งํ๋ ๊ฒ๋ ์๋๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฒ์๋ถํฐ ๊ฐ๋ฐ๋ ๊ฒ์ด ์๋๋ฏ๋ก ์์์ ์ฝ์ผ๋ฉด CoreCLR ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ฒด .NET Framework์์ ์คํ๋๋ ๊ฒ์ด ์ฃผ์ ๋ชฉํ๋ผ๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. CoreCLR์ .NET ํ์ด ์ ๊ทน์ ์ผ๋ก ๊ถ์ฅํ๊ณ ์ด๋ฌํ ๋๋ฝ๋ ์ธํฐํ์ด์ค๊ฐ ํ์ฌ ๋ฐฉํดํ๊ณ ์๋ ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด์์ด ์ฑ๊ณต์ ํ์์ ์ธ ๋ ๋ค๋ฅธ ํ๋ซํผ ๋์์ ๋๋ค.
์ธํฐํ์ด์ค๊ฐ ๋ฒ์ ์นํ์ ์ด์ง ์๋ค๋ ์ด ๋ชจ๋ ์ด์ผ๊ธฐ๋ก ์ธํด Go ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์์์ ์ธํฐํ์ด์ค๋ก ์ด ๋ฌธ์ ๋ฅผ ํํผํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๊ฒ ๋ฉ๋๋ค.
_policy-free_ ์ถ์ํ์ ์๋ฏธ๋ฅผ ํ์ฅํ๋ผ๋ ์์ฒญ์ ๋ฐ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฑ ์ด ์๋ค๋ ๊ฒ์ System.Data.Common ์ถ์ํ์ ๋น์ฆ๋์ค ๊ท์น์ด ๊ฑฐ์ ํฌํจ๋์ด ์์ง ์์์ ์๋ฏธํฉ๋๋ค. ์ฆ, ์ฃผ์ด์ง ๊ณต๊ธ์๊ฐ ๊ตฌํํด์ผ ํ๋ API ํํ๋ฅผ ์ ๊ณตํ๋ ๊ฒ๋ฟ์ ๋๋ค. ์ด๊ฒ์ ๋ง์ ๋น์ฆ๋์ค ๊ท์น๊ณผ ์ฝ๋๊ฐ ์๋ DataSet๊ณผ ๋์กฐ๋ฉ๋๋ค. ์ ์ฑ ์ด ์๋ ์ ํ์ ๋งค์ฐ ๊ตฌ์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ ์ฑ ์ด ํฌํจ๋ ์ ํ๋ณด๋ค ๋ฒ์ ๋น๋๊ฐ ๋ฎ์ ๊ฒฝํฅ์ด ์์ต๋๋ค. ์ฝ๋๊ฐ ์ ๊ธฐ ๋๋ฌธ์ ๋ฒ๊ทธ์ ๋์์ธ ๋ณ๊ฒฝ์ด ์ ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋๊ท๋ชจ ํจํค์ง ๊ทธ๋ํ์์ ์ข ์์ฑ์ ์กฐ์ ํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ ์๋ฅผ ์ค์ด๊ธฐ ์ํด ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋๋ฌผ๊ฒ ๋ฒ์ [2]์ผ๋ก _๊ตํ_[1]๋๋ ์ถ์ํ ๋ฐ ์ ํ์ ์ํฉ๋๋ค. ๊ตํ ์ ํ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ถ๋ก ํฌํจํ๊ฑฐ๋ ๋ณํฉํ ์ ์์ง๋ง ๋น๊ตํ ์ ํ์ ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ ๋ถํ ์ ์ํ๋ ์ด์ .
[1] _exchanged_๋ ๊ณต๊ฐ API์ ๋ํ๋๋ ๊ฒฝํฅ์ด ์๋ ์ ํ์ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด Collection<T>
๋ ๊ตํ ์ ํ์ผ๋ก ๊ฐ์ฃผ๋์ง๋ง List<T>
๋ ๊ณ ๋ คํ์ง ์์ต๋๋ค.
[2] ์ด์ ๋ํ ์๋ฏธ๋ก ์ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ํ๊ณ๋ฅผ "ํฌํฌ(fork)"ํ๊ธฐ ๋๋ฌธ์ ์ธํฐํ์ด์ค๊ฐ ์ ๊ฑฐ๋ ์์ ๊ฑฐ์ ๋์ผํ ์์ธ ์ค๋จ์ด ๋ฐ์ํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค๋จ ์ ๋๋ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์์ผ๋ก ํ ์ง ๋๋ ๋ถํ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์์ฒด์ ์ผ๋ก ๋ถ๊ธฐํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
@mythz ์์ฉ ์ฑ๊ณผ ๊ธฐ์กด ์ฝ๋์ ์ผ๋ถ๋ก
์ธํฐํ์ด์ค๊ฐ ์์ผ๋ฉด ์ปดํ์ผ๋ฌ ์ง์๋ฌธ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
์ค? IDataReader๋ฅผ ๋ฐํํ๋ ๋ฉ์๋๋ IDbConnection์ ๋ฐ๋ ๋ฉ์๋๋ ์ด๋ป์ต๋๊น? ์๋๋ฉด IDbTransaction? ๊ทํ์ _customers_ ์ฝ๋๊ฐ ํด๋น API๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ด๋ป๊ฒ #ifdev๋ฅผ ์คํํ์๊ฒ ์ต๋๊น?
'์ฒ๋ฆฌ'โฆ๊ทธ๊ฒ ๋ฌด์จ ์ค๋ง์ด์ผ?
๊ฐ๋จํฉ๋๋ค. ๊ธฐ๋ณธ ํจํค์ง(์กฐ์ง)๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ๊ณ ์ ํ ์ ํ ๋๋ 2.0 ์ดํ ์ง์ํ ๊ธฐ๋ณธ ์ ํ์ ๋ฐํํฉ๋๋ค. ์ด์ ๋ฒ์ ์ .net์ ๋์์ผ๋ก ํ๋ ๊ฒฝ์ฐ ์ง์๋ฌธ์ ์ฌ์ฉํ์ฌ ๋์ ์ธํฐํ์ด์ค๋ฅผ ๋ฐํํ๊ณ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ํ์ํ ์ ์์ต๋๋ค.
์, ๊ทธ๊ฒ์ ํํธ์์ง๋ง, ๋๋ ๊ทธ๋ค์ด (ํญ์ ์ด๊ฒ์ ๋ํด ์๊ฐํ๋ ์ ๋ง ๋๋ํ ๊ฐ์ธ๋ค) ๊ทธ ๋น์์ ํฉ๋นํ ์ด์ ๋๋ฌธ์(.net 2.0์์) ๊ทธ๋ ๊ฒ ํ๋ค๊ณ ํ์ ํฉ๋๋ค. ์ด์ผ๊ธฐ๊ฐ ๋์ฌ ์ ์๊ณ ์๋ง๋ ์ด๊ฒ์ ํ์คํ ๋ฐ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฌธ์ ๋ ์๋ก์ด ๋ฐํ์์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ์ฌ๋๋ค์ด ์ฝ๊ฐ์ ์์ ์ ์ํํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ฉ์ง UI์์ ๋ฒํผ์ ํด๋ฆญํ๋ ๊ฒ์ด ์๋๋ผ ์์ ์ ์๋ผ๋ด๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋์์ ๋ง์ ์ ํ์ ์ด๋ํ์ฌ ๊ต์ฒดํ๋ ๊ฒ๋ณด๋ค ์ ํ๋ ์์ํฌ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒ์ด ๋ ์ฌ์์ผ ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
@FransBouma ๊ทธ๋ ์๋ง๋ ๊ฐ๋ ฅํ ๋ค์ด๋ฐ์ ์นํธํ๋ ์ฌ๋์ผ ๊ฒ์ ๋๋ค.
@FransBouma @phillip-haydon์ ๋น์ ์ ํธ๋กค๋ง์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ๋ฐ๋ ค๊ฐ ์ ์์ต๋๋ค. ๋น์ ์ ๊ทธ๋ ๊ฒ ํ๋ํ๊ณ ์ฌ๋๋ค์ด ๋น์ ์ ์ง์งํ๊ฒ ๋ฐ์๋ค์ผ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ ์ ์์ต๋๋ค. ๊ถ๊ธํ ์ ์ด ์์ผ๋ฉด ๋ด ์คํ ์์ค ๊ธฐ์ฌ/ํ๋ก์ ํธ๋ฅผ ์ดํด๋ณด์ญ์์ค. ๋๋ ์ด๊ฒ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค... ์ด๋ ์ชฝ์ด๋ ...
์ฐธ๊ณ ๋ก ์ ๋ ๊ฐ๋ ฅํ ๋ค์ด๋ฐ์ ๋ฐ๋ํฉ๋๋ค.
๋ฐ์ ๋ค์ฌ...
๊ทธ๋ฆฌ๊ณ ๋น์ ์ ๋ด๊ฐ ํธ๋กค๋งํ๊ณ ์๋ค๊ณ ๋งํฉ๋๊น?
" @FransBouma ๊ทธ๋ ์๋ง๋ ๊ฐ๋ ฅํ ๋ค์ด๋ฐ์ ์นํธํ๋ ์ฌ๋์ผ ๊ฒ์ ๋๋ค." ์ฃผ์ ์์ ๋ฒ์ด๋ฌ๊ณ ์ด ๊ฐ์ฐ์ ๋ณ๋ก ๋์์ด ๋์ง ์์์ต๋๋ค. ๋ค ํธ๋กค๋ง๊ฐ์ ๋๋..
์ด ๋ ผ์์์ ๊ณ ๋ คํด์ผ ํ ํ ๊ฐ์ง ์ค์ํ ์ฌ์ค์ ๊ธฐ๋ณธ ํด๋์ค๊ฐ ๋์ ๋ 10๋ ์ .NET 2.0์์ IDb* ์ธํฐํ์ด์ค๊ฐ ADO.NET์ฉ API๋ก ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ํ์๋์ง๋ ์์์ง๋ง ๊ทธ ์ดํ๋ก ๋น๋๋ ๋ชจ๋ ๊ฒ์ ๊ธฐ๋ณธ ํด๋์ค์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. App.config ๊ณต๊ธ์ ๋ฐ ์ฐ๊ฒฐ ๋ฌธ์์ด ์ง์์ด ๋ ์ค๋ฆ ๋๋ค.
์ด๋ฌํ ์ธํฐํ์ด์ค์ ์์กดํ๋ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ ๋น๋๊ธฐ ๋ฉ์๋์ ๊ฐ์ ๊ฒ์ ์ง์ํ์ง ์๋ ๋งค์ฐ ๊ตฌ์ API์ ๋ํด ์ฝ๋ฉํ๋ ๊ฒ์ ๋๋ค. ์ฆ, ์ฌ๋๋ค์ด ๊ณ์ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๋ฉด ์ด์จ๋ ์ ๋ฐ์ดํธํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
๊ฐ๋จํฉ๋๋ค. ๊ธฐ๋ณธ ํจํค์ง(์กฐ์ง)๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ๊ณ ์ ํ ์ ํ ๋๋ 2.0 ์ดํ ์ง์ํ ๊ธฐ๋ณธ ์ ํ์ ๋ฐํํฉ๋๋ค. ์ด์ ๋ฒ์ ์ .net์ ๋์์ผ๋ก ํ๋ ๊ฒฝ์ฐ ์ง์๋ฌธ์ ์ฌ์ฉํ์ฌ ๋์ ์ธํฐํ์ด์ค๋ฅผ ๋ฐํํ๊ณ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ํ์ํ ์ ์์ต๋๋ค.
์์ฒ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ๊ณต๊ฐ API์ด๋ฉฐ API๋ .net 1.0๋ถํฐ ๊ณต๊ฐ๋์ด ์ฌ์ฉ ์ค์ ๋๋ค. ์คํ๋ ค '๋จ์'ํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ API๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. Microsoft๋ ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ์ ์ถ์ ๋ ์ข๊ฒ ๋ง๋ค๊ธฐ ์ํด ํด์ผ ํ๋ ์ผ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ ์ฌ์ฉ์์ ์ฐ๋ฆฌ ๋ชจ๋์๊ฒ ํฐ ๋ถ๋ด์ด ๋ ๊ฒ์ ๋๋ค.
์, ๊ทธ๊ฒ์ ํํธ์์ง๋ง, ๋๋ ๊ทธ๋ค์ด (ํญ์ ์ด๊ฒ์ ๋ํด ์๊ฐํ๋ ์ ๋ง ๋๋ํ ๊ฐ์ธ๋ค) ๊ทธ ๋น์์ ํฉ๋นํ ์ด์ ๋๋ฌธ์(.net 2.0์์) ๊ทธ๋ ๊ฒ ํ๋ค๊ณ ํ์ ํฉ๋๋ค. ์ด์ผ๊ธฐ๊ฐ ๋์ฌ ์ ์๊ณ ์๋ง๋ ์ด๊ฒ์ ํ์คํ ๋ฐ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฌธ์ ๋ ์๋ก์ด ๋ฐํ์์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ์ฌ๋๋ค์ด ์ฝ๊ฐ์ ์์ ์ ์ํํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ฉ์ง UI์์ ๋ฒํผ์ ํด๋ฆญํ๋ ๊ฒ์ด ์๋๋ผ ์์ ์ ์๋ผ๋ด๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋์์ ๋ง์ ์ ํ์ ์ด๋ํ์ฌ ๊ต์ฒดํ๋ ๊ฒ๋ณด๋ค ์ ํ๋ ์์ํฌ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒ์ด ๋ ์ฌ์์ผ ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
๊ทธ๊ฒ์ด ๋ฐ๋ก '์๋ก์ด ๋ฐํ์'์ผ๋ก ๋ณด์ด์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ฏธ ๋ ผ์ํ ๊ฒ์ฒ๋ผ ๊ทธ๋ฐ ๊ฒฝ์ฐ๋ผ๋ฉด ๋ฌธ์ ๊ฐ ๋์ง ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ Microsoft๋ dll์ ๋์์ผ๋ก ํ๋ CoreFX๊ฐ .NET ์ ์ฒด์์๋ ์๋ํด์ผ ํ๋ค๋ ์๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ์๋ก์ด ํ๋ ์์ํฌ๊ฐ ์์ต๋๋ค. .NET ์ ์ฒด๋ฅผ ๋์์ผ๋ก ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ง ๊ด๋ฆฌ์์ ๊ฒฝ์ฐ CoreFX์ ์๋ ๊ธฐ๋ฅ(์ค๋๋ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์)์ 2๊ฐ์ง ๋ฒ์ ์ ์ ์งํด์ผ ํ๋ฏ๋ก ๋ง์ '์ฌ๋ฏธ'๊ฐ ์์ต๋๋ค. #ifdevs๊ฐ 2~3๊ฐ๊ฐ ์๋๋ผ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ง๋ง ๋๋ถ๋ถ์ด ๊ทธ๋ ์ต๋๋ค. API ๋ณ๊ฒฝ์ ์๋นํด์ผ ํ๋ ์๊ฐ์ ๋ํด ํด๋ผ์ด์ธํธ์๊ฒ ์ฒญ๊ตฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ง๋ ๋ค๋ฅผ ์ ์์ต๋๋ค. ๋ง์ ์ฌ๋๋ค์ด ์ฌ์ฉํ๋ ๋ฒ์ฉ ์์คํ ์ ๋ง๋ค ๋๋ ๋ค๋ฆ ๋๋ค.
์ปดํฉํธ ํ๋ ์์ํฌ ์ง์์ด ์ง์นจ์ด๋ผ๋ฉด ์ ์ฒด .net ๋ฐ CoreCLR์์ ORM์ ์ง์ํ๋ ๊ฒ์ ๋์ฐํ ์๊ฐ ์ฑํฌ, ๋ง์ ์ข์ ๊ฐ ๋ฐ ์ค์ ๋ก ๋ง์ ์ด์ ์ ์ป์ง ๋ชปํ ๊ฒ์ ๋๋ค. .
(๋๊ตฐ๊ฐ๊ฐ "ํ์ง๋ง Linux์์ ์คํ๋๊ธฐ ์ ์ ์ป์ ์ ์์ต๋๋ค.": ์ฐ๋ฆฌ ์ ํ์ ์๋ ๋์ Mono์์ ์คํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์๋์, ์ป์ ์ ์๋ ์๋ก์ด ๊ธฐ๋ฅ์ด ์๋๋ผ ์ด๋ฏธ ์กด์ฌํ์ต๋๋ค).
ํ์ง๋ง ๊ทธ ์ดํ๋ก ๋น๋๋ ๋ชจ๋ ๊ฒ์ ๊ธฐ๋ณธ ํด๋์ค์ ์์กดํฉ๋๋ค.
_cough_ Linq-to-SQL DataContext _cough_
์ค์ ๋ก ๋ง์ ๋น MS ORM์ ์ํํ๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. dapper๋ฅผ ์ํด ์ฐ๋ฆฌ๋ ๋จ์ง ๋นํธ
๊ธ๋จธ๋ฆฌ ๊ธฐํธ ๋ฐ DbConnection์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
๋์์ต๋๋ค. ์ฐ๋ฆฌ์๊ฒ ๋ค์ ์๊ฐ์ด ์๋ค๋ฉด, ๋๋
MS๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ฌ์ฉํ์ง ์์ ๋ [Obsolete]๋ฅผ ์ฌ์ฉํ๋๋ก ๊ฐ๋ ฅํ ์ ์ํฉ๋๋ค. ํ์ง๋ง:
์ฐ๋ฆฌ๋ ๊ณผ๊ฑฐ๋ฅผ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
ํด๊ฒฐํ๋ ๊ฒ์ ๋งค์ฐ ๊ณ ํต์ค๋ฌ์ด ๋ฌธ์ ์
๋๋ค. ํนํ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์๋ ๋ API๋ฅผ ๊ณ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
net40 ๋ฑ, DNX์ ๋ค๋ฅธ ๋ฐฉ๋ฒ). ์ด์ ์ ์์ฒญ๋ ํผ๋์ ๊ฒ์ํ์ต๋๋ค
๊ทธ dapper๋ ์ด๊ฒ์ ํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค: ๊ทธ๊ฒ์ ์๋ฆ๋ต์ง ์๊ณ , ๊ทธ๋ ๊ฒ ๊ฐ๋จํ์ง๋ ์์ต๋๋ค
2015๋ 11์ 27์ผ 20:07์ "Natan Vivo" [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์ด ๋ ผ์์์ ๊ณ ๋ คํด์ผ ํ ํ ๊ฐ์ง ์ค์ํ ์ฌ์ค์ IDb*
์ธํฐํ์ด์ค๋ 10๋ ์ ์ .NET 2.0์์ ADO.NET์ฉ API๋ก ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
๊ธฐ๋ณธ ํด๋์ค๊ฐ ๋์ ๋์์ ๋. ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ํ์๋์ง ์์์ง๋ง
๊ทธ ์ดํ๋ก ๋น๋๋ ๋ชจ๋ ๊ฒ์ ๊ธฐ๋ณธ ํด๋์ค์ ์์กดํฉ๋๋ค.
App.config ๊ณต๊ธ์ ๋ฐ ์ฐ๊ฒฐ ๋ฌธ์์ด ์ง์์ด ๋ ์ค๋ฆ ๋๋ค.ํด๋น ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ
๋น๋๊ธฐ ๋ฉ์๋์ ๊ฐ์ ๊ฒ์ ์ง์ํ์ง ์๋ ๋งค์ฐ ๊ตฌ์ API์ ๋๋ค.
์ฌ๋๋ค์ด ๊ณ์ ์ฌ์ฉํ๊ฒ ํ๋ ค๋ฉด ์ด์จ๋ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/dotnet/corefx/issues/3480#issuecomment -160198453.
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ๊ฒฐ๊ณผ ๋น๋๊ธฐ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค๋ ์ ์ ๋ณด์ง ๋ชปํ์ต๋๋ค. ๋น๋๊ธฐ ๋ฉ์๋์ ๋ํ ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. IAsyncDbCommand
, IAsyncDataReader
๋ฑ. ๊ทธ๋ฐ ๋ค์ ๊ธฐ๋ณธ ํด๋์ค๊ฐ ๋ ์ ํ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ก ํ ์ ์์ต๋๋ค.
ADO.NET ์ฌ์ฉ์๋ ๋น๋๊ธฐ ๋ฒ์ ๋๋ ๋๊ธฐ ๋ฒ์ ์ค ํ๋๋ฅผ ์ฌ์ฉ ์ค์ด๋ฉฐ ๋ ๋ค ์ฌ์ฉํ์ง ์์ต๋๋ค. ๊ทธ๋์ ๊ทธ๊ฒ์ ์ ์๋ํ์ ๊ฒ์ ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ์์ ๊ฒฝ์ฐ ๊ธฐ๋ฅ์ด ํ์ฅ๋๊ณ ์ธํฐํ์ด์ค๊ฐ ๋์ผํ๊ฒ ์ ์ง๋๋์ง ์ฌ๋ถ๋ ์ค์ ๋ก ์ค์ํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ ๋ชฉ์ ์ด ์๋๋๊น? ์๋ก์ด ๊ธฐ๋ฅ์ ์ํ ์๋ก์ด ์ธํฐํ์ด์ค๋ฅผ ์๊ฐํฉ๋๋ค. ๊ธฐ๋ณธ ํด๋์ค๋ก ์์ ํ๋ ๊ฒ์ ๊ณ ํต์ ๋๋ค.
์ฌ๊ธฐ์ ์ค๋ ๋๋ฅผ ์์ฝํ ์ ์์ต๋๊น?
.NET ๋ฐ์ดํฐ ๋๊ตฌ์ ๋ํ ์ฌ๋ฌ ๋
๋ฆฝ์ ์ธ ์ธ์ ์ปค๋ฎค๋ํฐ ์ ๋ฌธ๊ฐ,
์ฌ๋ฌ ORM ์์ฑ์์ ์ ์ง ๊ด๋ฆฌ์๋ฅผ ํฌํจํ์ฌ
๋ถ๋ช
ํ - ์ด๊ฒ์ ์๋นํ ๋ฌธ์ ์งํฉ์ ๋ํ๋
๋๋ค. ๋๋ ์๊ฐํ์ง ์๋๋ค
์ฐ๋ฆฌ ์ค ๋๊ตฌ๋ผ๋ ๋ฏธ๋ฌํจ์ ๋ชจ๋ฅด๊ฑฐ๋ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด ์์งํฉ๋๋ค.
์ฐ๋ฆฌ ๋ชจ๋๋ ์๋๋๋ผ๋ ๋๋ถ๋ถ์ ๋ท์ด์ผ๊ธฐ๋ฅผ ์ ์๊ณ ์์ต๋๋ค.
๊ทธ ๋น์ ์ฐ๋ฆฌ๊ฐ ๊ฑฐ๊ธฐ์ ์์๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ณต์ ๋ต๋ณ์ "์ฐ๋ฆฌ๊ฐ ๋ณด๊ธฐ์ ๊ด์ฐฎ์ ๊ฒ ๊ฐ๊ณ , EF๊ฐ ๊ธฐ๋ปํ๊ณ ์๋ค"๋ ๊ฒ ๊ฐ๋ค.
์, ์ฐ๋ฆฌ๋ ๊ทธ ๊ฒฐ์ ์ด ์ฒ์์ ๋ด๋ ค์ก๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ ์๋๋ค.
๊ธ์์, ์ฐ๋ฆฌ ๋ชจ๋๋ ๋น๋ก ๊ทธ๊ฒ์ด ๊ฒฐ์ค์ ๋งบ์ง ๋ชปํ๋๋ผ๋ ์ฐ๋ฆฌ์ ์๊ฒฌ์ ํ๋ช
ํ์ต๋๋ค.
2015๋
11์ 27์ผ 20์ 41๋ถ์ "Jonas Gauffin" [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๋น๋๊ธฐ ๋ฉ์๋๋ฅผ
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ๊ฒฐ๊ณผ. _new_ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ์ ์์์ต๋๋ค.
๋น๋๊ธฐ ๋ฉ์๋. IAsyncDbCommand, IAsyncDataReader ๋ฑ. ๊ทธ๋ฌ๋ฉด ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ํด๋์ค๊ฐ ๋ ๊ฐ์ง ์ ํ์ ์ธํฐํ์ด์ค๋ฅผ ๋ชจ๋ ๊ตฌํํ๋๋ก ํฉ๋๋ค.ADO.NET ์ฌ์ฉ์๋ ๋น๋๊ธฐ ๋ฒ์ ๋๋ ๋๊ธฐ ๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋ฒ์ ์ด ์๋๋ผ ๋ ๋ค์ ๋๋ค. ๊ทธ๋์ ๊ทธ๊ฒ์ ์ ์๋ํ์ ๊ฒ์ ๋๋ค.๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ์์ ๊ฒฝ์ฐ ๊ธฐ๋ฅ์ด ์ฑ์ฅํ๊ณ
์ธํฐํ์ด์ค๋ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค. ๊ทธ๊ฒ ๋ชฉ์ ์ด ์๋๋๊น? ์๋ก์ด ์๊ฐ
์๋ก์ด ๊ธฐ๋ฅ์ ์ํ ์ธํฐํ์ด์ค. ๊ธฐ๋ณธ ํด๋์ค๋ก ์์ ํ๋ ๊ฒ์ ๊ณ ํต์ ๋๋ค.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/dotnet/corefx/issues/3480#issuecomment -160201361.
์น๊ตฌ๋ค.. ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ๋ฉ์ด์ ๋ฒ์ ์ ์ฌ๋ ค๋ณด์ธ์. ์๋ฃ.
์, ํ์ง๋ง ์ฝ์ด๋ฅผ ๋์์ผ๋ก ํ ๋ ์ปดํ์ผ๋ฌ ์ง์๋ฌธ์ผ๋ก ํด๋น ์ธํฐํ์ด์ค๋ฅผ ํด๋ฆฌํํ์ง ๋ชปํ ์ด์ ๊ฐ ์์ต๋๋ค. ์ผ๋ถ pcl ํจํค์ง๋ก ๊ทธ๋ ๊ฒ ํ์ต๋๋ค.
๋๋ ๋ง์ดํฌ๋ก์ํํธ๊ฐ ์ฝ์ด๊ฐ ์์ ํ์ง ์๋ค๋ ๊ฒ์ ๋ฐ๋ณตํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง๋ง ์ฌ์ ํ ๋์์ด ๋์ง ์๋๋ค. ๋๋ ๋ง์ดํฌ๋ก์ํํธ๊ฐ ์ ์งํ๊ฒ ์ผ๋ถ ์ธํฐํ์ด์ค๋ฅผ ์ ๋ฆฌํ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค. ์ต๊ทผ์ ๋งค์ฐ ์ผ๊ด์ฑ ์๋ ์ธํฐํ์ด์ค๊ฐ ์๊ณ ์ด๋ ๊ฒ์ ์ ํํด์ผ ํ ์ง ๋ชจ๋ฅด๋ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ด ์์์ต๋๋ค. ์ ์๊ฐ์๋ ๋ ๋ฒ์งธ ๋น๋๊ธฐ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ ๊ฒ์ด ํํธ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ชจ๋ ๊ฒ ๋น๋๊ธฐ์์ผ๋ฉด ์ข์์ํ ๋ฐ..
๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ํ์ํด์ผ ํ๋ ํญ๋ชฉ์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ์ ์ฒด ํ๋ ์์ํฌ๊ฐ ์๋ฃ๋๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ 4.6.2๋ก ๋ฆด๋ฆฌ์ค๋์์ต๋๋ค.
@mgravell +100. ๊ทธ๋ ๊ตฐ์ 100% ๋์ํฉ๋๋ค.
์ค์ ๋ก ์ผ๋ง๋ ์ํฅ์ ๋ฐ์ต๋๊น? ์ฌ๊ธฐ์ coreclr์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๊น? .NET ๋ฐ์คํฌํ์ coreclr์ด ๋ฐ๋ผ์ก์ ์ ์์ ๋๊น์ง ์์ผ๋ก ๋ช ๋ ๋์ ์ด์ ์์ ๊ฒ์ ๋๋ค. ์ ํํ ๋ถํํ๋ ์ฌ๋๋ค์ ์ํด ์ฌ๊ธฐ์์ ์์ค์ ๋ณด์ํ๋ ๊ฒ์ ๋ฌด์์ ๋๊น? ๋ง์ ์ฌ๋๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ทธ๊ฒ์ด ์ธ์์ ์ข ๋ง์ด๋ผ๊ณ ๋งํฉ๋๋ค.
@leppie ์ค์ ๋ก, ๊ทธ๊ฒ์ ๋ช ๋ ๋์ ์ฃผ๋ณ์ ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์์ผ๋ก ๋ช ๋ ๋์ ์ฐ๋ฆฌ ์ฝ๋์์ ์ด๋ฌํ ํต๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ์งํด์ผ ํ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์ ๋ ผ์์ ์์ ์ ๋ ์ฌ์ด์ ๊ณตํต ๋ค๋ฆฌ๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ ๋๋ค. ํด๋น ์์ ๋์ BCL์ด ์๋ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ์์๊ฒ ์ด์ ๋์์ต๋๋ค. ๋๋ ์ธํฐํ์ด์ค์ ์ฅ๋จ์ ์ ๋ชจ๋ ์ดํดํ์ง๋ง ์ฌ๊ธฐ์์ "์ฌ์ํ ๊ฒ์ ๋๋ค. ๊ณ์ ์งํํ์ญ์์ค"๋ผ๋ ํ๋๋ฅผ ์ดํดํ์ง ๋ชปํฉ๋๋ค.
์ฌ๊ธฐ์์ ์ง์ค์ ์ผ๋ก ๋งํฉ์๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋น์๊ฐ ๋ชจ๋ ๊ฐ์ ์์ ์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ BCL์ ์์ด์ผ ํฉ๋๋ค . ๋ ผ์์ "๊ทธ๊ฒ์ ์ด๋ค ํํ๋ฅผ ์ทจํฉ๋๊น?"์ ๋๋ค.
์ธํฐํ์ด์ค ์ ๊ฑฐ์ ์ฅ์ ์ผ๋ก๋ ํ์ฌ ์คํ ์ค์ธ ์๋ก์ด ํจํค์ง ๋ชจ๋ธ๊ณผ ํจ๊ป _additional_ ๋ฒ์ ๊ด๋ฆฌ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค. X, Y ๋ฐ Z์์ ์ฌ์ฉํ ์ ์๋ ํด๋์ค๋ ์ด์ ๋๊ตฌ์์ ํจ์ฌ ๋ ์ ์ง์๋ฉ๋๋ค. ์: ํ์ฌ dotnet5.2 ๋ 5.4. ๊ทธ๋ฌ๋ ๊ฑฐ๊ธฐ์๋ ๋จ์ ๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด SqlClient๋ ์ฌ์ ํ ํ์ฌ์ ๊ฐ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ์์ ์ด ์๋๋ฉฐ(dotnet/runtime#14302 ๋ฐ dotnet/runtime#15269 ์ฐธ์กฐ) @YoungGah๊ฐ ๋งํ ๋ด์ฉ์
๊ทธ๋ ๋ค๋ฉด 5.6(1.5)์ ์ด๋ป๊ฒ ๋ ๊น์? ์ถ์ ํด๋์ค์ ๋ ๋ง์ ๊ตฌ์ฑ์์ด ์ถ๊ฐ๋๋ฉด ๊ฐ ๋ฐ์ดํฐ ๊ณต๊ธ์๋ ์์ง์ด๋ ์ฌ๋๋ง๋ค ๋ฐ๋ ์ ์๋ ์์ง์ด๋ ๋์์ ๋ณด์กฐ๋ฅผ ๋ง์ถฐ์ผ ํฉ๋๊น? ๋ชจ๋ ์๋น์๋ ๊ฐ๊ฐ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ๋ํ ๋ฒ์ ์ ๊ฒฐ์ ํด์ผ ํฉ๋๊น? ์ ๋ฌ๋๋ ํด๋์ค์ ์ถ์ ๊ธฐ๋ฐ๊ณผ ์ผ์นํ๋๋ก ์์ผ๋ก ๋์๊ฐ๋ ํ๋ซํผ์ ๋ชจ๋ ๋ฒ์ ์ ๋ํด ์ด์ ๋ธ๋ฆฌ ๋ฒ์ ์ ์ปดํ์ผํด์ผ ํฉ๋๊น? ์ด ๋ชจ๋ ๊ฒ์ด ์ถ๊ฐ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง 100% ๋ช ํํ์ง ์์ต๋๋ค. ๋ณ๊ฒฝ๋์ง ์๋ ์ธํฐํ์ด์ค๊ฐ ํจ์ฌ ๋ ๋ช ํํฉ๋๋ค. ๊ทธ ์์๋ ๋ฌธ์๊ฐ ์์ต๋๋ค. ์ด๋ค ๋ฒ์ _๋ฐ ํ๋ซํผ_์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ, ๋ฐฉ๋ฒ ๋ฑ์ด ์์ผ๋ก ๋์๊ฐ๋ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์์๊ฒ ํฐ ๊ณจ์นซ๊ฑฐ๋ฆฌ๊ฐ ๋ ๊ฒ์ ๋๋ค. ๊ทธ ์ฐ๋ ค๋ ์ฌ๊ธฐ์์ ๋ฐ์ฏค ๊ด๋ จ๋์ด ์์ง๋ง ์๋ ์ค์ ๋๋ค.
์ง๊ธ์ผ๋ก์๋ ์์ผ๋ก 2์ฃผ ์์ ์ ๋ฐ์ดํธ๋ ๋ ์ ์ด์กฐํ๊ฒ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. ๋ด ๋๋ ค์์ ์ ์ฒด ์๊ฐ ๋์ ๋ฉ์์ง์ด "์ฐ๋ฆฌ๋ X๋ฅผ ์ํํ๋ ๊ฒ์ SQL ๋ฐ Entity Framework์์ ์๋ํ๊ณ ๊ทธ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค."๋ผ๋ ๋ฉ์์ง๊ฐ ๊ทธ๋ฌ๋ฏ์ด ์ด๋ฌํ ๋จ์ด๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ํจ๊ณผ์ ์ผ๋ก ๋ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ๋์๊ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์ ์ธก์ ๋ถ๋ง์ ๋ช ๋ฌ ๋์ ์ด๋ฌํ ์ธก๋ฉด์์ (์ฝ๋์ ํ ๋ก ๋ชจ๋์์) ์ง์ ์ด ์์๋ค๋ ๊ฒ์ ๋๋ค.
100% ๋์ํฉ๋๋ค.
SqlFu(๋ด Micro ORM)์ v2(์ด์)๋ฅผ ์ค๊ณํ ๋ ํ์ฅ ๋ฉ์๋๋ฅผ DbConnection/DbCommand ๋๋ ์ธํฐํ์ด์ค์ ์ฐ๊ฒฐํ ์์น๋ฅผ ๊ฒฐ์ ํด์ผ ํ์ต๋๋ค. ๋ด๊ฐ ๋ฐ๊ฒฌ ์ด ์ ๋๋ ์ถ์ ํด๋์ค ๊ฐ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๋ฐ๋ผ์ ์ ๋ IDataReader
์ ๊ฑฐ์ ์ํฅ์ ๋ฐ์์ง๋ง ์ํฅ์ ๋ฐ์ง ์์์ต๋๋ค. ์๋ํ๋ฉด MS๋ ์ด๋ค ์ธํฐํ์ด์ค๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์์ผ ํ๊ณ ์ด๋ค ์ธํฐํ์ด์ค๊ฐ ์ฌ์ฉ๋์ง ์์์ผ ํ๋์ง๋ฅผ ๋ช
ํํ๊ฒ ๋ฐํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ํ์ง๋ง ์ ๊ฒฝ์ฐ์๋ ์ธํฐํ์ด์ค๋ฅผ ๊ต์ฒดํ๋ ๊ฒ์ด ์ด๋ ต์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ ์ฉ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋ ๊ฒ์ ๊ฐ์น๋ฅผ ๋ณด๊ณ MS๊ฐ ์ด๋ฅผ ์ ์ง/์ถ๊ฐํ๋ ๊ฒ์ด ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ค์ด ์ด์ ์ธํฐํ์ด์ค๊ฐ ๊ทธ๋ ๊ฒ ์ ์ค๊ณ๋์ง ์์๋ค๊ณ ํ๋จํ๋ฉด ๊ด์ฐฎ์ต๋๋ค! ์๋ก์ด ๊ฒ์ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋์์ธํ์ญ์์ค. ์ ์ด๋ ๋ฏธ๋์๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฒช์ง ์์๋ ๋ฉ๋๋ค.
(๋ฏธ๊ตญ์ ์ถ์๊ฐ์ฌ์ ์ฃผ๊ฐ์ด๋ฏ๋ก Microsofties์ ์๋ต์ ๋ค์ ์ฃผ์ ์ฌ๋ฌด์ค์ ๋์์ฌ ๋๊น์ง ๋งค์ฐ ์ ํ์ ์ ๋๋ค.)
์ด ์ค๋ ๋์์ ์ข์ ์ ์/๋ฒ๊ทธ๋ฅผ ์์ง ์๋๋ก ๋ฐ๋ณตํ๊ณ ์ถ์ต๋๋ค. ํ์ฌ ๊ธฐ๋ณธ ํด๋์ค/ํ๋ฉด ์์ญ ๋ฐ/๋๋ ํฅํ ๋ฒ์ ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ์ ๋ฌธ์ ๋ฅผ ์ ์ถํ์ญ์์ค. ์ด ๋ ผ์๋ v1 ์ธํฐํ์ด์ค์ ๋ํด์๋ง ์ ์งํ๋๋ก ํ์ญ์์ค.
@NickCraver .NET Framework์ ๋ฒ์ ๊ฐ ํธํ์ฑ๊ณผ ์ ์ฌํ๊ฒ .NET Core ๋ ธ์ถ ์์ญ ๋ฒ์ ๊ฐ์๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธฐ๋ณธ ํด๋์ค์ ์ถ์ ๋ฉค๋ฒ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋ณ๊ฒฝ์ด _ํ์ง ์์_ ๊ฒ์ ๋๋ค.
@davkean ๋น์ ์ ๊ทธ๋ฐ ์ผ์ด ์ผ์ด๋์ง ์์
๊ธฐ๋ก์ ์ํด ํ๋ฉด ์์ญ์ ๋ณ๋์ ๋ฌธ์ ๊ฐ ์ ์ถ๋จ์ ์ฐธ์กฐํ์ธ์. dotnet/runtime#14302 ๋ฐ dotnet/runtime#15269(๊ฐ๊ฐ 9์ 25์ผ ๋ฐ 10์ 2์ผ Microsoft์ ์ต์ ์ ๋ฐ์ดํธ ํฌํจ) - ๊ทธ ํ ์ฌ๋ฌ ๋ฒ ์ ๋ฐ์ดํธ ๋ฐ ํ๋์ ์์ฒญํ์์๋ ๋ถ๊ตฌํ๊ณ . ๊ทธ๊ฒ์ 2 ๊ฐ์๊ณผ 2 ๊ฐ์ ๋ฆด๋ฆฌ์ค๊ฐ ์นจ๋ฌต๊ณผ ํจ๊ป ์ฌ๋ผ์ก์ต๋๋ค. ์ด๊ฒ์ dotnet/runtime#14302๊ฐ ์ด ๋ฆฌํฌ์งํ ๋ฆฌ ์ด ๋ฌธ์ ๋ ์ด์ ๋ง ๋ ๋ฒ์งธ ๋ฌธ์ ๊ฐ ๋์์ต๋๋ค). ์ฐ๋ฆฌ์ ์ข์ ์ ์ดํดํ ์ ์์ต๋๊น?
๋๋ ์ฐ๋ฆฌ๊ฐ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ง๋ค์ง ์์ ๊ฒ์ด๋ผ๊ณ ์ ๋์ ์ผ๋ก ํ์ ํฉ๋๋ค. Data Common ํ์ ์ถ์ ๊ตฌ์ฑ์์ ๋์ ํ์ง ์๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์์ต๋๋ค.
@NickCraver ์ฃ์กํฉ๋๋ค. ์ด ๋ฌธ์ ๋ ์ ํ์ง ์์์ต๋๋ค.
@niemyjski
dnx๋ ์์ ํ ์๋ก์ด ํ๋ ์์ํฌ/๋ฐํ์์ ๋๋ค.
dnx ๋ฐํ์ ๋ฐ corefx ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ๊ณต์์ ๋ํ๋ฌ๋ค๊ณ ์๊ฐํ๋ค๋ฉด ์ฒ์๋ถํฐ ๊ฐ๋ฐํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ฌ๊ฐํ๊ฒ ๊ณผ์ํ๊ฐํ๊ณ ์๋ ๊ฒ์ ๋๋ค. CoreFx ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ฒด .NET Framework์์ ์คํ๋๋ค๋ ์ฌ์ค์ ๊ทธ๊ฒ์ด ์์ ํ ์๋ก์ด ๊ฒ์ ์๋๋ผ๋ ๋จ์๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค.
์ธํฐํ์ด์ค๊ฐ ์์ผ๋ฉด ์ปดํ์ผ๋ฌ ์ง์๋ฌธ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
์, ํ์ง๋ง ์ฝ์ด๋ฅผ ๋์์ผ๋ก ํ ๋ ์ปดํ์ผ๋ฌ ์ง์๋ฌธ์ผ๋ก ํด๋น ์ธํฐํ์ด์ค๋ฅผ ํด๋ฆฌํํ์ง ๋ชปํ ์ด์ ๊ฐ ์์ต๋๋ค.
์ด ์ค๋ ๋๋ฅผ ์์ํ๊ธฐ ์ ์ ์ฃผ์์ ์ฝ๋ ๊ฒ์ด ๊ท์ฐฎ๋ค๋ฉด a) ์ด์ ๊ฐ ์๊ณ b) ์ด๊ฒ์ด ํต์ฌ BCL ์ธํฐํ์ด์ค์ ๋ํด ์๋ํ ์ ์๋ ์๋ชป๋ ์ ๋ต์ด๋ผ๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
@nvivo
์ด ๋ ผ์์์ ๊ณ ๋ คํด์ผ ํ ํ ๊ฐ์ง ์ค์ํ ์ฌ์ค์ ๊ธฐ๋ณธ ํด๋์ค๊ฐ ๋์ ๋ 10๋ ์ .NET 2.0์์ IDb* ์ธํฐํ์ด์ค๊ฐ ADO.NET์ฉ API๋ก ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฐ ๊ฒฝ์ฐ๋ผ๋ฉด 10๋
์ ์ ๊ธฐ๋ณธ ํด๋์ค์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค๋ ๊ฒ์ ์๊ณ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋ก ๋๋๋ฆฌ๋ผ๋ ๋ฌธ์ ๋ฅผ ์ด์ง ์์์ ๊ฒ์
๋๋ค. API๋ฅผ ํต์ ํ๋ ๋ฐฉ์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ์กด์ฌํ๋ ์ ์ผํ ๋ชฉ์ ์ธ [Obsolete]
์์ฑ์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ๋๋ฆฌ ์๋ ค์ง์ง ์์๋ค๋ฉด ์ง๊ธ ์ด๋ค ์๊ฐ์ ํ๊ณ ์๋ ๋น์ถ์ฒ๋์ง ์์ต๋๋ค. ๋๋ถ๋ถ์ ๋น MS .NET ORM์ด ๊ทธ๊ฒ์ ์์กดํ๋ค๋ ์ฌ์ค์ ๊ทธ๊ฒ์ ์ฌ์ฉ ์ค๋จ์ด ์ ๋๋ก ์ ๋ฌ๋์ง ์์์์ ์๋ฏธํฉ๋๋ค.
์ด๋ฌํ ์ธํฐํ์ด์ค์ ์์กดํ๋ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ ๋น๋๊ธฐ ๋ฉ์๋์ ๊ฐ์ ๊ฒ์ ์ง์ํ์ง ์๋ ๋งค์ฐ ๊ตฌ์ API์ ๋ํด ์ฝ๋ฉํ๋ ๊ฒ์ ๋๋ค. ์ฆ, ์ฌ๋๋ค์ด ๊ณ์ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๋ฉด ์ด์จ๋ ์ ๋ฐ์ดํธํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
๊ฑฐ์ง ๋นจ๋ - ํ๋๊ฐ ๋ค๋ฅธ ํ๋๋ฅผ ์๋ฏธํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๋น๋๊ธฐ API์ ๋ํ ์ง์์ ์ถ๊ฐํ์ผ๋ฉฐ ์๋์, ์ถ๊ฐํด๋ ๊ธฐ์กด ๊ณ ๊ฐ ์ฝ๋ ๊ธฐ๋ฐ์ด ์์๋์ง ์์ผ๋ฉฐ ๊ธฐ์กด API๋ฅผ ๋ณ๊ฒฝํ ํ์๋ ์์ต๋๋ค.
์, ์ด ๋ชจ๋ ๊ฒ์ด ๊นจ๋ํ ์์์ ๋ง๋๋ ๊ฒ์ ํ๋ฅญํ์ง๋ง ํ ๊ฐ์ง ์ง๋ฌธ์ ํด๋ ๋ฉ๋๋ค. ์์ ์ ํ๋ ์์ํฌ๋ฅผ ์ง์ํ๊ธฐ ์ํด ์ด๋ค ํํ์ด ์ด๋ฃจ์ด์ก์ต๋๊น? Entity Framework๋ฅผ ์คํํ๋ ๋ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๊ณผ๊ฑฐ์ ์ด๋ค ๊ณตํฌ๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ๋์์ต๋๊น?
MicroORM์ ์ฌ๋ผ์ง๊ฒ ํ๋ ๊ฒ์ ์์น์ค๋ฌ์ด ์ผ์ ๋๋ค. .Net ์ฝ๋๋ฅผ ์ด๋ ์ ๋ ์ฑ๋ฅ์ด ์ข๊ฒ ๋ง๋ญ๋๋ค(EF๋ ๋ช ํ์ ๋ก๋ํ๋ ๋ฐ 500ms๊ฐ ํ์ฉ๋์ง ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ ์ ์๋ ์ง์น์ ๋๋ค).
์ธํฐํ์ด์ค ๋ ๊ธฐ๋ณธ ํด๋์ค์ ๊ฒฝ์ฐ: ์ฌ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ๊ฒ์ด ๊ฐ์์ธ ํ ๊ธฐ๋ณธ ํด๋์ค๋ ํ๋ฅญํฉ๋๋ค. ์๋ฅผ ๋ค์ด WCF์์ ๊ฐ์ฅ ์ง์ฆ๋๋ ๋์์ธ ๊ฒฐ์ ์ค ํ๋๋ ๋ง์ ๊ธฐ๋ฅ์ ํฌํจํ๋ ๋ด์ธ๋ ํด๋์ค๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. XML ๋ฉ์์ง๊ฐ ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ ์ฝ๊ฐ ์กฐ์ ํด์ผ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค(interop ๋๋ฌธ์). ํ๋์ ์์ ๊ธฐ๋ฅ์ ์์ํ๊ณ ์ฌ์ ์ํ๋ ๋์ ๋ค์ ๊ตฌํํด์ผ ํฉ๋๋ค. WCF ์์ ์์๋ SOLID์ S๋ฅผ ๊ฑด๋๋ฐ์์ผ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ํ๋ก๋์ ํ์ง์ธ์ง ํ์ธํ๋ ๋ฐ ํ์ํ ํ ์คํธ ์์ด ๋๊ท๋ชจ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
๊ทธ๋์: ์ฐ๋ฆฌ๊ฐ ์ ์ํ ์ ์๋ ๊ธฐ๋ณธ ํด๋์ค๋ ์ข์ ๊ฒ์ ๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ง๋ค์ง ์์ ๊ฒ์ด๋ผ๊ณ ์ ๋์ ์ผ๋ก ํ์ ํฉ๋๋ค. Data Common ํ์ ์ถ์ ๊ตฌ์ฑ์์ ๋์ ํ์ง ์๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์์ต๋๋ค.
@davkean ๊ทธ๊ฒ์ ๋ณด์ฅํ ์ ์์ผ๋ฉฐ ๋น์ ๋ ์๊ณ ์์ต๋๋ค. ADO.NET์ ์ผ๋ถ ํ์ฅ ์ง์ ์ด ์๋ ๊ณตํต API๋ฅผ ํตํด ๋ ธ์ถ๋๋ ๋ค์ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ ํ์ฌ ์ํํธ์จ์ด์ ํต์ ํ๊ธฐ ์ํ ํ์ ์์คํ ์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ญ์์๋ ์ํฉ์ด ๋ณ๊ฒฝ๋๋ฉฐ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ์ด๋ฌํ ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋น์ค๋ฅผ ํต์ ํ๊ณ ์ฌ์ฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ API์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๊ฒ๋ค๊ฐ: ํ๋์ ๋ณํ๋ _is_ ๋ํ ์ฃผ์ ๋ณํ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์ง๋ ๋ช ๋ ๋์ ADO.NET(์: ์ค๋ฅ ์ฒ๋ฆฌ์ ๊ดํ)์์๋ ์ด๋ฌํ ๊ฒ์ ๋ณด์์ต๋๋ค.
์ ์ฒด ADO.NET API๋ ์ข ์ข SQL Server์ ์ํด ์ฃผ๋๋๋ ์ด๋ฌํ ๋ณ๊ฒฝ์ ๋ถ์์ฉ์ผ๋ก ๊ฐ๋ ์ฐจ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋์์ธ๋ ๋ค์ SQL ํด๋ผ์ด์ธํธ๋ก ์ด๋ํ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์ง๋ง ๊ทธ ๋ฐ๋์ ๋๋ค(์: SqlClient์์ ๋ฌด์๋๋ ๊ธฐ๋ณธ ํด๋์ค์ ๊ธฐ๋ฅ์ด ๋ง์ง ์์ ๊ฒฝ์ฐ). ๊ฑฐ๊ธฐ์ ์ 3์๊ฐ ํ์๋ก ํ๋ ๊ฒ๋ค์ API์ ํฌํจ๋์ง ์์์ต๋๋ค.
๊ฐ๋จํ ๋งํด์, .NET 1.0์ด ์์๋ ๋ ์ผ๋ฐ์ ์ธ ๋์์ธ์ด ์์๊ณ (๋ง์ ์์ญ์์ ์ฌ๊ฐํ ๊ฒฐํจ์ด ์๋ ๊ฒ์ผ๋ก ํ๋ช ๋จ) ๊ทธ ์ดํ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๋์ฒํ๊ธฐ ์ํด ์ผ์ชฝ ๋ฐ ์ค๋ฅธ์ชฝ ๊ธฐ๋ฅ์ผ๋ก ํจ์น๋ API์ ๋๋ค. ํ๊ฒฝ. ๊ทธ ์ค _๋๋ถ๋ถ_์ ์ฌ์ ํ โโAPI์ ์์ต๋๋ค(์ ๋ถ๋ ์๋ ๊ฒฝ์ฐ). ์ด์ Microsoft๋ ์ธํฐํ์ด์ค ์ค ํ๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
API์ ์์์ ๋ถ๋ถ์ ์ ๊ฑฐํ์ฌ ์ป์ ์ ์๋ ๊ฒ์ ์ ๋์ ์ผ๋ก _์๋ฌด๊ฒ๋_ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ง ์์ต๋๋ค(์๋ฅผ ๋ค์ด ์ฌ๊ธฐ์์ ๋ค์ ํธ์ํ๋ ๋์ ์๊ฐ์ ๋ณด๋ผ ์ ์์). ๊ทธ๋ฌ๋ ํด๋น API ๋ถ๋ถ์ ํ์ฉํ๋ ์ฝ๋๋ ์๋ํ์ง _์์ต๋๋ค_. ์ด ๋ชจ๋ ์น์ฆ ์ด๋์ ์ด๋ฉด์ด '๋ค์ ์์'ํ๋ ๊ฒ์ด๋ผ๋ฉด ๋ฐ๋์ ํ์ญ์์ค. ๊ทธ๋ฌ๋ API๋ฅผ ์ฌ์ค๊ณํ์ฌ ์ง์ ํ ๋ฒ์ฉ API๊ฐ ๋๋๋ก ํ์ญ์์ค. ์๋ ๋์ ์์ฌ ์๋ _๋ชจ๋ _ ๋ฉ์ด๋ฆฌ๋ฅผ ์ ๊ฑฐํ์ญ์์ค. .
ํ์ง๋ง ์์ง ๋๋์ง ์์์ต๋๋ค. ์๋ฌด๋ ์ด์ ๋ฅผ ๊ถ๊ธํด ํ ํ์๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ ๊ทธ ์ด์ ๋ฅผ ์๊ณ ์์ต๋๋ค. ๋ํ MS ๋ด์ ํ์ด ์ธํฐํ์ด์ค ์ ๊ฑฐ๋ก ์ธํด ํฐ ํผํด๋ฅผ ์ ์๋ค๋ฉด ์ ์ด์ ์ ๊ฑฐ๋์ง ์์์ ๊ฒ์์ ์๊ณ ์์ต๋๋ค.
Microsoft๊ฐ ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ํตํด ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ผ๋ฏ๋ก ํ์ฌ ๊ณต๊ธ์๊ฐ ์๋์ผ๋ก ๊ธฐ๋ฅ์ 'ํ์'์ ๊ตฌํํ ์ ์๋ค๋ฉด(์: ๊ณต๊ธ์๊ฐ ๊ตฌํํ์ง ์์ผ๋ฉด ๋น๋๊ธฐ ๋ฉ์๋๊ฐ ๋๊ธฐํ ๋ฉ์๋๋ก ๋์ฒด๋๋ Async์ ๊ฒฝ์ฐ) ์ข์ต๋๋ค. ์ 3์ ORM ๊ฐ๋ฐ์(๋ง์ ๊ฐ๋ฐ์๊ฐ ์ 3์ (๋ง์ดํฌ๋ก)ORM ์ฝ๋๋ฅผ ํตํด _๊ทํ์_ API์ ์ก์ธ์ค)๋ ๋จ์ํ ํ๋์ ํด๋์ค๋ฅผ ๋์์ผ๋ก ํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋น์ ์ด ๊ทธ๋ ๊ฒ ํ ๊ฒ์ด๋ผ๋ ๋ณด์ฅ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Microsoft ๋ด์ ๋๊ตฌ๋ Oracle ๋๋ PostgreSql์ด ADO.NET์ ์ถ๊ฐ๋๋ ํน์ ๊ธฐ๋ฅ์ ๋ํด ๊ณ ๋ฏผํ ์ ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด UDT, ๋ฌธ์ ํธ๋ฆฌ, ์ปค์๋ฅผ ํตํ ์ฌ๋ฌ ๊ฒฐ๊ณผ ์งํฉ์ ์ฌ์ฉ๊ณผ ๊ฐ์ด ๋ชจ๋ ADO.NET ๊ณต๊ธ์๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ๋ ๊ณ ์ ํ ๋ฐฉ๋ฒ์ ์ฐพ์์ผ ํฉ๋๋ค. (์ธ์ ?) SQL Server๊ฐ JSON ๋ฌธ์์ ํจ๊ป ๋ฌธ์ ํธ๋ฆฌ ๊ธฐ๋ฅ์ ๊ฐ์ ธ์ค๋ฉด ADO.NET์ด ์ด์ ๋ํ ์ API๋ก ์ ๋ฐ์ดํธ๋ฉ๋๊น? ADO.NET ๊ณต๊ธ์์ ์ค๋ฅ ๋ณด๊ณ ๋ฅผ ํตํด ๊ณผ๊ฑฐ์ ํ๋ ๊ฒ์ฒ๋ผ?
๋น์ ์ ๊ทธ๋ฐ ๋ณด์ฅ์ ํ ์ ์์ผ๋ฉฐ, MS๊ฐ ๋ฏธ๋์ ์ด๋ค ๊ฒ๋ ๋ง๊ฐ๋จ๋ฆฌ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์ฌ๊ธฐ์์ ๋งํ๋ ๊ฒ์ ํ๋ช ํ์ง ์์ต๋๋ค. ๋ชจ๋ API์๋ ๊ฒฐํจ์ด ์๊ณ ADO.NET์๋ ๊ฒฐํจ์ด ๊ฐ๋ํฉ๋๋ค. ์ด๋ค ์์ผ๋ก๋ ์ธ์ ๊ฐ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๊ฒ๋ค์ '๊ณ ์น ' ๊ฒ์ ๋๋ค.
์์ฝํ์๋ฉด ์ธํฐํ์ด์ค๋ ADO.NET์ ์ผ๋ถ์ด๋ฉฐ API์ ๋ค๋ฅธ ๊ณณ์์ ์๋ชป๋ ๋ถ๋ถ๋ ADO.NET์ ์ผ๋ถ์ ๋๋ค. ๊ทธ๊ฒ๋ค์ API๋ฅผ ์์ ํ๊ธฐ ์ํด ์ ๊ฑฐ๋์ง ์์์ผ๋ฉฐ, API๋ฅผ ๋ณด๋ค ์ผ๋ฐ์ ์ธ ์ฉ๋์ API๋ก ๋ง๋ค๊ธฐ ์ํด ๋ฆฌํฉํ ๋งํ์ง๋ ์์์ต๋๋ค. DataSet/Table๊ณผ ๊ฐ์ ์ผ๋ถ ์์๋ ์ด์๋์ง ์์๊ธฐ ๋๋ฌธ์ ์์์ ๋ฐ๋ผ ์ ๊ฑฐ๋์ด ์๋ ๊ทธ๋๋ก ๋จ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค๊ฐ ์ ๊ฑฐ๋๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋ ์ ์ฌํ ์งํ ์ํฉ์ ๋ํด ํ ๋ก ํ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ๋๋ค.
๊ทธ ๊ด์ ์์๋ง ๋ณด๋ฉด ์ด๋ฏธ ์๋ฏธ๊ฐ ์์ต๋๋ค.
@mythz
๊ทธ๋ ๋ค๋ฉด ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค๋ ๊ฒ์ ์๊ณ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋ก ๋๋๋ฆฌ๋ผ๋ ๋ฌธ์ ๋ฅผ ์ด์ง ์์์ ๊ฒ์ ๋๋ค.
OP๋ฅผ ์ฝ๊ณ ์ดํดํ ์ ์์ต๋๋ค. ์ด๋ฌํ ํ ๋ก ์ ๋๋ฌด ์ข ๊ต์ ์ด ๋์ด๊ฐ๊ณ ์์ผ๋ฉฐ ์๋ฌด๋ ๋งํ์ง ์์ ๊ฒ์ ๊ฐ์ ํ๊ณ ์์ต๋๋ค.
์ธํฐํ์ด์ค๊ฐ API๋ฅผ ์ค๋ช ํ๊ณ ํ ์คํธ์ ๋์์ด ๋๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ฅผ ์ด์์ต๋๋ค. ์๋ฃ๋๋ฉด ๋ฌธ์ ๊ฐ ์๋ 15๋ ๋ API์ ํธํ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ํ ๋ก ์ ๊ทธ ๋ฌธ์ ๋ก ์ฎ๊ธธ ๋๊น์ง ๋ฌธ์ ์ ํต์ฌ์ด ์๋์์ต๋๋ค.
๋จ์ง ๊ทธ๊ฒ ๋๋ฌธ์ ์ผ์ด ๋ฌด๋์ ธ์ผ ํ๋ค๊ณ ๋ฏฟ๋ ๊ฒ์ ์๋๋๋ค. ๊ทธ๋ฌ๋ ์ธํฐํ์ด์ค ๋ฒ์ ๊ด๋ฆฌ๋ ๊ณผ๊ฑฐ์ ๋ฌธ์ ์ ๋๋ค. corefx๊ฐ ์ฃผ์ ๋ฒ์ ๊ฐ์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ ์์๋๋ ์ฃผ์ ๋ฒ์ ์๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ๊ฒ์ ๋๋ค. ๋ง์ด๋ ๋ฒ์ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊นจ๋จ๋ฆฌ๋ฉด ๊ทธ๊ฒ์ ๋จ์ง ์์ฑํ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฏธ ๋น๋๊ธฐ API์ ๋ํ ์ง์์ ์ถ๊ฐํ์ต๋๋ค.
๋๊ธฐํ API ์์ ๋น๋๊ธฐ API๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. IDbConnection ๋๋ IDbCommand๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ ๊ฒ ํ๋ค๋ฉด ์๋ชปํ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ค์ ๋ก ์ด๋ค๊ณผ์ ํ์ ํธํ์ฑ์ ์นํธํ ํ์๊ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฏธ ๋น๋๊ธฐ API์ ๋ํ ์ง์์ ์ถ๊ฐํ์ต๋๋ค.
๋๊ธฐํ API ์์ ๋น๋๊ธฐ API๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. IDbConnection ๋๋ IDbCommand๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ ๊ฒ ํ๋ค๋ฉด ์๋ชปํ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ค์ ๋ก ์ด๋ค๊ณผ์ ํ์ ํธํ์ฑ์ ์นํธํ ํ์๊ฐ ์์ต๋๋ค.
ADO.NET์์ ๊ทธ๊ฒ์ด ๊ทธ๋ค์ด ํ ์ผ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋๊ธฐ ๋ฉ์๋๋ ๋๊ธฐํ ๋ณํ์ผ๋ก ๋์ฒด๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด Async๋ฅผ ์ง์ํ์ง ์๋ ๋ชจ๋ ADO.NET ๊ณต๊ธ์(ํ์ฌ SqlServer๋ฅผ ์ ์ธํ ๋ชจ๋ ๊ณต๊ธ์)๋ ์ง์ํ์ง ์๋ ๊ฒ์ ๊ตฌํํ ํ์๊ฐ ์์ต๋๋ค. Async API๋ฅผ ์ ๊ณตํ๋ ORM์ ํ์ฌ ์ฝ๋๋ ADO.NET์ Async ๋ฉ์๋์ ado.net ๊ณต๊ธ์๊ฐ ๋น๋๊ธฐ๋ฅผ ์ง์ํ์ง ์๋ ๊ฒฝ์ฐ ์๋ฌด๋ ์ค์ ๋ก ์ ์ ์์ต๋๋ค. ์... ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ์๊ฒ ์ง๋ง ๊ทธ๊ฑด ์ ์ณ๋๊ณ ์.
์ด์ ADO.NET์ '๋์์ธ' ๋๋ ์ผ๋ฐ ์ํคํ ์ฒ๊ฐ ์์์ ๋ณด์ฌ์ฃผ๋ ์ข์ ์์ด๊ธฐ๋ ํฉ๋๋ค. ์ผ๋ฐ API์์ ํธ๋์ญ์ ์ ์ฅ์ ์ ๋ง๋๋ _no_ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๊ฑฐ์ _๋ชจ๋ _ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ DbTransaction์ ํ์ ํด๋์ค์์ 'Save(string)' ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์ง์ํ์ง๋ง. OleDbTransaction์ ์ ์ธํ ๋ชจ๋ ๊ฒ(MS Access๊ฐ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ด๋ ์ ์์ฌ์ ๋๋ค).
์ฝ์ง๋ ์์ง๋ง ๋๊ตฌ๋ ์ฝ๋ค๊ณ ๋งํ์ง ์์๋ค. ์ด ๋ฌธ์ ๋ ์๋ก์ด ๊ฒ์ด ์๋๋๋ค. OleDB์ ODBC๋ ์๋ ๋์ ์ด ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ์ผ๋ฉฐ JDBC๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค. Microsoft๋ ์ด์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ฐํด๋ฅผ ๋ค์ ๋ฐ๋ช ํ ํ์๊ฐ ์์ต๋๋ค. ๋ํ DB ์์ญ์ ๊ณ ์ ํ์ง๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ชจ๋ ๋น๋์ค ์นด๋๋ Direct3D/X๋ฅผ ํตํด ๊ฐ๋ฐ์์๊ฒ ๋ ธ์ถ๋๋ API๋ฅผ ํตํด ๋ค์ํ ๊ธฐ๋ฅ ํ์ ์งํฉ์ ์ง์ํฉ๋๋ค. ๋ค๋ฅธ ์ธ๊ณ์์ ๋์์ธ์ด ์ด๋ป๊ฒ ์งํ๋๋์ง๋ ์ค์ ๋ก ํฅ๋ฏธ๋กญ์ต๋๋ค. API๊ฐ ๋์์ธ๋์์ผ๋ฉฐ ์ด๋ฅผ ์ง์ํด์ผ ํ๋ ๋น์ฌ์(JDBC ๋๋ผ์ด๋ฒ, OleDB ๋๋ผ์ด๋ฒ ์์ฑ์ ๋ฑ)๋ ์ด๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค. ๋๋ผ์ด๋ฒ๊ฐ X๋ฅผ ์ง์ํ์ง ์์ต๋๊น? ๋๋ผ์ด๋ฒ๊ฐ X์ ํธํ๋์ง ์์ต๋๋ค. "Oracle์ ADO.NET v10์ ์ง์ํ์ง ์์ต๋๋ค." Oracle ๋ด์์ ์๋ฌด๋ ๊ทธ๊ฒ์ ์ฝ๊ณ ์ถ์ดํ์ง ์์ต๋๋ค. ๋์ SqlClient๊ฐ ์ ๋์ด๋ฉฐ ์๊ฑด์์ ๋จ์ด์ง๋ ๊ฒ์ด ADO.NET์ ์ถ๊ฐ๋๊ณ ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค.
ADO.NET์์ ๊ทธ๊ฒ์ด ๊ทธ๋ค์ด ํ ์ผ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋๊ธฐ ๋ฉ์๋๋ ๋๊ธฐํ ๋ณํ์ผ๋ก ๋์ฒด๋ฉ๋๋ค.
์๋์, ๊ทธ๋ ์ง ์์ต๋๋ค. API๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ธฐํ ๋ฉ์๋๋ก ๋์ฒด๋๋ ๋น๋๊ธฐ ๋ฉ์๋๋ฅผ ๋ ธ์ถํ์ง๋ง ๊ณต๊ธ์๋ ์ค์ ๋น๋๊ธฐ ์์ ์ผ๋ก ์ฌ์ ์ํฉ๋๋ค. @mythz ๊ฐ ๋งํ๋ ๊ฒ์ ๊ทธ๊ฐ IDbCommand์ IDbConnection์ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ์ ๋๋ก ํ์ง ์๊ฑฐ๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๋๋ค. ๊ธฐ๋ณธ API๊ฐ ๋น๋๊ธฐ๊ฐ ์๋๋ฉด ๋น๋๊ธฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์๋์, ๊ทธ๋ ์ง ์์ต๋๋ค. API๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ธฐํ ๋ฉ์๋๋ก ๋์ฒด๋๋ ๋น๋๊ธฐ ๋ฉ์๋๋ฅผ ๋ ธ์ถํ์ง๋ง ๊ณต๊ธ์๋ ์ค์ ๋น๋๊ธฐ ์์ ์ผ๋ก ์ฌ์ ์ํฉ๋๋ค. @mythz ๊ฐ ๋งํ๋ ๊ฒ์ ๊ทธ๊ฐ IDbCommand์ IDbConnection์ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค.
๊ณต์ ๊ณต๊ธ์๋ SqlClient๋ฅผ ์ ์ธํ๊ณ ๋ ODP.NET๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ชจ๋ ํ์์ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๊ตฌํํ์ง ์์ผ๋ฏ๋ก ํธ์ถ ์ฝ๋๊ฐ ๋๊ธฐํ ๋ณํ(์ค์ ๋ก ๋๊ธฐํ ์ฝ๋๋ฅผ ์คํํ๋ DbDataReader/DbCommand ๋ฑ์ ๋น๋๊ธฐ ๋ฉ์๋)์ผ๋ก ๋์ฒด๋ฉ๋๋ค. ). ๋ฐ๋ผ์ ์ฌ์ฉ์ ์ฝ๋๋ ๋๊ธฐํ ์์ ์ ์ํํ๋ ํ๋ ์๋์ ์๋ ๋น๋๊ธฐ ๋ณํ์ ํธ์ถํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ค์ ๋ก ๋น๋๊ธฐ๊ฐ ์ํ๋์ง ์์ต๋๋ค(๋ชจ๋ ์ฝ๋๊ฐ ์ค์ ๋ก๋ ๋จ์ํ ๋๊ธฐํ๋จ). ์๋ง๋ devart์ ์ ๊ณต์๋ ์์ฒด ๊ตฌํ์์ ๋น๋๊ธฐ API๋ฅผ ๊ตฌํํ์ง๋ง ํ์คํ์ง ์์ต๋๋ค.
์ด์จ๋ , ๊ทธ๊ฒ์ ์ฌ๋ฐ๋ฅด๊ฒ ํ๋ ๊ฒ์ด ์๋๋ผ API์ ๋ฒ์ ๊ด๋ฆฌ์ ๊ดํ ๊ฒ์ ๋๋ค.
@nvivo
์ธํฐํ์ด์ค๊ฐ API๋ฅผ ์ค๋ช ํ๊ณ ํ ์คํธ์ ๋์์ด ๋๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ฅผ ์ด์์ต๋๋ค. ์๋ฃ๋๋ฉด ๋ฌธ์ ๊ฐ ์๋ 15๋ ๋ API์ ํธํ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ํ ๋ก ์ ๊ทธ ๋ฌธ์ ๋ก ์ฎ๊ธธ ๋๊น์ง ๋ฌธ์ ์ ํต์ฌ์ด ์๋์์ต๋๋ค.
์, ์ฌ๋ฌ๋ถ์ ํต์ฌ ADO.NET ์ธํฐํ์ด์ค๊ฐ 10๋ ์ ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๊ณ ๋ชจ๋ ๊ฒ์ด ๊ธฐ๋ณธ ํด๋์ค๋ก ์ด๋๋์๋ค๋ ๊ฒ์ ์๊ณ ์์์ง๋ง ์ง๊ธ์ ์ด๋ฅผ ํฌ๊ธฐํ๊ณ ์ฐ์ฐํ ๊ธฐ์กด ์ธํฐํ์ด์ค์ ๋์ผํ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์ธํฐํ์ด์ค๋ก ๋ค์ ์ด๋ํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง๋ง, ๊ธฐ์กด ์ธํฐํ์ด์ค๋ ๋ ์ด์ ์กด์ฌํ์ง ์์์ผ ํฉ๋๋ค. ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ด ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ง๋์? ๋ฌผ๋ก , ํฉ๋ฒ์ ์ผ๋ก ๋ค๋ฆฝ๋๋ค.
ํ๋ซํผ์ ๋ฐ์ ์ํค๋ ค๋ฉด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ API๋ฅผ ๋ฐ์ ์ํค๊ณ ๋ณ๋ ฌ๋ก ์ง์ํ์ฌ ๋ชจ๋ ์ฌ๋์ด ๋ณ๋ ฌ API๋ฅผ ์ง์ํ๊ณ ์์ ์ ๋ฐฉ์๊ณผ ๊ณ ๊ฐ์ด ๊ณํ์ ์ธ์ธ ์ ์๋๋ก ํฉ๋๋ค. ๊ฒฝ๊ณ ์์ด ์ ๊ฑฐํ๋ ๊ฒ์ ๊ทธ๊ฒ๋ค์ ์์กดํ๋ ์ํ๊ณ๋ฅผ ๋ถํ์ํ๊ฒ ๊นจ๋จ๋ฆฌ๊ณ ๋ณต์ก์ฑ์ ๋ชจ๋ ๋ค์ด์คํธ๋ฆผ ์ข ์์ฑ์ผ๋ก ๋ฐ์ด๋ ๋๋ค.
๋๊ธฐํ API ์์ ๋น๋๊ธฐ API๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. IDbConnection ๋๋ IDbCommand๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ ๊ฒ ํ๋ค๋ฉด ์๋ชปํ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ค์ ๋ก ์ด๋ค๊ณผ์ ํ์ ํธํ์ฑ์ ์นํธํ ํ์๊ฐ ์์ต๋๋ค.
๋๋ ๋น์ ์ด ๋ถ๋ช ํ ์์ง ๋ชปํ๋ ๊ฒ๋ค์ ๋ํ ์ฝ๋ฉํธ๋ก ์ด ์ค๋ ๋๋ฅผ ์ค์ผ์ํค๋ ๊ฒ์ ๊ทธ๋ง๋์์ผ๋ฉด ํฉ๋๋ค. Async API๊ฐ ์ด๋ป๊ฒ ๊ตฌํ๋๋์ง ์๊ณ ์ถ๋ค๋ฉด ์์ค ์ฝ๋๋ฅผ ์ฝ๊ณ ๋งน๋ชฉ์ ์ผ๋ก ๊ฑฐ์ง์ ํผ๋จ๋ฆฌ์ง ๋ง์ญ์์ค. ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ System.Data ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ ์ฃผ์ RDBMS๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋ชจ๋ ADO.NET ๊ณต๊ธ์๊ฐ ์ธ๋ถ API, ์ฆ ํต์ฌ System.Data ์ธํฐํ์ด์ค์์ ๊ตฌํํ๋ ์ต์ ์ข ์์ฑ์ ๋ ธ์ถํ๋ ๊ตฌํ์ ๊ตฌ์ ๋ฐ์ง ์๋ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋น๋๊ธฐ API๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ง์ํ๋ ๊ตฌ์ฒด์ ์ธ ADO.NET ๊ณต๊ธ์์์ ๋น๋๊ธฐ API๋ฅผ ํ์ฉํ๋ IDbConnection์ ํ์ฅ ๋ฉ์๋์ ๋๋ค. ๋ด๋ถ์ ์ผ๋ก๋ ๋น๋๊ธฐ ์ง์์ ๊ด๊ณ์์ด ์ง์๋๋ ๊ฐ ADO.NET ๊ณต๊ธ์์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์ข ์์ฑ์ด ์ด๋ฏธ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ "๊ทธ๋ค๊ณผ์ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์นํธํ ์๋ฌด๋ฐ ์๋ฏธ๊ฐ ์๋ค"๋ ๊ทํ์ ์ ์์ ๊ฒฝํ์ด ์๊ณ ์์ ํ ๊ทผ๊ฑฐ๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ Microsoft ์ธก์๊ฒ ๋ฌผ์ด๋ณด๊ฒ ์ต๋๋ค. (cc @davkean @YoungGah): ์๋ฒฝํ ์ธ์์ด๊ณ ์๋ฌด ์ผ๋
ํ์ ์กฐ์น:
๋๋ต์ด '์'๋ผ๋ฉด(RTM ์ดํ ์์ ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ๊ฒ์
๋๋ค), ์ด๋ค ์ข
๋ฅ์ ์ค๋จ์ ๋ณด๊ฒ ๋ ๊น์? ์ถ๊ฐ, ์๋ก์ด ๋ฐฉ๋ฒ? ๋ด ๊ณต๊ธ์์ ๋ํ ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ์์ํ๋ฉด ์ฌ๋๋ค์ด ์ฌ์ฉํ๋ ์ถฉ๋ํ๋ ๋ฉ์๋ ๋ฑ์ ์ถ๊ฐํ๋ฉด ์ด๋ป๊ฒ ๋ฉ๋๊น?
๋๋ต์ด ์๋์ค(์ ๋)์ธ ๊ฒฝ์ฐ: ์ธํฐํ์ด์ค๋ฅผ ๋ค์ ์ถ๊ฐํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ด ์ค๋ ๋๋ _์ง๊ธ ๋น์ฅ_ ๋ ผ์ํ๋ ๋ฐ ์ฝ๊ฐ ๊ฑธ๋ ค ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์ต๋ํ ๋นจ๋ฆฌ ์์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ ์ข์ ์ผ์ ๋๋ค. ์ฌ๊ธฐ ์๋ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์๋ ๋ฆด๋ฆฌ์ค๊ฐ ์๋ฃ๋ ํ ๋ฌด์ธ๊ฐ๋ฅผ ์ป๋ ๊ฒ์ด ์ผ๋ง๋ ์ด๋ ค์ด์ง ์๊ณ ์์ผ๋ฉฐ ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ ๊ฒ ์ด์ฌํ ๋ ธ๋ ฅํ๋ ์ด์ ์ ๋๋ค. ๋ถํํ๋ _๋ฏธ๋_ ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ์ ๋ํ ๋ช ํํ ๊ณํ์ด ์์ผ๋ฉด ์ ๋ณด๊ฐ ๋ถ์กฑํ ์ฃผ์ฅ์ด ๋ ๋ง์ด ๋ฐ์ํฉ๋๋ค.
์์ผ๋ก์ ๊ณํ์?
์ด ๊ฒฝ์ฐ ์ถ์ ํด๋์ค๋ฅผ ํตํด ๊ฐ์ ๋ก ๊ตฌํํด์๋ ์ ๋ฉ๋๋ค. IMO
Microsoft๋ .NET 4.5์ ๋ํด ์ค๋จ๋๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ์ง ์์ต๋๋ค. Windows์ ์ผ๋ถ์ ๋๋ค. ํธํ์ฑ์ด ์์ ๋๋ค.
Microsoft๋ 4.5์ ์ํฅ์ ์ฃผ์ง ์๋ .NET Core์์ ์ค๋จ๋๋ ๋ณ๊ฒฝ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๋ค์ด ADO.NET๊ณผ ๊ฐ์ ๋ฎ์ ์์ค์์ 1.0 RTM์ ๊ฒ์ํ ๊ฒ์ธ์ง ์์ฌํ์ง๋ง ๊ทธ ๊ธฐ์ค์ ๋ ๋ฎ์ต๋๋ค. Windows์ ์ผ๋ถ๊ฐ ์๋๋ฉฐ .NET Core ๋ฒ์ ์ ๋๋ํ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
์ถ์ ํด๋์ค๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด๋ ์ค๋จ๋์ง ์์ต๋๋ค. ๊ธฐ๋ณธ ๊ตฌํ์ผ๋ก ๊ฐ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ADO.NET ๋น๋๊ธฐ ๋ฉ์๋๋ก ์ด๋ฏธ ์๋ฃ๋์์ต๋๋ค. .NET Core๊ฐ ๋์ ๋๋ฉด์ ํธํ์ฑ์ ์ ์งํ๋ ค๋ฉด .NET 4.5 ๋ฆด๋ฆฌ์ค์ ํจ๊ป ๊ณต์ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๊ฒ์ด ์๋ชป๋์๊ณ ์ธํฐํ์ด์ค์๋ง ์ ์ฉ๋๋ ๊ฒฝ์ฐ ๋๊ตฐ๊ฐ๊ฐ ์ ๋ฅผ ์์ ํฉ๋๋ค.
@FransBouma
๊ณต์ ๊ณต๊ธ์๋ SqlClient๋ฅผ ์ ์ธํ๊ณ ๋ ODP.NET๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ชจ๋ ํ์์ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๊ตฌํํ์ง ์์ผ๋ฏ๋ก ํธ์ถ ์ฝ๋๊ฐ ๋๊ธฐํ ๋ณํ์ผ๋ก ๋์ฒด๋ฉ๋๋ค.
๋น์ ๋ง์ด ๋ง์์. ํ์ง๋ง ๊ทธ๊ฒ์ API์ ๋ฌธ์ ๊ฐ ์๋๋ฉฐ ๊ตฌํ์๊ฐ ๋ ๊ฒ์ผ๋ฅด๊ฑฐ๋ ์ดํด๋ ฅ์ด ๋ถ์กฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด MySql ์ปค๋ฅํฐ๋ TaskCompletionSource๋ฅผ ๋ง๋ค๊ณ ๋๊ธฐํ ๋ฉ์๋๋ก ์๋ฃํ์ฌ ๋ชจ๋ ๋น๋๊ธฐ ๋ฉ์๋๋ฅผ ๋ค์ ๊ตฌํํ์ต๋๋ค. ์ฝ๋ ๊ธฐ๋ฐ์ ์ ๋ฐ๋ง ์ญ์ ํ๊ณ ๋์ผํ ๋์์ ์ ์งํ ์ ์์ต๋๋ค.
์ธํฐํ์ด์ค๊ฐ ๊ทธ๊ฒ์ ํด๊ฒฐํ ๊ฒ์ด๋ผ๊ณ ๋งํ์ง๋ ์์ง๋ง ๋น๋๊ธฐ์ ๋ํ ๊ธฐ๋ณธ ๋์์ด ์์ผ๋ฉด ์ ์ด๋ ์ผ๋ถ๋ ์ด๊ฒ์ ์๊ฐํ๊ฒ ๋ง๋ค ๊ฒ์ ๋๋ค. ๋งค์ฐ ๊ธฐ์ ์ ์ธ ์ฌ๋๋ค์ 90%๊ฐ ๋น๋๊ธฐ ์์ ์ ์ดํดํ์ง ๋ชปํ๋ค๋ ์ฌ์ค๋ ๋์์ด ๋์ง ์์ต๋๋ค.
์ถ์ ํด๋์ค๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด๋ ์ค๋จ๋์ง ์์ต๋๋ค. ๊ธฐ๋ณธ ๊ตฌํ์ผ๋ก ๊ฐ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ADO.NET ๋น๋๊ธฐ ๋ฉ์๋๋ก ์ด๋ฏธ ์๋ฃ๋์์ต๋๋ค.
์ด๊ฒ์ ๊นจ๋ ๊ฒ์ ๋๋ค. ์ด ๊ตฌํ์ด ์ถ๊ฐ๋์๋ค๋ ์ฌ์ค์ ๋ชจ๋ฅด๊ณ ์ฌ๋๋ค์ด ์ด ์๊ฐ์ ์๋นํ๋ ๊ฒ์ ํ์ ๋ถ๋ฅํ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์, ์ด ๊ตฌํ์ ์ด์ postgresql์์ ์ง์๋ฉ๋๋ค. BAM ERROR wtf๊ฐ ๋ฐ์ํ์ต๋๋ค...
db ์ถ์ํ์ ๋ํ ๊ฐ์ ๊ตฌํ์ด ์๋ชป๋์์ต๋๋ค.
์ธํฐํ์ด์ค ๋๋ ๊ธฐ๋ณธ ํด๋์ค ์ฌ๋ถ๋ ์ค์ํ์ง ์์ต๋๋ค. ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ ๋ก ๋ฏธ๋ฆฌ ์ ์๋ ๊ตฌํ์ ์๋ชป๋์์ต๋๋ค.
๋คํ์ฑ์ ๊ทธ๋ฐ ์์ผ๋ก ์๋ํ์ง ์์ต๋๋ค. ๋ฉ์๋๋ฅผ ๋ชจ๋ฅด๋ฉด ์ฌ์ ์ํ ์ ์์ต๋๋ค. ์ฐธ์กฐ๊ฐ DbConnection์ด๊ณ QueryAsync๋ฅผ ํธ์ถํ๋ฉด ํด๋น ๋ฉ์๋ ๋๋ ์ฌ์ ์๋ ํญ๋ชฉ๋ง ํธ์ถํฉ๋๋ค. ์๋ธํด๋์ค์ ์ด๋ฏธ ์กด์ฌํ๋ QueryAsync๋ผ๋ ๋ฉ์๋๋ ํธ์ถ๋์ง ์์ต๋๋ค.
๊ฐ์ ์ด๋ฆ์ผ๋ก ์จ๊ธฐ๋ ๋ฐฉ๋ฒ ์ ์ ์ฌ์ ์ํ๋ ๊ฒ์ ํผ๋ํ๊ณ ์์ต๋๋ค.
@JamesNK
๋ฉ์๋๊ฐ ์ถ์์ผ๋ก ์ ์๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ํด๋์ค์ ๊ตฌํ์ด ์์ต๋๋ค. ์ด๊ฒ์ ํ์ ํด๋์ค์ ๊ตฌํ์ ์ถ๊ฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์ฌ์์ ๊ณ์ฝ์ ์๋ฐํฉ๋๋ค.
์ฌ์ ์ํ ์ ์๋๋ก ๋ฉ์๋๋ฅผ ๊ฐ์์ผ๋ก ๋ง๋ค๋ฉด ํ์ ํด๋์ค์ ์๋ฏธ๊ฐ ์์ ์ ์๋ ๊ตฌํ์ด ๊ธฐ๋ณธ ํด๋์ค์ ์กด์ฌํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์๊ฐ ๊ตฌํํ์ง ์์ ๊ตฌํ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ์ค๋จ๋ฉ๋๋ค. ๋ฌผ๋ก ์ฑ์ด ์ปดํ์ผ๋ ์ ์๊ณ ๋ชจ๋ ๊ฒ์ด ๋ ๋ฆํ์ง๋ง ๋๊ตฐ๊ฐ๊ฐ ๊ทธ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ํ์ ํด๋์ค์๋ ์ ํจํ์ง ์์ต๋๋ค. ๊ทธ๊ฑด ํ๋ ธ์ด์. ํ์ ํด๋์ค์ ์ํ์ง ์๋ ๊ฐ์ ๊ตฌํ์ ๋๋ค.
๋ฐ๋ผ์ ๊ตฌํ์ด ์กด์ฌํ ์ ์๋ ์ถ์ ํด๋์ค๋ ํ์ ํด๋์ค์ ์ํ์ง ์์ต๋๋ค. ๋๋ ํ์ฌ์ ๋ํ ๊ธฐ๋ณธ ๊ตฌํ์ด ์๋ ์ธํฐํ์ด์ค.
@philip-haydon ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ถ์ ๋ฉ์๋๊ฐ ์๋ ๊ฐ์ ๋ฉ์๋๋ก ๊ตฌํ๋ฉ๋๋ค.
์ด๋ฏธ ๋์ผํ ์๋ช (์ด๋ฆ/์ธ์)์ ๊ฐ์ง ๋ฉค๋ฒ๊ฐ ์๋ ํ์ ํด๋์ค๋ง ์ค๋จํ ํญ๋ชฉ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ธ์๊ฐ ๋ค๋ฅด๋ฉด ๊ฐ๋ฐ์๊ฐ ์ค๋ฒ๋ก๋๋ฅผ ์ค์ํ๋ฉด ๋ฏธ๋ฌํ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
ํ์ ํด๋์ค์ ์ํ์ง ์๋ ๊ฐ์ ๊ตฌํ์ ๋๋ค.
๊ทธ๋ฐ ๋ค์ ๊ฑฐ๊ธฐ์ ๋์ง ๋ง์ญ์์ค.
@jamesnk
๊ฑฐ๊ธฐ์ ๋์ง ๋ง์ธ์. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ธํฐํ์ด์ค ์ ๊ฑฐ๋ฅผ ์ฃผ์ฅํ๋ ์ด์ ์ ๋๋ค.
๊ฐ์์ผ๋ก ๋ง๋ค์ด๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ต๋๋ค. ๋ฏธ๋ฆฌ ์ ์๋ ๊ตฌํ์ด ์์ด์ผ ํฉ๋๋ค. ์ด์ผ๊ธฐ์ ๋
@JamesNK ์ด ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ฑฐ๊ธฐ์ ๋์ง ์์๊ณ , _Microsoft_๋ ๊ทธ๊ฒ์ ์ด๋ก์ ํฌํจ์์ผ ๊ฑฐ๊ธฐ์ ๋ฃ์์ต๋๋ค. ์์๋ฐ์ _๋ชจ๋ _ ์ ๊ณต์์์ ์๋ํ๋ค๊ณ ๊ฐ์ ๋๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๊ธฐ์ ์ ์ผ๋ก ์ค๋จ๋์ง ์๋๋ผ๋ ํจ์จ์ ์ผ๋ก ์ํํ๊ฒ ์งํ๋๋ ๊ฒ์ ์ค์ ๋ก ๋ณผ ์ ์์ต๋๋ค("์ ๊ท๋ฅผ ์ฌ์ฉํด์ผ ํจ" ์ปดํ์ผ ๊ฒฝ๊ณ _๊ธฐ์ ์ ์ผ๋ก_ ์ค๋จ๋์ง ์์). _๋๋ถ๋ถ์_ ๊ฒฝ์ฐ์ ๊ณต์ ๋๋ ์ฆ์ ๊ณต์ ๊ตฌํ์ด ์์ ๊ฒ์
๋๋ค. ๊ทธ๋์ ๋์์ ๋ฌด์์
๋๊น? ๊ทธ ๊ฐ์ ์์ throw new NotImplementedException()
? ๊ทธ๊ฒ์ ์ฒ์๋ถํฐ ์กด์ฌํ๋ ๊ฒ์ ๋ํ ๋
ผ์์ด ์๋๋ฉฐ ๋ ๋ง์ (๋ฐํ์) ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ค๋์์ ์ดํด ๋ณด์ : ๋๋ ํจ์ฌ ์คํ๋ ค ๋ณผ ๊ฒ IDbAsyncConnection
์ถ๊ฐ๋ฅผ ํ ๋ ์คํ๋ ค ํผ๋๊ณผ ๋นํจ์จ๋ก ์ด์ด์ง๋ ๋ด๋ถ์ ์ผ๋ก ๋๊ธฐํ ํ ์์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ ๋ฌด๋ฆฌ์๋ณด๋ค ๊ณต๊ธ์๊ฐ ์ง์ํ๋ ์ฐ๋ฆฌ๊ฐ ์ค๋์ด ๋ฌด์จ ์ด์ ์ด๋ก.
ํผ๋๊ณผ ๋นํจ์จ์ ์ด๋ํ๋ ์ปค๋ฒ ์๋์์ ๋๊ธฐํ๋๋ ์ฌ๋ฌ ๋ฉ์๋๋ณด๋ค ๊ณต๊ธ์๊ฐ ์ง์ํ ๋ IDbAsyncConnection์ด ์ถ๊ฐ๋๋ ๊ฒ์ ํจ์ฌ ๋ ๋ณด๊ณ ์ถ์ต๋๋ค.
@NickCraver +1000. ์ด ๋ฒ๊ทธ์ฒ๋ผ ์ฌ๊ธฐ ์ค๋ผํด ํ์ ๋จ์ง ์๋จ ๋น๋๊ธฐ ๋ฌด์์ ์ดํดํ์ง ๋ชปํฉ๋๋ค.
์ธํฐํ์ด์ค๋ก ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค. ๋ฌธ์ ๋ ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ฅผ ์๊ตฌํ๋ ์ธ์๋ฅผ ์๋ฝํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด IDbAsyncConnection ๋ฐ IDbConnection ๋ ๋ค์ธ ์ ํ์ด ํ์ํฉ๋๋ค. ๋น์ ์ ๊ฐ๋ ฅํ ํ์ดํ์ ์์ด๋ฒ๋ฆฌ๊ณ ๋งค์ฐ ์ฌ์ฉ์ ์นํ์ ์ด์ง ์๋ค๊ณ ์๊ฐํ๋ COM ์คํ์ผ ์ธํฐํ์ด์ค๋ฅผ ์ฟผ๋ฆฌํ๊ธฐ ์์ํด์ผ ํฉ๋๋ค. API ์ค๊ณ์์ ์ ์๋ฆฌ๊ฐ ์๋ ๋๊ตฌ์ด์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๊ฒ ๋ ์ง๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๊ธฐ๋ณธ ๊ตฌํ์์ NotImplementedException์ด ๋ฐ์ํ๋ค๋ฉด ์ด๋ฅผ ๊ธฐ๋ณธ ํด๋์ค์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ์๋ชป๋ ์ผ์ ๋๋ค. ๋ด๊ฐ ๋งํ๋ฏ์ด, ๊ฑฐ๊ธฐ์ ๋์ง ๋ง์ญ์์ค. ๋๊ตฐ๊ฐ๊ฐ ํ๋ ๊ฒ์ ๋ณด๋ฉด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ์ญ์์ค.
์ด๋ ์ชฝ์ด๋ , ๊ทธ๊ฒ์ด ์ธํฐํ์ด์ค์ด๋ ์ถ์ ๊ธฐ๋ณธ ํด๋์ค์ด๋ , ๋ด ๊ฒฝํ์ ์๋ ์ค๊ณ๋์ง ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ง ์๊ณ ์ธ์์ ๊นจ๋จ๋ฆฌ๋ ์ผ์ ๋งค์ฐ ์ด๋ ต์ต๋๋ค.
@JamesNK๋ IDbAsyncConnection
์ฌ๊ธฐ์์ IDbConnection
์์ํ ๊ฒ์ผ๋ก ์์๋์ง๋ง ๋ฐ๋์ ๊ทธ๋ด ํ์๋ ์์ต๋๋ค. ๊ณตํต ๊ตฌ์ฑ์์ ๊ณต์ ํ๊ฑฐ๋ ๊ณตํต ๊ธฐ๋ฐ์์ ์์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Dapper์์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ ์ ์์ต๋๋ค.
``` C#
IEnumerable
``` C#
Task<IEnumerable<T>> QueryAsync<T>(this IDbAsyncConnection cnn, CommandDefinition cmd)
sync/async ๋ฉ์๋๊ฐ ์๋ ๋๋ถ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋น์ทํ ์ฉ๋์ ๊ตฌํ์ ๊ฐ์ง ๊ฒ์ด๋ผ๊ณ ์์ํฉ๋๋ค.
_ํธ์ง:_ ์
๋ ฅํ ํ ์ด๋ฆ ๋์ Async
๊ฐ ์ด ๋ชจ๋ ๊ฒ์ ๋ํด ์ผ๋ง๋ ๋ ์ข์์ง ๊นจ๋ฌ์์ต๋๋ค...
ADO.NET์ ์๋ ์ ๊ฑธ์ณ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์์ต๋๋ค.
2003 API๊ฐ ์ ์๋ ๋ฐฉ์์ผ๋ก ๋๋์๊ฐ๋ ๊ฒ์ ํธํ์ฑ์ ๊นจ๋จ๋ฆฌ๊ฑฐ๋(์ฌ๋๋ค์ด ์ํ์ง ์๋) ์ง๋ 10๋ ๋์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ ์ ๊ฑฐํ๋ ๋ณ๊ฒฝ์ ๋๋ค. ๊ทธ๋ฌ๋ ํ์ฌ ๋์์ธ์ผ๋ก .NET Core์ ์ ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋ชจ๋ .NET ๋ฒ์ ๊ณผ _์์ค ํธํ_์ ๋๋ค. ์ฌ์ปดํ์ผ์ ์ง๋ 15๋ ๋์ ์์ฑ๋ ๋๋ถ๋ถ์ ์ฝ๋๋ฅผ ๊ณ์ ์๋์ํค๋ ๋ฐ ํ์ํ ์ ๋ถ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ corefx๋ฅผ ๋์์ผ๋ก ํ๋ ค๋ฉด ์ด์จ๋ ๋ค์ ์ปดํ์ผํด์ผ ํฉ๋๋ค.
์ด API๋ ์ค๋ซ๋์ ์์ ์ ์ด์์ต๋๋ค. ์ฌ๋๋ค์ด ์ํ๋ฉด ์ธํฐํ์ด์ค๋ก ๋ค์ ๋์์ธํ ์ ์์ต๋๋ค. ํ์์ ๊ฐ์ด ์ฌ๊ธฐ์๋ ๊ธฐ์ ์ ์ธ ๋ฌธ์ ๊ฐ ์์ผ๋ฉฐ ํํฐ, ์ ํธ๋ ๋ฐ ์์๋ก ๊ท๊ฒฐ๋ฉ๋๋ค.
์ธํฐํ์ด์ค๋ฅผ ๋ค์ ๊ฐ์ ธ์์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ผ๋ก ํ์ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ด ์์ด๋์ด๋ ์ญ์ ๋์์ง๋ง ์ด์
๋ธ๋ฆฌ ์ค๋ฆฝ ์ถ๋ก ์ด ์ด๋ฐ ์ข
๋ฅ์ ์ํฉ์์ ๋์์ด ๋ ์ ์์๋์ง ๊ถ๊ธํฉ๋๋ค. http://davidfowl.com/assembly-neutral-interfaces/ ๊ทธ๋ฐ ๋ค์ ๊ตฌํ
http://davidfowl.com/assembly-neutral-interfaces-implementation/
๋๋ ์ด์
๋ธ๋ฆฌ ์ค๋ฆฝ ์ธํฐํ์ด์ค๊ฐ ์ฌ๊ธฐ์์ ๋ถ์ ์ฒญ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ง์ฝ ๋ฌด์์ด๋
"๊ณตํต"์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์์ ํ "๊ณตํต"์
๋๋ค. ๊ฒ๋ค๊ฐ
๊ธฐ๋ฅ์ด ์ฆ๋ฐํ๊ธฐ ๋๋ฌธ์ ๋ฌด์๋ฏธํฉ๋๋ค.
2015๋
11์ 28์ผ ์คํ 5์ 38๋ถ์ "Shahid Khan" [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์ด ์์ด๋์ด๋ ๋จ์ด์ก์ง๋ง ์ด์ ๋ธ๋ฆฌ ์ค๋ฆฝ์ธ์ง ๊ถ๊ธํฉ๋๋ค.
์ถ๋ก ์ ์ด๋ฐ ์ข ๋ฅ์ ์ํฉ์์ ๋์์ด ๋ ์ ์์ต๋๋ค.
http://davidfowl.com/assembly-neutral-interfaces/ ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์
๊ตฌํ
http://davidfowl.com/assembly-neutral-interfaces-implementation/โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/dotnet/corefx/issues/3480#issuecomment -160323344.
๋ด๊ฐ ๊ด์ฐฐํ ๊ฒ:
๋ด๊ฐ ์๊ฐํ๋ ๊ฒ:
๋ด๊ฐ ์ํ๋ ๊ฒ:
๋ด๊ฐ ๋๋ผ๋ ๊ฒ:
์ธํฐํ์ด์ค์ ๋ฒ์ ์ ์ง์ ํ ์ ์์ต๋๋ค.
ํ์คํ ์ธํฐํ์ด์ค๋ ์ธํฐํ์ด์ค ์์์ผ๋ก ์ฝ๊ฒ ๋ฒ์ ์ด ์ง์ ๋ฉ๋๊น? ๊ทธ๋ฆฌ๊ณ ์์ ํ ๋ค๋ฅธ ์ผ์ ํ๊ณ ์๋ค๋ฉด; ๋ค๋ฅธ ์ธํฐํ์ด์ค์ ๋๋ค.
interface IOldInterface {}
interface INewInterface : IOldInterface {}
interface IDifferentInterface {}
class SomeClass : IOldInterface, INewInterface, IDifferentInterface
{
}
IInterfaceV2
, IInterfaceV3
๋ผ๊ณ ๋ถ๋ฅด์ง ๋ง์ญ์์ค. ์ถ๊ฐํ๋ ๋ด์ฉ์ ์ค๋ช
ํด์ผ ํฉ๋๋ค.
[Obsolete]
์ด์ ์ธํฐํ์ด์ค๋ฅผ ์ปจํ
์คํธ์ ๋ฃ๊ณ ์ผ๋ถ ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๋ก ์๋ ๊ทธ๋๋ก ํธ์ถํฉ๋๋ค. ์ด ์๋์ ์ ์์ ์ผ๋ก ๋ณด์ด๋ ๋น ๋น๋๊ธฐ์ ๋ฐฉ๋ฒ๋ณด๋ค๋.
public interface IDbUtilityProviderFactory
{
IDbConnectionStringBuilder CreateConnectionStringBuilder();
IDbParameter CreateParameter();
}
public interface IDbBlockingProviderFactory : IDbUtilityProviderFactory
{
IDbBlockingCommand CreateBlockingCommand();
IDbBlockingConnection CreateBlockingConnection();
}
public interface IDbAyncProviderFactory : IDbUtilityProviderFactory
{
IDbCommandAsync CreateAsyncCommand();
IDbConnectionAsync CreateAsyncConnection();
}
@abatishchev
CoreClr(์๋ก์ด ๋ฐ์ง์ด๋ ํ๋ ์์ํฌ) ์์ด๋์ด ๋ค์ ์๋ ์ฌ๋๋ค์ ๊ตฌํ ๋ค์ ์๋ ์ฌ๋๋ค๊ณผ ์์ ํ ๋ค๋ฅธ ์ฌ๊ณ ๋ฐฉ์์ ๊ฐ์ง๊ณ ์์ต๋๋ค(15๋ ๋ ์ฝ๋๋ฒ ์ด์ค์์ ํ์ ํธํ์ฑ์ด ์์ ๋๋ค).
๋ช ํํ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ง์ ํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก MS ํ์ ์ธ์ด์ ํ๋ซํผ ๋ชจ๋๋ฅผ ๋ฐ์ ์ํค๋ ๋ฐ ํ์์ ์ธ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๋ํด ๊น์ ๊ด์ฌ์ ๊ฐ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. System.Data์ ๋ํ ๊ฒฐ์ ์ ์ด๋ฌํ ํต์ฌ ์ถ์ํ๊ฐ ๋๋ฑํ๊ฒ ์ ๊ณต๋์ด์ผ ํ๋ ๋ ๋์ ์ํ๊ณ๋ฅผ ๊ณ ๋ คํ์ฌ ์ด๋ฃจ์ด์ง์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
- ์ธํฐํ์ด์ค๋ฅผ ์ ๊ฑฐํ๋ฉด ์ํฉ์ด ์ ํ๋ฉ๋๋ค.
- [Obsolete]๋ก ์ฅ์๋ ๋๊น์ง ์ธ๋ชจ์๋ ๊ฒ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ์์ ์์ ๋๊ฐ ๋ฌด์์ ์๊ฐํ๋์ง๋ ์ค์ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ๊ณ์ฝ์ด๋ฉฐ ๋จ์ํ ๋ง์กฑํ์ง ๋ชปํ๋ค๋ฉด ๊ทธ๋ ์ง ์์ต๋๋ค.
์ ํํ๊ฒ.
์ธํฐํ์ด์ค ๋ฒ์ ๊ด๋ฆฌ์ ๊ด๋ จํ์ฌ. ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ์ ํ์ง๋ง CoreClr์ ์์ ์ ๋ ์ธ๋ฐํ๊ณ ๋
๋ฆฝ์ ์ธ ๋ฒ์ ๊ด๋ฆฌ๋ผ๊ณ ์๊ฐํ์ญ๋๊น? ํ๊ธฐ์ ์ธ ๋ณํ? ํ! ์๋ก์ด ๋ฉ์ด์ ๋ฒ์ ์ด ์ถ์๋์์ต๋๋ค.
15๋
์ ๋์์ธ ๊ฒฝํ ํ์ ๊ฐ์ ์ค์๋ฅผ ๋ฐ๋ณตํ์ง๋ง ์ด์ ๋ ๋
๋ฆฝ์ ์ผ๋ก ๋ฒ์ ์ ์ง์ ํ๊ณ ๋๊ฒ ํจํค์ง๋ฅผ ๋ฆด๋ฆฌ์คํ๊ฒ ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์ ์ฃผ์ฅ์ ๋ ์ด์์ ์๋์ง๋ง ์ค๋๋ ๋ชจ๋๋ฆฌ์ ํ๋ ์์ํฌ์ ๋์ผํฉ๋๋ค.
์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ด ํ์์ธ ๊ฒฝ์ฐ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ์ด์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ์ค๋จํ๊ณ API๋ฅผ ์ฒ์๋ถํฐ ์ค๊ณํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฒ์๋ ์ฃผ์ ORM ์์ฑ์ ๋ฐ ๊ธฐํ ADO.NET ๊ฒฝํ์ด ํ๋ถํ ๊ฐ๋ฐ์์ ์๊ฒฌ์ ๊ฒฝ์ฒญํฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
@abatishchev ์์ฃผ ์ข์ ์ง์ . ๋ ์์ ๋ ๊ถ๊ธํ์ต๋๋ค. ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ ์ฃผ์ฅ์ ์์ ์ ์ค์ ๋ก ๋ฌด์์ ๋๊น? CoreClr์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉด ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ๋ชจ๋ ๊ฒ์ด .net full์์ ์คํ๋์ง ์์ผ๋ฏ๋ก ์์ ์ ์ํด ์ผ๋ฐ์ ์ธ ํ๋๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. (๊ทธ๊ฒ์ ๊ฒฐ์ฝ ์ ์๋ํ์ง ์์์ต๋๋ค).
๊ธด ์นจ๋ฌต์ ๋ํด ์ฃ์กํฉ๋๋ค.
๋จผ์ .NET Core์๋ ์ฐ๋ฆฌ๋ฅผ ํฌํจํ์ฌ ๋ง์ ์ฌ๋๋ค์ด ๋ฐ๋ผ๋ ๊ฒ๋งํผ ๋ง์ API๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ์ง ์๋ค๋ ์ ์์ ๋ฐฉ์ ์๋ ์ฝ๋ผ๋ฆฌ์ ๋ํด ์ด์ผ๊ธฐํด ๋ณด๊ฒ ์ต๋๋ค.
์ ๋ ๊ธฐ์กด ์์ฐ์ .NET Core๋ก ์ด์ํ๋ ์์ญ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ผ๋ จ์ ๋ฌธ์๋ฅผ ์์ฑํ๊ธฐ ์ํด ํ๊ณผ ํ๋ ฅํ๊ณ ์์ต๋๋ค.
ํ์ฌ .NET Framework/Mono์๋ง ์กด์ฌํ๋ ๋ ๋ง์ ๊ธฐ๋ฅ์ .NET Core๋ก ์ด์ํ ๊ณํ์ ๋๋ค. ์ด ๋ฌธ์๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง, ์ด๋ป๊ฒ ์ฐ์ ์์๋ฅผ ๋งค๊ธธ ๊ฒ์ธ์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ค ๋ฉ์ปค๋์ฆ์ด ๋ ๊ฒ์ธ์ง๋ฅผ ์ค๋ช ํ ๊ฒ์ ๋๋ค. ๊ทธ ์์ ์ด ๊ณต๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๊ธฐ๋ฅผ ๋ฐ๋ ๋ฟ๋ง ์๋๋ผ ์ปค๋ฎค๋ํฐ๊ฐ ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ด์ํ๋ ๋ฐ ๋์์ด ๋๋๋ก ํ๊ณ ์ถ์ต๋๋ค.
์ฌ๋๋ค์ด .NET Core์ ๋ํด ์ด์ผ๊ธฐํ ๋ ๋ง์ ํผ๋์ ์ผ์ผํค๋ ํ ๊ฐ์ง ์์ญ์ด ์์ต๋๋ค. ํ ๊ฐ์ง ๋ช ํํ ํ๊ฒ ์ต๋๋ค.
.NET Core์ .NET Framework๋ณด๋ค ์ ์ ์์ API๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋๋๋ค.
๊ทธ ์ด์ ๋ .NET Core๊ฐ ์๋ก์ด ํ๋ซํผ์ด๊ณ ๊ธฐ์ ์ ์ผ๋ก ์์์ API ์งํฉ์ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ฌผ๋ก , ์ฐ๋ฆฌ๋ ์์์ ์งํฉ์ ์ํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๊ณผ๊ฑฐ์ ํ๋ ๊ฒ์ ๋๋ค. .NET Core์ ๋ชฉํ๋ ์ฌ๋๋ค์ด .NET Framework ๋ฐ .NET Core์์ ์คํ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(๋ฐ ์ฝ์ ์ฑ์ ์ฌ์ฉํ์ฌ ํน์ ํ์ฅ ์ฑ๊น์ง)๋ฅผ ์์ฑํ ์ ์๋ ์คํ ๋ฆฌ๋ฅผ ๊ฐ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ์ํด์๋ 100% ํธํ๋๋ ๋ ํ๋ซํผ์ ํ์ ์งํฉ์ด ์์ด์ผ ํฉ๋๋ค. ์ด๋ฌํ ๋งฅ๋ฝ์์ ์ฐ๋ฆฌ๊ฐ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒ์ ๋ฃ๊ฒ ๋ ๊ฒ์ ๋๋ค.
๋ฌด์๋ณด๋ค ์ฐ๋ฆฌ์ ์๋๋ .NET Core ๋ด์์ ๋์ ํธํ์ฑ ํ์์ค์ ๊ฐ๋ ๊ฒ์ ๋๋ค. ์ฆ, ํ ๋ฒ์ ์ .NET Core API์ ๋ค๋ฅธ ๋ฒ์ ๊ฐ์ API ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ํํ ๊ณํ์ด ์์ต๋๋ค.
์ธํฐํ์ด์ค์ ๊ตฌ์ฑ์์ ์ถ๊ฐํ๋ ๊ฒ์ ์ ์์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋๋ค. ์ด๋ค ์ฌ๋๋ค์ ์ํฅ์ด ๋ฎ๊ณ ์ด๋ฅผ ๋ชจ๋ธ๋งํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ์ฃผ์ฅํ์ง๋ง ํ์ฌ๋ก์๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ ์์ค ๋ธ๋ ์ดํน ๋ณ๊ฒฝ์ ๋๋ค.
COM์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฏ๋ก ์ธํฐํ์ด์ค์ ํฌ๊ฒ ์์กดํ๋ WinRT๋ IFoo
, IFoo2
, IFoo3
์ ๊ฐ์ ๋ ๋ง์ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ๊ทธ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง ๊ฒฌ๋ ์ ์๊ฒ ๋ง๋๋ ๋ฐํ์์ด๋ ์ธ์ด ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ํ์คํ ์ง์ ๋ถํฉ๋๋ค. ์ง๊ธ๊น์ง๋ ๊ทธ๋ฐ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ธ์ด ๋์์ธ ํ์ ์ผ์์ผ๋ก์ ๋๋ ์ ์์ ๋ฃ๋ ๋ฐ ์๋นํ ๊ด์ฌ์ด ์์ต๋๋ค. ๋ค๋ฅธ ์ธ์ด์ ํ๋ซํผ์ ๊ทธ ๊ณต๊ฐ์์ ๊ด๋ จ ์์ด๋์ด๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ ๋ ์ต์
(์: ํผํฉ/ํน์ฑ, Swift์ ๋ชจ๋ ํ์ฅ ๋๋ ์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ๋ฉค๋ฒ)์ ์ ๊ทน์ ์ผ๋ก ์ฐพ๊ณ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๊ณ ๋ คํ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์ธํฐํ์ด์ค๋ณด๋ค ์ถ์ ๊ธฐ๋ณธ ์ ํ์ ์ ํธํฉ๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ๋งํ๋ฉด์ ์ด ์ค๋ ๋์ ์๋ ์ง๋ฌธ์ ๋ํด ์ด์ผ๊ธฐํด ๋ณด๊ฒ ์ต๋๋ค. ADO.NET ๊ณต๊ธ์ ์ธํฐํ์ด์ค๋ฅผ ๋ ธ์ถํฉ๋๋ค.
David๊ฐ ์ค๋ช ํ๋ฏ์ด: ์ฐ๋ฆฌ๋ .NET 2/Visual Studio 2005์ ์๋ ์ถ์ ๊ธฐ๋ณธ ์ ํ์ด ๋์ ๋์์ ๋ ์ด๋ฌํ ์ธํฐํ์ด์ค๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ์ต๋๋ค. ์ด๋ฌํ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋ ๊ฒ์ด ORM ํ๋ ์์ํฌ๋ฅผ .NET Core๋ก ์ด์ํ๋ ๋ฐ ์ค์ํ๋ค๋ ๊ฐํ ๋ฏฟ์์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋์๊ฒ ์ด๊ฒ์ ์ธํฐํ์ด์ค๋ฅผ .NET Core๋ก ์ด์ํด์ผ ํ๋ค๋ ์ถฉ๋ถํ ์ฆ๊ฑฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ชจ๋ ์๋ก์ด API์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ตฌ์ฑ ์์ํ๋ ์คํ์ด ์๋ .NET Core์ ์ฃผ์ ๋ชฉํ ์ค ํ๋๋ฅผ ์ผ๋์ ๋์ด์ผ ํฉ๋๋ค. IDataReader
์ธํฐํ์ด์ค๋ DataTable
์ ๋ํ ์ข
์์ฑ์ด ์์ผ๋ฉฐ DataSet
์ ๋ํ ์ข
์์ฑ์ด ์์ต๋๋ค. dotnet/runtime#14302์ ์ค๋ช
๋ ๋๋ก ์ฐ๋ฆฌ๋ DataTable
๋ํ ์ง์์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ฐ๋ํ์ง ์์ง๋ง DataSet
๋ ๊ฑฐ์๋ฅผ ๊ณ ๋ คํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ ํ ๋ณ๋์ ํจํค์ง๋ก ์ถ๊ฐํ ์ ์์ง๋ง ์ด๋ ์ชฝ์ด๋ ์ธํฐํ์ด์ค -> DataTable
-> DataSet
์์ ์ข
์์ฑ ์ฒด์ธ์ ๋์ด์ผ ํฉ๋๋ค. @YoungGah ์ ๊ทธ๊ณณ ์์ ๋ฌด์์ ํ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๊น?
๋ด๊ฐ ์ค์ํ์ง ์๋ ํ, IDataReader์ ์ ์ผํ DataTable ์ข
์์ฑ์
GetSchemaTable() ๋ฉ์๋, ์ด๋ฏธ DataTable์์ ์์ธํ ์ค๋ช
์ฒด์ธ. ํ์ง๋ง
๋์ค์ ์ ์ฌํ ๊ธฐ๋ฅ์ ๋ํ _some_ ๋ง์์ ์ถ๊ฐํ๊ธฐ๋ฅผ ํฌ๋งํฉ๋๋ค(
DataTable์ ํตํด ์ฌ๋ถ)๋ฅผ ํตํด ์ด๊ฒ์ ๋
ธ์ถํ๋ ๊ฒ์ด ๋งค์ฐ ์ด์ํฉ๋๋ค.
๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ๋ ๊ฒ์ด ๋ฌธ์ ๊ฐ ๋๋ฏ๋ก ์ธํฐํ์ด์ค. ๊ทธ๋ ์ง ์์๊ฑฐ์ผ
"์ง๊ธ์ ๋ฐฉ๋ฒ์ ์ ๊ฑฐํ๊ณ ๋์ค์ ๋ค๋ฅธ ๊ฒ์ ์ถ๊ฐํ์ญ์์ค"๋งํผ ๊ฐ๋จํฉ๋๋ค.
2015๋
12์ 5์ผ ์ค์ 12์ 17๋ถ์ "Immo Landwerth" [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๊ธด ์นจ๋ฌต์ ๋ํด ์ฃ์กํฉ๋๋ค.
.NET Core๋ก ํฌํ๋จผ์ .NET์ด๋ผ๋ ๋ฐฉ์ ์ฝ๋ผ๋ฆฌ์ ๋ํด ์ด์ผ๊ธฐํด ๋ณด๊ฒ ์ต๋๋ค.
Core์๋ ๋ง์ ์ฌ๋๋ค์ด ์ฌ์ฉํ ์ ์๋ API๊ฐ ๊ฑฐ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ - ํฌ๋งํฉ๋๋ค.๋๋ ์ฐ๋ฆฌ ํ๊ณผ ํ๋ ฅํ์ฌ ์ฐ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๊ฐ๊ณ ์๋์ง์ ๋ํ ์ผ๋ จ์ ๋ฌธ์๋ฅผ ์์ฑํ๊ณ ์์ต๋๋ค.
๊ธฐ์กด ์์ฐ์ .NET Core๋ก ์ด์ํ๋ ์์ญ์ ์ ๊ทผํฉ๋๋ค.ํ์ฌ๋ง ์ ๊ณต๋๋ ๊ธฐ๋ฅ์ ๋ ๋ง์ด ์ด์ํ ๊ณํ์ ๋๋ค.
.NET Framework / Mono to .NET Core์ ์์ต๋๋ค. ์ด ๋ฌธ์๋
์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง, ์ด๋ป๊ฒ ์ฐ์ ์์๋ฅผ ๋งค๊ธธ ๊ฒ์ธ์ง, ๋ฉ์นด๋์ด ๋ฌด์์ ํ ๊ฒ์ธ์ง
์ด๋ค. ๋๋ ๊ทธ ์ผ์ด ๊ณต๊ฐ์ ์ผ๋ก ์ผ์ด๋๊ธฐ๋ฅผ ๋ฐ๋ ๋ฟ๋ง ์๋๋ผ
์ปค๋ฎค๋ํฐ๋ฅผ ํ์ฑํํ์ฌ ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ด์ํ ์ ์์ต๋๋ค.
์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ฌ๋๋ค์ด ์ด์ผ๊ธฐ ํ ๋ ๋ง์ ํผ๋์ ์ผ์ผํค๋ ํ ๋ถ์ผ๊ฐ ์์ต๋๋ค.
.NET ์ฝ์ด. ํ ๊ฐ์ง ๋ช ํํ ํ๊ฒ ์ต๋๋ค..NET Core์ .NET๋ณด๋ค API๊ฐ ์ ์ ๊ฒฝ์ฐ์๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋๋๋ค.
๋ผ๋.๊ทธ ์ด์ ๋ .NET Core๊ฐ ์๋ก์ด ํ๋ซํผ์ด๊ณ ๊ธฐ์ ์ ์ผ๋ก
์์์ API ์ธํธ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฌผ๋ก ์ฐ๋ฆฌ๋ ์ํ์ง ์์ต๋๋ค.
์์์ ์งํฉ
http://blogs.msdn.com/b/dotnet/archive/2014/12/04/introducing-net-core.aspx
-- ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๊ณผ๊ฑฐ์ ํ๋ ์ผ์ ๋๋ค. .NET Core์ ๋ชฉํ๋
์ฌ๋๋ค์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ(๋ฐ ์ฝ์ ์ฑ์ ์ฌ์ฉํ์ฌ ํน์
.NET Framework ๋ฐ .NET Core์์ ์คํ๋ ์ฑ ํ์ฅ). ์ด๊ฒ
100%์ธ ๋ ํ๋ซํผ์ ํ์ ์งํฉ์ด ์์ด์ผ ํฉ๋๋ค.
ํธํ ๊ฐ๋ฅ. ์ด๋ฌํ ๋งฅ๋ฝ์์ ์ฐ๋ฆฌ๊ฐ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒ์ ๋ฃ๊ฒ ๋ ๊ฒ์ ๋๋ค.๋ฌด์๋ณด๋ค ์ฐ๋ฆฌ์ ์๋๋ .NET Core ๋ด์์ ๋์ ํธํ์ฑ ํ์์ค์ ๊ฐ๋ ๊ฒ์ ๋๋ค.
์ฆ, ์ฐ๋ฆฌ๋ API ๋ธ๋ ์ดํน ์ฒด์ธ์ง๋ฅผ ์ํํ ๊ณํ์ด ์์ต๋๋ค.
.NET Core API์ ํ ๋ฒ์ ๊ณผ ๋ค๋ฅธ ๋ฒ์ .
์ธํฐํ์ด์ค์ธํฐํ์ด์ค์ ๊ตฌ์ฑ์์ ์ถ๊ฐํ๋ ๊ฒ์ ์ ์์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋๋ค.
์ด๋ค ์ฌ๋๋ค์ ์ํฅ์ด ๋ฎ๊ณ ๋ชจ๋ธ๋งํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ค๋๋ ์๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ ์์ค ๋ธ๋ ์ดํน ์ฒด์ธ์ง์ ๋๋ค.COM์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฏ๋ก ์ธํฐํ์ด์ค์ ํฌ๊ฒ ์์กดํ๋ WinRT๋
IFoo, IFoo2,
์์ดํธ3. ํ ์ ์์ง๋ง ๋ฐํ์ ์์ด๋ ํ์คํ ์ง์ ๋ถํฉ๋๋ค.
๊ฒฌ๋ ์ ์๋๋ก ์ธ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ง๊ธ๊น์ง๋ ๊ทธ๋ฐ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ธ์ด ๋์์ธ ํ์ ์ผ์์ผ๋ก์ ์ ๋ ๋งค์ฐ ๊ด์ฌ์ด ๋ง์ต๋๋ค.
์ ์์ ๋ฃ์ต๋๋ค. ๋ค๋ฅธ ์ธ์ด์ ํ๋ซํผ์๋ ๊ด๋ จ ์์ด๋์ด๊ฐ ์์ต๋๋ค.
์ต์ ๋ ์ ๊ทน์ ์ผ๋ก ๊ฒํ ํ๊ณ ์์ต๋๋ค(์:
mix-ins/traits, Swift์ ๋ชจ๋ ํ์ฅ ๊ธฐ๋ฅ ๋๋ ๊ธฐ๋ณธ ๋ฉค๋ฒ
์ธํฐํ์ด์ค).์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ ๊ฒฝ์ ์ฐ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์ ํธํฉ๋๋ค.
์ธํฐํ์ด์ค๋ฅผ ํตํ ์ถ์ ๊ธฐ๋ณธ ์ ํ.
ADO.NET ์ธํฐํ์ด์ค์ด ๋ชจ๋ ๊ฒ์ ๋งํ๋ฉด์ ์ด ์ค๋ ๋์ ์๋ ์ง๋ฌธ์ ๋ํด ์ด์ผ๊ธฐํด ๋ณด๊ฒ ์ต๋๋ค.
ADO.NET ๊ณต๊ธ์ ์ธํฐํ์ด์ค๋ฅผ ๋ ธ์ถํฉ๋๋ค.David๊ฐ ์ค๋ช ํ๋ฏ์ด: ์ฐ๋ฆฌ๋ ์ถ์ ๊ธฐ๋ฐ์ด
.NET 2/Visual Studio 2005์ ์๋ ์ ํ์ด ๋์ ๋์์ต๋๋ค.
์ด๋ฌํ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋ ๊ฒ์ด
ORM ํ๋ ์์ํฌ๋ฅผ .NET Core๋ก ํฌํธํฉ๋๋ค. ๋์๊ฒ ์ด๊ฒ์ ์ถฉ๋ถํ ์ฆ๊ฑฐ๋ฅผ ์ ๊ณตํ๋ค
์ธํฐํ์ด์ค๋ฅผ .NET Core๋ก ์ด์ํด์ผ ํฉ๋๋ค.๊ทธ๋ฌ๋ ๋ชจ๋ ์๋ก์ด API์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค์ ์ค ํ๋๋ฅผ ์ผ๋์ ๋์ด์ผ ํฉ๋๋ค.
๊ตฌ์ฑ ์์ํ๋ ์คํ์ด ์๋ .NET Core์ ์ฃผ์ ๋ชฉํ์ ๋๋ค. NS
์ธํฐํ์ด์ค IDataReader์๋ DataTable์ ๋ํ ์ข ์์ฑ์ด ์์ต๋๋ค.
DataSet์ ๋ํ ์ข ์์ฑ. dotnet/runtime#14302์ ์ค๋ช ๋ ๋๋ก
https://github.com/dotnet/corefx/issues/1039 , ์ฐ๋ฆฌ๋ ์ถ๊ฐ์ ๋ฐ๋ํ์ง ์์ต๋๋ค
DataTable์ ์ง์ํ์ง๋ง ์ค์ ๋ก DataSet์ ์ด์ํ๊ณ ์ถ์ง๋ ์์ต๋๋ค. ๊ทธ๋์
์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ํด๋น ์ข ์์ฑ์ ๊นจ์ผ ํฉ๋๋ค. ๋๋ ํจ๊ป ์ผํ ๊ฒ์ด๋ค
@YoungGah https://github.com/YoungGah ์์ ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ์ผ์ ํ์ธ์ด ์ ๊ทผ ๋ฐฉ์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๊น?
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/dotnet/corefx/issues/3480#issuecomment -162115855.
์, IDataReader์๋ DataSet์ ๋ํ ์ข ์์ฑ์ด ์๋ DataTable์ ๋ํ ์ข ์์ฑ์ด ์์ต๋๋ค.
์์ ์ธ๊ธํ๋ฏ์ด ์ธํฐํ์ด์ค์์ ๋ฉค๋ฒ๋ฅผ ์ ๊ฑฐํ ์ ์์ผ๋ฏ๋ก ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํด๋น ์ข ์์ฑ์ ํด์ ํด์ผ ํฉ๋๋ค. ์ธํฐํ์ด์ค๋ฅผ ์ด์ํ์ง ์๊ฑฐ๋ DataTable -> DataSet ์ข ์์ฑ์ ๊นจ๋จ๋ฆผ์ผ๋ก์จ.
์ด ์ ๊ทผ ๋ฐฉ์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๊น?
์, GetSchemaTable()
๋ฉ์๋ ์์ด๋ ADO.NET ์ธํฐํ์ด์ค๋ฅผ ๋ณต์ํ๋ฉด ํ์ฌ ์ง๋ฉดํ๊ณ ์๋ ADO.NET ์ธํฐํ์ด์ค ๋ฌธ์ ์ ๋ํ ๊ณผ๋ํ ์ข
์์ฑ์ ํด๊ฒฐํ ์ ์์ต๋๋ค.
GetSchemaTable()
๋ ํฌํจ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ ๊ฒฝ์ฐ DataTable -> DataSet ์ข
์์ฑ์ ๊นจ๊ณ GetSchemaTable()
์ ์์กดํ๋ ์ฌ๋๋ค์๊ฒ ์ ํธ๋๋ ์ ๊ทผ ๋ฐฉ์์ด ๋ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ด ์ํฅ์ ๋ฏธ์น๋ ๊ฐ๋ฐ์์๊ฒ ๋ ๋ง์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํฉ๋๋ค.
@terrajobst ์์ฝ ๋ฐ ๊ณ ๋ ค ์ฌํญ ๊ณต์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
@terrajobst ์์ฝ ๋ฐ ์ค๋ช ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋ Npgsql์ ์ ์งํ๋ฏ๋ก ORM์ด ์๋ ADO.NET ๊ณต๊ธ์์ ๊ด์ ์์ ์์ฑํ๊ณ ์์ต๋๋ค.
.NET Core์์ Microsoft๋ ADO.NET์ ์ผ๋ถ ์ค๋๋ ๋ ๊ฑฐ์ ๊ธฐ๋ฅ, ์ฆ DataTable/DataSet ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ฑฐํ๊ณ ์ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ ์์ผ๋ก ๋ ๋์ ๋ ๊นจ๋ํ API๋ฅผ ์์ฑํ์ง๋ง ์ด๋ฏธ ์ธํฐํ์ด์ค์ DataTable/DataSet API์ ์์กดํ๋ ์ฌ์ฉ์๋ฅผ ์ํ ์๋นํ ์์ ์ ์์ฑํฉ๋๋ค.
์ ๋ ๊ฐ์ธ์ ์ผ๋ก DataTable/DataSet์ ์ฃฝ์ด๋ ๊ฒ์ด ์ข์ ์ผ์ด๋ฉฐ ์๋กญ๊ณ ๋ ๋์ ๋ฉํ๋ฐ์ดํฐ API๊ฐ ๋์
๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค(DataTable/DataSet์ ์ฃฝ์ด์ง ์๊ณ ๋ ์ด๊ฒ์ด ์ฌ์ค์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค). ๋๋ ์ต์ํํ์ง ์๋๋ค
์ด ํ์์ผ๋ก ์ธํด ORM(๋ฐ ๊ธฐํ) ์๋น์๊ฐ ๊ฒช๋ ๊ณ ํต์ด ์์ง๋ง ํ ๊ฐ์ง ๊ธฐ์ตํด์ผ ํ ์ ์ ์ ๋ฆฌํ๊ณ ํ์์ ์๊ฐํ ๊ธฐํ๊ฐ ์๋ค๋ฉด .NET Core๊ฐ ๋ฐ๋ก ๊ทธ ๊ธฐํ๋ผ๋ ๊ฒ์
๋๋ค.
์ฌ๊ธฐ์ ๋ ๋ค๋ฅธ ์ค๋ง์ค๋ฌ์ด ์์๋ ADO.NET ์ธํฐํ์ด์ค๋ฅผ ์ ์งํ๋ค๋ ๊ฒ์ DataTable/DataSet๋ ์ ์งํ๋ค๋ ์๋ฏธ์ ๋๋ค. ์ฆ, ๊ฐ์ธ์ ์ผ๋ก ์ธํฐํ์ด์ค ๋ฌธ์ ์ ๋ํด ๊ทธ๋ค์ง ๊ฐํ๊ฒ ๋๋ผ์ง๋ ์์ง๋ง ์ ์งํ๋ค๋ ๊ฒ์ DataTable/DataSet์ ์ ์งํ๋ ๊ฒ์ ์๋ฏธํ๋ฏ๋ก ๋ ๋ฌธ์ ๊ฐ ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ์ ํ ์ธํฐํ์ด์ค์ ์์กดํ๋ ORM์ด ์ผ๋ง๋ ๋ง์์ง ๋ชจ๋ฅด๊ณ ๊ธฐ๋ณธ ํด๋์ค๋ก ์ ํํ๋ ๋ฐ ์ผ๋ง๋ ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ ํ์ด ๊ทธ๋ค์ง ์ข์ง ์์ต๋๋ค. ์ฌ๊ธฐ ํด๋ฆฌ์ด. ํ์ง๋ง ๋ด ์ง๊ฐ์ ๋๊ตฐ๊ฐ๊ฐ ๊ณ ํต์ ๊ฒช๋๋ผ๋์ด ๊ธฐํ๋ฅผ ์ก๊ณ ์ ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. . .
์ถ์ ๋น์ ์ด ๋ฌด์์ ํ๋ ์ง ์ธํฐํ์ด์ค ํญ๋ฐ์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๊ฐ์ง ๋ง์ญ์์ค, ์ฆ IFoo2, IFoo3. ๊ทธ๊ฒ์ ๋จ์ง ํด๊ฒฐ์ฑ
์ด ์๋๋๋ค.
PPS .NET Core์์ ์๋ก์ด ๋น DataTable ๋ฉํ๋ฐ์ดํฐ API๋ฅผ ์์ฑํ๊ธฐ๋ก ๊ฒฐ์ ํ๊ณ .NET Core ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ .NET Framework์์ ์คํํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ฉด, ์ด๋ ์๋ก์ด API์ ํจ๊ป ์๋ก์ด .NET Framework๋ฅผ ๋ฆด๋ฆฌ์คํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. .NET ์ฝ์ด.
@terrajobst ์นจ๋ฌต์ ๊นจ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค ;). ํต์ฌ ๋ฌธ์ ๋ ADO.NET์ ๋ํ ์ค๊ณ๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ฝค ์ค๋ ์๊ฐ ๋์ ์์๊ณ API์ ๋ค์ํ ๋ถ๋ถ์์ ๋ช ๋ถ ์ด์ ์๊ฐํ์ง ์๊ณ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒ์ผ๋ก ๋ํ๋ฉ๋๋ค. ๋๋ ์ด๊ฒ ์ ๋ํด ๋ฒ๋ฟ ์ด๋ฏ๋ก .NET Core๋ ์ด์ ๋ฒ์ ๊ณผ ํธํ๋์ด์ผ ํ๋ค๋ (๋ด ์๊ฐ์๋ ์ด๋ฆฌ์์) ๊ท์น์ ์ํด ๋ณด๋ฅ๋์ด์๋ ์ ๋ฉ๋๋ค. .NET ์ ์ฒด.
์ฆ, ์ํฉ์ด ADO.NET์ ๋ํด ๋ ๋์ ๋ฐฉํฅ์ผ๋ก ๋ฐ๋์ง ์์ ๊ฒฝ์ฐ(์ฆ, ์ผ๋ฐ API๊ฐ ์ค๊ณ๋ ์ค์ ๋์์ธ์ ์ป๊ฒ ๋๋ฉฐ SqlClient์ ํนํ๋๊ณ ๊ทธ ๋ฐ๋๊ฐ ์๋๋๋ค! ๋ฐ๋ผ์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ SQL Server์ด์ง๋ง ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ผ๋ฐ API์ ์ถ๊ฐ๋๊ณ ADO.NET ๊ณต๊ธ์ ์์ฑ์์๊ฒ ๋จ๊ฒจ์ง์ง ์์), ๋ค์์ผ๋ก ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ธํฐํ์ด์ค์ ํ์ฌ ๊ฐ๋ฐ์ #ifdef๋ฅผ ํฌํจํ์ฌ ๊ฐ๋ฅํ ํ ๋ง์ด ์ด์ํ๋ ๊ฒ์ ๋๋ค. ๋จ์ ๊ตฌ๋ฉ์ด ์ฃผ๋ณ.
๊ทธ๋ฌ๋ IDataReader ์ธํฐํ์ด์ค๋ ์ด์๋์ง ์์ ํ์์์ .NET ์ ์ฒด _if_ ๋ฐ์ดํฐ ํ ์ด๋ธ๊ณผ ์ญํธํ์ฑ์ ์ ์งํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ DataTable ์ข ์์ฑ์ด ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๊ทธ๊ฒ์ด ์ด์จ๋ ์์ด๋ฒ๋ฆฐ ์์ธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. MS๋ .NET ์ ์ฒด๊ฐ .NET ์ฝ์ด๋งํผ/๋น๋ฒํ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ง ๋ชปํ ๊ฒ์ด๋ผ๊ณ ์ฌ๋ฌ ๋ฒ ๋งํ์ต๋๋ค. ๋ฐ๋ผ์ .NET ์ฝ์ด์ _new_๊ฐ ์ถ๊ฐ๋๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์๋ฌด๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. .NET ์ ์ฒด์ ์ฆ์ ํธํ๋์ง ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ญ๊ฐ ๋์น ์ ์์ผ๋ฏ๋ก ๊ทธ๋ฐ ๊ฒฝ์ฐ ์์ ํด ์ฃผ์ธ์. :)
๊ทธ๊ฒ๋ง์ผ๋ก๋ ์ด์ํ ์ํฉ์ด ๋ฉ๋๋ค. ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ด ์์ด์ผ ํ์ง๋ง ์ค์ ๋ก๋ ๋ฌ์ฑํ๊ธฐ ์ด๋ ต๊ณ ์ด์จ๋ ์ ์ฒญ์ด์ฒ๋ผ ๋ณด์ ๋๋ค. IMHO๊ฐ ๋จผ์ ํด๊ฒฐ๋๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ์ฌ .NET core์ API๋ก ์ํํ ์์ ์ ๋ํ ์ ์ ํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์์ต๋๋ค. ๊ทธ๋ ๋ค๊ณ ๋ชจ๋ API๊ฐ ์๋ชป ์ค๊ณ๋์๋ค๋ ๊ฒ์ ์๋์ง๋ง ADO.NET(์ด์ ๊ฒ์๋ฌผ์์ ์ค๋ช ํ ๋๋ก)์์๋ ์ฌ๋ฌ ํด ๋์ ์์ ์ด ์ ๋๋ก ์ํ๋์ง ์์์ต๋๋ค. ์์ ํ ์ค๋จํ๊ณ ๋์ ๋ ๊ฐ๋ ฅํ๊ณ (JDBC๋ ์ฌ์ ํ ๊ฐ๋ ฅํ๊ณ ODBC๋ 25๋ ์ ๊ณผ ๊ฐ์ด ์๋ํจ) ๋ณํ์ ์ ์ํ ์ ์๋ ์์คํ ์ ๊ตฌํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด๊ฒ์ ๋ํด ์กฐ๊ธ ๋ ์๊ฐํด๋ณด๋ฉด, ํ์ ํธํ์ฑ ์๊ตฌ ์ฌํญ์ ๋ํ @FransBouma ์ ์๊ฒฌ์ ๋ง์ ์๋ฏธ๊ฐ ์์ต๋๋ค. .NET Core์ ์ฝ์ ์ค ํ๋๋ ๊ตฌ์ฑ ์์ํ๋ Nuget ํจํค์ง ๋๋ถ์ ๋ ๋น ๋ฅธ ๋ฐ๋ณต์ ๋๋ค. ๋์ .NET Framework ์ ๋ฐ์ดํธ๋ 1๋ ์ 1/2ํ ์ ๊ณต๋๋ฉฐ ํ์ํ ๋๋ง๋ค .NET Core ์ ๋ฐ์ดํธ๋ฅผ ๋ฆด๋ฆฌ์คํ ์ ์์ต๋๋ค. ์ ๋ฐ์ดํธ๊ฐ .NET Framework์์ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๊ฒฐ์ฝ ๊นจ๋จ๋ฆด ์ ์๋ค๋ฉด ์ด๊ฒ์ ๊ฐ์น๋ ์ฌ๊ฐํ๊ฒ ์ ํ๋๋ ๊ฒ ๊ฐ์ต๋๋ค...?
์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ด ์ด ADO.NET ๊ด๋ จ ๋ ผ์๋ฅผ ํจ์ฌ ๋ฐ์ด๋๋ ์๊ตฌ ์ฌํญ์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
@roji์ ๋ฐ๋์ ๋๋ค . API๋ฅผ ์ค๋จํ์ง ์์ผ๋ฉด ์งง์ ๋ฐ๋ณต์ด ํ์ฑํ๋ฉ๋๋ค.
๋น์ ์ด .Net ๊ฐ๋ฐ์์ด๊ณ ๊ธฐ๋ณธ ํ๋ ์์ํฌ์ API๊ฐ ์ง์์ ์ผ๋ก ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ ๋น๋๊ฐ ๋งค์ฃผ ๊ณ์ ์ค๋จ๋๋ค๋ฉด ๋ค๋ฅธ ํ๋ซํผ์ ๊ณ ๋ คํ๊ธฐ ์์ํ๋ ๋ฐ ์ค๋ ๊ฑธ๋ฆฌ์ง ์์ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ์ค์ํ์ง ์์ ๋ณ๊ฒฝ ์ฌํญ์ ์ํด ์ฃผ๋๋๋ ๋น ๋ฅธ ๋ฐ๋ณต์ ๋๋ค.
(ํธ์ง๋จ)
์๋ฅผ ๋ค์ด ํด๋์ค ์ธํฐํ์ด์ค, ๋์ ๋ณ๊ฒฝ(!) ๋๋ ๋์ ์ถ๊ฐ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ถ๊ฐํด์ผ ํ ๋๊น์ง ๋ณ๊ฒฝ์ ์ค๋จํ์ง ์๊ณ ๋ฐ๋ณตํ ์ ์์ต๋๋ค. ์ด๋ ๋ฌธ์ ๊ทธ๋๋ก์ ์ฃผ์ ๋ณ๊ฒฝ(๋์ ๋ณ๊ฒฝ์ tho์)์ด ์๋์ง๋ง .net core๋ ์ฝ๋๋ฅผ .net full๊ณผ ํธํ๋์ง ์๋๋ก ํ๋ฏ๋ก .net core๊ฐ _ํด๋น ์ฝ๋์ ๋ํด .net full๊ณผ ๋ ์ด์ ํธํ๋์ง ์๊ฒ ๋ฉ๋๋ค. .NET ์ฝ์ด๋ก ๋ด๋ ค์ค๋ IMHO๋ ํญ์ .NET ์ ์ฒด์์์ ๋์ผํ(ํด๋์ค) ์ธํฐํ์ด์ค ๋ฐ ๋์์ ๊ฐ์ง๋ฉฐ ๋ง์ง๋ง ๋ฐ์ดํธ(IMHO๋ ์ง์ ๊ฐ๋ฅํ์ง ์์) ๋๋ ๋์ค์ ๋ฐฑํฌํธ๋๋ ์๋ก์ด ๊ธฐ๋ฅ(๋ง ๊ทธ๋๋ก MS๋ btw)๋ฅผ .NET ์ ์ฒด๋ก ๋ณํํ์ฌ ํจ๊ณผ์ ์ผ๋ก ์ด์ ๋ฒ์ ๊ณผ ํธํ๋์ง ์๋๋ก ํ์ต๋๋ค. ๊ทธ๊ฒ์ ๋น์ ์ด ๋ฌผ๋ก ์ธํ๋ฆฌ์ ์ด๋์ชฝ์ ๋ฌ๋ ค ์๋์ง์ ๋ฌ๋ ค ์์ต๋๋ค. '์ ์ ๋ ๋์ B๋ฅผ ๊ฐ์ง (ํด๋์ค) ์ธํฐํ์ด์ค X์ ๊ณตํต ์ธํธ๊ฐ ์๊ณ .NET core์ .NET ๋ชจ๋๊ฐ ์ด๊ฒ์ ๊ตฌํํ๊ณ X & B๊ฐ ์น๋ฆฌํฉ๋๋ค' t change in the future', ๊ทธ๊ฒ์ ์ฌ์ ํ โโX & B ์ธ๋ถ์ ์๋ก์ด ๊ฒ์ ์ป์ ์ ์๋ ์๋ก์ด ํ๋ ์์ํฌ๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํ ๊ฒ์ด๋ฉฐ, ์ ํํ ๊ทธ๊ณณ์ ์ํฉ์ด ๋ฐ๋ ์ ์๊ณ ๋ฏธ๋๊ฐ ์๋ ๊ณณ์ด ์์ต๋๋ค.
์๋ฅผ ๋ค์ด .net ์ฝ์ด์ X & B์์ ์ฌ์ฉ๋๋ ์ธํฐํ์ด์ค/ํด๋์ค๋ ์ค์ ๋ก .NET ์ฝ์ด์ ์ ํด๋์ค/์ธํฐํ์ด์ค๋ฅผ ๋๋ฌ์ผ ๋ํผ์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ X & B ๋๋ .NET ์ ์ฒด์ ๊ณตํต๋ API ์์ด ๋ ๋์ ๋์์ธ์ผ๋ก ์๋ก์ด ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋ฐ์์๊ฒ ๋ฌ๋ ค ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฏธ X & B์์ ๋๋ฝ๋ ๋ถ๋ถ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ #ifdefํด์ผ ํ๋ฏ๋ก ๋ ํ๋ ์์ํฌ๋ฅผ ๋ชจ๋ ์ง์ํ ๋ IMHO๋ ์กฐ๋ง๊ฐ ๋์์ด ๋ณ๊ฒฝ๋ ๋ .NET Core์ ์ ์ธํฐํ์ด์ค/ํด๋์ค๋ฅผ ๋์์ผ๋ก ์ง์ ํ ์ ์๋ ๊ฒ์ด ์ข์ต๋๋ค(์ฌ์ง์ด ๋งค์ฐ ๋ฏธ๋ฌํ ์๋ ์์ต๋๋ค. , ์ฃผ์ด์ง ์ํฉ์ ๋ค๋ฅธ ์์ธ์ ๊ฐ์ด) ์ด์จ๋ ๊ฑฐ๊ธฐ์์ ์๋ฆฌ๋ฏ๋ก _new_ API(X&B ์๋)๋ฅผ ์ฌ์ฉํ์ฌ .NET Core๋ก ์ฝ๋๋ฅผ 'ํฌํ 'ํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค. ์ด์จ๋ ์ฐ๋ฆฌ๋ ์ด์ํด์ผ ํฉ๋๋ค. ์ ์ด๋ ์ ๊ฐ ๋ณด๊ธฐ์๋ ๊ทธ๋ ์ต๋๋ค.
@ryanbnl ,
@roji ๋ ํ๋ ์์ํฌ ๋ฐ ์ฝ์ด ๋ชจ๋์ ํธํ๋๊ณ ์์ฒด ์ผ์ด๋์ค์์ ์คํ๋ ์ ์๋ ํ๋ ์์ํฌ ํจํค์ง(์: GAC๊ฐ ์๋)์ ์๋ก์ด ์ธ๋ถ๊ฐ ์๋ ํ; ๊ทธ๋ฌ๋ ORM ์ ๊ณต์์๊ฒ๋ ๋ ๋ง์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ์ ์์ผ๋ฉฐ System.Data.IDbConnection
๋ผ๋ ์ด๋ฆ์ ์ด๋ฏธ ์ฌ์ฉ ์ค์
๋๋ค...
@benaadams ์ ํจํ ์๊ฒฌ์ ๋๋ค - ADO.NET๊ณผ ๊ฐ์ ๋น Nuget ํ๋ ์์ํฌ API๋ง ์ผ๋์ ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ๋ค์ ๋ฌธ์ ๊ฐ ๋ ๋งํผ ์ถฉ๋ถํ API ๊ณต๊ฐ์ ํฌํจํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
IDbConnection๊ณผ ๊ด๋ จํ์ฌ ๋ฌด์จ ๋ง์์ด์ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค๋ง...
@roji ๋ ์๋ฅผ ๋ค์ด System.Data.Database
์ ๊ฐ์ด ์ด๋ฌํ ์ ํ์ ์ ๊ณตํ๋ ์ ํจํค์ง๋ฅผ ์๋ฏธํ์ต๋๋ค. ์ฝ์ด ๋ฐ ์ ์ฒด์ ํธํ๋๋๋ก ์ ์งํ๋ ค๋ฉด ์ ์ฒด ํ๋ ์์ํฌ์์ GAC๊ฐ ๋ ์ ํ์ ์ฌ์ ์ํ ์ ์๊ฑฐ๋ ์ถฉ๋ํ ์ ์์ต๋๋ค.
๋๊ฒ ํฌ์ธํธ์์; ์ด๊ฒ์ด ์ ์ฒด ๋ฐ ์ฝ์ด ๋ชจ๋์ ๋ํด ๋๊ฒ์์ ์ด ์ ์๋ ์ด์ ๊ฐ ์์ต๋๋ค. ํ์ฌ System.Data
API ๊ฒ์๋ฌผ 4.6.1+๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ต๋๊น?
๊ทธ๊ฒ์ ์ง๊ธ ๋ ํฐ ๊ณ ํต์ ์ผ๊ธฐํ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ถ ํธํ์ฑ์ ์ด๋ฏธ ์์๋์ด ์ธํฐํ์ด์ค๋ฅผ ์ญ์ ํ๊ฑฐ๋ DataSet
๋ง ์ญ์ ํ๋ฏ๋ก ORM ๊ณต๊ธ์๊ฐ coreclr์ ๋ํด ์ผ๋ถ ์ฌ์์
์ ์ด๋ฏธ ์ํํด์ผ ํฉ๋๋ค.
nuget ๋ฐ GAC ํ๋ ์์ํฌ ์ธ๋ถ์ ์๋ ์์ ํ ์๋ก์ด API๋ netstandard1.2( ์: 4.5.2+, coreclr, UWP, mono/Xamarin ๋ฑ)์ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ํด ์ด์ ๋ฒ์ ๊ณผ ํธํ๋ ์ ์์ต๋๋ค. ์๋ง๋ ๋์ค๋ณด๋ค ๋ ๋์ ์๊ฐ์ผ ๊ฒ์ ๋๋ค.
์๋ก์ด API๊ฐ achema ๋ฑ์ ๋ํด ์๋ํ๊ณ ์์์ ๊ฐ์ํ ๋ DataSet
๋ฅผ ๋ํ๋ด๋ ๊ฒ์ ์ค์ง ์์ ๊ฒ์
๋๋ค(๋๋ DataTable
), ์ด๊ฒ์ ๋ซ์์ผ ํฉ๋๊น? ๊ธฐ๋ณธ ํด๋์ค๊ฐ dotnet/corefx#5609 ๋ฐ ์ ํ ์ ๋ฌ์ ์ฃผ์์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ฐฉ๋ฒ์ธ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ์ฆ, ์ธํฐํ์ด์ค์๋ GetSchemaTable()
์ฃผ์ด์ง๋ฉด ์๋ฌด ์์ฉ์ด ์๊ณ ๋ค๋ฅธ ์ผ๋ถ๋ ํธํ์ฑ์ ์ํด ๊ฐ์ ธ์ค์ง ์์ต๋๋ค. ...๊ทธ๊ฒ ๋ง์ด ๋๋์?
๋ฌด์์ ๋ซ์์ผํฉ๋๊น? DataTable/DataSet ์ข
์์ฑ ๋๋ฌธ์ GetSchemaTable()
๊ฐ์ง ์ ์๋ ๊ฒฝ์ฐ ํ ๊ฐ์ง์ด์ง๋ง ์ธํฐํ์ด์ค๋ ์ฌ์ ํ ๋ณต์๋์ด์ผ ํ๋ฉฐ(ํ์ํ ๊ฒฝ์ฐ GetSchema ์ ์ธ) ๊น์ ์ข
์์ฑ์ด ์๋ ๊ธฐ์กด ์ฝ๋ ๊ธฐ๋ฐ์ ์ฝ๊ฒ ์ด์ํด์ผ ํฉ๋๋ค. ๋๋ฝ๋ ์ธํฐํ์ด์ค๋ ์ฐจ๋จ๊ธฐ์
๋๋ค. dnx/core๋ฅผ ์ง์ํ๊ธฐ ์ํ ์์
์ ์์ํ๊ธฐ ์ ์ ์ธํฐํ์ด์ค์ ํจ๊ป ๋ฆด๋ฆฌ์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
๋๋ @mythz์ ๋์ํฉ๋๋ค. ์ธํฐํ์ด์ค๋ ๋ ๋ค๋ฅธ ์ฃผ์ ์ด๋ฉฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋๋ถ๋ถ์ ์ฌ์ฉ์์๊ฒ๋ ๊ทธ๋ ์ง ์์ ์๋ ์์ง๋ง ์ด ๋์ผํ ์ฌ์ฉ์๋ ์๊ท๋ชจ ๊ทธ๋ฃน์์ ์์ฑํ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ํด๋น ์ฝ๋๋ ์ด๋ฌํ ์ธํฐํ์ด์ค(๋ฐ DbProviderFactory์ ๊ฐ์ ๊ธฐํ ์ค์ํ ๋๋ฝ๋ ADO.NET ๊ธฐ๋ฅ)์ ์์กดํฉ๋๋ค.
์์งํ ๋งํด์ 'RTM' ๋ ์ด๋ธ์ ๋ํ ๊ทน๋จ์ ์ธ ์๋ฐ์ผ๋ก 1.0์์ ๊ฒฌ๊ณ ํ API๋ฅผ ์ป์ ์ ์์ ๊ฒ์ด๋ผ๋ ํฌ๋ง์ ๊ฑฐ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ค์ .NET 2.0๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค. ์ฒซ ๋ฒ์งธ ๋ฒ์ ์์ ๋ง๋ ๋ชจ๋ ์ค์๋ ์์ ๋ ๊ฒ์ ๋๋ค.
@FransBouma
.NET Core์ ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์ถ๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฉ๋๋ค. ๋ฐ๋ผ์ V1์ ๋ํ ์ปท์ ๋ง๋ค์ง ๋ชปํ๋๋ผ๋ 1.1์ ํฌํจํ ๋ชจ๋ ๋ฒ์ ์ ์ถ๊ฐ๋ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ์ฒซ ๋ฒ์งธ ๋ฒ์ ์์ ๋ง๋ ๋ชจ๋ ์ค์๊ฐ ์์ ๋ฉ๋๋ค.
๋ฌธ์ ๋ ์์ง๋ง ์ํํธ์จ์ด๊ฐ ์๋ํ๋ ๋ฐฉ์์ ๋๋ค.
@terrajobst
๋ฐ๋ผ์ V1์ ๋ํ ์ปท์ ๋ง๋ค์ง ๋ชปํ๋๋ผ๋ 1.1์ ํฌํจํ ๋ชจ๋ ๋ฒ์ ์ ์ถ๊ฐ๋ ์ ์์ต๋๋ค.
๋ค, ๊ธฐ์ ์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด ์๋๋ผ ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ(๋๋ ๊ทธ๋ ๊ฒ ํ์ง ์๋ ๊ฒ)์ ๊ฒฐ๊ณผ๊ฐ (๊ด๋ฒ์ํ) ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ Microsoft๊ฐ ๊ณ ํต๋ฐ๋ ์ฌ๋์ด ์๋๋ผ ๋ฐ๋ก ์ฐ๋ฆฌ์ ๋๋ค. ์ง๊ธ๊น์ง ๋๋ ๊ทธ๊ฒ์ ๋ํด ์ฝ๊ฐ์ ๋ฌด๊ด์ฌ์ ๋ณด์์ต๋๋ค. ์๋ก์ด ํ๋ ์์ํฌ์์ ์์ ํ๋ ๊ฒ์ ๋ชจ๋ ๋ฉ์ง๊ณ ์ ๋๋ ์ผ์ด์ง๋ง ์๋ก์ด ์ฒญ์ค์ ์ํ ํด๋ฆฐ๋ฃธ์์ ๊ฐ๋ฐ๋์ง ์์์ต๋๋ค. ๋ฐ๋๋ก ๋ฐฐ์ธ ์ญ์ฌ๊ฐ ์๋ ๊ฒ๋ ์๋๋๋ค.
๋ฌธ์ ๋ ์์ง๋ง ์ํํธ์จ์ด๊ฐ ์๋ํ๋ ๋ฐฉ์์ ๋๋ค.
๋ณด๋ผ, ์ด๊ฒ์ ๋ด๊ฐ ์์์ ์๋ฏธํ๋ ๋ฐ์ด๋ค: ๋น์ ์ ๋น์ ์ ๊ฒฐ์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฃจ์ด์ผ ํ๋ ์ฌ๋์ด ์๋๋ค, ๋๋ ํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ ์ด๋ฏธ ๋น์ ์ ์ ์์๋ค์ด ๋น์ทํ ๊ฒฐ์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฃจ์๊ธฐ ๋๋ฌธ์ ๋น์ ์ด ๊ฐ์ ์ค์๋ฅผ ํ์ง ์๋๋ก ์ฃผ์๋ฅผ ์ฃผ์์ต๋๋ค.
์ ๋ ์ํํธ์จ์ด๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์๊ณ ์์ต๋๋ค. ์ ๋ ์ด์ 21๋ ๋๊ฒ ์ ๋ฌธ ์ํํธ์จ์ด ๊ฐ๋ฐ์๋ก ์ผํด ์์ต๋๋ค. ๋๋ ์ด๋ณด์๊ฐ ์๋๋ผ ์ด ํน์ ๋ถ์ผ์์ ๋จ๋ จ๋ ์ ๋ฌธ๊ฐ๋ก์ ์์งํ ์กฐ์ธ์ ํ์ต๋๋ค. ๋น์ ์ ๊ทธ๊ฒ์ผ๋ก ๋น์ ์ด ์ํ๋ ๊ฒ์ ํ ์ ์์ต๋๋ค. ๋๋ ๋น์ ์ด ์ฌ๊ธฐ์์ ๊ฐ๋ณ๊ฒ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ธฐ ์ ์ ๋ ๋ฒ ์๊ฐํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ ๋งค์ฐ ๊ด๋ฒ์ํ๊ณ ์ ๊ฐ ๋งํ๋ฏ์ด: ์ฐ๋ฆฌ๋ ๋น์ ์ด ์๋๋ผ ์ด๊ฒ๋ค์ ๋ค๋ฃจ์ด์ผ ํฉ๋๋ค.
์ค์๋ผ๋ ๋์ค์ ๊ณ ์น ์๋ ์์ง๋ง ์์ง ํ์ง ์์ ์ผ์ด๋ ์ ์ด์ ํ์ง ์๋ ๊ฒ์ด ์ข์ง ์์๊น์?
๋น์ ๋ค์ ๊ณผ๋ฏผ ๋ฐ์ํ๊ณ ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ ํจ๊ณผ๊ฐ ์ด์ .NET๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒ์ด๋ผ๊ณ ์์ฌํฉ๋๋ค.
๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ coreclr์ด ๋ฒ๋ค๋ก ์ ๊ณต๋๋ฉด ๋ ๊ฑฐ์๊ฐ ๋งค์ฐ ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ต๋๋ค. asp.net mvc 5์ ๊ธฐ๋ฅ์ด mvc 4 ๋๋ 3์ผ๋ก ๋ฐฑํฌํธ๋์ง ์์ ๊ฒฝ์ฐ ์๋ฌด๋ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. ์ฌ๊ธฐ์์ ๋ ๊ฑฐ์๋ผ๋ ๊ฒ์ ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ง ๊ฒ์ด๋ฉฐ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์ด๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ญ์ฌ๊ฐ ์์ต๋๋ค.
์ข์ ์ ์ @terrajobst ๊ฐ ๋ค์ ๋ฒ์ ์ ์ํด ์ด๋ฅผ ๊ณ ๋ คํ๊ธฐ ์ํด ์ด๋ ค ์์ต๋๋ค.
@nvivo ๋ถ๋ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฐ๊ณผ๋ฅผ _I_ ์ฒ๋ฆฌํ๋ ค๊ณ ํ์ง ๋ง์ญ์์ค. ๋น์ ์ด ์ฒ๋ฆฌํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ง๋ง ์ ๋ ์ฒ๋ฆฌํฉ๋๋ค.
์ ๋ฅผ ์ ์๋ฆฌ์ ์ํ์ฃผ์ @FransBouma ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋ด๊ฐ ๊ทธ ๋ฌธ์ ์ ๋ํด ๋ ผํํ ์ ์๋ค๊ณ ์๊ฐํ ๊ฒ์ ๋ด ์ค์์๋ค. ๋น์ ์ ํ์คํ ์ด๋ค ์ข ๋ฅ์ ๊ฒ๋ค์ด ๋ด ์์ ์ ์ํฅ์ ๋ฏธ์น๋์ง ๋๋ณด๋ค ๋ ์๊ฒฉ์ด ์์ต๋๋ค.
์ฌ์ค ์ ๊ฐ ์ด์๋ฅผ ์คํํ๋๋ฐ๋ ์ ์ ๋ฌด๋ ์ ๊ฐ ์ ๊ฒฝ์ฐ๋ ์ผ์๋ ์ ํ ์ํฅ์ด ์์ต๋๋ค. ๋๋ ์ง๊ตฌ์์์ ๋ชจ๋ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์ด๋ ๋น์ ๊ณผ ๊ฐ์ ๊ฐ๋ํ ๊ฐ๋ฐ์์ ๋ํด ์๊ฐํ๊ณ ์์์ต๋๋ค.
๋๋ ๋น์ ๊ณผ ๊ฐ์ ์ฌ๋๋ค์ด ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ๊ธฐ์ ์์ ์ ๋ง ๊ธฐ์ฉ๋๋ค. _๋น์ ์ด_ ์ฒ๋ฆฌํด์ผ ํ๋ ์ผ๋ง๋ ๋ ์ค์ํ ๋ฌธ์ ๊ฐ ์ผ๋ง๋ ๋ ์ค์ํ ๋ฌธ์ ์ธ์ง ์ฃผ์ ํ์ง ๋ง๊ณ ๊ณ์ํด์ ์ ํฌ์๊ฒ ๋ง์ํด ์ฃผ์ญ์์ค.
@FransBouma ๊ฐ์ฌํฉ๋๋ค.
_ํ์จ_ ๊ทธ๋ฐ ๋ง์ ๋ค ์ด๋์ ํด์? ๋ด๊ฐ ํ๋ ๋ง์ '๊ณผ๋ฏผ ๋ฐ์์ ํ๊ณ ์์ด'๋ก ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ฒ๋ผ ์ ๋ฐ ์ผ์ ๊ฒฝ์ํ์ง ๋ง๋ผ๋ ๊ฒ๋ฟ์ ๋๋ค. ์ ๊ฐ ๊ณผ๋ฏผ ๋ฐ์์ ํ๊ณ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. '๋น์ ์ ๊ทธ๋ค์ ๋ค๋ฃฐ ํ์๊ฐ ์์ต๋๋ค'๋ผ๋ ๋ง์ _me_์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์๋ฏธํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ๋ค์ด ๋ฌด์์ธ์ง ์๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ํ ๊ฒ์ฒ๋ผ ๋ฐ์ํฉ๋๋ค. '๊ณผ๋ฏผ๋ฐ์'์ธ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฌ๋ ๋ฌด์์ด๋ .
์ฌ๊ธฐ ์ ์ฌ๊ธฐ ์ ์ด ๋ฌธ์ ์ ๋ํ ๋ต๋ณ์ด
๊ณต์ ๋ต๋ณ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ธํฐํ์ด์ค๋ .NET Core 1.0์ ์์ ๊ฒ์ด๋ฉฐ ๊ฐ๋ฅ์ฑ์ ์ ์ง๋ง .NET์ ์กด์ฌํ๋ ๊ฒ๊ณผ ๋ค๋ฅธ ํํ๋ก ํฅํ ๋ฆด๋ฆฌ์ค์ ๊ณ ๋ ค๋ ์ ์์ต๋๋ค.
์๋ ์ง๋ฌธ์ด ํด๊ฒฐ๋์์ผ๋ฏ๋ก ์ด ๋ฌธ์ ๋ฅผ ๋ซ์ต๋๋ค.
@nvivo ๊ฐ์ฌํฉ๋๋ค. ํ์ง๋ง ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋ค๊ณ ๊ฒฐ์ ํ ํ ๋ฌธ์ ๋ฅผ ์ค์ค๋ก ์ข ๋ฃํ ์ ์๋ ํ๋ก์ ํธ๋ฅผ ์ค์ ๋ก ์ฑ ์์ง๊ณ ์๋ ์ฌ๋๋ค์๊ฒ ๊ณต์ ๋ต๋ณ์ ๋จ๊ฒจ๋๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
@terrajobst ์ธํฐํ์ด์ค์ ๋ํ ์ ๋ฐ์ดํธ๋ ๊ณต์ ์๋ต/ํ์๋ผ์ธ์ด ์์ต๋๊น? ์์ผ๋ก ์ด ์์ ํญ๋ชฉ์ ์ถ์ ํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ์ ๋ฌธ์ ๋ฅผ ์ด์ด์ผ ํฉ๋๊น, ์๋๋ฉด ์ฌ๊ธฐ์์ ๊ณ์ ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ์๊ฒ ์ต๋๊น?
์ง๊ธ์ ์ด๊ฒ์ ์ด์ด ๋๋๋ก ํฉ์๋ค. ๋ด๊ฐ ๋ณด๊ธฐ์ ๋๋ต์ "์ธํฐํ์ด์ค๋ฅผ ๋ ธ์ถํ์ง ๋ง์"๊ฐ ์๋์์ต๋๋ค. ๋๋ต์ "๋ ธ์ถ ๋ฐฉ๋ฒ์ ์ฐพ์. ๊ทธ๋ฌ๋ DataTable ์ข ์์ฑ์ ๋ํ ์๋ฏธ์ ๋ํด ์๊ฐํด ๋ด ์๋ค."์์ต๋๋ค.
์ฌ๋ฌ๋ถ๊ป ๋๋ฌด ๋ฆ๊ฒ ๋์์์ ์ฃ์กํฉ๋๋ค. ํ ๋ด์์ ๋ค์ํ ์ต์ ์ ๋ ผ์ํ ํ ๋น ํด๋์ค์ DataTable์ด ์๋ ์ธํฐํ์ด์ค๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ด์์ ์ธ ์๋ฃจ์ ์ ์๋์ง๋ง RTM์ ์๊ฐ ํ๋ ์์ ๊ฐ์ํ ๋ ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ฏธ๋์ DataTable/DataSet์ ๋ํด ์คํ ๊ฐ๋ฅํ ์ต์ ์ ์ถ๊ตฌํ ์ ์์ต๋๋ค. v1 RTM์์ System.Data.Common์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ํฉ๋๋ค. SqlClient๋ v1์ ์ํด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ง ์์ต๋๋ค. ํผ๋๋ฐฑ๊ณผ ์ธ๋ด์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ํผ๋๋ฐฑ์ ๋ฐ์ดํฐ ์คํ์ ์คํ ๊ฐ๋ฅํ ์ ํ์ผ๋ก ๋ง๋๋ ํต์ฌ ๋ถ๋ถ์ ๋๋ค.
์ ๋ฐ์ดํธ๋ฅผ ์ํด @YoungGah thx, DataTable ํด๋์ค๊ฐ ๋น ์๋ฆฌ ํ์์๊ฐ ๋ ๊ฒฝ์ฐ SqlClient v1์์ ๊ตฌํํ๋ ๋ฐ ๊ทธ๋ ๊ฒ ๋ง์ ์๊ฐ/๋ ธ๋ ฅ(์ฆ, ๋ณด๋ฅ)์ด ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น?
@mythz ๋น์ฉ์ ๊ธฐ๋ณธ ์ ํ์์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ฑฐ๋ ๊ธฐ์กด ๋ฉ์๋๋ก ์ ๋ฌํ๋ ๋ฐ ์์ต๋๋ค. ๋น์ฉ์ ์ต์ํํด์ผ ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ํฉ์ด ๋ํ๋ฉ๋๋ค.
System.Data.Common์ .Net CoreFX์ ๋ค์ ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
IData๋งค๊ฐ๋ณ์
IDataParameterCollection
IDataReader
IDataRecord
IDb๋ช
๋ น
IDb์ฐ๊ฒฐ
IDbData๋งค๊ฐ๋ณ์
IDbํธ๋์ญ์
์ด๊ฒ์ PR https://github.com/dotnet/corefx/pull/6359 ์์ ์ํ๋์์ต๋๋ค.
@saurabh500 ์ข์ ์ผ์ด๋ค์ , thx!
:+1:
:+1:
์์ฒญ๋; ์ด๊ฒ์ด ๋๊ฒ์ ๋๋ฌํ๊ธฐ ์ํ ์ด์ ํ๊ฐ ์์ต๋๊น? rc3?
2016๋
2์ 25์ผ 02:54 Saurabh Singh [email protected]
์ผ๋ค:
System.Data.Common์ .Net CoreFX์ ๋ค์ ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
IData๋งค๊ฐ๋ณ์
IDataParameterCollection
IDataReader
IDataRecord
IDb๋ช ๋ น
IDb์ฐ๊ฒฐ
IDbData๋งค๊ฐ๋ณ์
IDbํธ๋์ญ์ ์ด๊ฒ์ PR dotnet/corefx#6359 https://github.com/dotnet/corefx/pull/6359 ์์ ์ํ๋์์ต๋๋ค.
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/dotnet/corefx/issues/3480#issuecomment -188577701.
๋ฌธ์ ์ธ์ฌ,
๋งํฌ
PR์ ๋ํด ์ธ๊ธํ๋ฏ์ด ์ด๋ฌํ ์ธํฐํ์ด์ค์ ๋น๋๊ธฐ ๋ฉ์๋๊ฐ ์๋ ์ด์ ๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค. ์ ์๋ ๋๋ก ์ด๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ADO.NET 1.1 ์ธํฐํ์ด์ค์ ์ถ์ ๋ฒ์ ์ด๋ฉฐ ์ด์ ์ฝ๋์์ ํธํ์ฑ๋ง ์๊ฐํด์๋ ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ธํฐํ์ด์ค๋ ado.net์ ํ์ฌ ์ํ์ ์ด์ ์ ๋ง์ถฐ์ผ ํฉ๋๋ค. ๋น๋๊ธฐ ๋ฉ์๋๋ ์ค๋๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ก์ธ์คํ๋ ๊ธฐ๋ณธ ๋ฐฉ๋ฒ์ด์ด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋น๋๊ธฐ ๋ฉ์๋์ ๋ํ ์ค์ ์ง์์ด ์์ผ๋ฉด ์ด๋ฌํ ์ธํฐํ์ด์ค๋ ์ต์ ๊ฐ๋ฐ์ ์ธ๋ชจ๊ฐ ์์ต๋๋ค.
๊ฐ๋ฐ.
๊ทธ๋ฆฌ๊ณ .NET 4.5์ ๋น๋๊ธฐ ๋ฉ์๋๋ฅผ ํฌํจํ๋๋ผ๋ DbTrabsaction.CommitAsync์ ๊ฐ์ ๋ช ๊ฐ์ง ์ถ๊ฐ ๋ฉ์๋๋ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
postgres ๊ณต๊ธ์๋ CommitAsync์ ๊ฐ์ ๋ช ๊ฐ์ง ์ถ๊ฐ ๋ฉ์๋๋ฅผ API์ ์ถ๊ฐํ๋๋ฐ ์ด๋ ๋งค์ฐ ์ ์ฉํ๊ณ ํ์ํฉ๋๋ค.
ํ์ฌ ์ธํฐํ์ด์ค๋ ๊ทธ๋๋ก์ ๋๋ค. ๊ทธ๊ฒ๋ค์ ๋ฐ๊พธ๋ ๊ฒ์ ์๋ฏธ๋ ๋๋ฌด ํฝ๋๋ค.
๋น๋๊ธฐ์ ๋ชจ๋ธ์ ๋๊ธฐ์ ๋ชจ๋ธ๊ณผ ์๋นํ ๋ค๋ฅด๋ฉฐ ์์๋ค์ํผ ๋น๋๊ธฐ์ ๋ชจ๋ธ์ ์ ํํ๋ ค๋ฉด ๋๊น์ง ์ํํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ API์ ๋ํด ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค. ๋น๋๊ธฐ API์ ๋ํ ์ ํญ๋ชฉ์ ๋ง๋ญ๋๋ค.
.NET ํ์ด ๋ณด๋ค ํ๋์ ์ธ API๋ฅผ ์ ๊ณตํ๋ ค๋ ๊ฒฝ์ฐ ADO.NET์ด๋ผ๊ณ ํ์ง ์๋ ์ API๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ด๋ป๊ฒ ์ต๋๊น? ๋ฐฉํด๋ฐ์ ์ ์ฐ์ด ์๊ณ ์ปค๋ฎค๋ํฐ์ ๋ถ๋ง์ด ์์ต๋๋ค. dnx๊ฐ ๋ฐฐํฌ๋๋ ๋ฐฉ์๊ณผ๋ ์ ๋ง์ต๋๋ค. ์ฆ, ๋ ๋ฆฝ ํจํค์ง.
:+1: ์ธํฐํ์ด์ค์์ ์ข์ ์ ์ถฉ์.
๋๋ ์์ด๋์ด๊ฐ ๋จ์ง ์ค๋๋ ์ฝ๋์์ ํธํ์ฑ์ด์ด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์ด๊ฒ์ด _์ ์ฒด_ ์์ด๋์ด์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ํด๋์ค๊ฐ ์ข์ต๋๋ค. ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ํผํ๊ณ ์ถ์ ๋ง์ ์ด์ ๊ณ ํต์ ๋๋ค.
๋น๋๊ธฐ ๋ฉ์๋์ ๋ํ ์ค์ ์ง์์ด ์์ผ๋ฉด ์ด๋ฌํ ์ธํฐํ์ด์ค๋ ํ๋ ๊ฐ๋ฐ์ ์ธ๋ชจ๊ฐ ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ ๋์ํ์ง ์์ง๋ง ์ธํฐํ์ด์ค์ ๋น๋๊ธฐ ๋ฒ์ (์ค๋๋ ์๋ฌด๋ ๊ตฌํํ์ง ์์)์ ๋์ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ์๋ก์ด ๊ธฐ๋ฅ์ผ ๊ฒ์
๋๋ค. ๊ธฐ์กด ์ธํฐํ์ด์ค์ ๋ฉค๋ฒ๋ฅผ ์๊ธํด์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค. ๋๋ฌด ๋ง์ ๋ถ๋ถ์ ๊นจ๋จ๋ฆด ๋ฟ์
๋๋ค. IDbReaderAsync
๋๋ ๋ฌด์ธ๊ฐ๋ฅผ ๊ฐ๋ ๊ฒ์ ๋ฏธ์น IMO๊ฐ ์๋์ง๋ง ๋ค๋ฅธ ํ ๋ก ์
๋๋ค.
๊ธฐ๋ณธ ๊ตฌํ์ด ๋๊ธฐํ ๋ํผ์ธ ๊ฒฝ์ฐ async
๋ฉ์๋๊ฐ ๊ธฐ๋ณธ ํด๋์ค์ _not_ ์์ด์ผ ํ๋ค๊ณ ๊ฐ๋ ฅํ๊ฒ ๋ฏฟ์ต๋๋ค. ์ด๋ ์ค์ ๋ก ๋์๊ณ ๋ญ๋น์
๋๋ค. ๊ฑฐ๊ธฐ์ ๋ค๋ฅธ ์ ์์ด ์๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ์ญ์์ค. ๊ทธ๋ฌ๋ ๋ค์: ๊ทธ๊ฒ์ ์ด์จ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋์ด์ผ ํฉ๋๋ค.
์ข์, ์ด์ฉ๋ฉด ๋ด๊ฐ ์ฌ๊ธฐ์์ ๋๋ฅผ ์๋ชป ํํํ๊ฑฐ๋ ๋ด ๋ง์ ๋๋ฌด ๊ฐํ์ต๋๋ค.
ํ์ํ ๊ฒฝ์ฐ ๋น๋๊ธฐ๋ฅผ ์ํ ์ถ๊ฐ ์ธํฐํ์ด์ค๋ฅผ ์ ํธํฉ๋๋ค. ๋ด๊ฐ ๊ด์ฐฎ์ง ์์ ๊ฒ์ ADO.NET์ ๋ํ ๊ณต์ ๊ณ์ฝ (์ธํฐํ์ด์ค๊ฐ ๋ฌด์์ธ์ง)์ ์ ์ํ์ง๋ง ๊ทธ ์ด๋์๋ ๋น๋๊ธฐ ๋ฉ์๋๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋น๋๊ธฐ ๋ฉ์๋์ ๋ํ ๋์ฒด ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ๊ตฌํ์ด ๋๊ธฐํ ๋ํผ์ธ ๊ฒฝ์ฐ ๋น๋๊ธฐ ๋ฉ์๋๊ฐ ๊ธฐ๋ณธ ํด๋์ค์ ์์ด์ผ ํ๋ค๊ณ ๊ฐ๋ ฅํ๊ฒ ์๊ฐํฉ๋๋ค. ์ด๋ ์ค์ ๋ก ๋์๊ณ ๋ญ๋น์ ๋๋ค.
๋์ํฉ๋๋ค. ์ด๊ฒ์ด ๋๋ถ๋ถ์ ๊ณต๊ธ์๊ฐ ์ค์ ๋น๋๊ธฐ API๋ฅผ ๊ตฌํํ์ง ์๋ ์ฃผ๋ ์ด์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ๋ณธ ํด๋์ค๊ฐ 2.0 ์ดํ ๊ณต๊ธ์๋ฅผ ์ํ ์ค์ API์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋ณ๊ฒฝํ๋ฉด ํจ์ฌ ๋ ๋ง์ ์ฝ๋๊ฐ ์ค๋จ๋๊ณ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ๋ ธ์ด์ฆ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
1.1 ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒ์ ์ง๋ ๋ช ๋ ๋์ ์์ฑ๋ ๋ชจ๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ๊ณผ ๋น๊ตํ์ฌ ๊ฑฐ์ ์ํฅ์ ๋ฏธ์น์ง ์์ผ๋ฉฐ, ์ด๋ ์ฌ์์ด ๋ ๊ฒ์ ๋๋ค. ํํ์ ๋ ๋ค ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ค๋ ์์ฑ๋ ๋ชจ๋ ์ฝ๋๋ ๋น๋๊ธฐ API๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก ์ด๋ฅผ ์๋ตํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
์ค๋ ์์ฑ๋ ๋ชจ๋ ์ฝ๋๋ ๋น๋๊ธฐ API๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋๋ฌด ๊ฐํนํ๊ฒ ์์ฒ๋ฅผ ์ฃผ๊ณ ์ถ์ง๋ ์์ง๋ง, ๊ทธ ์ด์์ธ๊ณ๋ ํ์ค๊ณผ ๋๋ฌด ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ๋ค. ๋น๋๊ธฐ๋ ๋งค์ฐ ๋ง์ฐํ๊ณ ์ ์ผ์ฑ์ด ์์ต๋๋ค. ๋จ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋น๋๊ธฐ API์๋ง ์์กดํ ์ ์์ผ๋ฉฐ ๋ณ๋์ค๋ฝ๊ฒ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋น๋๊ธฐ ์๋น์๊ฐ ๋ ๊ฒ์ผ๋ก ๊ธฐ๋ํ ์ ์์ต๋๋ค(์ฝ๋์ _ton_๋ ๋น๋๊ธฐ๋ก ๋ณ๊ฒฝ). ๋๊ธฐํ -> ๋ชจ๋ ๊ณณ์์ ๋น๋๊ธฐ๋ ๊ต์ฐฉ ์ํ ๋ฐ ํจ์จ์ฑ ์ด์ ๋ก ์ธํด ๋งค์ฐ ๋์ฉ๋๋ค. ์์ผ๋ก ๋ช ๋ ๋์ ๋๊ธฐ์ ์ฝ๋๊ฐ ์์ฑ๋ ๊ฒ์ ๋๋ค.
๋ API ์์ต๋๋ค . ์์ ์ ํ์ฌ์ ๊ฒ์ ์ ๊ฑฐํ๊ฑฐ๋ ๊ฐ์์ ์์ง ์ค๊ณ๋์ง ์์ ์๋ก์ด ์ธํธ๋ฅผ ์ํด ์กด์ฌ๋ฅผ ๋ฏธ๋ฃจ์ง ๋ง์๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋ ๋ฒ์งธ/์ ๊ท ์ธํธ์ ๋ํด ๋ ๋ฆฝ์ ์ผ๋ก ๊ฑฑ์ ํ ์ ์์ต๋๋ค.
1.1 ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๋ฉด ์ง๋ ๋ช ๋ ๋์ ์์ฑ๋ ๋ชจ๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ๊ณผ ๋น๊ตํ์ฌ ๊ฑฐ์ ์ํฅ์ด ์์ต๋๋ค.
๋ฌด์์ ๋งํ๋ ๊ฒ์ ๋๊น? ๊ทธ๋ฌํ ์ฝ๋๊ฐ ์กด์ฌํ๊ธฐ ์ํ ๋น๋๊ธฐ API๋ ์์์ต๋๋ค. ์ด๋ฌํ API์ ์์กดํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ํด๋์ค๋ ์ธํฐํ์ด์ค๊ฐ ์๋๋ผ ๊ณต๊ธ์์ ์ง์ ์์กดํฉ๋๋ค. ์ด์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
์ค๋ ์์ฑ๋ ๋ชจ๋ ์ฝ๋๋ ๋น๋๊ธฐ API๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก ์ด๋ฅผ ์๋ตํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ ๋ชจ๋๊ฐ ์์(ํนํ ์๊ฐ)์ ์ํด ์ ์ฝ์ ๋ฐ๋๋ค๋ ์ฌ์ค์ ์ ์ธํ๊ณ ๋ ๋ง์ ๊ฒ์ ์๋ตํ๋ ๊ฒ์ ์ด์น์ ๋ง์ง ์์ต๋๋ค. ๋๋ ๋๊ตฐ๊ฐ๊ฐ _์๊ตฌ์ ์ผ๋ก_ ์๋ฌด๊ฒ๋ ๋จ๊ธฐ์ง ์์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ํ ์ด๋ธ์ ์๋ฌด๊ฒ๋ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋จ์ํ ์์ง ๋๋ฌํ์ง ์์์ต๋๋ค. ๋๋ ํนํ ๋ฏธ๋ ์ธ๋๋ฅผ ์ํ ๋น๋๊ธฐ ์ธํฐํ์ด์ค์ ๋ํ ์ฌ์์ ์์ํ๊ธฐ ์ํ ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ์ด โโ๊ฒ์ ๋๋ค.
๋ฌด์์ ๋งํ๋ ๊ฒ์ ๋๊น? ๊ทธ๋ฌํ ์ฝ๋๊ฐ ์กด์ฌํ๊ธฐ ์ํ ๋น๋๊ธฐ API๋ ์์์ต๋๋ค. ์ด๋ฌํ API์ ์์กดํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ํด๋์ค๋ ์ธํฐํ์ด์ค๊ฐ ์๋๋ผ ๊ณต๊ธ์์ ์ง์ ์์กดํฉ๋๋ค. ์ด์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
.NET 4.5๋ ๊ณต๊ธ์ ๊ธฐ๋ณธ ํด๋์ค์ ๋น๋๊ธฐ ๋ฉ์๋๋ฅผ ๋์ ํ์ต๋๋ค. ์ด๊ฒ์ ๊ฑฐ์ 4๋ ์ ์ธ 2012๋ ์ด์์ผ๋ฏ๋ก ํ๋์ ADO.NET ๊ณต๊ธ์ API์ ์ผ๋ถ์์ต๋๋ค. Entity Framework 6(2013๋ ์ถ์)์ ๋ชจ๋ ๊ณต๊ธ์์ ๋ํด ์ด ๋น๋๊ธฐ API์ ์์กดํฉ๋๋ค.
๋น๋๊ธฐ ๋ฉ์๋๋ .NET Core์ ํฌํจ๋์ง ์์ ๊ฒฝ์ฐ ๋ง์ ์ฌ๋๋ค์ด ๋น๋ช ์ ์ง๋ฅด๊ธฐ์ ์ถฉ๋ถํ ์๊ฐ ๋์ ์ด๋ฏธ ADO.NET์ ์ผ๋ถ์ ๋๋ค. ADO.NET์์ ๋น๋๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ _๋ ๊ฑฐ์ ์ฝ๋_๊ฐ ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ๋ค์ด ADO.NET์ _์ด๋ฏธ_ ์ผ๋ถ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์๋ก์ด ์ธํฐํ์ด์ค API์๋ ์กด์ฌํด์ผ ํ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค.
์ฌ๋๋ค์ด ๋น๋๊ธฐ API๋ฅผ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๊ณ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด ์ด๋ฏธ ํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ์ ํ์ ์ฌ์ฉํ์ฌ _์ด ๋ณ๊ฒฝ ์ ์_. ๊ฒฐ๊ตญ ์์ฒญ์
์ธํฐํ์ด์ค๋ฅผ ์ง์ํ๋ ๊ฒ์ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค.
์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ฉด _์์ ํ ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค_.
์ฆ, ์ค์ ๋ก๋ _ํ์ฅ ๋ฐฉ๋ฒ_์ผ๋ก ๊ฑฐ์ ๊ฐ๋ฅํฉ๋๋ค.
์ถ์ ๊ธฐ๋ณธ ์ ํ์ ๋ํ ์ ํ ๊ฒ์ฌ, ํ์ง๋ง... ๊ฝค ์ถํ๊ณ ๊ทธ๋ ์ง ์์ต๋๋ค.
๊ณ ํต IMO์ ๊ฐ์น.
๊ทธ๋์; ์งง์ ๋ฒ์ : ๊ฐ์ธ์ ์ผ๋ก async๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ธํฐํ์ด์ค๋ ์ฐ๋ฆฌ๊ฐ ์ฒ์์ ์ํ๋ ๊ฒ์ ํ๊ดดํ๊ธฐ ๋๋ฌธ์
์ฅ์. ๋น๋๊ธฐ๋ฅผ ์ํ๋ฉด ๊ธฐ๋ณธ ํด๋์ค์ ๋ํด ์ฝ๋ฉํ๊ฑฐ๋ ๋ค์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ด๋ฌํ ์ธ๋ถ ์ฌํญ์ ์ค๋ช
ํ๋ ๋๊ตฌ์
๋๋ค.
๋๋ ๊ทธ๋ค์ด ์ด๋ฏธ ADO.NET์ ์ผ๋ถ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์๋ก์ด ์ธํฐํ์ด์ค API์๋ ์์ด์ผ ํ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค.
๊ธฐ์กด ์ฝ๋์์ ํธํ์ฑ์ ์ ์งํ๊ธฐ ์ํ ์ด๋ฌํ ADO.NET ์ธํฐํ์ด์ค์ ๋ชฉ์ ์ ์์ ํ ์คํดํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ _new_ ์ธํฐํ์ด์ค๊ฐ ์๋๋ผ _existing_ ์ธํฐํ์ด์ค์ ๋๋ค. ์ต์ API์ ์ก์ธ์คํ๋ ค๋ฉด ๊ตฌ์ฒด์ ์ธ ๊ธฐ๋ณธ ์ ํ์ ์ฐธ์กฐํ์ญ์์ค.
@nvivo ์ฃ์กํฉ๋๋ค. ์ ๋ ๋น์ ์ *Async
๋ฉ์๋๊ฐ ๋ชจ๋ ์์ต๋๋ค. ๋๋ฝ๋ ํน์ ํญ๋ชฉ์ด ์์ต๋๊น? ์ธํฐํ์ด์ค์ ๋ฒ๋ค๋ก ํฌํจ๋์ด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌผ๋ก ์
๋๋ค. ํ์ง๋ง ๊ทธ๊ฑด ๋ ๋ค๋ฅธ ๋ฌธ์ ์ด๋ฏ๋ก ์ด์ด ๋ณด๊ธธ ๊ถํฉ๋๋ค.
ํ์ฌ ์ ๊ทผ ๋ฐฉ์(๋๊ธฐํ๋ณด๋ค ๋น๋๊ธฐํ)์ด ์๋ํ๋๋ก ํ๋ ๋ฐ ํ์ํ ๊ธฐ๋ณธ ๊ตฌํ์ด ์ ์ฒด ์ ๊ทผ ๋ฐฉ์์ด ์๋ํ๋๋ก ํ๋ ๋์ฐํ ์ ์ถฉ์์ด๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ ์ธํฐํ์ด์ค์์ผ๋ฉด ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๋ํ ๊ทธ๊ฒ์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ง ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค๋ก ์ด๋ํ๊ฑฐ๋ ์ค๋จ์ ์ต์ํํ๊ธฐ ์ํด ์กด์ฌํฉ๋๋ค(ํ์ฌ์ ๊ฒฝ์ฐ์ ๊ฐ์ด).
์, ์ฌ๊ธฐ์์ ์ฐ๋ฆฌ๊ฐ ์์ ๊ทธ๋ฆฌ๋ฉฐ ๊ฐ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์ ์ ์ธ๊ธํ์ง๋ง ์ฝ๋ ์ด์์ ๋๊ธฐ ์ํด ์ธํฐํ์ด์ค๋ฅผ _just_ ์ถ๊ฐํด์๋ ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ํธํ์ฑ ๊ด์ ์์ ๊ธฐ๋ณธ ํด๋์ค๋ 2005๋ ๋ถํฐ ADO.NET์ ๊ณต์ API์์ผ๋ฉฐ ๊ณต๊ธ์๊ฐ ๊ตฌํํ๋ ๊ฒ์ ๋๋ค. IDbCommand ๋๋ IDbConnection์ ์ฌ์ฉํ๋ ๋ชจ๋ ๊ฒ์ ๊ฒ์/๋ฐ๊พธ๊ธฐ์ ํจ๊ป ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋๋ก ์ฝ๊ฒ ์ด์๋ ์ ์๊ณ (์ด์ ์ ์ด์๋์ด์ผ ํจ) ๋จ์ ์ด ์์ต๋๋ค.
๋๋ ๋น์ ์ด ifdef์ ํฌ์ด ์๋๋ผ๋ ๊ฒ์ ์๊ณ ์์ง๋ง, ์๋ก์ด ํ๋ซํผ์ ๋ํด ์ด๊ฒ์ ์ง์ํ๋ ๊ฒ์ ์ด์จ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ผ๋ถ์ผ ๋ฟ์ ๋๋ค.
๋๋ ์ด๊ฒ์ด ํญ์ ์ธํฐํ์ด์ค์ฌ์ผ ํ๋ค๋ ๋ฐ ๋์ํ์ง๋ง ๊ทธ๋ ์ง ์์๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๊ฐ ๋ฐ๋ณต๋์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ธํฐํ์ด์ค๊ฐ ์ถ๊ฐ๋๋ค๋ฉด ์ ์ด๋ 10๋ ์ ์ API๊ฐ ์๋๋ผ ํ์ฌ์ API๋ฅผ ๋ํ๋ด์ผ ํฉ๋๋ค. ๋น๋๊ธฐ ๋ฉ์๋๋ ํ์ฌ API์ ํ์์ ์ธ ๋ถ๋ถ์ด๋ฉฐ Microsoft๊ฐ ๊ฝค ์ค๋ ์๊ฐ ๋์ ์์ง์ด๊ณ ์๋ ๋ฐฉํฅ์ ๋๋ค. ๊ทธ๊ฒ์ ์ฌ์ ํ โโ์์ค ํธํ์ด ๊ฐ๋ฅํ๋ฉฐ ๋ ์๋ฒฝํฉ๋๋ค.
@mgravell
์ฌ๋๋ค์ด ๋น๋๊ธฐ API๋ฅผ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๊ณ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์ ํ์ ์ฌ์ฉํ์ฌ _์ด ๋ณ๊ฒฝ ์ด์ ์_ ์ด๋ฏธ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ์๋ฌด ๊ฒ๋ ํ ์ ์๋ค๋ ๊ฒ์ด ์๋๋๋ค. ๊ทธ๊ฒ์ ๊ฑด์ถ์ ๊ดํ ๊ฒ์ ๋๋ค. ์ธํฐํ์ด์ค๋ ๊ณ์ฝ์ด๋ฉฐ .NET Core๋ ์ด ๊ณ์ฝ์ API์ ์ฌ์ค๊ณ๋ ๋ฒ์ ์ ์ถ๊ฐํ๋ ์๋ก์ด ํ๋ ์์ํฌ์ ๋๋ค.
.NET Core๋ ์ ๋ง ์ค๋๋ ์ฝ๋๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๋ฐ ๋์์ ์ฃผ๊ธฐ ์ํด ์ API์ ๊ณต์ ๊ณ์ฝ์ ์ถ๊ฐํด์๋ ์ ๋๋ฉฐ, ๋ค๋ฅธ ๋๋ถ๋ถ์ ์ด์จ๋ ๋๋ฝ๋ฉ๋๋ค. ๊ทธ๊ฒ์ด ์ฐ๋ ค๋๋ ๊ฒฝ์ฐ ์ฌ๋๋ค์ ์ด์จ๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ์ด์ ๋ฅผ ์ถฉ๋ถํ ์ฐพ์ง ์์ต๋๋ค.
๊ทธ๊ฒ์ด ํ์ด ํ๊ณ ์๋ ์ ๋ถ๋ผ๋ฉด, ๊ทธ๊ฒ๋ณด๋ค๋ OK.. ๊ทธ๊ฒ์ ๋จ์ง ๋์ ์ ํ IMO์ ๋๋ค.
IDbCommand ๋๋ IDbConnection์ ์ฌ์ฉํ๋ ๋ชจ๋ ๊ฒ์ ๊ฒ์/๋ฐ๊พธ๊ธฐ์ ํจ๊ป ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋๋ก ์ฝ๊ฒ ์ด์๋ ์ ์๊ณ (์ด์ ์ ์ด์๋์ด์ผ ํจ) ๋จ์ ์ด ์์ต๋๋ค.
๊ฑฐ์ง. ์ด ๋ฌธ์ ๋ ์ด์ ์ํฅ์ ๋ฐ์ ์ง์ ์ ์ธ ๊ฒฝํ์ ๊ฐ์ง ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์๊ฐ ์ด ์ค๋ ๋์์ ์ฌ๋ฌ ๋ฒ ๋ ผ์ํ์ต๋๋ค.
๋๋ ๋น์ ์ด ifdef์ ํฌ์ด ์๋๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
์ต์ข ๊ณ ๊ฐ์ด ifdef๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๋ชจ๋ ์๋ฃจ์ ์ ๊ฐ๋ฐ ๊ฒฝํ์ด ๋ถ์กฑํ๊ณ ์์์ด ์๋ ๊ฒ์ ๋๋ค. ์ฆ, ๋์์ด ์์ ๋ ๊ณ ๊ฐ์ด ์ฝ๋๋ฅผ #defs๋ก ์ด์ง๋ฝํ๋๋ก ์๊ตฌํ๋ ์ฑ๊ณต์ ์ธ ์ ํ์ ๊ฒฐ์ฝ ์์ ๊ฒ์ ๋๋ค.
์ธํฐํ์ด์ค๊ฐ ์ถ๊ฐ๋๋ ๊ฒฝ์ฐ ์ต์ํ ํ์ฌ API๋ฅผ ๋ํ๋ด์ผ ํฉ๋๋ค.
์ด๊ฒ์ ์๋ก์ด ์ธํฐํ์ด์ค๊ฐ ์๋๋ผ ๋ณต์๋ ์ธํฐํ์ด์ค์ ๋๋ค. ํ์ฌ ๋ฐ ๋ฏธ๋ API๋ ์ด๋ฌํ ์ธํฐํ์ด์ค๊ฐ ์๋๋ผ ๊ธฐ๋ณธ ํด๋์ค์ ๋๋ค. ์ฌ๊ธฐ์๋ ๋ฌธ์ ๊ฐ ์์ด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์ธํฐํ์ด์ค๊ฐ ์๋ค๋ ์ฌ์ค์ ์๊ณ ์ด๋ฌํ ์ธํฐํ์ด์ค๊ฐ ๋ณต์๋๊ธฐ ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ธฐ๋ณธ ์ ํ์ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ ์ด์ ์ด ์ค๋ ๋์ ์ถ๊ฐ๋๋ ์ ๊ฐ์ด ์์ต๋๋ค. ๊ธฐ์กด ADO.NET ์ธํฐํ์ด์ค๊ฐ ๋ณต์๋์ด ์ด ์ค๋ ๋๋ฅผ ์ค๋จํ ์ ์์ต๋๋ค. ์ด ์ค๋ ๋์์ ํ์ํ ๊ฒ์ ๊ธฐ์กด ์ธํฐํ์ด์ค์ ๊ด๋ จ๋ DataTable
๋ฐ GetSchemaTable()
๋ํ ์
๋ฐ์ดํธ๋ฟ์
๋๋ค. ์ํคํ
์ฒ ๋ณ๊ฒฝ์ ์ ์ํ๊ฑฐ๋ ์ ์ธํฐํ์ด์ค๋ฅผ ์นํธํ๋ ค๋ฉด ์ด ๋ชฉ๋ก์ ์๋ ๋ชจ๋ ์ฌ๋์ด ์คํธ์ ๋ฐ์ง ์๋๋ก ํ๋ ์ ๋ฌธ์ ๋ฅผ ์ฝ๋๋ค.
@mythz ๋์ํ์ง ์๋ ๋ฐ ๋์ํฉ์๋ค.
๋ค๋ฅธ ORM ๊ฐ๋ฐ์๋ก ๋ด 2์ผํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ธํฐํ์ด์ค๊ฐ ์ง์ํ์ง ์๋ ์ถ์ ํด๋์ค๋ ํญ์ ์ฝ๋ ๋์๊ฐ ๋ฉ๋๋ค. ์ต์ ์๊ตฌ ์ฌํญ ์ธํฐํ์ด์ค API๋ก ์ค๋ฒ๋ก๋๋ ์ถ์ ํด๋์ค ๋ฐ ๋ฉ์๋ ์๋ช ๊ณผ ์ผ์นํ๋๋ก ์ ๊ณต๋๋ ์ ์ธํฐํ์ด์ค๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค.
๋ฐ์ธ์ ๋ํด ์ปค๋ฎค๋ํฐ์ ์์ง์๊ฐ๋ฝ์ ์น์ผ๋ญ๋๋ค.
์ถ์ ํด๋์ค๋ ์ธํฐํ์ด์ค๊ฐ ์ง์ํ์ง ์์ ๋ ํญ์ ์ฝ๋ ๋์์ ๋๋ค.
@psibernetic ๊ทธ ์ง์ ์ ์ดํดํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๊น? ์ฝ๋ ๋์๋ ์ด๋ป์ต๋๊น?
@psibernetic
์ธํฐํ์ด์ค์ ์ถ์ ํด๋์ค๋ ์ฐ๋ฆฌ์๊ฒ ๊ณ์ฝ์ ์ ๊ณตํ๊ณ , ๋ ๋ค API์ ๋ํ ์ถ์ํ์ ์ข์ ์ ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ธํฐํ์ด์ค๋ ๋ ์ด์์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์๊ฑฐ๋ ๋ค๋ฅธ ๊ธฐ๋ณธ ํด๋์ค์ ํ์ ํด๋์ค์ธ ํด๋์ค๋ฅผ ๊ตฌํํ ๋ ๊ฐ์ฅ ์ ์ฉํฉ๋๋ค(์ด๊ฒ์ด ๊ธฐ๋ณธ ํด๋์ค์ ๋งค์ฐ ํฐ ์ฅ์ ์ด๋ผ๊ณ ๊ฐ์ ). ์ด ๊ฒฝ์ฐ ํนํ ํน์ ๊ณต๊ธ์์ ๋ํ Connection, Command ๋ฑ์ ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ ์ถ์ API ์ ์์ ๊ฐ๋ ฅํ IS A ๊ด๊ณ๋ฅผ ๊ฐ์ต๋๋ค. ์ผ๋ถ ๊ฐ๋ฐ์๊ฐ ํ์ ํด๋์ค์ IDbConnection ๋๋ IConnection์ ๋ํ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ์ถ๊ฐํด์ผ ํ๋ ์๋๋ฆฌ์ค๋ฅผ ์์ํ ์ ์์ต๋๋ค. ๊ฑฐ์ ์ ์ผํ ์๋๋ฆฌ์ค๋ ์ถ์ ํด๋์ค์ ๋ํด์๋ง ํ์๋๋ ์ ํด๋์ค๊ฐ ๋ ๊ฒ์ด๋ฉฐ ์ธํฐํ์ด์ค์์ ๋์ผํ ์ ์๋ฅผ "๋ณต์ "ํ๋ ๊ฒ์ API ๋์์ด๋์๊ฒ ๋ ๋ง์ ์์ (๋ถํ์ํ)์ ๋๋ค.
๋ ๊ฐ์ ๋์ผํ ์ถ์ํ๋ฅผ ๊ฐ๋ ๊ตฌ์ฒด์ ์ด๊ณ ๊ตฌ์ฒด์ ์ธ ์ด์ ์ด๋ ์๋๋ฆฌ์ค๊ฐ ์์ต๋๊น? ์ธํฐํ์ด์ค๊ฐ ์ด ํน์ API ๋์์ธ์์ ์ถ์ ํด๋์ค์ ๋นํด ์ค์ฉ์ ์ด๊ณ ์ค์ง์ ์ธ ์ด์ ์ ์ ๊ณตํ ๋?
์ธํฐํ์ด์ค์ ๋ํด ์๊ฐํ ์ ์๋ ์ ์ผํ ์ด์ ์ ์ด๋ฌํ ์ธํฐํ์ด์ค์ ์์กดํ๋ ์ค์ ์คํ ์ฝ๋๋ฅผ ๋ ์ค๋จํ๊ธฐ ์ํด ์ด์ ์ธํฐํ์ด์ค์ ํ์ํ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๋๋ค. ์ด์ ์ธํฐํ์ด์ค๊ฐ ์์๋ค๋ฉด ์ถ์ ํด๋์ค๋ก ์ถฉ๋ถํ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค.
@eocampo ์ถ์ ํด๋์ค๊ฐ ์๋ง๋ "์ถฉ๋ถํ ์ข์" ์ถ์ํ ๋ฐ ๊ณ์ฝ์ ์ ๊ณตํ๋ค๋ ๋ง์ด ๋ง์ต๋๋ค. ์ ๋ ํญ์ IAsyncCommand ๋ฑ๊ณผ ๊ฐ์ด ์ํํ ์ ์๋ ์์ ์ ๋ํ๋ด๋ ๋งค์ฐ ์ข์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ค๊ณ ๋ ธ๋ ฅํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋์ฐํ NotSupportedExceptions ๋๋ NotImplementedExceptions์ ๊ฐ๋ฅ์ฑ์ด ์ ์ ํ๋ ์์ํฌ์ ๋์์ธ ํ์์ ๊ณ ๋ ค๋์ง ์์์ ์ ์๋ ๋ฐฉ์์ผ๋ก ๋ด ํ๋ ์์ํฌ๋ฅผ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
@davkean ์ฝ๋ ๋์๋ ์ ๋ถ๋ ์๋์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๊ตฌํ์๊ฐ ๊ด๋ จ์ด ์์ ์ ์๋ ์ ์ฒด ๊ธฐ๋ณธ ๊ธฐ๋ฅ ์ธํธ๋ฅผ ๊ตฌํํ๊ฑฐ๋ ์์ํ๋๋ก ์๊ตฌํ๋ค๋ ๊ฒ์ ๋๋ค. ์บ์๋ ๋ฉ๋ชจ๋ฆฌ์์ ๋์ ์ฝ๋ IDataReader ๊ตฌํ์ ๋ณธ ๊ธฐ์ต์ด ์์ต๋๋ค. DbDataReader ์ถ์ ํด๋์ค๊ฐ ์ด๋ฅผ ํ์ฉํ๋์ง ํ์คํ์ง ์์ง๋ง ์ด๋ฆ์ ์๋์ค๋ฅผ ์๋ฏธํฉ๋๋ค.
dot net์์ ์ฃผ๋ก ๋ฐ๋ฅด๋ ๋ชจ๋ฒ ์ฌ๋ก ๋ชจ๋ธ์ ์ธํฐํ์ด์ค๋ฅผ ๋ ธ์ถํ๊ณ ๊ธฐ๋ณธ ํด๋์ค์์ ์์ํ์ง ์์ต๋๊น?
dot net์์ ์ฃผ๋ก ๋ฐ๋ฅด๋ ๋ชจ๋ฒ ์ฌ๋ก ๋ชจ๋ธ์ ์ธํฐํ์ด์ค๋ฅผ ๋ ธ์ถํ๊ณ ๊ธฐ๋ณธ ํด๋์ค์์ ์์ํ์ง ์์ต๋๊น?
@psibernetic ํญ์ ๊ทธ๋ฐ ๊ฒ์ ์๋๋๋ค. ์๋ฅผ ๋ค์ด MSDN ์ฌ์ดํธ์ ์ด ๊ถ์ฅ ์ฌํญ ์ 10๋ ์ด ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ง์นจ์ ์ ์ด๋ .Net Framework 2.0์์ ๋งค์ฐ ์ผ๋ฐ์ ์ ๋๋ค.
๋ํ ์ด๊ฒ์ ์ด๊ธฐ๋ถํฐ .Net์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์์ธ ์ง์นจ์ ๋ํ ์ข์ ์ฐธ์กฐ์ ๋๋ค.
http://www.amazon.com/Framework-Design-Guidelines-Conventions-Libraries/dp/0321545613
์ด์จ๋ ๋๋ ์ฌ๊ธฐ์์ ์ด๋ ค์ด ํ ๋ก ์ด ์ง๊ธ ๋ ๊ฐ์ง ์ฃผ์ ์ ๊ดํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
a) ์ธํฐํ์ด์ค๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ํ ๊ฒ์ผ ๋ฟ์ด๋ฉฐ ๋ ๊นจ๋ํ ์ธํฐํ์ด์ค์ API ๋์์ธ์ ํ์ฉํ๊ธฐ ์ํด "์ฒ์๋ถํฐ ์์"(์ฝ๋ ๊นจ๊ธฐ)ํ ์ ์์ต๋๋ค.
b) ์ ์ฒด .Net ํ๋ ์์ํฌ์ ํธํ๋์ง ์๋ ๋น์ฉ์ผ๋ก ํ๋์ ์ด๊ณ ๊นจ๋ํ ๋์์ธ์ ์ํด ์ผ๋ง๋ ๊ฐ ์ ์์ต๋๊น? (ํนํ ๋ฐ์ดํฐ ์ก์ธ์ค์ ๋ํ .Net Core์ Full core ๊ฐ์ ํธํ์ฑ[๊ฐ์ฅ ๋ฎ์ ์์ค ๋ฐ ํ์ ํธํ์ฑ ์๋])
๋ด ๊ด์ ์์ ์ถ์ ๊ธฐ๋ณธ ํด๋์ค๊ฐ ๊ธฐ๋ณธ ๋ฐ ๊ธฐ๋ณธ ๊ณ์ฝ์ผ๋ก ์๋ ๊ฒฝ์ฐ _interfaces_๋ ํธํ์ฑ์ ์ํด ์ด์ ๊ฒ๊ณผ ์ผ์นํด์ผ ํฉ๋๋ค. @nvivo๋ ์ด๋ฏธ .Net 2.0 ์ดํ ๊ณต์ ๊ณ์ฝ์ด ์ถ์ ๊ธฐ๋ณธ ํด๋์ค๋ผ๊ณ ๋ช ์ํ๊ธฐ ๋๋ฌธ์ ์ธํฐํ์ด์ค๊ฐ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง @mythz ์ @mikeobrien ์ ์ฌ๊ธฐ์ ๊ณต๊ธ์์ ์ข ์์ฑ์ ๋ํ ํ๋ ๋ฐ์ดํฐ๋ ์ ๊ณตํ์ต๋๋ค 1.1 ์ธํฐํ์ด์ค์์.
์คํธ์ ์ค์งํ๊ณ ์ฌ๊ธฐ์์ ์ฃผ์ ์ ๋ํด ๋ ผ์ํ๋ ค๋ฉด ์ด ๊ธด ๋ํ๋ฅผ ๋ค์ ์ฝ์ด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ค๋ฃจ๊ณ ์๋ ํน์ ์ฃผ์ ์ ๋ชฉ๋ก์ ๋์ํ ์ ์๋์ง ๋๋ ๋์ธ ๊ฐ์ ์๋ก์ด ์ฃผ์ ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ข์ ์์ด๋์ด์ธ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ฐ ํน์ ์ฃผ์ ์ ๋ํ ๋ฌธ์ . ๋๋ ์ฌ๊ธฐ์ ์ข์ ์ ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์ฒซ ๋ฒ์งธ ์ ์์ ๋ ๊ฐ๊น์ต๋๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ์ด ๋ชจ๋ ๊ฒ์ ๋ค์ ์์ฝํ๊ณ ์ฝ๊ฐ์ ์ก์(๋ด ๊ฒ์กฐ์ฐจ๋)์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ข์ ์์ด๋์ด๊ฐ ์์ต๋๋ค.
์ธํฐํ์ด์ค์ ๋ํด ๋งํ์๋ฉด, ๋ง์นจ๋ด System.Data์ ์ผ๋ถ๋ฅผ ์ผ๋ฐํํ ๊ณํ์ด ์์ต๋๊น? System.Data๊ฐ .NET 1.1 ์ด์์ผ๋ก API๋ฅผ ์
๋ฐ์ดํธํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ด IEnumerable์ ์ป๊ธฐ ์ํด .AsEnumerable() ํ์ฅ ๋ฉ์๋์ ๊ฐ์ ํดํน์ ์ฌ์ฉํด์ผ ํ๋ค๋ ์ ์ด ํญ์ ์ ๋ฅผ ๊ดด๋กญํ์ต๋๋ค.
์ ํ ๋ฆฌ๋๋ ์ ์ด ํฌํจ๋ ์คํ System.Data๊ฐ ์์ต๋๊น? ODP.NET์ ์ฌ์ฉํด์ผ ํ์ง๋ง ์ง๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ฑ๋ dotnet/corefx#7874
@mgravell @ploeh "Rickasaurus"๋ ์ ํ ํด๋์ค๋ฅผ ์์ํ์ต๋๋ค(์ ์ด๋ F#์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก C# ๋๋ .NET์ ๋ํด ํ์คํ์ง ์์ https://news.ycombinator.com/threads?id=Rickasaurus). ๋ชจ๋ .NET์ฉ์ผ๋ก ์ ๊ณต๋๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๊น?
์ ๋ Haskell ์ ๋ฌธ๊ฐ๋ ์๋์ง๋ง ์์ค๋ฅผ ์์์ํค์ง ์๊ณ ๋์ค์ ๊ฐ๋จํ IDbConnection
, IDbConnectionAsync
๋ฐ ๋ฏธ๋์ ๋ชจ๋ ๊ณต์ ์ธํฐํ์ด์ค์ ๋ณผํธ๋ฅผ ๊ณ ์ ํ ์ ์๋ค๊ณ ์ดํดํฉ๋๋ค. ๋ฐ์ด๋๋ฆฌ ํธํ์ฑ, ์ 3์ ์ ๊ณต์๊ฐ ๋ชจ๋ ๊ฒ์ ๊ตฌํํ๋๋ก ๊ฐ์ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ์ฌ์ด ์กฐ๋กฑ ๊ฐ๋ฅ์ฑ์ ์ ์งํ๋ฉด์.
์ด๊ฒ์ด ์ฌ๋ฐ๋ฅธ ์ดํด์ ๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ด ๊ธฐ๋ฅ์ด .NET์ ์ค์ ๋ก ์ ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ง์ต๋๋ค. ์ธํฐํ์ด์ค์ _์ข์_ ๊ธฐ๋ฅ์ ๋๋ค. ์ถ์ ๊ธฐ๋ณธ ํด๋์ค์ ๋ํ ๊ธฐ๋ณธ ์ค์ ์ API ์ํธ๋กํผ์ ์ธ์ฐ๋ ๋์ API ์ํธ๋กํผ๋ฅผ ๋๋ ๊ฐ์ฅ ์์ ํ ๋ฐฉ๋ฒ์ ๋๋ค.
OOD ์์น ์ ๋ฐ๋ผ์ผ _ํ์ง_๋ ์์ง๋ง OO API๋ฅผ ๋ง๋ค ๋ ์ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ฐ๋จํ ๋งํด์ ISP( ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น )๋ _์ด๋ค ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ๊ฐ์ ๋ก ์์กดํด์๋ ์ ๋๋ค๊ณ ๋ช ์ํฉ๋๋ค.
๊ธฐ์กด ์ถ์ํ์ ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ฉด ์๋์ผ๋ก ISP๋ฅผ ์๋ฐํ๊ฒ ๋ฉ๋๋ค.
๋น์ ์ Microsoft์ด๊ณ BCL๋ก ์์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ 'SOLID๋ฅผ ๊ณ ์ํ ํ์๊ฐ ์๋ค'๊ณ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ๋ฐ๋ ์ฃผ์ฅ).
6-7๋ ๋์ ๋ช ๊ฐ์ ์คํ ์์ค ํ๋ก์ ํธ๋ฅผ ์ ์งํด ์จ ๊ฒฝํ์ ์ธํฐํ์ด์ค๋ฅผ ์๊ฒ ์ ์งํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ถ์ํ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ผ ํ๋ ๊ฒฝ์ฐ ์ ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ์ธ์.