Runtime: ํด๋ž˜์Šค ๋Œ€์‹  ๊ณต์‹ ADO.NET ๊ณต๊ธ‰์ž API๋กœ ์ธํ„ฐํŽ˜์ด์Šค ๋งŒ๋“ค๊ธฐ

์— ๋งŒ๋“  2015๋…„ 09์›” 26์ผ  ยท  174์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dotnet/runtime

ํ˜„์žฌ 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์— ๋Œ€ํ•œ ํ† ๋ก ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

area-System.Data

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ธํ„ฐํŽ˜์ด์Šค์— ๊ตฌ์„ฑ์›์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋งž์Šต๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค์˜ _์ข‹์€_ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์„ค์ •์€ API ์—”ํŠธ๋กœํ”ผ์™€ ์‹ธ์šฐ๋Š” ๋Œ€์‹  API ์—”ํŠธ๋กœํ”ผ๋ฅผ ๋•๋Š” ๊ฐ€์žฅ ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

OOD ์›์น™ ์„ ๋”ฐ๋ผ์•ผ _ํ•˜์ง€_๋Š” ์•Š์ง€๋งŒ OO API๋ฅผ ๋งŒ๋“ค ๋•Œ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ISP( ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ )๋Š” _์–ด๋–ค ํด๋ผ์ด์–ธํŠธ๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— ๊ฐ•์ œ๋กœ ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ์ถ”์ƒํ™”์— ์ƒˆ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ISP๋ฅผ ์œ„๋ฐ˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์€ Microsoft์ด๊ณ  BCL๋กœ ์ž‘์—…ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 'SOLID๋ฅผ ๊ณ ์ˆ˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค'๊ณ  ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€ ์ฃผ์žฅ).

6-7๋…„ ๋™์•ˆ ๋ช‡ ๊ฐœ์˜ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ์œ ์ง€ํ•ด ์˜จ ๊ฒฝํ—˜์ƒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ถ”์ƒํ™”์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„์ž…ํ•˜์„ธ์š”.

๋ชจ๋“  174 ๋Œ“๊ธ€

์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฒ„์ „์„ ์ง€์ •ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋กœ ์ „ํ™˜ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ€์ƒ์ด ์•„๋‹Œ ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ€์ƒ์˜ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ์ถ”์ธกํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์ƒ ๋ฉ”์„œ๋“œ๋Š” ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ค๋ฏ€๋กœ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ฐ€์ƒ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@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 ๊ท€ํ•˜์˜ ์šฐ๋ ค๊ฐ€ ํƒ€๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ADO.NET์€ 10๋…„์ด ์ง€๋‚œ .NET 2.0 ์ดํ›„๋กœ ์ƒ๋‹นํžˆ ์•ˆ์ •์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ API๊ฐ€ ๋‚˜์ค‘์— ์ถ”๊ฐ€๋˜์—ˆ์ง€๋งŒ API์˜ ๋™์ž‘์€ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋น„๋™๊ธฐ ๋Œ€์‘ ํ•ญ๋ชฉ๋งŒ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณง ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“œ๋ผ์ด๋ฒ„ ํŒจ๋Ÿฌ๋‹ค์ž„
  2. CoreFx์—๋Š” ๋‹ค๋ฅธ ๋ฒ„์ „ ๊ด€๋ฆฌ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์•ฑ์— ๋Œ€ํ•ด ์ด์ „ CLR์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ธํ„ฐํŽ˜์ด์Šค ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฌธ์ œ๋Š” ์—ฌ๊ธฐ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

"localhost"์— ์žˆ๋Š” SQL ์„œ๋ฒ„๋ผ๋„ ์—ฐ๊ฒฐํ•˜๊ณ  ๋นˆ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ ์ตœ์†Œํ•œ ๋ช‡ ms๋ฅผ ์†Œ๋น„ํ•œ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์‹ค์ œ๋กœ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋Œ€๋ถ€๋ถ„์˜ _fast_ ์ฟผ๋ฆฌ๋Š” ~20ms๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

NSubstitute ๋˜๋Š” Moq์™€ ๊ฐ™์€ ํ‘œ์ค€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API๋ฅผ ์กฐ๋กฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๊ฐ€์ƒ ๋ฉ”์„œ๋“œ ์กฐํšŒ์—์„œ ๋งˆ์ดํฌ๋กœ์ดˆ๋ฅผ ์ ˆ์•ฝํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์˜ค๋Š˜๋‚  ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ›จ์”ฌ ๋” ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ๊ธฐ์— ๋งค์šฐ ๊ฐ•ํ•œ ์˜๊ฒฌ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ์˜๊ฒฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•œ API์—์„œ ๊ฐ€์ƒ ๋Œ€ ๋น„๊ฐ€์ƒ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ํด๋ž˜์Šค๋Š” ADO.NET์ด ๊ตฌํ˜„์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋Œ€๋ถ€๋ถ„์˜ ๋น„๊ฐ€์ƒ ๋น„๊ฐ€์ƒ ๋ฉ”์„œ๋“œ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. CommandBehavior๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ExecuteReader์˜ ์˜ค๋ฒ„๋กœ๋“œ๋Š” CommandBehavior.Default ๋ฅผ ์˜ค๋ฒ„๋กœ๋“œ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ตฐ์š”. ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ „ํ™˜ํ•˜๋ฉด ๋ชจ๋“  ๊ณต๊ธ‰์ž๋Š” ์ •ํ™•ํžˆ ๋™์ผํ•œ ์ƒ์šฉ๊ตฌ๋กœ ExecuteReader()๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค...
  • ์ด๊ฒƒ์ด ๋ชจ๋“  ์ฃผ์š” ๋ชจ์˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์œ ํšจํ•œ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ ์–ด๋„ Moq์—์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋งŒํผ์ด๋‚˜ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ๋ชจ์˜ํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ญ์ œํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด๋Š” ์ „๋ฐ˜์ ์œผ๋กœ ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค(๋” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค). ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์ด์ ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ (์กฐ๋กฑ์˜ ์šฉ์ด์„ฑ์— ๋Œ€ํ•ด ๋‚ด๊ฐ€ ํ‹€๋ฆฌ์ง€ ์•Š๋Š” ํ•œ) ๊ธฐ๋ณธ ํด๋ž˜์Šค๋Š” ๊ณตํ†ต ๊ธฐ๋Šฅ(์ฆ‰, ๊ฐ€์ƒ์ด ์•„๋‹Œ ๋น„์ถ”์ƒ ๋ฉ”์„œ๋“œ)์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋คํ”„ํ•˜๋Š” 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 ์—์ฝ”์‹œ์Šคํ…œ์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ์œ ์ตํ•œ ์ด์œ  ์ค‘ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

๋Œ€์ฒด ORM ๋‹ค์šด๋กœ๋“œ

NuGet ๋‹ค์šด๋กœ๋“œ๋ฅผ ์–ผํ• ๋ณด๋ฉด ๋น„EF ์‹œ์žฅ ์ ์œ ์œจ์ด ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ๋Œ€ ์ ˆ์ „ ๋ชจ๋“œ - 1M+
๋ฉ‹์Ÿ์ด - 100๋งŒ ์ด์ƒ
OrmLite - 500k+
๋‹จ์ˆœ.๋ฐ์ดํ„ฐ - 300k+
ํŽ˜ํƒ€ํฌ์ฝ” - ~100k
NPoco - 30k+

Dapper, Massive, PetaPoco, NPoco ๋“ฑ๊ณผ ๊ฐ™์€ ๋งŽ์€ Micro ORM์ด ๋‹จ์ผ ๋“œ๋กญ์ธ .cs์— ๋งž๊ฒŒ ์„ค๊ณ„๋˜์–ด NuGet์ด ์‹ค์ œ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ณด๊ณ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ์ˆซ์ž๋Š” ์ด๋ณด๋‹ค ํ›จ์”ฌ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ LLBLGen Pro์™€ ๊ฐ™์€ ํ์‡„ํ˜• ์†Œ์Šค ORM์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ORM์€ ์‚ฌ์šฉ์ž ๊ธฐ๋ฐ˜์ด ํฌ์ง€๋งŒ NuGet์—์„œ ๊ทธ ์‚ฌ์šฉ๋ฒ•์„ ๋ณด๊ณ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋Œ€์ฒด ORM์— ๋Œ€ํ•œ ์˜ํ–ฅ

GitHub ๋•๋ถ„์— ์ฝ”์–ด๊ฐ€ ํฌํ•จ๋œ ๋‹ค์–‘ํ•œ ์†Œ์Šค ํŒŒ์ผ์˜ ์ˆ˜๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
IDbConnection , IDbCommand ๋ฐ IDataReader ์ด ๋ณ€๊ฒฝ์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ADO .NET ์ธํ„ฐํŽ˜์ด์Šค:

IDb์—ฐ๊ฒฐIDb๋ช…๋ นIDataReader
์ตœ๋Œ€ ์ ˆ์ „ ๋ชจ๋“œ59181132
๋‚ ์”ฌํ•œ172117
์˜ค๋ฅด๋ผ์ดํŠธ1795426
๋‹จ์ˆœ.๋ฐ์ดํ„ฐ29276
์—”ํฌ์ฝ”410์‚ผ

์ฐธ๊ณ : ์ด ๊ฒฐ๊ณผ๋Š” ์†Œ์Šค ํŒŒ์ผ๋งŒ ๋ณด์—ฌ์ฃผ๋ฉฐ, ๊นจ์ง„ ์ฐธ์กฐ์˜ ์‹ค์ œ ์ˆ˜๋Š” ํ›จ์”ฌ ๋” ๋งŽ์Šต๋‹ˆ๋‹ค.

๊ณ ๊ฐ ์†Œ์Šค ์ฝ”๋“œ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

์ด ๋ณ€๊ฒฝ์˜ ์‹ค์ œ ์˜ํ–ฅ์€ ์ด๋Ÿฌํ•œ 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์›”์— ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชฉํ‘œ:

  • .NET Core์— ๋Œ€ํ•œ ์ตœ์‹  ๋…ธ์ถœ ์˜์—ญ์„ ์„ค๊ณ„ํ•˜์—ฌ ๊ฐœ๋…์˜ ์ค‘๋ณต( IDbConnection vs DbConnection ), ํ˜ผ๋™, ์‹ค์ˆ˜ ๋ฐ ๊ณ„์ธตํ™” ๋ฌธ์ œ(DataCommon์—์„œ SqlClient ๋ถ„ํ• , ํ•ต์‹ฌ ์ถ”์ƒํ™”์—์„œ DataSet ๋ถ„ํ• )๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค. .NET 1.0์˜ ์›๋ž˜ ๋””์ž์ธ. ๊ธฐ์กด ์†Œ๋น„์ž์™€ _new_ ๊ฐœ๋ฐœ์ž ๋ชจ๋‘ .NET Framework์— ์‰ฝ๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๊ณต๊ธ‰์ž์™€ ์†Œ๋น„์ž๊ฐ€ .NET Core์— ๋Œ€ํ•ด ๋‹จ์ผ ๋ฐ”์ด๋„ˆ๋ฆฌ/์†Œ์Šค๋ฅผ ๋นŒ๋“œํ•œ ๋‹ค์Œ .NET Framework์—์„œ ๋™์ผํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ๋ฐ˜๋Œ€๋Š” ๋ชฉํ‘œ๊ฐ€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. .NET Framework ๋ฐ”์ด๋„ˆ๋ฆฌ/์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์™€ .NET Core์—์„œ ์ผ๋ถ€ ๋ณ€๊ฒฝ ์—†์ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ๋ณ€์— ํผ์ง€๊ณ  ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ˆ˜์ •:

  • ํ˜„์žฌ ์ƒํƒœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฉค๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, @mythz๊ฐ€ ํ™•์žฅ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ œ๊ณตํ•œ ์œ„์˜ ์ œ์•ˆ์€ ๊ณต๊ธ‰์ž๊ฐ€ ์–ด์จŒ๋“  ์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค์—์„œ ํŒŒ์ƒ๋˜๋„๋ก ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  • System.Data.Common์€ _์ œ๊ณต์ž ๋ชจ๋ธ์—์„œ ๋ฒ—์–ด๋‚˜์ง€ _์•Š์Šต๋‹ˆ๋‹ค_. ์ธํ„ฐํŽ˜์ด์Šค๋Š” .NET 2.0์— ๋„์ž…๋œ ์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋กœ ๋Œ€์ฒด/๋ณต์ œ๋œ ๋ ˆ๊ฑฐ์‹œ .NET 1.0 ๊ฐœ๋…์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฐ์ •์„ ๋‚ด๋ฆด ๋•Œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ณต๊ธ‰์ž๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค์—์„œ ํŒŒ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋Š” ์กฐ๋กฑ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • .NET 1.0 ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์•ฝ๊ฐ„์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ–ˆ์ง€๋งŒ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ํฌํŠธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด AutoMapper์— ๋Œ€ํ•œ ๋‹ค์Œ ๋ช‡ ๊ฐ€์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. (https://github.com/AutoMapper/AutoMapper.Data/blob/master/AutoMapper.Data/DataReaderMapper.cs#L14).

๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ:

์ธํ„ฐํŽ˜์ด์Šค์— ๊ตฌ์„ฑ์›์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์•„์ง 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๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ๋”

์ด์ œ ํด๋ž˜์Šค๊ฐ€ ์ด๋ฏธ ์–ด๋–ป๊ฒŒ ๋‚˜์œ ๋””์ž์ธ์„ ๋งŒ๋“ค๊ณ  ์žˆ๋Š”์ง€ ๋ณด๊ธฐ ์œ„ํ•ด:

  • DbCommand์— DesignTimeVisible ์†์„ฑ ์ด ์žˆ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋””์ž์ธ ํƒ€์ž„ ์ง€์›์ด ์—ฐ๊ฒฐ๋กœ ์ •์˜๋˜๋Š” ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ž…๋‹ˆ๊นŒ?
  • ์ƒํƒœ ๋ณ€๊ฒฝ ์„
  • ConnectionStringBuilder ๋Š” ๊ณต๊ธ‰์ž๊ฐ€ ์กด์žฌํ•˜๊ธฐ ์œ„ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ž…๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด VS ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?
  • DbDataReader ๊ฐ€ ์ผ๋ถ€ ํ•ต์‹ฌ ์œ ํ˜•์— ๋Œ€ํ•ด Get ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜์ง€๋งŒ GetByteArray() ๋ฐ GetDateTimeOffset() ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์œ ํ˜•์— ๋Œ€ํ•ด์„œ๋Š” ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ฌธ์ž์—ด์ด๋‚˜ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ TextReader๋ฅผ ๊ฒ€์ƒ‰ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ด๊ฒƒ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ผ๋ฉด ์ด์™€ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๊ฐ€ API์— ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค(์˜ˆ GetSql* SqlDataReader์˜

์ด๊ฒƒ๋“ค์€ ๋ชจ๋‘ ์ˆ˜์‚ฌํ•™์  ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค ๋ชจ๋‘๊ฐ€ ์„ค๋“๋ ฅ ์žˆ๋Š” ๋‹ต๋ณ€์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ๊ณ ๋ คํ–ˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์š”์ ์€ ํ˜„์žฌ ๋””์ž์ธ์ด ๋ถ„๋ช…ํžˆ API ์ •์˜๋กœ ์ƒ๊ฐ๋˜์—ˆ๋˜ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋” ๋งŽ์€ ๊ด€์‹ฌ์„ ๋ฐ›์„ ๊ฒƒ์ด๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค.

์†”์งํžˆ, ์™ธ๋ถ€์—์„œ ๋””์ž์ธ์— ๋Œ€ํ•œ ๋…ผ์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

  • Visual Studio์˜ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์ด๋ฒคํŠธ๋ฅผ ์—ฌ๊ธฐ์— ์œ ์ง€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” EF๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ๊ทธ๊ฒƒ์ด ์ „ ์„ธ๊ณ„ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ‚ค๋งˆ ๊ฒ€์ƒ‰ ๋ฐฉ๋ฒ•์„ ์ œ๊ฑฐํ•ฉ์‹œ๋‹ค.
  • .NET 1.1๋ถ€ํ„ฐ ์ง€์›๋˜๊ณ  ํ˜ธํ™˜์„ฑ์„ ๊นฐ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์„ ์œ ์ง€ํ•ฉ์‹œ๋‹ค!
  • ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”๊ณผ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  .NET 1.1์—์„œ ์˜ค๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์–ด์จŒ๋“  ์ „์ฒด ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋„๋ก ํ•ฉ์‹œ๋‹ค!
  • ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ…, ์ปค๋ฎค๋‹ˆํ‹ฐ, ์˜คํ”ˆ ์†Œ์Šค ๋ฐ ๋ฏธ๋ž˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ค‘์ ์„ ๋‘” ์ƒˆ๋กœ์šด ๊ณต๊ธ‰์ž ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•ฉ์‹œ๋‹ค...
  • ... ๊ทธ๋ฆฌ๊ณ  SqlClient๋ฅผ _sole_ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์–ด์ œ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด ๋ชจ๋ธ์„ ๋นŒ๋“œํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!
  • ๊ฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ•จ๊ป˜ ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๋Š” ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ตฌ์ถ•ํ•ด ๋ด…์‹œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์•„๋ฌด๋„ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ž์‹ ์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ _๋‹ค์‹œ๋Š”_ ์ค‘๋‹จํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค!
  • .. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ์—…๋ฐ์ดํŠธ๊ฐ€ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ•ฉ์‹œ๋‹ค!

์˜ˆ, ๊ฑฐ๊ธฐ์—๋Š” ์•ฝ๊ฐ„์˜ ํ˜ธ์–ธ์žฅ๋‹ด์ด ์žˆ๊ณ  ์ด ํ† ๋ก ์€ ์•„๋ฌด๋ฐ๋„ ๊ฐ€์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค =)... ํ•˜์ง€๋งŒ ์ด๊ฒƒ์„ ๋‚ด ๊ฐ€์Šด์—์„œ ๊บผ๋‚ด๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. 2015๋…„, ๋ชจ๋“  ๊ฒƒ์ด ํ•ญ์ƒ ๊นจ์ง€๊ณ  ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์— ์ต์ˆ™ํ•ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ADO.NET์˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์•ผ๊ธฐํ•  ASP.NET MVC์— ๋Œ€ํ•œ 20๊ฐœ์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ–ฅํ›„ ๋ช‡ ๋…„ ๋™์•ˆ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ์—ฌ์ „ํžˆ .NET์„ ์‚ฌ๋ž‘ํ•˜๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ .NET Core v1์„ ์ œ์‹œ๊ฐ„์— ์ถœ์‹œํ•˜๋Š” ๊ฒƒ์ด ์„œ๋‘๋ฅด๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹จ์ง€ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ด๊ฒƒ์„ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ์กฐ์ข…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ์šฐ๋ฆฌ๊ฐ€ ์›€์ง์ผ ๋•Œ ๋ฌผ๊ฑด์„ ๋ถ€์ˆ˜๋Š” ๊ฒƒ์„ ๋‘๋ ค์›Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ORM ์œ ์ง€ ๊ด€๋ฆฌ์ž์˜ ๊ฒฝ์šฐ ํ•˜์ง€ ์•Š๋Š” ์ด์œ 

``` C#

COREFX๋ผ๋ฉด

๋„ค์ž„์ŠคํŽ˜์ด์Šค 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์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋‹ˆ์š”, ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ ์ด๋ฏธ ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค).

SellMeThis ํ”„๋ ˆ์ž„์›Œํฌ. ์•„ ์™œ ๋‚ด๊ฐ€ ๊ท€์ฐฎ๊ฒŒ.

ํ•˜์ง€๋งŒ ๊ทธ ์ดํ›„๋กœ ๋นŒ๋“œ๋œ ๋ชจ๋“  ๊ฒƒ์€ ๊ธฐ๋ณธ ํด๋ž˜์Šค์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

_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์งˆ๋ฌธ(์ด IDbConnection cnn, CommandDefinition cmd)

``` C#
Task<IEnumerable<T>> QueryAsync<T>(this IDbAsyncConnection cnn, CommandDefinition cmd)

sync/async ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋น„์Šทํ•œ ์šฉ๋„์™€ ๊ตฌํ˜„์„ ๊ฐ€์งˆ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•ฉ๋‹ˆ๋‹ค.

_ํŽธ์ง‘:_ ์ž…๋ ฅํ•œ ํ›„ ์ด๋ฆ„ ๋์— Async ๊ฐ€ ์ด ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•ด ์–ผ๋งˆ๋‚˜ ๋” ์ข‹์„์ง€ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค...

ADO.NET์€ ์ˆ˜๋…„์— ๊ฑธ์ณ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  1. 2003๋…„(1.1)์— 1.0์—์„œ ๋Œ€ํญ ๋ณ€๊ฒฝํ•˜์—ฌ ์žฌ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. 2005๋…„(2.0)์—์„œ ๊ทธ๋“ค์€ ์˜ค๋Š˜๋‚  ์กด์žฌํ•˜๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค์™€ ํ•จ๊ป˜ ์ œ๊ณต์ž ๋ชจ๋ธ๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. 2012(4.5)์— ๋น„๋™๊ธฐ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ, ๋™์ผํ•œ ์ž‘์—…์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์ƒˆ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ์‹ค์ œ๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

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.

๋‚ด๊ฐ€ ๊ด€์ฐฐํ•œ ๊ฒƒ:

  • CoreClr(์ƒˆ๋กœ์šด ๋ฐ˜์ง์ด๋Š” ํ”„๋ ˆ์ž„์›Œํฌ) ์•„์ด๋””์–ด ๋’ค์— ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์€ ๊ตฌํ˜„ ๋’ค์— ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค๊ณผ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์‚ฌ๊ณ ๋ฐฉ์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(15๋…„ ๋œ ์ฝ”๋“œ๋ฒ ์ด์Šค์™€์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์ด ์™•์ž…๋‹ˆ๋‹ค).

๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ:

  • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์ƒํ™ฉ์ด ์•…ํ™” ๋ฉ๋‹ˆ๋‹ค.
  • [Obsolete]๋กœ ์žฅ์‹๋  ๋•Œ๊นŒ์ง€ ์“ธ๋ชจ์—†๋Š” ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์–ด๋Š ์‹œ์ ์—์„œ ๋ˆ„๊ฐ€ ๋ฌด์—‡์„ ์ƒ๊ฐํ•˜๋Š”์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ณ„์•ฝ์ด๋ฉฐ ๋‹จ์ˆœํžˆ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ:

  • ๊ธฐ๋ณธ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ API์˜ ๊ธฐ๋ณธ ํ‘œ๋ฉด์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋Š๋ผ๋Š” ๊ฒƒ:

  • ์šฐ๋ฆฌ๋Š” 2015๋…„ ๋ง์— ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋…ผ์Ÿํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ๋ณด๋Š” ๊ฒƒ์ด ๋‹ต๋‹ตํ•˜๊ณ  ์Šฌํ”•๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฒ„์ „์„ ์ง€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†์œผ๋กœ ์‰ฝ๊ฒŒ ๋ฒ„์ „์ด ์ง€์ •๋ฉ๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ผ์„ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด; ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

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๋กœ ํฌํŒ…

๋จผ์ € .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 ์ธํ„ฐํŽ˜์ด์Šค

์ด ๋ชจ๋“  ๊ฒƒ์„ ๋งํ•˜๋ฉด์„œ ์ด ์Šค๋ ˆ๋“œ์˜ ์›๋ž˜ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 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() ํ™•์žฅ ๋ฉ”์„œ๋“œ์™€ ๊ฐ™์€ ํ•ดํ‚น์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด ํ•ญ์ƒ ์ €๋ฅผ ๊ดด๋กญํ˜”์Šต๋‹ˆ๋‹ค.๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์—์„œ. ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์ด 2.0์ด ๋‚˜์™”์„ ๋•Œ ์ˆ˜ํ–‰ํ–ˆ๋˜ ์ผ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก DataRowCollection๊ณผ ๊ฐ™์€ ์ปฌ๋ ‰์…˜์ด ์—…๊ทธ๋ ˆ์ด๋“œ๋˜์ง€ ์•Š์€ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์œ ํ˜• ๋ฆฌ๋””๋ ‰์…˜์ด ํฌํ•จ๋œ ์Šคํ… 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์— ์‹ค์ œ๋กœ ์ ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰