현재 진행중인 프로젝트에 대해 블로그에 포스팅을 한 적은 없기 때문에 프로젝트에 대한 간단한 구조를 언급한다.
Https
프로토콜 사용을 위해 ACM
에서 도메인을 인증받았고, Route53
을 이용해 호스팅 중이다. 도메인은 가비아에서 구매를 하였다. 서버는 AWS EC2
를 사용하고 있으며, Tomcat10
을 사용하여 서버를 구축하였다. 자바 스프링으로 서비스 로직을 구현하여 구동중이다.
Https 프로토콜을 이용해 서비스에 접근 시 정확히 50퍼센트 확률로 502 Bad Gateway
오류가 발생한다. 무슨 말이냐면, 매 요청에 대해 번갈아가면서 200 OK
와 502 Bad Gateway
응답이 번갈아 수신된다.
가장 먼저 아마존에서 제공하는 문제 해결 방법에 대한 글을 읽어보았다.
How do I troubleshoot Application Load Balancer HTTP 502 errors?
해당 글에서 Application Load Balancer
의 문제를 해결하기 위해 Access loging
을 설정할 것을 이야기 하고 있다.
access loging을 설정하는 것은 아마존의 가이드를 따라 진행하였다.
Enable access logs for your Application Load Balancer
로깅을 위해서는 로그가 저장될 저장장소가 필요하다. AWS에서 제공하는 S3 버킷을 만들어 보자.
버킷 생성 과정은 아래의 티스토리를 참고하였다.
[AWS] S3 버킷 프리티어 생성
버킷으로의 접근 권한을 설정하기 위해 버킷 정책을 설정한다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::[elb-account-id]:root"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::[bucket-name]/[prefix]/AWSLogs/[aws-account-id]/*"
}
]
}
elb-account-id
: 사용하는 S3의 리전마다 정해진 값이 있으며, 해당 값은 아래의 아마존 Docs를 참고하면 된다.bucket-name
: 로깅을 저장할 버킷의 이름을 적는다.prefix
: 로깅을 저장할 버킷에서 사용할 prefix를 적는다.aws-account-id
: 해당 값은 콘솔의 우측 상단의 본인 아이디를 클릭하면 확인할 수 있다.아래의 글들을 참고하여 설정하였다.
로그 파일을 S3에 저장하기 위해 로드밸런서와 S3 버킷을 연결하자.
Attributes
> Edit
를 클릭Monitoring
> Access logs
를 활성화 한다.Browse S3
로 로그를 저장할 버킷을 선택한다.변경 사항 저장 단계에서 Access Denied 된다면 S3bucket의 permission을 다시 확인해 보자.
모든 과정이 끝나면 설정이 잘 되었는지는 버킷에서 확인할 수 있다.
[bucket-name]/[prefix]/AWSLogs
로 가서 테스트 파일이 생성되었는지 확인하자.
바로 생성 확인이 안될 수도 있으니 꼭 새로고침을 눌러서 확인해 주자.
502 에러 해결을 위해 로깅 설정을 완료했다.
다음 포스팅에서 로그를 확인해 보자.