요새는 새 컨텐츠에 사용될, 서버 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 식의 구현 자체가 좀 별로지 않나 싶다는 것이다.

( 내가 맞닥뜨린 문제 상황에 한정해서 말이다. )