Azure Web App

Azure Web App 서비스

  • Azure 에서 HTTP 기반 웹 어플리케이션 및 API 를 호스팅 할 수 있는 Pass 서비스
  • Azure VM 과 달리 배포, 스케일링, 보안, 관리 서비스 등을 Azure 에서 관리하는 형태로 제공한다.
  • 주요 기능
    • 여러 언어 및 프레임워크 지원 (ASP.NET, ASP.NET Core, Java, Ruby, Node, PHP, Python)
    • OS 및 언어 프레임워크를 자동으로 패치하고 유지 관리
    • 컨테이너화 및 Docker 서비스 지원
    • 고가용성을 가진 글로벌 규모 조정
    • 보안 및 규정 준수
    • 서버리스 코드
    • 배포 슬롯 (무중단 배포 및 테스트 환경 제공)

MPA + SSG hybrid

  • 장점:
    • 정적 페이지에 국한 되는 부분이지만 프론트엔드와 서버사이드 별도 분리 개발이 가능하다.
  • 단점:
    • 페이지의 일정 부분이 아닌 하나의 전체 페이지이기 때문에 서버사이드간에 데이터를 주고 받을 수 없다.
    • 동적 url 처리 불가

목업 구현 테스트 (Java + Nuxt)

SPA 페이지의 특정 라우트 맵핑 경로가 ‘/kr/ko/e/’라고 가정

스프링부트 MPA + SSG (hybrid) 디렉토리 구조

서버 사이드 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// controller - HomeController.java

@Controller
public class HomeController {
// MPA 라우트
@GetMapping({"", "/"})
public String index(Model model) {
model.addAttribute("data", "hello!");

return "index";
}

// SPA 라우트
@GetMapping({"/kr", "/kr/ko"})
public String nuxt_redirect() {
return "redirect:/kr/ko/e";
}
// SPA 라우트
@GetMapping("/kr/ko/e")
public String nuxt() {
return "/client/index";
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// config - WebConfig.java

@Configuration
public class WebConfig implements WebMvcConfigurer {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

// SPA 새로고침 시 정상 작동 설정
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/kr/ko/e/**")
.addResourceLocations("classpath:/static/kr/ko/e/")
.resourceChain(false)
.addResolver(new PathResourceResolver() {
@Override
protected Resource getResource(String resourcePath, Resource location) throws IOException {
Resource requestedResource = location.createRelative(resourcePath);
// logger.info("requestedResource:: " + requestedResource);

return requestedResource.exists() && requestedResource.isReadable()
? requestedResource
: new ClassPathResource("/templates/client/index.html");
}
});
}
}
공유하기