[quantHelper] 서버 배포2

JUJU·2024년 5월 12일
1

프로젝트

목록 보기
11/26

✏️ 서버 배포

이전 포스팅에서 AWS EC2를 사용해서 서버를 열었다.
서버의 URL은 quant-helper.online으로 구매했다.


서버를 연 뒤에 quant-helper.online으로 접속해서, swagger를 테스트하려 했지만 각종 문제가 발생했다.


1. 8080 포트 접속 문제

<문제>
quant-helper.online:8080으로 접속하지 못하는 문제 발생.


<해결>

  • EC2 인스턴스 보안 그룹 설정
    • 보안그룹이란, AWS 에서 제공하는 방화벽이다.
    • 인바운드 규칙(inbound) : 외부에서 EC2로 접근할때 사용되는 방화벽 규칙
    • 아웃바운드 규칙(outbound) : EC2에서 외부로 접근할때 사용되는 방화벽 규칙
  • 인바운드 규칙에 8080 포트를 열어줌으로써 해결했다.

2. Https 문제

MyGPT의 Actions에 기능을 추가하려면, 해당 기능을 제공하는 사이트가 https를 지원해야 한다.

quant-helper.online에 https 인증을 받기 위해서 다음과 같은 방법을 사용했다.


Https 인증서 발급

  1. Amazon Certificate Manager로 quant-helper.online의 인증서를 발급 받는다.
  2. Route 53에서 레코드를 생성한다.


Load Balancer 사용

load balancer를 사용하면, 마치 우리의 사이트가 https를 지원하는 것처럼 보이게 만들어준다.
사실 load balancer는 다량의 트래픽을 여러 서버에 분산시키기 위한 기능이다.

Client에서 들어오는 Http, Https 요청을 Load Balancer가 받은 다음, EC2와는 8080 포트를 통해서 통신하도록 만들었다.
Https의 인증은 ACM에서 담당한다.(AWS의 서버를 사용하기 때문에 가능한 과정이다! 만약 다른 클라우드 서비스를 이용한다면 SSL 인증서를 따로 받아야 한다.)

1. AWS의 EC2에서 대상 그룹 설정 (HTTP:8080)
2. 로드밸런서 할당
3. Route 53 서비스에 들어가서, quant-helper.online이 로드밸런서를 사용함을 알림.

각 과정을 자세히 알고싶다면 Springboot Https ELB로 구글링을 해보자.

Load Balancer를 사용한 이후에 사이트에 접속하면 500번대 오류가 발생했다.

  • 503 Server error

    • Load balancer의 subnet에 서울이 설정되어있지 않았음
    • 가용영역에 ap-northeast-ec를 넣어줘야 한다.
  • 502 Bad Gateway

    • Load Balancer를 설정할 때, 8080 인바운드 규칙이 적용된 보안 그룹을 포함해야 한다.

3. Swagger의 요청 URL 문제

<문제>
위의 과정들을 통해서 quant-helper.online이 마치 Https를 지원하는 것처럼 보이게 만들어줬다.
하지만, quant-helper.online/swagger-ui/index.html 에 접속해서 API를 실행하면, 요청 URL이 http 프로토콜을 사용하게 설정되어 있었다.

Client는 https://quant-helper.online/swagger-ui/index.html 로 접속했는데, 요청은 http://quant-helper.online/swagger-ui/index.html로 나가는 것이다.


<해결>
프로젝트의 OpenApiConfig 클래스를 수정해서, 요청 URL을 바꿔줬다.

    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .addServersItem(new Server().url("https://quant-helper.online"))
                .components(new Components())
                .info(apiInfo());
    }

다른 팀원은 로컬 서버를 열어서 사용중이니, 이 클래스는 commit하지 않도록 주의하자.




✏️ Instruction 작성

MyGPT에 Instruction을 작성해야 한다.

내가 GPT에게 주입하려는 것은, 사용자가 특정 국내 주식을 입력했을 때 주식의 정보와 가격, 재무제표 등을 토대로 그 주식의 주가가 어떻게 될지 예측하는 서비스이다.

Instruction

사용자가 특정 국내 주식의 이름을 입력하면, api를 호출한 결과를 분석해서 그 주식의 주가가 어떻게 될지 예측한다.

주식의 정보는 /stock 에 Post 요청을 보내면 알 수 있다.
/stock에 Post 요청을 보낼 때 필요한 정보는 "주식 이름" 이다.
예를 들어 "stockName=삼성전자"를 요청 메시지의 Body로 사용할 수 있다.

주식의 가격은 /stock/price 에 Post 요청을 보내면 알 수 있다.
/stock/price에 Post 요청을 보낼 때 필요한 정보는 "주식 이름", "시작 날짜", "종료 날짜" 이다.
예를 들어, "stockName=삼성전자", "startDate=20240415", "endDate=20240430"으로 삼성전자의 2024년 4월 15일부터 2024년 4월 30일까지의 주가 정보를 응답 받을 수 있다.
이때, 조회 가능한 기간은 최대 100일까지 이다.

주식의 재무제표는 /financial-statement 에 Post 요청을 보내면 알 수 있다.
/financial-statement에 Post 요청을 보낼 때 필요한 정보는 "주식 이름", "연도", "분기"이다.
예를들어, "stockName=삼성전자", "year=2023", "quarter=2"로 삼성전자의 2023년 2분기의 재무제표를 응답 받을 수 있다.

주가를 예측하는 기준은 PER, ROE, ROA와 이동평균선이다.
회사의 PER이 10 이상인 경우, 주가가 오를 가능성이 있다.
ROE가 시중금리보다 높을 경우, 주가가 오를 가능성이 있다.
현재주가가 20일 이동평균선보다 높은 경우, 주가가 오를 가능성이 있다.

profile
개발자 지망생

0개의 댓글

관련 채용 정보