Search

반응형

'분류 전체보기'에 해당되는 글 576건

  1. 2023.05.07 [자바스크립트]Promise 쉽게 이해하기 편. 프라미스, then(), async
  2. 2023.04.23 일과 건강
반응형

안녕하세요. 신기한 연구소입니다.

최근 Vue.js 프로젝트를 진행하면서 자바스크립트 Promise 객체의 then()을 봤습니다.

무엇일까요?

비동기를 지원하는 객체를 알게 되었습니다.  바로 JavaScript의 Promise 객체입니다.

 

비동기(async)란?

혼자 요리를 할 때 당근, 양파, 감자 등 재료를 도마 위에 순서대로 손질을 합니다. 동시에 모든 재료를 손질할 수 없기 때문입니다. 이렇게 하나씩 재료를 손질하면 다른 일을 동시에 할 수 없습니다. 이것을 동기라고 합니다.

재료 손질하기 전 가스레인지에 물을 담은 냄비를 올리고 끓입니다. 물이 끓을 동안 일하면서 간단하게 먹을 간식을 전자레인지에 넣고 1분을 설정하고 시작버튼을 누릅니다.  전자레인지가 작동하는 동안 도마 위의 재료를 손질합니다. 1분 뒤 전자레인지에서 완료되었다는 소리가 납니다. 간식을 꺼내옵니다. 그리고 다시 도마 위의 재료를 손질합니다. 10분 뒤 물이 끓어서 가스레인지 불을 끕니다. 이렇게 가스레인지나 전자레인지를 작동시키고 완료될 때까지 도마 위의 재료를 손질할 수 있는데 이를 비동기라고 합니다. 즉, 다른 작업을 시켜놓고 완료될 때까지 다른 일을 할 수 있는 것을 의미합니다.

 

Promise 란?

const myPromise = new Promise((resolve, reject) => {

   // 업무 프로세스

});

방금 javascript의 promise 객체 (myPromise)를 생성했습니다. 객체는 new 키워드와 생성자 Promise()를 통해서 만들어집니다. 생성자는 실행(executor) 함수를 인자로 받습니다. 실행 함수는 resolve 함수 및 reject 함수 인수를 전달하는 함수입니다. 실행 함수는 비동기 (async) 작업을 가지고 있습니다. 비동기 작업의 결과는 언제 올지 모릅니다. 그래서 promise 객체를 사용해서 해당 이벤트를 처리할 수 있습니다.

실행 함수내 비동기 (async) 작업을 실행하면 두 가지 결과를 기대할 수 있습니다. 바로 성공 또는 실패입니다. 작업이 성공적으로 실행되었다면 executor(실행 함수)의 첫 번째 인자인 resolve 함수를 호출해서 결과를 받을 수 있습니다. 오류가 발생하면 두 번째 인자인 reject 함수를 호출합니다.

호출한다는 의미가 사실 좀 이해하기 힘들었습니다. 어떻게 호출을 하는것일까요?

위 예제는 아주 간단한 Promise 예제입니다. 비동기(async) 실행 함수는 setTimeout()으로 대체했습니다. 여기서 Promise() 생성자의 인수 실행함수는 다음과 같습니다.

실행 함수는 2개의 함수형 인자를 갖고 있습니다. 위 예제는 정상 처리된 경우엔 첫 번째 함수형 인자인 resolve를 호출하는 예를 보여주고 있습니다. setTimeout()이 시작하고 정상 처리가 된다면 '로그1'을 출력합니다. 그리고 resolve('해결') 함수를 호출했습니다. 호출하면 어떤 이벤트가 일어날까요? 사실, 실행 함수에서 resolve()를 호출해도 눈에 보이는 결과는 없습니다. 그렇다면 어떻게 사용하는 것일까요?

위 13번째 라인을 보면 확인할 수 있습니다. 첫 번째 예제를 실행하면 다음과 같은 결과가 출력됩니다.

'로그3'이 출력된 위치를 잘 확인하세요. 바로 여기서 resolve()의 특징을 확인할 수 있습니다. 3초 동안 setTimeout()이 대기하지만 (비동기처럼) '로그3'은 기다리지 않고 출력됩니다. 그렇게 소스의 끝부분까지 가고 종료가 되었습니다. 3초 후 '로그1'이 출력되고 resolve('해결')이 실행됩니다. 앞에서 얘기했듯이 resolve는 실행돼도 눈에 보이는 결과가 없다고 했습니다. 그런데 13번 라인의 myPromise.then이 실행되고 .then도 실행되었습니다. 해당 console.log가 실행되면서 '해결', '해결1'이 출력되었습니다.

new Promise 생성자 내 실행 함수에서 resolve()를 호출하면 생성된 promise객체(myPromise)의 then()으로 연결되어 호출됩니다. 둘이 연결되어 있습니다.

.then .then으로 호출을 하면 계속 연결되고 그 값을 이어받을 수 있습니다. 

resolve 함수 내 인수는 어떤 타입의 값도 넣을 수 있습니다. resolve(배열), resolve(객체)... 

보통은 비동기 실행 함수를 시작하고 결괏값을 받으면 그 결과에 대한 값 또는 원하는 처리값을 resolve() 인수로 담은 후 호출하도록 구현합니다. 비동기 실행 함수가 실행 완료되면 resolve()를 호출하게 구현하고 myPromise.then(인수)가 구현되어 있으면 해당 then의 인수로 그 값을 전달받게 됩니다. 물론 비동기라서 해당 then이 지나가고 '로그3'이 찍혔지만 resolve가 호출되면 myPromise.then()을 실행하게 됩니다. 멋지네요.

17라인을 보면 .then이 보이는데 두 번째 then입니다. 위 예제에서는 두번째 .then()도 실행했습니다. 주의할 점이 있습니다. resolve()를 실행하면 myPromise.then()으로 연결되어 실행됩니다. 두번째 .then()은 myPromise.then()의 return을 통해 연결됩니다.

then()에서 다음 then()으로 연결을 하기 위해서는 반드시 return을 사용해야 합니다. 그 값도 인수로 받아서 사용할 수 있습니다. return을 잊지 마세요.

마지막으로 catch()가 있습니다. 이 내용은 실행 함수의 두번째 인자인 reject와 연결되게 되어있습니다. 

위 예제를 보면 resolve 대신 reject를 사용했습니다. 이 함수는 실행 함수가 오류 발생 시 작동하게 됩니다. 사실 위 setTimeout이 오류가 난 것은 아닙니다. 오류가 난 경우에 개발자가 reject를 호출해서 오류를 처리하라는 의미입니다. 정상이면 resolve, 오류면 reject를 개발자가 직접 상황에 맞게 호출하고 구현해야 합니다. 

이렇게 reject를 호출하면 then은 무시되고 catch를 찾게 됩니다. 다행히도 18번째 라인에 catch가 구현되어 있고 해당 메서드가 호출되면서 로그를 출력하게 됩니다.

'오류'가 출력되었습니다. 

이제 우리는 비동기 실행 함수를 제대로 처리하기 위해 promise 객체를 사용하는 방법을 알게 되었습니다. 그리고 성공하면 resolve, 실패하면 reject를 호출하도록 구현해서 then과 catch와 연결하고 처리하는 방법에 대해서도 알게 되었습니다.

참고로 하나 더!

실행 함수를 보면 resolve, reject라는 명칭을 사용했습니다. 이 이름 자체는 정해진건 아닙니다. 원하는 이름으로 정하고 그 이름대로 호출하면 됩니다.  rsl, rjt 이렇게요.

사실 자바스크립트 Promise에는 resolve()와 reject()라는 메서드가 있습니다. 같은 기능으로 다음에 사용법에 대해 포스팅을 해보겠습니다. 아마 이 메서드 이름 때문에 resolve, reject라고 인수명을 정한 거 같습니다. JavaScript Promise 객체에 대해 알아봤습니다.

 

반응형

일과 건강

Info & Life/우리집건강이야기 2023. 4. 23. 22:19 Posted by friendly
반응형

주변을 보면 직장에서 일로 스트레스를 많이 받는 사람들을 종종 봅니다.

사실 그러려니 하고 넘기는 것이 쉬운 일이 아닙니다. 혼자 사는 세상이 아니기 때문이지요. 업무를 같이 할 수도 있고 같은 공간에서 지내야 할 수도 있기 때문에 그러려니 하고 넘기는 것이 어려운 것이지요.

직업인과 직장인에 대해 들은 분들이 있을겁니다. 저 또한 그런 이야기를 종종 하곤 합니다. 직장인과 직업인의 큰 차이는 근무지를 어떻게 바라보는가와 내가 누구를 위해 일을 하는가가 다르다고 할 수 있습니다. 본인이 회사의 주인도 아닌데 왜 저렇게 건강까지 잃어가며 희생을 하는 건지 이해가 안 갈 때가 많습니다. 

나이가 들고 주변을 둘러보니 젊은 시절의 건강함은 사라지고 많은 중년들이 건강을 잃고 있더군요. 혈관 질환으로 약을 복용하고 심한 경우 스템프 시술도 하는 사람들이 꽤 있더군요. 또한 중대한 질병인 암에 걸린 지인들도 있고 목숨을 잃는 주변인들도 봤습니다. 과연 누구를 위해 그렇게 희생을 하며 일을 할까요?

먹고살려고, 우리 가족, 우리 애들 키우려면

이런 이유로 많은 가장들이 엄청난 체력소모와 스트레스를 받고 삽니다. 하지만 건강을 잃으면 직장도 잃게 됩니다. 그렇게 되면 희생하며 다닌 회사는 아무 도움이 되지 않습니다. 이익을 위해서 존재하는 것이 회사이거든요. 어느 누구도 그동안의 정을 생각하며 자신의 연봉을 나눠서라도 동료를 챙겨주진 않습니다.

언젠가 주말 근무를 요구한 임원에게 대체 휴무를 주는 건지 물어본 적이 있습니다. 당연히 대체 휴무를 준다고 할 줄 알았지만 돌아온 답변은 희생정신이 없다는 것이었습니다. 휴가를 쓰려고 보고하면 자신은 휴가를 써 본 적이 없다면서 휴가 사용에 대해 불만을 표현하는 상사도 있습니다. 사실 그 임원이 회사의 주인도 아닙니다. 본인도 그저 월급 받고 눈치 보며 다니는 직장인인데 말이죠. 언젠가 유튜브를 보니 대기업 임원으로 퇴임한 사람들의 제2의 인생에 대한 영상을 본 적이 있습니다. 다들 이구동성으로 퇴임하고 나서 연락이 끊겼다는 이야기를 하더군요. 대기업 임원을 할 정도인데 퇴임하면 연락이 끊긴다는 것을 뒤늦게 알았다는 것도 이해하기 힘들었습니다. 당연한 결과가 아닌가요? 다들 이익을 위해 필요한 사람을 찾아 연락을 하는 겁니다.  어떤 드라마를 보면서 현실감 있는 대화를 들은 적이 있습니다.

최고의 자리에 오르기 위해서는 능력 있는 직원이 필요하지만, 내가 최고의 자리에 오르고 나면 능력있는 직원보다 말 잘 듣는 머슴이 필요하다.

맞는 말입니다. 또한 항상 이 내용을 잘 이해하고 있어야 합니다. 오직 회사를 위해 충성하는 경우 끝은 비참한 경우가 많거든요. 그중 건강을 잃은 경우가 정말 안타까운 상황이라 할 수 있습니다. 그렇게 희생하며 열심히 일해도 어느 날 건강을 잃고 회사를 나가게 되거나 또는 목숨을 잃는다 해도 회사 내부는 그저 평범한 하루처럼 흘러가더군요.

그 빈자리는 새로운 직원이 채워나갑니다. 그런 부분에 대해 불만을 갖기 보다는 나를 위해 사는 것이 어떨까요?

지금 내가 직장에서 일을 하는 것은 나의 직업적 능력을 키우고 활동하는 무대라 생각해 보세요. 무대이기 때문에 언제든 나의 능력을 다른 무대에서 사용할 수 있다는 겁니다. 정말 나를 위해 일을 하게 되는 상황입니다. 그저 나이가 들고 직위가 오르니 잘리지 않으려고 부하 직원들을 더 압박하고 본인도 눈치 보며 건강과 가족을 잃어가면서까지 충성을 해도 결국 회사 주인만 좋을 뿐입니다.

드라마 미생을 보면 박과장 씬이 있습니다. 본인의 능력으로 거래도 많이 이뤄내고 매출에 큰 기여를 하지만 그 결과는 그저 회식하는 거랑 매달 받는 월급뿐이라는 겁니다. 그래서 불만이 커지게 되고 결국 나쁜 생각을 하게 됩니다. 나중에 회사에서 쫗겨나게 됩니다. 사실 방법이 잘못된 거지 그 생각을 합법적으로 발전시켰다면 큰 성공을 했을 겁니다. 

최근 투입된 프로젝트에서 또래 개발자를 만났습니다. 건강이 좀 안좋다고 하더군요. 그래서 건강의 적은 스트레스이니 이제 나이도 생각하고 건강도 많이 안 좋아졌으니 다 내려놓고 편하게 개발만 하라고 했습니다. 성격상 그게 안된다고 하더군요. 이렇게 성격상 안된다고 고집을 피우며 계속 스트레스를 받는 환경으로 일을 하는 경우를 정말 많이 봤습니다.

그러다 건강 뿐 아니라 목숨을 잃을 수 있습니다. 그저 전에 그런 사람이 있었다로 사라지게 됩니다. 

우리가 왜 사는 걸까요?

굳이 건강까지 잃어가며 일을 해야 하나요?

그럼 뭘 먹고 사냐? 배부른 소리 하고 있다고 이야기하시는 분들이 있습니다.

건강을 잃으면 정말 아무것도 할 수 없고 돈은 엄청나게 잃게 됩니다.

몇 번 건강으로 큰 일이 있었고 그에 대한 회사의 반응을 보고 크게 깨달은 적이 있었습니다. 이제는 더 이상 회사를 위해 희생하지 않습니다. 나를 위해서 공부를 하고 실력을 키우는 직업인으로 변하고 있습니다. 결국 회사도 필요한 사람이면 채용을 하고 월급을 줍니다. 내가 회사를 위해 일을 하든 나를 위해 일을 하든 회사는 필요한 사람이면 됩니다. 단, 진급에 약간 불리함이 있을 순 있지만 위로 올라갈수록 더 큰 희생을 바라는 게 회사입니다. 

회사가 나쁜것이 아닙니다. 회사는 당연히 이익을 위해 존재하며 그 무대가 있어야 우리도 능력을 발휘하고 그에 대한 적당한 보상으로 급여를 받게 됩니다. 그리고 그 급여로 우리의 삶을 영위해 가는 거지요. 거기에 더 나아간다면 직업인으로 계속 몸값을 키우고 또한 급여를 잘 활용하고 투자해서 더 많은 이익을 창출하면 됩니다.

그걸 우리는 부자라고 부릅니다.

우리는 더이상 남의 이익만을 위해 희생하며 살지 말고 우리를 위해 능력을 키우며 살아야 합니다. 사실 이것이 백점은 아닙니다. 회사를 잘 활용해서 높은 직위(임원)도 오르고 CEO를 하는 것을 원하는 사람들도 있습니다. 그 사람들이 어리석고 잘못되었다는 것은 아닙니다. 모두 삶의 목적이 다른 거니까요.

제목에서 이야기하듯 건강을 지키자는 겁니다. 그러기 위해서는 무리한 희생으로 건강을 잃고 나중에 후회하지 말자는 의미이기에 우리의 삶을 다시 돌아보는 시간을 갖는 게 어떨까 합니다.

모두 건강 잘 챙기고 안녕하는 삶을 살았으면 좋겠네요.

요즘 자바스크립트 마지막 정리를 하고 있습니다. 정리가 되면 해당 포스팅을 할 계획이고요.

생각이 많았던 2023년 1분기였습니다.

반응형