Inflearn brand logo image

인프런 커뮤니티 질문&답변

darak님의 프로필 이미지
darak

작성한 질문수

ASP.NET Core MVC +ASP.NET Core +REST API +.NET 8.0

21)REST API X EF Core 2편

EF로 만든 프로젝트를 개발서버에 올리니, 처음 로딩속도가 많이 느리네요.

작성

·

130

0

EF로 생성해서 개발서버에 올려놓았는데, 첫 로딩속도가 많이 느리네요.

 

개발사이트에 출근해서 접속하거나, IIS의 응용프로그램풀을 재시작후에 접근하면 5~6초 정도 걸립니다.

하지만 일단 연결이 되고 나면, 이후에는 1초 이내에 응답이 바로바로 옵니다.

 

접근도메인이 문제인가 싶어서, IP로 바꾸어도 동일하네요.

이런 현상이 나타나는 이유와, 해결 방법을 알고 싶습니다.

답변 2

0

개발자Park님의 프로필 이미지
개발자Park
지식공유자

안녕하세요.개발자park입니다.

[Q

개발사이트에 출근해서 접속하거나, IIS의 응용프로그램풀을 재시작후에 접근하면 5~6초 정도 걸립니다.

하지만 일단 연결이 되고 나면, 이후에는 1초 이내에 응답이 바로바로 옵니다.

]

1.ADO.NET보다 일단 EF Core가 느립니다.

★2.context에 데이터 load시 시간이 걸리는 것으로 추측됩니다.

=>Related Data 로드시 Loading전략을 사용합니다

예시로 써 Eager loading 또는 Greedy loading으로 불리는 Loaidng전략 관련된 코드를 추가해줍니다.

쉬운 방법으로 예를 들겠습니다.

ASP.NET Core MVC프로젝트의 program.cs에 다음과 같은 코드를 추가할 수 있습니다.

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");

builder.Services.AddDbContext<ApplicationDbContext>(options =>

options.UseSqlServer(connectionString));

//여기서부터 필요하신 코드라고 생각됩니다.

//로딩 전략 사용하기

//City와 MyTest는 Model에 해당하며 1:N 즉 One to Many관계에 속합니다.

//City와 MyTest는 1주~2주내로 새로 출시되는 강의에서 사용되는 Model입니다.

//Model이 더 많을 경우 City와 MyTest처럼 Model들을 Loading해주시면됩니다.

using (var scope = app.Services.CreateScope())

{

var services = scope.ServiceProvider;

//SeedData seedData = new SeedData();

//seedData.Initialize(services);

using (var context = new ApplicationDbContext(

services.GetRequiredService<

DbContextOptions<ApplicationDbContext>>()))

{

var mytest = context.MyTest.Include(c => c.City);

foreach (var test in mytest)

{

Console.WriteLine($"{test.Name}연결된 {test.City?.Name}");

}

}

}

 

darak님의 프로필 이미지
darak

작성한 질문수

질문하기