SlideShare a Scribd company logo
HOONS닷넷
오픈소스 프로젝트 Part1.
     부제: “ASP.NET MVC로 구현하는 HOONS닷넷”




                    전호진
강사소개

       전호진

       HOONS닷넷 시삽(2010~)
       (주)필라넷




             crynut84@gmail.com
             http://crynut84.tistory.com
진행순서
 ASP.NET MVC 소개


 MVC의 장점 살리기


 HOONS.NET 살펴보기
ASP.NET MVC 소개
ASP.NET의 두가지 개발 모델
WebForm VS MVC
 WebForm
 -   Winform과 유사한 이벤트 기반의 프로그래밍
 -   도구상자의 Drag&Drop (서버컨트롤)
 -   ViewState를 이용한 상태관리
 -   포스트백

 MVC

 -   View Model Controller로 관심의 분리
 -   ViewState가 없음.
 -   원하는 HTML 코드 생성(웹표준)
 -   RESTfull
 -   관심의 분리로 자동화된 단위 테스트 작성에 유리
MVC 동작 원리
라우팅 시스템
-   WebForm : http://hoons.kr/Board.aspx?page=2&Name=Free
-   MVC : http://hoons.kr/Board/Free/1
-   SEO 최적화.
-   IIS의 물리적인 파일 구조 노출안함.


     System.Web.Routing

      routes.MapRoute(
        "BoardList", // 경로 이름
        "Board/{BoardKindCode}/{Page}", // BoardIdx는 글 읽을 때 해당
        new { controller = "Board", BoardKindCode = "", action="List",Page = 1 },
        new string[] { "HOONS.WEB.Controllers" }
         // 매개 변수 기본값
     );
Razor 뷰엔진
Razor 뷰엔진
Razor 뷰엔진
MVC도 ASP처럼.
              @구문을 이용한
               스파게티 코드
유지보수
MVC에서 주목한것은?




 View Model Controller로 관심의 분리
MVC의 장점을 살리자
MVC를 MVC답게
역할에 충실하자(관계의 분리)
 Model-View-Controller



                         뷰 모델, 도메인 모델




컨트롤러에서 전달 받은                            HTTP 요청에 따라 모델을
Model을 브라우저에 렌더링                        컨트롤(비지니스 로직)하여
(데이터를 표현하는 로직)                          뷰 선정
역할에 충실하자(저장소 분리)
 리파지터리(저장소) - CRUD
역할에 충실하자(저장소 분리)
 컨트롤러에서 리파지터리를 이용해 CRUD

 /// <summary>
 /// 회원가입
 /// </summary>
 /// <param name="account"></param>
 /// <param name="collection"></param>
 /// <returns></returns>
 [HttpPost]
 public ActionResult Join(Member account, FormCollection collection)
 {
     account.UserBirth = collection["txtYear"] + collection["txtMonth"] + collection["txtDay"];
     account.UserPassword = CrytographyUtil.MD5Encrypt("0000");

     memberRepository.AddMember(account);
     return RedirectToAction("JoinComplete", "Account");
 }
의존성을 제거하자
리파지터리로 DataSource를 추상화 했더니..



           웹 서비스로
           바꿔 주세요.
리파지터리를 Interface로 정의
Interface
  public interface IMemberRepository
  {
    IQueryable<Member> Members { get; }
    bool AddMember(Member member);
    bool DeleteMember(Member member);
    bool UpdateMember(Member member);
  }



실제 구현
   public class MemberRepository : IMemberRepository
   {
     public bool AddMember(Member member)
     {
         ...생략....
     }
  }
Controller에서는 Interface 사용
Controller
  IMemberRepository memberRepository;
  memberRepository.AddMember(account);




             Controller            Controller     Controller




느슨한 결합                              <interface>         <Concrete>
                                    Repository          Repository
문제해결?
Controller
  IMemberRepository memberRepository = new MemberRepository();
  memberRepository.AddMember(account);




             Controller             Controller               Controller




의존성                  <interface>                    <Concrete>
                     Repository                     Repository
문제해결?
 직접 생성하지 않고 인터페이스의 구현객체
 를 얻을 순 없을까?
DI(Dependency Injection)
 의존성 주입
    의존 객체를 외부에서 전달 받음




public class AccountController : Controller
{
  //멤버 리파지터리 인터페이스
  private IMemberRepository memberRepository;

  public AccountController(IMemberRepository      memberRepository)
  {
      //생성자를 통해 의존객체 전달
      this.memberRepository = memberRepository;
  }
  //... 생략...
DI(Dependency Injection)
DI(Dependency Injection)
                  NInject
                                    Spring.NET
 Castle Windsor
                            Unity




- 의존성 관리(생성자, 세터, 매개변수)

- 개체 수명 관리(싱글톤, 트랜지언트, 객체 풀, HTTP요청)
NInject 적용 하기
NInject 적용이 쉽다.
ControllerFactory 생성


 public class HoonsControllerFactory : DefaultControllerFactory
 {
   private readonly IKernel kernel;

     public HoonsControllerFactory()
     {
       this.kernel = new StandardKernel();
       AddBindins();
     }

     protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
     {
       return controllerType == null ? null : kernel.Get(controllerType) as IController;
     }

     private void AddBindins()
     {
        kernel.Bind<IMenuRepository>().To<MenuRepository>();
        kernel.Bind<IMemberRepository>().To<MemberRepository>();
     }
 }
NInject 적용 하기
MVC Framework에 등록(Global.asax)


  protected void Application_Start()
 {
    ... 생략 ...
    //MVC ControllerFactory를 NInject로 설정
     ControllerBuilder.Current.SetControllerFactory(new HoonsControllerFactory());
 }
의존성을 제거 했더니?
역할이 명확히 분리(유지보수!)

자동화된 테스트 작성이 쉬워짐
Unit Test 자동화
- 요구사항 정의서에 따라 테스트를 구성하여, 요구사항을 빠짐없이 구현

- 모듈 수정 시 테스트를 통해 기존 코드 안정성 확보

- 빠른 단위테스트
훈스닷넷 프로젝트 살펴보기
Q&A
crynut84@gmail.com
http://crynut84.tistory.com

More Related Content

What's hot

03.[참고]개발환경 교육교재
03.[참고]개발환경 교육교재03.[참고]개발환경 교육교재
03.[참고]개발환경 교육교재
Hankyo
 
03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법
Hankyo
 
Servlet3
Servlet3Servlet3
Servlet3
Sukjin Yun
 
[오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC [오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC
Ji-Woong Choi
 
3.Spring IoC&DI(spring ioc실습, XML기반)
3.Spring IoC&DI(spring ioc실습, XML기반)3.Spring IoC&DI(spring ioc실습, XML기반)
3.Spring IoC&DI(spring ioc실습, XML기반)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
1.스프링프레임워크 개요
1.스프링프레임워크 개요1.스프링프레임워크 개요
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
Sungchul Park
 
Servlet Architecture
Servlet ArchitectureServlet Architecture
Servlet Architecture
JU Chae
 
Spring 4.x Web Application 살펴보기
Spring 4.x Web Application  살펴보기Spring 4.x Web Application  살펴보기
Spring 4.x Web Application 살펴보기
Ji Heon Kim
 
HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3
J B
 
HeadFisrt Servlet&JSP Chapter 2
HeadFisrt Servlet&JSP Chapter 2HeadFisrt Servlet&JSP Chapter 2
HeadFisrt Servlet&JSP Chapter 2
J B
 
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)2.Spring IoC & DI (ioc container)
05.실행환경 교육교재(업무처리,연계통합)
05.실행환경 교육교재(업무처리,연계통합)05.실행환경 교육교재(업무처리,연계통합)
05.실행환경 교육교재(업무처리,연계통합)
Hankyo
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
Hankyo
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여
Jin wook
 
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
Hankyo
 
04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)
Hankyo
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론
Hankyo
 

What's hot (20)

03.[참고]개발환경 교육교재
03.[참고]개발환경 교육교재03.[참고]개발환경 교육교재
03.[참고]개발환경 교육교재
 
03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법
 
Servlet3
Servlet3Servlet3
Servlet3
 
[오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC [오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC
 
3.Spring IoC&DI(spring ioc실습, XML기반)
3.Spring IoC&DI(spring ioc실습, XML기반)3.Spring IoC&DI(spring ioc실습, XML기반)
3.Spring IoC&DI(spring ioc실습, XML기반)
 
1.스프링프레임워크 개요
1.스프링프레임워크 개요1.스프링프레임워크 개요
1.스프링프레임워크 개요
 
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
 
Servlet Architecture
Servlet ArchitectureServlet Architecture
Servlet Architecture
 
Spring 4.x Web Application 살펴보기
Spring 4.x Web Application  살펴보기Spring 4.x Web Application  살펴보기
Spring 4.x Web Application 살펴보기
 
HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3
 
HeadFisrt Servlet&JSP Chapter 2
HeadFisrt Servlet&JSP Chapter 2HeadFisrt Servlet&JSP Chapter 2
HeadFisrt Servlet&JSP Chapter 2
 
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
 
2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)
 
05.실행환경 교육교재(업무처리,연계통합)
05.실행환경 교육교재(업무처리,연계통합)05.실행환경 교육교재(업무처리,연계통합)
05.실행환경 교육교재(업무처리,연계통합)
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여
 
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
 
Mvc pattern
Mvc patternMvc pattern
Mvc pattern
 
04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론
 

Viewers also liked

[Td 2015]asp.net 5 깊게 파고들기(박용준)
[Td 2015]asp.net 5 깊게 파고들기(박용준)[Td 2015]asp.net 5 깊게 파고들기(박용준)
[Td 2015]asp.net 5 깊게 파고들기(박용준)
Sang Don Kim
 
Using Microsoft Azure as cloud file server
Using Microsoft Azure as cloud file serverUsing Microsoft Azure as cloud file server
Using Microsoft Azure as cloud file server
jimliddle
 
The Future of C# and .NET Framework
The Future of C# and .NET FrameworkThe Future of C# and .NET Framework
The Future of C# and .NET Framework
명신 김
 
C#을 이용한 task 병렬화와 비동기 패턴
C#을 이용한 task 병렬화와 비동기 패턴C#을 이용한 task 병렬화와 비동기 패턴
C#을 이용한 task 병렬화와 비동기 패턴
명신 김
 
크로스플랫폼으로 다시 태어난 ASP.NET Core
크로스플랫폼으로 다시 태어난 ASP.NET Core크로스플랫폼으로 다시 태어난 ASP.NET Core
크로스플랫폼으로 다시 태어난 ASP.NET Core
SangHoon Han
 
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
Sang Don Kim
 
Facebook Architecture - Breaking it Open
Facebook Architecture - Breaking it OpenFacebook Architecture - Breaking it Open
Facebook Architecture - Breaking it Open
HARMAN Services
 
facebook architecture for 600M users
facebook architecture for 600M usersfacebook architecture for 600M users
facebook architecture for 600M users
Jongyoon Choi
 
F# and SignalR for a FastWeb
F# and SignalR for a FastWebF# and SignalR for a FastWeb
F# and SignalR for a FastWeb
Riccardo Terrell
 

Viewers also liked (9)

[Td 2015]asp.net 5 깊게 파고들기(박용준)
[Td 2015]asp.net 5 깊게 파고들기(박용준)[Td 2015]asp.net 5 깊게 파고들기(박용준)
[Td 2015]asp.net 5 깊게 파고들기(박용준)
 
Using Microsoft Azure as cloud file server
Using Microsoft Azure as cloud file serverUsing Microsoft Azure as cloud file server
Using Microsoft Azure as cloud file server
 
The Future of C# and .NET Framework
The Future of C# and .NET FrameworkThe Future of C# and .NET Framework
The Future of C# and .NET Framework
 
C#을 이용한 task 병렬화와 비동기 패턴
C#을 이용한 task 병렬화와 비동기 패턴C#을 이용한 task 병렬화와 비동기 패턴
C#을 이용한 task 병렬화와 비동기 패턴
 
크로스플랫폼으로 다시 태어난 ASP.NET Core
크로스플랫폼으로 다시 태어난 ASP.NET Core크로스플랫폼으로 다시 태어난 ASP.NET Core
크로스플랫폼으로 다시 태어난 ASP.NET Core
 
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
 
Facebook Architecture - Breaking it Open
Facebook Architecture - Breaking it OpenFacebook Architecture - Breaking it Open
Facebook Architecture - Breaking it Open
 
facebook architecture for 600M users
facebook architecture for 600M usersfacebook architecture for 600M users
facebook architecture for 600M users
 
F# and SignalR for a FastWeb
F# and SignalR for a FastWebF# and SignalR for a FastWeb
F# and SignalR for a FastWeb
 

Similar to HOONS닷넷 오픈소스 프로젝트 Part1.

Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
Kyung Koo Yoon
 
반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게
Sungju Jin
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
EunYoung Kim
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
Kim Hunmin
 
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulCreate App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Bansook Nam
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄
SeongHyun Ahn
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
Jeado Ko
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
NAVER Engineering
 
[KAU UMC 컨퍼런스] Java 기반 Web의 역사 - 김준기
[KAU UMC 컨퍼런스] Java 기반 Web의 역사 - 김준기[KAU UMC 컨퍼런스] Java 기반 Web의 역사 - 김준기
[KAU UMC 컨퍼런스] Java 기반 Web의 역사 - 김준기
JunGi Kim
 
Backbone 발표
Backbone 발표Backbone 발표
Backbone 발표
Gunhee Lee
 
Protocol Oriented Programming in Swift
Protocol Oriented Programming in SwiftProtocol Oriented Programming in Swift
Protocol Oriented Programming in Swift
SeongGyu Jo
 
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사
Rjs Ryu
 
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기
YoungSu Son
 
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
Sang Don Kim
 
Metaworks3 Framework workbook 2015
Metaworks3 Framework workbook 2015Metaworks3 Framework workbook 2015
Metaworks3 Framework workbook 2015
uEngine Solutions
 
react-ko.pdf
react-ko.pdfreact-ko.pdf
react-ko.pdf
ssuser65180a
 
안드로이드 개발자에 필요한 오픈소스이야기
안드로이드 개발자에 필요한 오픈소스이야기안드로이드 개발자에 필요한 오픈소스이야기
안드로이드 개발자에 필요한 오픈소스이야기
YoungSu Son
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp
NAVER D2
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발NAVER D2
 

Similar to HOONS닷넷 오픈소스 프로젝트 Part1. (20)

Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulCreate App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
 
[KAU UMC 컨퍼런스] Java 기반 Web의 역사 - 김준기
[KAU UMC 컨퍼런스] Java 기반 Web의 역사 - 김준기[KAU UMC 컨퍼런스] Java 기반 Web의 역사 - 김준기
[KAU UMC 컨퍼런스] Java 기반 Web의 역사 - 김준기
 
Backbone 발표
Backbone 발표Backbone 발표
Backbone 발표
 
Protocol Oriented Programming in Swift
Protocol Oriented Programming in SwiftProtocol Oriented Programming in Swift
Protocol Oriented Programming in Swift
 
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사
 
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기
 
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
 
Metaworks3 Framework workbook 2015
Metaworks3 Framework workbook 2015Metaworks3 Framework workbook 2015
Metaworks3 Framework workbook 2015
 
react-ko.pdf
react-ko.pdfreact-ko.pdf
react-ko.pdf
 
안드로이드 개발자에 필요한 오픈소스이야기
안드로이드 개발자에 필요한 오픈소스이야기안드로이드 개발자에 필요한 오픈소스이야기
안드로이드 개발자에 필요한 오픈소스이야기
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발
 

HOONS닷넷 오픈소스 프로젝트 Part1.

  • 1. HOONS닷넷 오픈소스 프로젝트 Part1. 부제: “ASP.NET MVC로 구현하는 HOONS닷넷” 전호진
  • 2. 강사소개 전호진 HOONS닷넷 시삽(2010~) (주)필라넷 crynut84@gmail.com http://crynut84.tistory.com
  • 3. 진행순서  ASP.NET MVC 소개  MVC의 장점 살리기  HOONS.NET 살펴보기
  • 6. WebForm VS MVC  WebForm - Winform과 유사한 이벤트 기반의 프로그래밍 - 도구상자의 Drag&Drop (서버컨트롤) - ViewState를 이용한 상태관리 - 포스트백  MVC - View Model Controller로 관심의 분리 - ViewState가 없음. - 원하는 HTML 코드 생성(웹표준) - RESTfull - 관심의 분리로 자동화된 단위 테스트 작성에 유리
  • 8. 라우팅 시스템 - WebForm : http://hoons.kr/Board.aspx?page=2&Name=Free - MVC : http://hoons.kr/Board/Free/1 - SEO 최적화. - IIS의 물리적인 파일 구조 노출안함.  System.Web.Routing routes.MapRoute( "BoardList", // 경로 이름 "Board/{BoardKindCode}/{Page}", // BoardIdx는 글 읽을 때 해당 new { controller = "Board", BoardKindCode = "", action="List",Page = 1 }, new string[] { "HOONS.WEB.Controllers" } // 매개 변수 기본값 );
  • 12. MVC도 ASP처럼. @구문을 이용한 스파게티 코드
  • 14. MVC에서 주목한것은? View Model Controller로 관심의 분리
  • 17. 역할에 충실하자(관계의 분리) Model-View-Controller 뷰 모델, 도메인 모델 컨트롤러에서 전달 받은 HTTP 요청에 따라 모델을 Model을 브라우저에 렌더링 컨트롤(비지니스 로직)하여 (데이터를 표현하는 로직) 뷰 선정
  • 18. 역할에 충실하자(저장소 분리)  리파지터리(저장소) - CRUD
  • 19. 역할에 충실하자(저장소 분리)  컨트롤러에서 리파지터리를 이용해 CRUD /// <summary> /// 회원가입 /// </summary> /// <param name="account"></param> /// <param name="collection"></param> /// <returns></returns> [HttpPost] public ActionResult Join(Member account, FormCollection collection) { account.UserBirth = collection["txtYear"] + collection["txtMonth"] + collection["txtDay"]; account.UserPassword = CrytographyUtil.MD5Encrypt("0000"); memberRepository.AddMember(account); return RedirectToAction("JoinComplete", "Account"); }
  • 20. 의존성을 제거하자 리파지터리로 DataSource를 추상화 했더니.. 웹 서비스로 바꿔 주세요.
  • 21. 리파지터리를 Interface로 정의 Interface public interface IMemberRepository { IQueryable<Member> Members { get; } bool AddMember(Member member); bool DeleteMember(Member member); bool UpdateMember(Member member); } 실제 구현 public class MemberRepository : IMemberRepository { public bool AddMember(Member member) { ...생략.... } }
  • 22. Controller에서는 Interface 사용 Controller IMemberRepository memberRepository; memberRepository.AddMember(account); Controller Controller Controller 느슨한 결합 <interface> <Concrete> Repository Repository
  • 23. 문제해결? Controller IMemberRepository memberRepository = new MemberRepository(); memberRepository.AddMember(account); Controller Controller Controller 의존성 <interface> <Concrete> Repository Repository
  • 24. 문제해결?  직접 생성하지 않고 인터페이스의 구현객체 를 얻을 순 없을까?
  • 25. DI(Dependency Injection)  의존성 주입 의존 객체를 외부에서 전달 받음 public class AccountController : Controller { //멤버 리파지터리 인터페이스 private IMemberRepository memberRepository; public AccountController(IMemberRepository memberRepository) { //생성자를 통해 의존객체 전달 this.memberRepository = memberRepository; } //... 생략...
  • 27. DI(Dependency Injection) NInject Spring.NET Castle Windsor Unity - 의존성 관리(생성자, 세터, 매개변수) - 개체 수명 관리(싱글톤, 트랜지언트, 객체 풀, HTTP요청)
  • 29. NInject 적용이 쉽다. ControllerFactory 생성 public class HoonsControllerFactory : DefaultControllerFactory { private readonly IKernel kernel; public HoonsControllerFactory() { this.kernel = new StandardKernel(); AddBindins(); } protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) { return controllerType == null ? null : kernel.Get(controllerType) as IController; } private void AddBindins() { kernel.Bind<IMenuRepository>().To<MenuRepository>(); kernel.Bind<IMemberRepository>().To<MemberRepository>(); } }
  • 30. NInject 적용 하기 MVC Framework에 등록(Global.asax) protected void Application_Start() { ... 생략 ... //MVC ControllerFactory를 NInject로 설정 ControllerBuilder.Current.SetControllerFactory(new HoonsControllerFactory()); }
  • 31. 의존성을 제거 했더니? 역할이 명확히 분리(유지보수!) 자동화된 테스트 작성이 쉬워짐
  • 32. Unit Test 자동화 - 요구사항 정의서에 따라 테스트를 구성하여, 요구사항을 빠짐없이 구현 - 모듈 수정 시 테스트를 통해 기존 코드 안정성 확보 - 빠른 단위테스트
  • 34. Q&A