Lesson Learn 1
버그, 장애, 타산지석으로 배우는 Do & Don't
Template
Problem
Why
What I Learned
글로벌 모듈, 특히 전역변수 설정은 조심해서 다루어야 한다.
Problem
- aws sdk에서 메타데이터 서비스 호출 후 전역객체의 크리덴셜 파일을 덮어쓰기 했음.
- 전혀 다른 파일에 있는 s3 호출 부분에서 인증 키가 날라감.
- 그 s3 파일에서는 시크릿 키로 aws sdk 전역객체 설정을 하고 있었음.
Why
- aws sdk의 싱글톤, 전역설정 객체가 다른 코드에 영향을 주는지 간과했음.
What I Learned
- 전역 객체를 설정하는 코드 부분은 액션에 가깝다.
- 전역 객체의 인스턴스를 초기화 하지 말고 각 모듈에서 초기화 하고 가지고 있는것이 좋다.
- ec2관련 설정 파일은 해당 모듈, s3 관련 설정 파일은 해당 모듈 내에서 인증과정을 초기화 하자.
- 인증과정도 서로 다르기 때문이다. IMDSv2는 세션토큰 방식, s3는 시크릿 키 방식
- 모듈간의 특히 전역 의존성을 가지는것은 테스트, 예측 가능성 모두 판단하기 어렵다.