SQS를 트리거로 해 Factory API에 생산을 요청하는 서비스 구현
먼저 기존 Step 3번까지의 프로세스가 잘 작동하는지를 확인 후 작업을 진행했다.
Serverless 프레임워크를 통해 새로운 람다함수를 배포할 디렉토리를 만들고 함수를 작성해 나갔다.
const axios = require('axios').default
const consumer = async (event) => {
for (const record of event.Records) {
console.log("Message Body: ", record.body);
// let data = JSON.stringify(record.body)
// console.log(data)
// let parser = JSON.parse(data)
// console.log(parser)
// console.log(parseInt(record.body.MessageId))
// let mData = JSON.stringify(data.MessageAttributes)
// console.log(mData)
// let pData = JSON.stringify(mData.MessageAttributeProductId)
// console.log(pData)
// let fData = JSON.stringify(mData.MessageAttributeFactoryId)
// console.log(fData)
// const data = await record.body
const payload = {
MessageGroupId : "stock-arrival-group", //"stock-arrival-group",
MessageAttributeProductId : "ebb60806-b0bf-11ed-8e89-069658f3b1c6", //string(추가 생산이 필요한 제품 아이디),
MessageAttributeProductCnt : "100", //string(추가 생산 요청 수량),
MessageAttributeFactoryId : "d5f87cb3-b0bf-11ed-8e89-069658f3b1c6" , //string(추가 생산을 요청할 공장 아이디),
MessageAttributeRequester : "손동훈", //string(추가 생산 요청 담당자)
CallbackUrl : <https://생산 요청 엔드포인트> //string(생산 내역으로 데이터베이스에 재고를 추가할 서버의 주소)
}
console.log("페이로드 확인: ", payload)
axios.post('http://project3-factory-api.coz-devops.click/api/manufactures', payload)
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
}
};
module.exports = {
consumer,
};
위의 수 많은 주석에서 알 수 있듯...ㅎㅎ JSON 참조 코드를 작성하는데 실패해서 일단 오늘은 아키텍처의 연결을 완벽하게 진행하는 것에 초점을 맞추기로 했다.
이 후 배포를 통해 함수의 작동을 확인했다.
일단 구현은 잘되어 함수가 잘 작동하는 것을 알 수 있었다.
완성한 아키텍처의 구현을 확인한 지금 다행인 건 크게 다르지는 않았다는 점이고 깨달은점은 이전 아키텍처는 보안적 설계가 꽤나 허술했다는 점이었다.
방과 후 강의를 진행해 주시는 홍정민 강사님께서 나한테 이렇게 말씀해주셨다.
"말이 안돼는 이야기긴 하지만 보안, 네트워크, 리소스"중에서 하나를 빼려면 뭘 빼시겠어요?
굉장히 당황스러웠다... 저 셋중 뭐 하나라도 빠져도 되는게 있나?
일단 '리소스'를 빼는게 낫지 않을까요? 라고 대답했다.
그러자 한 번 더 물어보셨다.
"그럼 네트워크, 보안 중에서는요?"
"네트워크가 빠지면 아무것도 못하지 않나요?" 자신 있게 말했다.
"보안이 없으면 다 털릴텐데요?"
순간에는 이해가 안됐지만 서비스를 구현하면서 이해하게 되었다.
아무렇지 않게 클릭하는 이 리소스들 모든 게 사실은 돈이었다.
올바르게 공부한 DevOps라면 회사의, 나의 서비스가 안전할 수 있도록 하는 마음가짐을 가지는 게 먼저라는 생각이 들었다.
이 생각을 완전하게 적용하지는 못했지만 오늘 팀과 함께 설계 후의 아키텍처를 다시 그려보았다.
처음에는 2시간이 넘게 걸리던 것이 30분도 안돼서 뚝딱 나오게 되었다.
SNS에도 같은 방법을 적용할 수 있지만 확장성과 유연성을 고려해 배치한
SNS에 하나의 람다 서비스에 대한 엑세스 정책을 허용하는 방법은 리소스의 설계 방향과 다르다고 생각하여 좀 더 깊은 고민이 필요하다는 생각이 들었다.
오늘 팀별로 작성한 아키텍처와 그 아키텍처를 왜 구성했는지에 대한 간단한 면접을 진행했다. 내 생각과 답변을 정리해보면 좋을 것 같아 추가로 가져와 봤다.