[ASP.NET Core MVC] 17-18. Enterprise Architecture 프로젝트 구성, DI, IOC 사용 정리

BruteForceA·2022년 7월 5일
2
post-thumbnail

개발환경

  • Visual Studio Community 2017
  • ASP.NET Core 2.2



EA (Enterprise Architecture)

  • 대형 솔루션, 프로그램 개발 사용하는 프로젝트 구성 방식(큰 틀을 구성)
  • 다양한 플랫폼을 지원하는 재사용성이 높은 코드를 작성하는 방식
  • Enterprise Architecture 대로 구성이 안되면 웹은 웹대로 따로 써야한다.

자주 조회가 되는 정보라면 메모리에 저장



Cache

  • 목적 : 자주 불러오는 데이터를 메모리에 담아서 출력
  • 장점 : 컴퓨팅 비용이 ↓, 데이터 출력하는 속도↑
  • 단점 : 메모리를 많이 필요로 하게 됨8



ClassLibrary = DLL (동적연결 라이브러리)

ClassLibrary 종류

1 .net Framework
2 .net core
3 .net Framework(portable) - Xamarin
4 .net Standard

하는 일은 같은데 직접 접근을 할 수 없고 참조를 추가해 줘야 한다.



구조



접근 순서

클라이언트 버튼 → ASP.NET MVC 리스트 출력 호출 → BLL → IDAL → DAL



장점

  • DB를 Oracle로 바꾼다고 치면 DAL만 교체 해주면 된다.
  • Note라는 솔루션에 PresentationLayer 이외의 Layer들은 클래스 라이브러리로 작성이 되고 고객의 변덕으로 인해서 코드의 유연성이 필요할 경우 같은 소스코드로 웹뿐만 아니라 Winform, WPF, Xamarin 등 다양한 플랫폼을 지원할 수 있다는 매우 큰 장점이 있다.




DI, IOC 사용

DI(Dependency Injection)

의존성주입

  • 프로그래밍에서 구성요소가 의존관계가 소스코드 내부가 아닌 외부의 설정파일 등을 통해 정의되게 하는 디자인 패턴



적용유형

마틴 파울러는 세가지 의존성 주입 패턴을 제시

  • 생성자 주입 : 필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입
  • Setter를 통한 주입 : 의존성을 입력받는 Setter 메소드를 만들고 이를 통해 의존성 주입 (WPF쪽에서 많이 사용)
  • Interface를 통한 주입 : 의존성을 주입하는 함수를 포함한 인터페이스를 작성하고 이 인터페이스를 구현하도록 함으로써 실행시에 이를 통하여 의존성을 주입



IoC(Inversion of Control)

  • 프로그래머가 작성한 프로그램이 재사용 라이브러리의 흐름제어를 받게되는 소프트웨어 디자인 패턴을 말한다.



UserBll.cs

직접 UserDal클래스에 의존
추후 코드 변경사항이 생길때 참조되어 있는 모든 부분을 찾아 수정해야하는 단점이 있다.


인터페이스를 생성 후 생성자에 의존성 주입을 해주면 객체를 직접 참조하는 강한결합을 해제하고 느슨한 결합을 시킬 수 있다.




Startup.cs

services.AddTransient<UserBll>();

/* 인터페이스와 구현체 매칭시켜줌 */
services.AddTransient<IUserDal, UserDal>();

Startup.cs에서 참조만 바꿔주면
BLL은 고치지 않아도 인터페이스를 사용하면 MSSQL에서 Oracle로 변경된다. 항상 일관된 기능 등을 정의할 수 있다.




AddSingletone(), AddScoped(), AddTransient()

AddSingletone()

클라이언트의 접속상태와 상관없이 웹 서비스 시작 때 생성되고 종료될때까지 유지된다. 모든 호출에서 같은 오브젝트를 재사용한다. 따라서 결과값을 전체 모든 호출하는 사람들과 공유하는 효과를 얻고 보통 누적된 방문자 수를 보여줄 때 사용한다.

AddScoped()

각 HTTP 요청 당 하나의 인스턴스를 생성하며, 클라이언트의 Request 시작부터, Response 종료까지 유지된다. 같은 주소의 웹 화면에서 여러번 이를 사용할 경우 같은 인스턴스를 재사용 한다.

AddTrasient

매 사용때 마다 새로운 객체를 생성한다. 비유지(stateless) 서비스에 가장 적합





참조

0개의 댓글