새 문서 공간에 오신 것을 환영합니다!
웹프레임워크는 각기 다른 진영에서 상호 영향을 주며 발전을 해왔으며
사용방법의 차이일뿐, 모던한 웹 프레임워크는 거의 공통 요소를 가지고 있습니다.
- WAS에서 분리되어 스탠드얼론 마이크로 서비스를 할수 있는 방법
- 접근하는 하위 엔드포인트 라우터를 일괄적으로 정의하는 방법
- DB를 포함하여 다양한 저장소를 핸들링하고 성능을 위해 캐싱을 할수 있는 방법
- 다양한 뷰 템플릿엔진을 선택할수 있는 방법과 다양한 JS 프레임워크과 매끄럽게 연계하는방법
- 웹소켓을 포함하여 실시간 스트리밍처리를 할수 있는방법
어느것이 더 우월하고 그럴것없이 하나만 잘 사용하면 나머지도 자연스레 잘 활용할수 있게됩니다.
다만 데이터 분석을위해 파이썬의 이점이 있다고 하면 django를 선택한다던지,
요즘 대세인 Spark 스칼라의 언어의 이점을 활용한다면 PlayFramework를 선택한다던지
웹소켓 브라우져호환이 중요하고 트랜스포터가 가장 잘지원되는 socket.io사용을 위해서 node.js 를 선택한다던지
특수한 목적을 위해서 어떠한 웹 프레임워크가 장점이 있을수 있습니다.
특수목적이 없고 공통요소의 스펙이 유사한 상태에서 웹프레임워크를 변환할 이유는 없습니다.
모던웹 프레임웍의 개발방법을 포함하여 공통 스펙은 거의 동일하기때문에 익숙한것을 잘 활용하면 되며
특수한 목적이 필요할경우 다른 방식으로 개발을 할수 있게
마이크로 웹서비스의 관점에서 다양한 웹 프레임워크를 정리하였습니다.
Spring Boot
- 주언어 : Java
- Link : https://spring.io/projects/spring-boot
- WebSocket : org.springframework.web.socket
- MVC : thymeleaf 를 포함하여 여러가지 뷰템플릿 선택가능
Routee 정의 방법
@Controller @RequestMapping(path="/") //이 클래스의 루트 Router를 설정한다. public class UserSearchAPI { }
Get Method 코드 샘플
@GetMapping(path="/usersearch") //이 멤버함수의 하위 주소를 설정한다. public @ResponseBody List<User> userSearch( @RequestParam String name, @RequestParam int pagenum, @RequestParam int pagesize ){ PageRequest pageReq = new PageRequest(pagenum, pagesize); Page<User> userPage =userPageRepo.findByNameContaining(name,pageReq); return userPage.getContent(); }
PlayFrameWork
- 주언어:Java/Scala
- Link : https://www.playframework.com/
- Websocket: AkkaStream or Atmosphere
- MVC : Twirl 포함됨 ( ASP.NET Razor 에서 고안됨)
- 사용한 사례:상용 게임 로비 API 서비스에서 이것을 이용하여 개발함 PokerGame
Routee 정의 방법
GET /rest/GameInfo GameInfo()
Get Method 코드 샘플
def GameInfo = Action { Ok( Json.toJson( "할롱") ) }
서비스 실행코드
play run "9000"
Microsoft.Owin.Hosting(ASP.net)
- 주언어:C# , Open소스이지만, Micorosoft의 네임스페이스에 포함된것으로 보아 IIS와는 별개로 MS에서 밀어주는듯
- 변경사항 : Asp.net 에 표준으로 입성함 (IIS가 없어도 서비스가 가능함 )
- Link : http://owin.org/
- Wesocket:WesocketSharp,SuperWebSocket , SignalR
- MVC : ASP.net 에 IIS.Hosting을 밀어내고 이미 통합되었으며 ASP.net의 Razor를 포함하여 여러가지 선택가능
Routee 정의 방법
Get["/GameInfo/{tid}", runAsync: true] = async (_, token) => .......
Get Method 코드 샘플
public async Task<Response> GameInfo(int tourId){...}
서비스 실행코드
var host = new NancyHost(new Uri("http://localhost:9000"); //Host 여러가지 선택가능,Nancy는 한가지 호스팅 방법임(IIS 종속을 없애기위해 NancyHost를 선택함) host.start()
Node.js
- 주언어:Javascript
- Link : https://nodejs.org/ko/
- Wesocket:Socket.io
- MVC : Express, Jade를 포함하여 여러가지 View엔진을 선택할수 있음
Routee 정의 방법
app.use('/', routes);
Get Method 코드 샘플
router.get('/GameInfo', function(req, res, next) { res.send('respond with a resource'); });
서비스 실행코드
server.listen(80, function () { console.log('Example app listening on port 80!'); });
특별 페이지
There is no content with the specified labels