NextWebFramework 2 : 다언어 모듈분산형 웹개발 프레임워크

1 minute read

1. 전체구조 View Engine Model View MQ Engine MQ Model DB View Engine Model

  1. 간소화 구조 엔진모델합치기 View Engine+Model View MQ Engine+Model DB View Engine+Model

  2. MQ빼고직접호출 View ajax(http) Engine+Model DB

프레임워크라는 말이 어울리나.. 아키텍처라고 해야할까

장점 : 멀티플랫폼 개발시, 다양한 언어로 대규모서비스 개발시, 병렬확장구조 개발시

단점 : 성가실수있다

- 필요한것

1. 각 모듈간 호환되는 도메인 정의가 필요하다. 예를들자면… Avro? 그런데 Avro도 이종언어간 통신시에 문제가 발생하는 경우가 있다. avro생성기는 Python의 숫자형을 Java의 Int형으로 변환을 시키는데 이 경우 자릿수가 달라서 Python->Java 방향으로 전송시 오류가 발생한다.

2. Model부분 간소화. rails와 같은 getUserByUsername, getUserByAddress같은 명령이 자동으로 생성되야한다. 자동이 안되는 부분은 model에서 수동으로 처리해야하니까…. ORM의 경우 rails처럼 자동으로 메서드 생성이 안되기도 하고 명확한게 좋기도 하고 자바에 다들 익숙하기도 하니까…. selectQuery(table(by(columns…), joinColumns(…)) …)같은 형태면 어떨까 싶다. V-E-M 구조를 사용할 경우 View설계와 함께 도메인 설계 다음에 테이블 설계가 먼저 이뤄진 상태일테니…. QUERY의 경우 select * from Users u, Board b where u.id = b.user_id; 와 같은 쿼리를 넣고 이름을 정하면 이 요청에 대한 응답은 자동생성….이 되야하는데 데이터 타입이 애매하니 avro나 각 언어 코드로 도메인을 같이 설정해줘야할것같다. 구현은 mybatis를 사용하면 간단. 다른 언어의 경우에는 비슷한 방법을 찾아보도록 해야겠다. 조인데이터의 경우에는 insert, update는 지원되지않고 각 테이블별로 자동으로 생성되는 insert,update코드를 사용하도록 한다.

3. Engine은 MVC모델에서 Service단 역할을 하는데 이 경우 Model의 데이터를 Direct로 필요로 하는 경우가 많다. 이런 처리를 위해서는 pass 자동화 필요. pass의 경우에는 Engine을 거치지 않고 Model로 요청. 각 테이블이 MQ의 채널이 된다면 Engine으로 매핑된 테이블과 엔진으로 매핑된 테이블을 분리시킬 수 있다.

4. Engine부분이 분리되어있기 때문에 View에서 Cross도메인 제약때문에 js만가지고 코딩을 하기는 힘들다. View와 함께 있는 php코드라면 요청 라이브러리를 지원해서 메서드를 호출하게 해서 직접 호출하고, java의 경우에는 controler를 자동으로 생성해주도록 한다. thrift에서 이 부분이 자동화되던데… 좀 고려해봐야겠다.

5. 각 모듈간의 보안..MQ를 쓰는 경우 여기 의존하도록 한다. 직접 통신하는 경우에는 … 설정값 중앙화 라이브러리를 추가로 만들어야하지 않을까…?

6. 모듈분리로 인해 통신포인트가 많아져 속도상에 문제가 발생할 가능성… 있긴한데… 클까? WAS-DB(1개)에서 View-MQ-Engine-MQ-Model-DB(5개)로 늘어난다. 요즘 웹페이지가 예전처럼 단일호스트단일페이지가 아니라 로그인하고 화면을 보여주는데도 리소스서버WAS인증서버등등을 거치게 되는것을 고려한다면 뭐 별로 커지는건 아닐지도 모르겠다. 다중 ajax요청을 묶음배송기능을 추가한다면 이 부분을 커버가능하겠다. 그런데 ajax묶음배송기능을 그냥웹에서도 쓰게될텐데…..

 

만들것 :

ajax묶음배송기능.

ajax용 controller 자동생성기능. javascript에서 도메인 설정을 해놓으면 거기에 맞게 자동으로 처리되도록… thrift 사용을 심각하게 고려.

Model자동화기능. 테이블을 스캔해서 domain파일을 자동생성해주는 기능은 필수. 만들어본적은 있는데… 디비마다 값이 다를 수 있어서 내가 쓰는 디비만 만들고 나머지는 설정파일을 추가해서 사용하도록 변경필요.