인프런 커뮤니티 질문&답변

박지훈님의 프로필 이미지
박지훈

작성한 질문수

스스로 구축하는 AWS 클라우드 인프라 - 기본편

php가 아닌 spring프로젝트를 배포할 때 질문입니다.

해결된 질문

작성

·

565

0

안녕하세요. 수업에서 배운 3Tier인프라를 똑같이 배포하려는데, 이 때 PHP가 아닌 spring Java 프로젝트로 배포하려고 합니다.
이 때 각각의 서버에 프로젝트 파일을 어떻게 배포해야할지 모르겠어서 며칠간 구글링해봐도 답을 찾지 못해 글을 남깁니다.

원래 spring 프로젝트를 배포할 때, 대부분 ec2 인스턴스에 Tomcat서버를 설치하고 프로젝트의 jar파일 또는 war파일을 Tomcat서버에 압축 해제해서 프로젝트를 배포하는 걸로 알고 있습니다.

이렇게 배포하는 방법은 WAS인 Tomcat서버를 Web서버이면서 동시에 App서버로 활용하는 것인데, 이렇게 배포하는 방법이 WAS-DB의 2Tier 구조인가요?
저는 2Tier구조가 아닌 강사님이 알려주신 Web - WAS -DB 의 3Tier로 배포하려고 합니다.

현재 Web인스턴스에 Apache, WAS인스턴스에 Tomcat, RDS인스턴스에 mysql을 설치해준 상태입니다.

그런데 spring 프로젝트 파일을 어떻게 배포해야 할지 모르겠습니다.
WAS인스턴스에 war나 jar파일을 압축 해제시키면 배포가 가능하지만
3Tier구조로 배포하려니 프로젝트 압축 파일을 어떻게 각 서버에 넣어주어야 하는지 모르겠습니다.
답변주신다면 정말 감사하겠습니다.

답변 1

0

안녕하세요. 강의를 들어주셔서 감사합니다.

여기에서 자세한 내용을 설명드리기는 어렵고 간단하게 구성을 설명드리겠습니다. 그리고 구글링에서 "aws 3 tier apache tomcat spring boot" 라고 검색하시면 정말 많은 정보가 나오니 참조 바랍니다.

AWS 3 Tier Architecture 에서 Java Spring 을 구성하시려면 다음과 같은 구성으로 가정해보겠습니다.

인터넷 --> IGW --> External ALP --> Public Subnet(Apache 설치) --> Internal ALB --> Private Subnet(Tomcat 설치) --> Private Subnet(RDS : MySQL)

 

AWS 3Tier Archiecture Apache + Tomcat 연결 순서

1. Public_subnet 에서 apache 를 설치하고 설정파일인 httpd.conf에 tomcat 연동을 위한 설정을 추가하고, 톰캣에서 처리할 요청을 지정합니다.

2. 사용자는 External ALB 의 Public DNS Name 으로 접속합니다. 그럼 Public Subnet 에 아파치 웹 서버에 접속합니다. (port:80)

3. apache 웹 서버는 사용자의 요청이 들어왔을때, 이 요청이 톰캣에서 처리되도록 지정된 요청인지 확인한다. 여기서 지정된 요청을 Internal ALB 로 보내고 여기서 Private Subnet 의 Tomcat 으로 요청이 보내집니다.

4. 톰캣에서 처리해야 하는 경우, 아파치 웹 서버는 톰캣의 AJP 포트(8009 port)에 접속해 요청을 톰캣에게 전달한다.

5. 톰캣은 아파치 웹 서버로부터 요청을 받아 처리 후, 처리 결과를 다시 아파치 웹 서버에게 돌려준다.

6. 아파치 웹 서버는 톰캣으로 전달받은 처리 결과를 클라이언트에게 전달한다.

감사합니다.


박지훈님의 프로필 이미지
박지훈
질문자

상세한 답변 정말 감사합니다. 그러면 Web인스턴스에는 index.html이나 css등의 정적파일을 저장하고, WAS인스턴스에는 스프링프로젝트를 빌드한 jar파일을 설치해주면 되나요?

스프링프로젝트를 빌드하면 jar파일에 정적 파일도 들어가게 되는데 이 index.html, index.css등의 정적파일이 Web인스턴스에 저장한 정적파일과 충돌되지 않게 하려면 jar파일에서 정적파일만 제거해주면 되는걸까요?

제가 질문을 어렵게 드리는 것 같아 죄송합니다.

안녕하세요.

여기서 주의있게 볼 부분은 트래픽의 흐름이라고 봅니다. 아래와 같은 트래픽입니다.

User --- 인터넷 --- IGW --- ALB --- Public Subnet:Web Server --- ALB/NLB --- Private Subnet:Tomcat --- RDS:MySQL

그래서 Web Server 인 Apache 는 mod_jk 등으로 연결된 Tomcat 에 요청을 보내고 Tomcat 은 RDS:MySQL 로 쿼리하고 다시 역순해서 User 에게 응답이 가는 트래픽 흐름입니다.

Web Server 소스 파일과 Tomcat 의 Jar 또는 War 파일의 요청과 응답을 분리가 되어 동작하게 됩니다.

감사합니다.

박지훈님의 프로필 이미지
박지훈

작성한 질문수

질문하기