2022년 7월 22일 금요일

[영화] 탑건 매버릭이 직장인에게 주는 울림


탑건 매버릭이 직장인에게 주는 울림


36년 만에 돌아온 영화 '탑건' 속 매버릭(톰 크루즈 역)의 직급은 대령이다.


극의 초반부에 매버릭의 상사가 '수많은 훈장과 업적에도 불구하고 여전히 네가 대령인 이유는 지시를 제대로 따르지 않기 때문'이라며 매버릭을 질책하는 내용이 굳이 들어가 있는 걸 보면 대령이라는 직책은 제작진이 꽤나 심사숙고해서 넣은 설정이라는 생각이 든다.

(본인이 옳다고 생각하면 상사의 지시를 따르지 않는 매버릭의 성정은 1편에서도 꾸준히 묘사되며, 애초에 매버릭이라는 콜사인의 뜻도 관습이나 규칙을 따르지 않는 사람을 의미한다.)

Maverick  n.

: a person who refuses to follow the customs or rules of a group


대령 매버릭. 장성급에게 주어지는 '별'을 달지 못했으니 회사로 치면 임원이 되지 못한 만년 부장인 격. 

출중한 능력 탓에 목숨을 걸어야  하는 작전에는 꾸준히 호출되는데 정작 승진은 안 시켜주고 일회성 명예뿐인 훈장으로 때우다니.

필요할 때는 에이스 취급하며 실컷 부려먹으면서도 막상 승진 때에는 윗사람인 본인들 말에 토 달지 않고 시키는 대로 하는 사람을 선택하는 건 군생활이나 직장생활이나, 미국이나 한국이나 똑같다 싶었다.


어지간한 직장인은 진즉 억울하고 분해서 뛰쳐나왔을 상황인데도 멋진 형 매버릭은 비행만 할 수 있으면 그저 행복하다.

본인보다 먼저 진급한 동기, 아이스맨에게도 열패감 따위 없다. 누가 최고의 파일럿이냐는 농담도 유쾌하게 받아치는 호쾌함과 그의 호의를 있는 그대로 고맙게 받아들이는 여유까지 갖췄다.


나의 상사인, 톰 크루즈보다 조금 동생인 부장님은 동기가 먼저 임원이 된 것이 분해서 3년이 지난 지금도 술만 마시면 그때 자신이 얼마나 아쉽게 기회를 놓쳤는지에 대해 이야기한다. 또한 자신보다 나이 어린 임원이 지시를 내리면 그 앞에선 '넵 상무님!' 하며 고개를 조아릴지언정 우리 앞에선 '상무한테 그건 이래저래서 어렵다고 해~ 어차피 잘 몰라' 따위의 말로 본인의 경험과 노하우가 직급보다 더 가치 있는 것임을 어필한다.


직장생활 9년차. 부장님의 찌질함이 싫긴 한데, 이해는 되는 그런 연차가 되었다.

찌질한 직장인을 대표하여 세상 쿨한 만년 부장 매버릭에게 묻고 싶다.

만년 부장인데도 행복한가요?

이유가 뭔가요, 어떻게 그게 가능한가요?



올해로 9년차. 회사에서 승격을 했다. 대단한 업적이 있는 것도 아니지만 그렇다고 뒤쳐진 것도 아니기에 남들 하는 때에 맞춰 무탈하게. 이때 느낀 감정은 기쁨보다는 안도감.


사실 신입사원 때는 (호기롭게도) 열심히 일하면 임원도 아주 불가능한 꿈은 아닌 줄 알았다. 입사 전까지의 삶이 그랬다. 열심히 공부해서 좋은 성적을 받으면 원하는 결과를 얻을 수 있는.


그런데 회사는 달랐다. '열심히, 잘' 보다는 적절한 타이밍에 상사가 '듣고 싶어 하는 이야기'를 꺼내들 줄 알아야 했다. 그리고 이야기의 옳고 그름, 타당한 근거의 유무는 대체로 그들이 듣고 싶어하는 이야기가 아니었다.


지난 8년간 회사에서의 나는 관습과 통념에 도전하는 매버릭이었다. 그런 주제에 승승장구를 꿈꾸는 매버릭.


나름 매버릭스럽게 살아봐서인지 탑건의 매버릭이 만년 대령인 것은 꽤나 현실감 있게 느껴져서 피식 웃음이 났다. 마치 나에게 승승장구하는 매버릭은 선택지에 없으니 두가지 길 중 하나를 선택하라고 말하는 것 같았다.

계속 매버릭으로 살래?

아니면 시키는 대로 할래?


수천억짜리 전투기를 무단으로 끌고 나와 자신의 주장이 옳았음을 증명해내는 장면을 보면서 통쾌함과 대리만족을 느낀 걸 봐선 결국 내 답은 정해져 있는 듯하다.

 


탑건 매버릭의 목표는 최고의 파일럿이며, 파일럿이 곧 자신의 정체성이다. 선택의 순간에 직면했을 때 파일럿으로서 할 수 있는 최선은 '생각하지 않고' 본능대로 움직이는 것이라고 여기기 때문에 관습이나 상사의 지시도 '생각하지 않는다'.

이쯤 되니 그가 만년 부장에 머문 것은 어쩌면 윗선의 지시보다 파일럿으로서의 본능에 충실할 수 있는 최적의 위치에 머물기 위한, 그래서 자신의 목표에 더없이 충실하기 위해 그가 유도한 사실상의 자발적 선택이었다는 생각도 든다.


스스로 원하는 목표에 충실한 그이기에 만년 부장일지언정 별을 단 어느 누구보다도 빛나는 것이겠지.


내가 원하는 바를 위해 매버릭으로 살기로 결심한 순간,

만년 부장도 꽤 멋질 수 있겠다는 생각이 처음으로 들었다.


[출처] https://brunch.co.kr/@daenggul/49


글이 너무 공감이 되어 블로그에 저장했습니다.

나중에 또 읽어 보려 합니다.


2022년 7월 8일 금요일

javascript - 스크롤 페이징

 

    <script type="text/javascript">

    var pages = 1;                                  // 스크롤 페이지

    var listSize = 5;                               // 한줄당 표시할 상품수

    var pageRowCount = 10;                          // 스크롤 한페이지 당 ROW 수

    var pageListCount = listSize * pageRowCount;    // 스크롤 한페이지 당 상품 수

    var resultProductList = null;


    function loadEventDetail(eventIdx) {
        $('#Progress_Loading').show();

        $.ajax({
            : (생략)
            success: function(result) {
                    if (result.ProductList) {
                        resultProductList = result.ProductList;
                        htmlStr = getEventProductList(resultProductList, pages);
                    }
                scroll(0, 0);

                }
        });

        $('#Progress_Loading').hide();
    }


    $(window).scroll(function () {
        if (resultProductList != null && resultProductList.length > 0) {
            if ((resultProductList.length - ((pages - 1) * pageListCount)) > 0) {
                var scrolltop = parseInt($(window).scrollTop()) + 550;
                //console.log("scrolltop=" + scrolltop);
                //console.log("documentheight=" + $(document).height());
                //console.log("windowheight=" + $(window).height());
                if (scrolltop >= $(document).height() - $(window).height() - 5) {
                    $("#divEventProduct").append(getEventProductList(resultProductList, pages).join(''));
                }
            }
        }
    });

    function getEventProductList(ProductList, page) {
        var htmlStr = new Array();

        var itemLength = ProductList.length;
        //var ulCnt = Math.ceil(itemLength / listSize);
        var startIdx = (page - 1) * pageRowCount;
        var endIdx = startIdx + pageRowCount;

        if (endIdx * listSize > itemLength) {
            var remainder = itemLength % pageListCount; // 몫값 계산
            endIdx = ((page - 1) * pageRowCount) + Math.ceil(remainder / listSize); // 올림처리
        }

        for (var ulIdx = startIdx; ulIdx < endIdx; ulIdx++) {
            htmlStr.push('<ul>');

            for (var liIdx = 0; liIdx < listSize; liIdx++) {
                var idx = (ulIdx * listSize) + liIdx;
                if (idx < itemLength) {
                    var item = ProductList[idx];

                    var prod_is_coldchain = item.IS_COLDCHAIN;
                    console.log(prod_is_coldchain)
                    var prodNum = item.PROD_NUM;
                    var prodStd = getConcatProdStds(item.PROD_STD1, item.PROD_STD2, item.PROD_STD3);
                    var prodUnit = $.trim(item.PROD_UNIT);
                    // 이미지 경로 및 이미지명 (M : 126*100) (S : 88 * 72)
                    var prodMImg = getProductImageFilePath(item.CATE_CODE1, item.CATE_CODE2, item.CATE_CODE3) + '/' + item.PROD_MIMG;
                    //var prodMImg = getProductImageFilePath(item.CATE_CODE1, item.CATE_CODE2, item.CATE_CODE3) + '/' + item.PROD_SIMG;

                    if (liIdx == 0) {
                        htmlStr.push('<li class="first">');
                    }
                    else {
                        htmlStr.push('<li>');
                    }

                    var prodNumString = item.PROD_NAME;
                    if (fn_StrByteLength(prodNumString) > 42) {
                        prodNumString = sliceByByte(prodNumString, 42) + "...";
                    }
                    var unitString = prodStd + ' / ' + prodUnit + ' / ' + item.PROD_MAKER;
                    if (fn_StrByteLength(unitString) > 42) {
                        unitString = sliceByByte(unitString, 42) + "...";
                    }


                    htmlStr.push('<span class="icon_event">');
                    htmlStr.push('<img src="/images/event/icon_event.gif" alt="이벤트" />');
                    if (prod_is_coldchain == "1") {
                        htmlStr.push('<img src="/images/ColdChain/icon-coldChain.gif" alt="cold">');
                    }
                    htmlStr.push('</span > ');
                    htmlStr.push('<a href="javascript:goToSearchPage(\'' + prodNum + '\');" class="thumbnail" style="height:100px;"><img src="' + prodMImg + '" alt="상품 이미지" onerror="productNoImage(\'M\');" /></a>');
                    htmlStr.push('<p class="ttl_pro"><a href="javascript:goToSearchPage(\'' + prodNum + '\');" name="prod2line">' + prodNumString+ '</a></p>');
                    htmlStr.push('<div class="information">');
                    htmlStr.push('<span name="prod2line">' + unitString + '</span>');
                    htmlStr.push('<span>' + item.MIN_VENDOR_NAME + '</span></div>');
                    htmlStr.push('<div class="price">');
                    htmlStr.push('<span class="icon"><img src="/images/Misomall/icon_special_price.jpg" alt="몰 특가" /></span>');

                    if (item.IS_CONSULT == 1)
                        htmlStr.push('<strong><span class="won">견적상담</span></strong>');
                    else
                        htmlStr.push('<strong>' + item.MIN_PRICE.toNumberFormat() + '<span class="won">원</span></strong>');

                    // B2B 경우
                    if ("@Misomall.Front.MisoMember.MallGroupCode.ToString()" == "3") {
                        htmlStr.push('<strong style="font-size:15px;color:#0000ff">' + item.MISO_POINT.toNumberFormat() + '<span class="won">P</span></strong>');
                    }

                    htmlStr.push('</div>');
                    htmlStr.push('</li>');
                }
                else {
                    htmlStr.push('<li><span class="hidden">상품이 없을 경우</span></li>');
                }
                //var item = ProductList[idx];
            }

            htmlStr.push('</ul>');
        }

        pages = page + 1;

        return htmlStr;
    }
    </script>




javascript - SQL 예약어 제거

  <script language="javascript"> //특수문자, 특정문자열(sql예약어) 제거 function checkSearchedWord(obj){ obj.value = obj.value+&quo...