요새는 새 컨텐츠에 사용될, 서버 api 의 디비 관련 쿼리와 로직을 직접 짜고 있다.
현재 서버 개발자님은 외주 개발 상태라서 , 전에는 새로운 컨텐츠나 서버 변경사항이 생기면
이 쪽에서 문서로 명세를 해서 전달하고, 받고, 피드백하고 수정하는 식으로 개발을 했지만,
내가 Node 를 좀 만지게 된 이후로는, 이쪽에서 Node.js 로 코딩해서 새 기능 관련 로직을 짜서 테스트 서버를 구성하면
외주 서버 개발잔미이 그것에 대해서 피드백과 성능 개선, 그리고 AWS 에 서버를 세팅하고, 로드밸런싱이나 스케일 관리 등
성능과 유지보수에 신경 써주시는 식으로 프로세스를 개선했다.
새로운 컨텐츠 확장에 필요한 기능들을 구현하다가,
Array 객체의 요소를 처음부터 훑다가 , 특정 id 를 가진 요소에서 멈춘다음, 그 id 이전의 요소 갯수를 저장하는 식으로 방향을 잡았다.
( 랭킹 관련 로직의 오차를 개선하는 중이었다. )
평소에 쓰던 C# 으로 하면 다음과 같이 쉽게 구현된다.
void DoExample()
{
int index = 0;
foreach ( var item in Array )
{
if (item.id == "원하는ID")
{
break;
}
else
{
index ++;
}
}
}
하지만 지금 서비스하는 프로젝트는 Node 기반이니, 나름대로 돌아갈 것(?) 이라고 추측하고 다음과 같이 코딩해보았으나 실패했다.
function DoExample()
{ //아래는 잘못 구현한 코드 입니다.
int index = 0;
Array.forEach((item) => {
if(item.id ==='원하는ID')
{
break; // Vs Code 에서는 break 가 자동완성에 걸렸지만, js 자체에서 지원하지는 않는다고 한다.
}
else
{
index ++;
}
} )
}
그래서 좀 찾아본 결과, break 를 나름대로 커스텀해서 구현하거나 ( 별로 우아하지 않다고 판단 . )
try catch 로 나름대로 비슷하게 구현할 수 있긴 하겠지만, ( 마찬가지 )
여러모로 다른 문법으로 구현해야 한다고 판단했다.
그러던 중, 다음 블로그 분께서 제안한 방법대로 Array.some 을 사용해봤다.
( 검색어는 “node foreach break” 로 했습니다. )
해당 블로그 주소 : [https://blog.outsider.ne.kr/847]
function DoExample()
{ //아래는 잘못 구현한 코드 입니다.
int index = 0;
Array.some((item) => {
if(item.id ==='원하는ID')
{
return true; // Array.some 의 순회는, true 가 반환되면 멈춘다.
// 응용 -> return false; 는 마치 c# 에서 쓰던 contiue; 처럼 쓸 수 있다.
}
else
{
index ++;
}
} )
}
위와 같이 일단 업무는 잘 마무리 했고,
집에 와서 해당 API 문서를 읽어보았다.
- Array.some 에 관한 설명
arr.some(callback[, thisArg])
some은 callback이 참(불린으로 변환했을 때 true가 되는 값)을 반환하는 요소를 찾을 때까지 배열에 있는 각 요소에 대해 한 번씩 callback 함수를 실행합니다. 해당하는 요소를 발견한 경우 some은 즉시 true를 반환합니다. 그렇지 않으면, 즉 모든 값에서 거짓을 반환하면 false를 반환합니다. 할당한 값이 있는 배열의 인덱스에서만 callback을 호출합니다. 삭제했거나 값을 할당한 적이 없는 인덱스에서는 호출하지 않습니다.
이름을 참 잘지은 것 같기도 하고. 어찌보면 못지은 것 같기도 하고…
( 아마 언어의 관습? 이 주는 늬앙스가 다른 것 같다. js 류 네이밍은 참 힙하다. )
서비스로 비슷한 함수인
- Array.every 에 관한 설명
every는 callback이 거짓을 반환하는 요소를 찾을 때까지 배열에 있는 각 요소에 대해 한 번씩 callback 함수를 실행합니다. 해당하는 요소를 발견한 경우 every는 즉시 false를 반환합니다. 그렇지 않으면, 즉 모든 값에서 참을 반환하면 true를 반환합니다. 할당한 값이 있는 배열의 인덱스에서만 callback을 호출합니다. 삭제했거나 값을 할당한 적이 없는 인덱스에서는 호출하지 않습니다.
이 친구는 반대로 return false 가 되면 즉시 멈춘다.
그리고 some 과 array 는 원래는 그 자체로 bool 을 리턴하는 일종의 검사 ? 함수 지만 ( ?을 넣은 것은 내가 멋대로 부른 용어라서 그렇다. )
자바스크립트 답게 콜백을 좀 섞어주면 .. 나름대로 멋진 foreach 대용이 된다.
슬픈 사실은, 이렇게 알아보고 구현하고 정리하고 나니
foreach - break 식의 구현 자체가 좀 별로지 않나 싶다는 것이다.
( 내가 맞닥뜨린 문제 상황에 한정해서 말이다. )