A Culmn

검색

검색

Total 34 / 1 page
썸네일

[취업꿀팁] 합격률 높이는 면접기술방법

  [취업꿀팁] 합격률 높이는 면접기술방법       안녕하세요. 취업담당자 입니다. 오늘도 면접관의 질문의도를 파악하여 면접준비 하는 방법에 대해서 3탄을 준비했습니다. 합격률을 높이는 면접기술에 대해서 확인하시기 전에 면접 답변 스킬에 관련하여 1편, 2편도 있으니 확인해주세요~   면접 합격률을 높이는 취업꿀팁 바로 시작하겠습니다!           이런 건 왜 물어볼까? 면접에서 괜히  물어보는 질문은 없다! 면접관의 의도를 파악하고  완벽한 답변을 준비하는 방법!!! (뚜둥)             센스있게 나를 어필해서  당당하게 합격하자!!           Q. 본인이 열심히 해서 낸 성과를 다른 상사가 가로챘다면  어떻게 하겠습니까?   조직과 개인의 이해가 대립되는 가상 상황에 대처하는 방식을 확인하여 조직내에서의 애매한 갈등 상황을 슬기롭게 해결할 수 있는지를 파악하려는 질문   Tip. 즉각적으로 항의하겠다는 답변은 경솔하다는 인상을 줄 수 있고, 그렇다고 묵인하겠다는 답변도 진실성을 의심받을 수 있으니 주의하세요! 일단 자신의 성과 기여도에 대한 성찰의 자세를 보여주고, 자신이 중시하는 것은 성과창출 과정과 성취감임을 드러내는 것이 핵심이며, 공정성의 가치를 지키기 위해 회사에 제도적 장치를 건의하겠다는 답변을 덧붙여도 좋습니다.               Q. 살면서 가장 큰 난관에 부딪쳤던 때가 언제 인가요? 그것을 어떻게 극복했습니까?   난관을 헤쳐 나간 경험을 통해 지원자의 목적의식과 의지수준, 입사 후 업무수행 중 닥칠 수 있는 난관의 극복 가능성을 파악하려는 질문   Tip. 남들이 해보기 어려운 높은 수준의 난관을 극복해본 사람일수록 입사 후에 닥친 어려움도 잘 해결할 수 있을 것이라고 생각하는 것을 기억해주세요. 난관 속에서 불굴의 의지로 극복했던 경험을 소재로 선정하는 것이 유리합니다.               Q. 팀 프로젝트를 하면서 동료와 갈등을 겪었던 경험을 이야기 해보세요. 지원자의 팀워크와 헌신, 노력을 가늠해보기 위한 질문   Tip. 해결이 어려운 난이도가 높은 갈등 상황이었고 자신이 적극적/주체적으로 해결하려 했던 경험일수록 적합합니다. 자신의 희생을 감수하려는 자세, 팀을 위해 헌신하려는 자세를 부각시킬 수 있다면 더욱 효과적입니다.           Q. 살면서 했던 가장 큰 실수는 무엇이며 어떻게 대처했는가? 과거의 실수 경험을 확인하여 실수에 대처하는 태도와 반성 노력, 해결방식 등을 파악하려는 질문   Tip. 가급적 개인의 성격적 결함에 의한 실수보다 순간적 판단착오나 능력/경험 부족으로 범했던 실수를 소재로 제시하는 것이 무난합니다.  자신의 실수에 대해 회피하지 않는 자세와 실수에 대해 반성하고 적극적으로 책임을 지는 자세를 보이는 것이 핵심입니다.           Q. 남들과 다른 나만의 독특한 생각을 발휘해 본 경험을 이야기해보세요.   창의력 발휘 경험을 확인함으로써  지원자의 창의력 수준을 가늠해보기 위한 질문   Tip. 발명, 창의력 대회 수상 등 객관적인 증거를 제시할 수 있는 사례가 가장 좋은 소재이나 이러한 경력이 없더라도 차별화된 시각을 보여주었거나  발상의 전환을 통해 아이디어를 창출해본 사례도 가능합니다.             Q. 리더쉽을 발휘해본 경험을 이야기 해보세요. 과거에 리더십을 발휘한 경험을 확인하여 장기적으로  조직을 이끌어 나갈 리더로 성장할 수 있을지를  가늠하기 위해 던지는 질문   Tip. 적절한 목표 제시 및 공유, 명확한 역할 배분, 리더로서의 솔선수범 자세, 팀원들에 대한 적절한 동기부여 등 리더에게 요구되는 기본 자질들을 두루 발휘했던 사례를 이야기 합니다.               위의 자료는 "면접 D-3 핵심 질문과 합격 답변 완벽 마스터 기적의 취업면접 100문 100답" 책에서 발췌하여 작성하였습니다.   모두들 면접 준비 잘하셔서 좋은 결과 있으시길 바랍니다! ^^ ​   <저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>    

2018-10-16

썸네일

[취업꿀팁] 어려운 면접 질문 똑똑하게 답변하는 방법

  [취업꿀팁] 어려운 면접 질문 똑똑하게 답변하는 방법  안녕하세요. 중앙HTA 취업담당자입니다.오늘은 면접 질문의도 파악하기 2탄으로어려운 면접 질문 똑똑하게 답변하는 방법에 대해 말씀 드리겠습니다.     애매하고 난감한 질문으로 혹여 잘 못 답변하면내가 너무 이기적으로 보이지 않을까 내가 너무 편향된 사람으로 보이는 건 아닐까 걱정이 많으시죠?솔직한 내 마음을 모두 표현하면 면접관 표정이 어두워질 것 같고,그렇다고 거짓으로 포장하기엔 양심에 걸리고...어떻게 조리있게 답변해야 이 난감한 상황을 잘 대처할 수 있는지지금부터 차근차근 잘 알아봅시다!       이런 건 왜 물어볼까?면접관의 질문의도를 파악해봅시다. 면접장소에서 면접관이 괜히 물어보는 면접 질문은 없습니다.이력서에 내용을 다 써놨는데 왜 면접을 보고 이상한 질문을 하는 걸까요?       면접 질문은 내가 할게.대답은 누가 할래?      면접관의 의도를 정확히 파악하고보다 원하는 요점을 파악해서 답변을 준비하는게 중요합니다.      어렵고 애매한 면접 질문에똑똑하고 현명한 답변으로 면접 합격률을 높입시다!!       전공과는 무관한 업무인데 왜 지원했나요?  지원한 분야가 진심으로 하고 싶은 업무인지, 해당 업무를 원활하게 수행 할 기본 능력이 되는지 확인하기 위한 질문Tip. ‘비전공자’임에도 잘 할 수 있다는 근거를 구체적으로 제시 할 것. 자신의 전공이 업무수행에 기여할 수 있는 장점이나 비전공자의 약점을 커버할 수 있는 근거를 보여주는게 핵심!      10년 후 자신의 모습은 어떤 모습일까요?  지원한 회사에 지속적으로 기여할 의지와 열정이 있는지를 파악하기 위한 질문Tip. 도전적이지만 달성 가능한 수준으로 경력목표가 생생하게 그려지도록 묘사할 것(분야/위치/활약상)두괄식으로 답변. 목표와 목표를 세운 이유 및 근거를  제시        만약에 지원한 업무 말고 다른 부서에 발령 난다면 어떻게 할 건가요? 조직 내에서의 애매한 갈등상황을 슬기롭게 해결할 수 있는지를 파악하는 질문Tip. 이기적인 모습 혹은 의도적 충성형 답변은 피할 것. 가급적 조직의 요구를 수용하는 입장으로 답변하되 개인적인 요구를 조직 내에서 허용되는 범위 안으로 합리적인 방식으로 전달하겠다는 답변을 할 것      프로젝트를 하는데 비협조적인 동료가 있다면 어떻게 하겠습니까? 이상적인 가치와 현실이 대립되는 상황에서 얼마나 슬기롭게 대처하는지 파악Tip. 이상적인 가치를 훼손하지 않는 범위 내에서 절충안을 제시하고그 것이 통하지 않을 경우의 선택을 답변 할 것      인생에서 가장 큰 실패의 경험은 무엇인가요? 실패에서 교훈을 얻고, 이를 극복해낼 수 있는 잠재력이 있는지를 파악Tip. 소재로 난이도가 높은 도전을 했다가 실패해본 경험을 선정하는 것이 좋으며 실패 후에 인생에 어떻게 반영하고 있는지 설득력 있게 제시하는게 핵심.실패 경험이 없다는 것은 진정성이 없거나 자기 성찰이 부족하다고 여겨질 수 있음     위의 자료는 "면접 D-3 핵심 질문과 합격 답변 완벽 마스터기적의 취업면접 100문 100답" 책에서 발췌하여 작성하였습니다.    ​<저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>    

2018-09-20

썸네일

취업뽀개기와 함께 알려드리는 사회초년생이 취업할 때 알아야할 4가지!

취업뽀개기와 함께 알려드리는 사회초년생이 취업할 때 알아야할 4가지!​안녕하세요! 중앙HTA 취업담당자입니다.취업뽀개기와 함께 알려드리는 중앙HTA IT취업 꿀팁!오늘 주제는 사회초년생분들 IT기업 입사할 때 알아야 할 4가지 입니다. 면접보고 합격한 회사에 입사를 해도 될지 고민을 하는 경우들을 종종 보게 됩니다.사실 명확한 기준은 없지만 그래도 취업하실 때 꼭 고려해보면 좋을 것들에 대해서 말씀드리겠습니다!     중앙에이치티에이 IT취업 꿀팁사회초년생들 IT기업 입사할 때 4가지는 꼭 확인하자!!   ​  기업들도 직원들을 채용할 때 정말 다양한 방법으로 인재들을 선별하고 있습니다. 이력서를 통해 다양한 스펙을 요구하고,  면접도 인성면접, 프레젠테이션 면접, 토론면접 등 다양하고 테스트를 하고 파악을 합니다. 심지어 합숙까지 시키며 몇날 며칠동안 다양한 모습을 보고 결정하는 경우들도 있고,그렇게 어렵게 뽑아놓고도 인턴기간을 둬서 또 다시 평가를 통해 정규직 전환을 결정하죠..  ​  이처럼 기업들도 함께 할 직원 채용을 하는데 엄청난 노력과 투자를 하는데하루 8시간 이상을 회사에서 보내는 우리 직장인들도나의 삶의 만족과 미래를 위해서 내가 입사할 기업에 대해 면밀히 알아보고 파악해서 입사를 해야 합니다!그렇다면 우리는 무엇을 보고 입사여부를 결정해야 할까요? ​​  1. 업무의 대한 파악뭐라구용? 직무에 대한 파악은 이력서 쓰고 구직활동 하면서 다 하는거 아니냐구요?물론 그때부터 당연히 알아보셔야 하지만 입사할 회사의 업무를 포커스에 맞춰서 좀 더 구체적으로 살펴보셔야 합니다.IT개발자는 개발 기술이 가장 중요한건 알고 계시죠?Java 개발만 10년을 했다고 해서 C언어 개발자로 이직할 때 10년의 경력을 모두 인정받을 수 있을까요? 물론 개인 역량의 차이도 있겠지만 경력을 인정해주는 순간 연봉의 차이도 커지기 때문에경력자들은 기술의 대한 구체적인 프로젝트 경험이나 사용유무에 대해서 중요하게 생각합니다.그렇기 때문에 첫 직장에서 주로 사용하게 되는 기술들이나 주로 하게 되는 프로젝트에 따라서진로에 큰 영향을 줄 수 있는 요소들이 많습니다.회사에서 사용되는 기술이나 개발환경들이 다른 프로젝트에서도 많이 사용되는지점점 없어지는 추세는 아닌지 내 커리어에 도움이 될 수 있는지 파악해보셔야 하는데이걸 신입이 어떻게 알겠습니까?그래서 면접볼 때 회사에 대한 궁금한 점이 있으시냐라는 질문하실 때를 놓치지 말고기업의 대한 부분, 프로젝트, 주로 사용되는 기술, 주 고객사 등등을 자세하게 여쭤보시고 완벽할 순 없지만 대략적인 나의 커리어 계획과 맞춰보시는게 좋습니다.  ​    2. 회사의 대한 정보 요새 다 기본적으로 면접보기 전부터 잡플래닛, 크레딧잡, 각종 커뮤니티 사이트를 통해서 회사 평판이나 면접 후기등을 먼저 보고 면접 대비들을 하고 계시죠?자료를 보실 때 가장 손쉽게 파악하는 건 직원 수 대비 매출액을 비교해 보는 겁니다.대략 1인당 1억씩 기준으로 두면 아 인센티브까진 몰라도 최소한 월급은 안밀리고 다닐 수 있겠구나 하고 생각하시더라구요.그리고 회계를 좀 보시는 분들은 재무제표에서 당기순이익이 어느정도 인지도 참고 삼아 확인해보세요.기업의 대한 재정상황을 다 알 수는 없지만위의 두가지 정도는 파악 한 번 해보시면 좋은 참고자료가 되실 것 같습니다.여기서 한 가지 주의 할 점은인터넷에 나온 면접후기나 회사 평판들에 대해서는 너무 100% 믿지마세요.티비 방송에 소개 된 유명한 맛집들도 먹는 사람에 따라서 맛이 있다 없다 말이 많잖아요~사람이나 상황에 따라 달라질 수 있으니까너무 신뢰하지 마시고 적당히 참고만 하시길 바랍니다!!​  ​3. 회사의 분위기를 파악하자.여러분들은 면접보러 가시면 무엇을 가장 먼저 보시나요?긴장해서 아무것도 신경 못쓴 분들도 계시고, 연봉에만 집중하시는 분도 계시겠죠?인터넷에 떠도는 많은 자료들을 보셨다면 그런 내용들이 어느정도 사실인지 아닌지를 판단할 수 있는건면접 때 회사에 대해 많이 파악을 해보는 것입니다.사무실 내에 업무 분위기는 어떤지도 참고해서 보고면접때 면접관분들이 지원자들을 대하는 태도나 말투 등도 좀 보시면서같이 일하게 될 사람들을 파악해봅니다.물론 요새 압박면접도 있지만 압박면접이라고 해서 인격적으로 사람을 무시하면 안되거든요.논리에 맞지 않은 답변에 정확한 일침을 가하는건지그냥 꼬투리잡고 무시하고 비하하는건 아닌지 잘 판단해보시길 바랍니다.​​    4. 근무조건​원하는 연봉이나 복지, 업무내용 등등 이건 개인차가 워낙 크기 때문에좋다 나쁘다라고 함부로 말하기는 어려울 것 같습니다.그렇지만 저희가 회사 다닐 때 봉사하러 다니는 건 아니잖아요.예를 들어 퇴직금이 연봉에 포함이 되어있다거나4대보험 가입을 하지 않거나 근로계약서를 쓰지 않는 경우 등최소한 근로자가 안정된 생활속에서 일을 할 수 있도록기본적인 사항을 지켜주는 회사에 입사해야 합니다.​​​    처음부터 나한테 딱 맞는 회사를 찾는 것은 하늘에 별따기, 로또에 당첨되는 경우처럼 힘들 거에요.첫 술에 배부르려 하지 마시고나도 성장하고 우리 회사도 성장할 수 있는 그런 기업문화를 만들어갑시다!!모두들 원하는 곳에 취업하시길 바랍니다!​이상 중앙에이치티에이 취업담당자였습니다!감사합니다!      <저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>   

2018-09-12

썸네일

[취업꿀팁] 면접관의 질문 의도를 파악하여 면접 준비 하는 방법

​[취업꿀팁] 면접관의 질문 의도를 파악하여 면접 준비 하는 방법 안녕하세요. 중앙HTA 교육담당자입니다.여러분들 요새 면접 많이 보고 계신가요?저희 교육기관에서 모의면접을 진행하다보면 학생들이 면접의도를 제대로 파악하지 못하고너무 솔직하게 이야기를 하거나 동문서답 하는 경우들이 종종 있습니다.이런 의사소통의 오류로 인하여 면접 때 마이너스가 되지 않길 바라는 마음에면접 질문에 대한 의도와 적절한 대처방법에 대해서 말씀 드리겠습니다!모두 집중해주세요~    이런 걸 왜 물어볼까?면접 질문 의도 파악하기!!​   면접에서 괜히 물어보는 질문은 없습니다!!​​   ㅋㅋㅋㅋㅋ 요새 유행하고 있는 박미선씨 짤을 이용해봤습니다.질문은 내가 할게. 대답은 누가 할래?면접 준비 잘해서 답변을 잘 합시다!!​     질문하는 면접관의 의도를 꿰뚫어보고​   ​적절한 답변으로 면접 합격률을 높입시다!!​​    1분 자기소개를 해보세요. ​면접의 시작 질문으로 면접관과 지원자 간의 감정적 거리를 줄이는 용도 Tip. 장황한 설명보다는 어필하고 싶은 1~2개의 핵심적인 키워드 강조! 결론(나는 이런 사람이다) > 근거(사례, 경험) 형식의 두괄식으로 답변!   친구들이 부르는 별명은 무엇인가요? 타인이 바라보는 지원자의 성격 및 특징을 파악하기 위한 질문 Tip. 자신이 내세우고자 하는 장점에 부합하는 별명을 선택 할 것!​     주말이나 휴일엔 주로 어떻게 보내시나요? 휴식을 단순히 쉬는 용도로만 활용하는지재충전과 자기개발의 기회로 활용하는지 파악하기 위한 질문  Tip. 직장인으로서 첫 출발을 준비하는 단계인 만큼 무조건 쉬거나 즐긴다는 식의 답변은 삼가할 것. ​하루는 재충전, 하루는 자기개발의 목적으로 활용한다는 답변이 가장 무난     졸업 후 공백기간이 있는데, 왜 그런가요? ​지원자의 성실성에 문제가 있는지입사 후 다른 사유로 퇴사할 우려는 없는지를 확인하는 질문  Tip. 허송세월, 불성실한 학교생활 등 면접관들의 의혹을 해소시킬 수 있는 타당한 답변을 준비 할 것. 자칫 거짓말로 둘러대는 경우 상황이 악화될 수 있으니 지양 할 것 ​      우리 회사에 지원한 동기가 무엇인가요? 우리 회사에 열정적으로 다닐 의지가 있는지를 파악하기 위한 질문 Tip. 어디서나 통할 수 있는 범용적 동기가 아니라 지원 회사에 특화 된 지원동기를 제시회사의 특징(비전, 전략 방향, 시장 내 위치, 조직문화) 중 하나가 자신의 지향점과 결합되어야 함 ​   위의 자료는 기적의 취업 면접 100문 100답 책에서 발췌하여 작성하였습니다.모두들 면접 준비 잘하셔서 꼭 취업하시길 바랄게요!!  ​<저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>   

2018-09-12

썸네일

[이응수의 IT노트] 하둡분산파일시스템 (HDFS)

 [이응수의 IT노트] 하둡분산파일시스템(HDFS:Hadoop Distributed File System)안녕하세요. 중앙HTA 이응수 강사입니다.오늘은 하둡분산파일시스템에 대해 알아보도록 하겠습니다.  하둡분산파일시스템(HDFS:Hadoop Distributed File System)은 수십 테라바이트 혹은 페타바이트 이상의 대용량 파일을 여러 서버에 저장하고, 다양한 클라이언트가 저장된 데이터를 빠르게 처리할 수 있도록 설계된 파일시스템입니다. HDFS는 저사양의 서버를 이용해서 대용량의 스토리지를 구성하고, 하나의 서버처럼 사용할 수 있도록 지원합니다. HDFS가 제공하는 다양한 API를 활용해서 파일을 읽고 저장할 수 있습니다. HDFS는 장애복구, 대용량 데이터 저장, 데이터 무결성을 지원합니다. HDFS에 데이터를 저장할 때는 복제본을 여러 서버에 함께 저장하기 때문에 데이터의 유실을 예방할 수 있고, 분산서버간에 주기적인 상태체크를 통해서 장애를 인지하고 대처할 수 있습니다. HDFS는 하나의 파일크기가 테라바이트 이상인 파일도 클러스터내의 여러 서버에 분산해서 저장할 수 있습니다. HDFS는 한번 저장된 파일은 수정할 수 없고, 읽기만 가능하기 때문에 데이터의 무결성을 유지시킬 수 있습니다. HDFS는 블록구조의 파일시스템입니다. HDFS에 저장되는 파일은 특정 크기의 블록으로 나누어서 분산된 서버에 저장되고, 기본 블록크기는 128MB입니다. HDFS는 파일을 여러 개의 블록으로 나누어서 동일한 서버에 저장하는 것이 아니라, 클러스터내의 여러 서버에 저장합니다. 그리고, 블록을 저장할 때는 복제본을 만들어서 블록당 3개씩 HDFS에 저장합니다. HDFS는 마스터-슬레이브(Mater-Slave) 형식의 아키텍처를 가지고 있습니다. HDFS에서 마스터서버를 네임노드(NameNode)라고 하고, 슬레이브 서버를 데이터노드(DataNode)라고 부릅니다.네임노드는 하둡 분산파일시스템의 메타데이터(파일명, 디렉토리, 크기, 권한 및 파일에 대한 블록매핑정보)를 관리하고, 데이터노드를 모니터링하며, 클라이언트의 다양한 요청을 접수받습니다. 데이터노드는 HDFS에 저장되는 파일이 블록으로 나뉘어져서 저장되는 서버입니다. 네임노드는 HDFS 시스템을 유지시키기위한 메타데이터를 메모리에서 관리하고, 재부팅시 유실을 방지하기 위하여 fsimage와 editslog파일을 생성해서 hdfs의 모든 변경이력을 저장합니다. 데이터노드는 네임노드로 3초마다 하트비트(heartbeat)메세지를 전송합니다. 하트비트에는 데이터노드의 상태정보와 데이터노드에 저장된 블록에 대한 블록리포트가 포함되어 있습니다. 네임노드는 하트비트를 이용해서 데이터노드를 모니터링하고, 일정시간동안 하트비트가 전송되지 않는 데이터노드를 장애가 발생한 노드로 판단합니다. 데이터노드에서 장애가 발생하면 해당 데이터노드에 저장되었던 블록을 새로운 데이터노드를 복제해서 복제본 수가 일정하게 유지되도록 합니다. 이와 같은 방식으로 HDFS는 클러스터내의 분산된 데이터노드에 대용량의 파일을 블록으로 나누어서 저장하고, 네임노드는 HDFS내의 디렉토리정보, 저장된 파일의 정보, 블록의 매핑정보등을 관리하고, 장애발생에 대처합니다.  하둡은 사용자가 HDFS를 쉽게 할 수 있도록 유닉스 계열의 명령어와 유사한 형태의 셸명령어를 제공합니다. 하둡 셸명령어는 $HADOOP_HOME/bin/hadoop fs -명령어 매개변수 와 같은 형식으로 실행할 수 있고, 자세한 사용법은 $HADOOP_HOME/bin/hadoop fs -help 로 확인할 수 있습니다. 셸명령어 중에서 자주 사용되는 명령어 몇 가지를 사용해보도록 하겠습니다. 먼저 HDFS에 디렉토리를 생성해보도록 하겠습니다. HDFS는 /user/사용자명 디렉토리가 필요합니다. 절대경로없이 파일이나 디렉토리를 생성하게 되면 전부 /user/사용자명 디렉토리 아래에 생성되기 때문에 가장 먼저 사용자디렉토리를 생성해야 합니다. $HADOOP_HOME/bin/hadoop fs -mkdir /user $HADOOP_HOME/bin/hadoop fs -mkdir /user/hta 혹은     $HADOOP_HOME/bin/hadoop fs -mkdir -p /user/hta 명령을 실행시켜서 사용자디렉토리를 생성합니다. 디렉토리 생성시 절대경로 없이 디렉토리명만 적으면 /user/hta 디렉토리 아래에 생성됩니다.     $HADOOP_HOME/bin/hadoop fs -mkdir testdir 생성된 디렉토리나 파일은     $HADOOP_HOME/bin/hadoop fs -ls / 명령으로 확인할 수 있습니다. 로컬파일시스템의 test.txt 파일을 앞에서 생성한 HDFS의 testdir 디렉토리에에 저장해보겠습니다.     $HADOOP_HOME/bin/hadoop fs -put test.txt testdir/ $HADOOP_HOME/bin/hadoop fs -copyFromLocal test.txt testdir/HDFS에 저장된 파일을 위와 같이 확인해볼 수 있습니다. 맵리듀스 프로그램을 이용해서 대용량의 파일을 처리하기 위해서는 위의 명령어를 이용해서 파일을 HDFS로 복사한 다음에 맵리듀스 프로그램을 실행합니다. HDFS에 저장된 파일을 내용을 확인해보겠습니다.     $HADOOP_HOME/bin/hadoop fs -cat testdir/test.txt     $HADOOP_HOME/bin/hadoop fs -tail testdir/test.txt를 실행하면 파일의 맨 마지막 내용을 확인해볼 수 있습니다. HDFS에 복사된 파일의 내용을 확인하거나 맵리듀스 프로그램을 실행한 후 출력결과를 확인할 때 사용할 수 있습니다. 마지막으로 HDFS에 저장된 디렉토리나 파일을 삭제해보도록 하겠습니다.     $HADOOP_HOME/bin/hadoop -rm testdir/test.txt $HADOOP_HOME/bin/hadoop -rm -r testdir * 하우디렉토리까지 삭제. 을 실행하면 파일이나 디렉토리를 삭제할 수 있습니다. 하둡은 다양한 셸명령어를 지원합니다. 셸명령어에 대한 자세한 내용은 하둡 도큐먼트를 참조하시기 바랍니다. 지금까지 하둡분산파일시스템의 간단한 특징과 셸명령어를 살펴보았습니다.다음에는 하둡분산파일시스템으로 빅 데이터를 수집하는 방법에 대해서 다루어 보도록 하겠습니다.  <저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>

2018-02-14

썸네일

[이응수의 IT노트] 맵리듀스 애플리케이션을 활용해서 데이터 분석하기

[이응수의 IT노트] 맵리듀스 애플리케이션을 활용해서 데이터 분석하기안녕하세요. 중앙HTA 이응수 강사입니다.오늘은 하둡의 맵리듀스 프레임워크를 활용해서 아래에 제시된 데이터를 분석하는간단한 애플리케이션을 작성해보도록 하겠습니다.입력데이터(종관기상관측자료 - 2016년 서울)파일명 : 108_DAY_2016.csv지점,일시,평균기온(°C),최저기온(°C),최저기온 시각(hhmi),최고기온(°C),최고기온 시각(hhmi)108,2016-01-01,1.2,-3.3,456,4,1442108,2016-01-02,5.7,1,744,9.5,1514중간 생략108,2016-02-23,0.7,-4.5,2357,4.5,1444108,2016-02-24,-3,-6.8,741,2.2,1429108,2016-02-25,-0.2,-5.8,248,5.7,1606108,2016-02-26,2.2,-3.2,634,7.5,1502108,2016-02-27,3.3,0.5,732,8.1,1424108,2016-02-28,0.7,-2.6,2355,6.9,1133108,2016-02-29,-3.8,-5.9,2359,-1.1,1605(자료출처 : https://data.kma.go.kr/data/grnd/selectAsosList.do?pgmNo=34)위의 데이터는 2016년 서울 관측소에서 측정된 기상데이터의 일부입니다.위의 데이터를 사용해서 2016년 월별 최고 기온을 구하는 맵리듀스잡을 작성하도록 하겠습니다. 먼저 분석대상 데이터를 하둡 파일시스템으로 복사합니다.기상데이터를 저장할 디렉토리를 만듭니다.$$HADOOP_HOME/bin/hadoop -mkdir input_kma다운받은 기상데이터를 하둡 파일시스템에 추가합니다.$$HADOOP_HOME/bin/hadoop fs -put 108_DAY_2016.csv input_kma하둡 파일시스템으로 파일이 복사되었는지 확인해봅니다.$$HADOOP_HOME/bin/hadoop fs -ls input_kma이클립스에서 하둡 클라이언트 프로그램 개발환경을 구성합니다.메이븐 프로젝트를 생성하고, pom.xml에 hadoop-client 의존성을 추가합니다. 하둡의 맵리듀스 작업은 맵 단계와 리듀스 단계로 구성됩니다.본 예제에서 맵 단계의 입력 데이터는 여러 행으로 구성된 기상 데이터입니다.맵 단계의 입력은 각 행이 시작되는 지점까지의 위치를 나타내는 오프셋을 Key로, 각 행의 텍스트를 Value로 전달받습니다.맵 함수는 보통 key는 무시하고, value에서 원하는 데이터를 추출하거나 변형합니다.   맵 함수는 Mapper 클래스를 상속받고, Mapper클래스에 정의된 추상메소드 map( ) 메소드를 재정의합니다.Mapper클래스는 네 개의 제네릭 타입을 가집니다.예제에서 입력키는 long타입의 오프셋, 입력값은 한 행의 내용, 출력키는 월, 출력값은 Double타입의 기온입니다.하둡은 자바의 기본자료형 대신 자체적인 기본 데이터 타입을 제공하는데, 자바의 Long에 해당하는 LongWritable, 자바의 String에 해당하는 Text,자바의 Integer에 해당하는 IntWritable, 자바의 Double에 해당하는 DoubleWritable 등을 제공합니다.map( )메소드의 구현내용은 한 행의 텍스트를 입력값으로 전달받아서 자바 String으로 변환하고, 각 행에서 월과 그날의 최고 기온을 추출했습니다.map( )메소드는 데이터를 출력하기 위해서 Context객체를 제공합니다.예제에서는 Text를 키로 DoubleWritable을 값으로 사용하는 데이터를 출력레코드로 기록합니다.맵 함수 입력(오프셋 텍스트)맵 함수 출력(월 기온) *각 월별로 30개의 데이터, 총 365개의 레코드가 출력됩니다.(0 108,2016-01-01,1.2,-3.3,456,4,1442)(50 108,2016-01-02,5.7,1,744,9.5,1514)중간 생략(500 108,2016-02-23,0.7,-4.5,2357,4.5,1444)(550 108,2016-02-24,-3,-6.8,741,2.2,1429)(600 108,2016-02-25,-0.2,-5.8,248,5.7,1606)(650 108,2016-02-26,2.2,-3.2,634,7.5,1502)(01 4.0)(01 9.5)중간 생략(02 4.5)(02 2.2)(02 5.7)(02 7.5) 리듀스단계의 리듀스 함수도 Reducer 클래스를 상속받고, Reducer클래스에 정의된 추상메소드 reducer( ) 메소드를 재정의합니다.Reducer 클래스 역시 네 개의 제네릭 타입을 가집니다. 리듀스의 입력 타입은 맵단계의 출력 타입과 동일합니다.리듀스의 출력타입은 Text와 DoubleWritable인데 Text에는 월, DoubleWritable는 해당 월의 최고 기온을 나타냅니다. 맵함수의 출력이 리듀스 함수의 입력으로 보내지는 과정은 맵리듀스 프레임워크에 의해 처리됩니다.이 과정에서 맵함수의 출력레코드는 키를 기준으로 정렬되고 그룹화됩니다.예제에서는 맵 함수의 출력키가 월, 출력값은 기온이기 때문에 출력키인 월을 기준으로 정렬하고,같은 월을 가진 기온들을 그룹화해서 아래와 같은 형식의 입력데이터가 리듀스함수의 입력으로 전달됩니다.리듀스 함수에서는 그룹화된 기온데이터에서 해당 월의 가장 높은 기온을 찾고, 그 결과를 리듀스 함수 출력레코드로 기록합니다. 리듀스 함수 입력(월, [해당 월의 기온들])리듀스 함수 출력(월, 최고기온)(01, [4.0, 9.5, ....])(02, [4.5, 2.2, 5.7, 7.5, ....])중간 생략(09, [20.5, 21.2, 18.7, 23.5, ....])(10, [12.5, 17.2, 13.7, 15.5, ....])(11, [10.5, 11.2, 9.7, 7.5, ....])(12, [8.5, 9.2, 10.7, 6.5, ....])(01 9.5)(02 7.5)중간 생략(09 23.5)(10 17.2)(11 11.2)(12 10.2)   맵리듀스 잡을 실행하기 위해서는 드라이브 클래스가 필요합니다. 드라이버 클래스에서는 맵리듀스잡 객체를 생성하고,맵리듀스잡에 드라이버 클래스, 맵클래스, 리듀스클래스, 출력타입 등을 설정합니다.  맵클래스, 리듀스클래스, 드라이버 클래스의 구현이 완료되면 jar 파일로 묶습니다.이클립스를 사용 중이라면 이클립스 "Run As -> Maven Build"를 선택한 후 goal 항목에 "clean install"을 입력하면 jar 파일이 생성됩니다.생성된 jar파일(예제에서는 hadoop-mapreduce.jar입니다)은 FTP 프로그램을 활용해서 Hadoop이 실행중인 Linux 머신으로 업로드합니다.jar파일 업로드가 완료되면 터미널에서 아래와 같이 입력합니다.맵리듀스 프로그램을 실행하면 아래와 같은 로그가 출력됩니다.중간 생략로그 내용에서 가장 중요한 내용을 Map input records와 Reduce input records와 Reduce output records입니다.본 예제에서는 맵함수입력은 366건, 리듀스함수 입력은 366건이 입력되어, 리듀스함수 출력이 12건 생성되었습니다. 맵리듀스 프로그램의 실행이 완료되면 출력파일 경로로 지정된 곳에 파일이 생성됩니다. hadoop 파일 시스템 명령어로 결과를 조회할 수 있습니다.실행해보면 월별로 최고기온이 출력된 것을 확인할 수 있습니다.맵리듀스 프로그램의 실행이 완료되면 출력파일 경로에 여러 개의 파일과 폴더가 저장된 것을 확인할 수 있습니다.이 중에서 리듀스의 출력결과는 part-r-0000으로 저장됩니다. 이상으로 기상데이터로부터 월별 최고기온을 분석하는 맵리듀스 프로그램을 작성해보았습니다.맵리듀스프레임워크를 활용하면 다양한 방법으로 하둡분산파일시스템에 저장된 대용량의 데이터를 분석할 수 있습니다.다음에는 하둡분산파일시스템의 주요 파일시스템 명령어들을 살펴보겠습니다.<저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>

2018-01-24

썸네일

[이응수의 IT노트] 하둡(Hadoop)의 맵리듀스(Map/Reduce) 프레임워크

[이응수의 IT노트] 하둡(Hadoop)의 맵리듀스(Map/Reduce) 프레임워크안녕하세요. 중앙HTA 이응수 강사입니다.오늘 이응수의 IT노트에서는 하둡(Hadoop)의 맵리듀스(Map/Reduce) 프레임워크를 살펴보도록 하겠습니다.  맵리듀스(Map/Reduce)는 분산 환경에서 <Key, Value> 구조를 이용해서 대규모 데이터를 처리하기 위한 병렬 컴퓨터 프레임워크 입니다. Map/Reduce는 데이터를 여러 조각으로 분할한 후 분산환경에서 <Key, Value> 구조로 데이터를 병렬처리하고, 이를 가공해서 <Key, Value> 구조로 출력합니다. 하둡은 HDFS 환경에서 이런 작업을 수행하는 프로그램을 손쉽게 작성할 수 있도록 Map/Reduce 프레임워크를 제공합니다.  하둡의 Map/Reduce 프레임워크는 map과 reduce 두 단계로 데이터를 처리합니다.map은 산재된 여러 데이터들을 <Key, Value>의 연관성이 있는 데이터로 묶는 작업을 수행하고, reduce는 map 작업 결과에서 중복 데이터를 제거한 후 최종 데이터를 추출하는 작업을 수행합니다.  Map/Reduce 프레임워크에서 데이터의 처리절차는 3단계에 걸쳐서 처리됩니다. 1단계에서는 각종 원시 데이터를 <Key, Value> 구조의 쌍으로 묶어서 map함수의 입력으로 보내는 단계입니다.          원시 데이터가 파일인 경우 Key는 라인번호가 되고, Value는 그 라인의 텍스트 데이터가 됩니다.          map 함수에서는 분석 대상 데이터를 추출하고, 원하는 형태로 데이터를 가공합니다.         map 함수의 실행결과로 얻어지는 출력 데이터도 <Key, Value> 구조의 데이터입니다.2단계에서는 map 함수의 출력 데이터를 Key를 기준으로 정렬해서 reduce 함수로 보냅니다.                    정렬된 데이터는 reduce함수의 입력값이 됩니다. 이 과정을 suffle라고 합니다.3단계에서 reduce함수는 2단계로부터 받은 입력데이터를 분석해서 최종 결과값을 구합니다.  Map/Reduce 프레임워크의 각 단계별 데이터를 흐름은 아래와 같습니다. 위의 그림에서 개발자는 map함수와 reduce함수를 구현하기만 하면 됩니다. Map/Reduce프레임워크는 다양한 데이터소스로부터 데이터를 <K1, V1>형태로 만들어서 map함수의 입력값으로 넣어 줍니다. map함수에서는 입력데이터에서 분석대상 데이터를 추출해서 <K2, V2>형태로 변환하는 작업만 수행하면 Map/Reduce 프레임워크는 suffle 과정을 수행해서 동일한 K2를 가지는 값들을 묶어서 <K2, list(V2)> 구조로 만들고 정렬해서 reduce함수의 입력값으로 제공합니다. reduce함수에서는 <k2, list(V2)> 형태의 전달된 동일한 Key를 가지는 값을 분석해서 <K3, V3>형태의 최종 결과를 만들어냅니다.즉, 개발자는 입력데이터를 변형해서 분석에 적합한 데이터 형태로 변환하는 map함수와 데이터를 분석해서 최종 결과데이터를 출력하는 reduce함수의 구현하면 분산환경의 여러 노드에서 실행되는 병렬처리 프로그램을 간단히 구현할 수 있습니다.위에서 설명한 데이터 흐름을 단어 빈도수 세기 프로그램을 예로 들어서 나타내보도록 하겠습니다.파일로부터 한 라인씩 데이터를 읽어서 map 함수에 <K1, V1>형태로 데이터를 제공하면 최종결과로 <K3, V3>형태의 단어별 빈도수를 출력하는 Map/Reduce 프로그램에서의 데이터 흐름입니다.  Map/Reduce 프레임워크를 이용해서 작성된 프로그램은 일반적인 프로그램과는 다른 특징을 가지게 됩니다. 첫번째는 데이터가 있는 서버로 코드가 전송됩니다. 전통적인 프로그램은 데이터를 가져와서 처리하는 방식이라면,   Map/Reduce 프레임워크는 대용량 데이터의 처리 속도를 높이기 위해서 데이터가 위치한 각 노드로 처리 코드를    전달해서 데이터를 처리합니다.두번째는 <Key, Value> 형태의 데이터셋트로 데이터를 변형해서 처리합니다. 세번째는 실시간 데이터 처리보다는 데이터를 처리하는데 많은 시간이 소요되는 오프라인 배치 처리 작업에 매우 적합합니다.  Map/Reduce 프레임워크의 주요 API를 살펴보겠습니다. Map/Reduce 프레임워크에서 제공하는 기본 데이터 타입 클래스를 알아보고, Mapper클래스와 Reducer 클래스에 대하여 알아보겠습니다. 그리고, MapReduce를 실행하는 Job클래스에 대해서도 알아보겠습니다.  Map/Reduce 프레임워크는 정수, 실수, 불린, 문자열을 다루기 위한 기본 데이터 타입 클래스를 제공합니다. Map/Reduce 프레임워크에서 제공하는 데이터타입 클래스는 WritableComparable<T> 인터페이스를 구현하고 있습니다. Writable 인터페이스는 직렬화와 관련된 메소드를 정의하고 있고, WriteableComparable<T> 인터페이스는 Writable 인터페이스에 값을 비교할 수 있는 메소드가 추가된 인터페이스입니다. Map/Reduce 프레임워크에서는 데이터의 입력과 출력 및 데이터를 정렬하는데 필요한 기능을 Writable 인터페이스와 WritableComparable 인터페이스에 정의하고, 이를 구현한 데이터 타입 클래스를 제공하고 있는 것입니다.Map/Reduce 프레임워크의 기본 데이터 타입 클래스는 BooleanWritable, ByteWritable, intWritable, LongWritable, FloatWritable, DoubleWritable, MapWritable, NullWritable, ArrayWritable, Text 등입니다. 대부분의 데이터 타입 클래스는 값을 반환하는 get() 메소드와 값을 저장하는 set(값) 메소드를 제공합니다. Text는 문자열을 다루는 데이터 타입 클래스입니다. Map/Reduce 프레임워크는 WritableComparable<T> 인터페이스를 구현해서 사용자정의 데이터 타입 클래스를 구현할 수 있습니다. 아래는 간단한 사용자정의 데이터타입 클래스입니다. Map/Reduce 프레임워크의 Map클래스와 Reduce클래스를 알아보겠습니다.Mapper클래스는 아래의 클래스를 상속받고, map메소드를 재정의합니다.Mapper 클래스의 map 메소드에서는 <KEYIN, VALUEIN> 타입의 데이터를 가공해서 <KEYOUT, VALUEOUT> 타입으로 출력합니다. map함수는 각각의 <Key, Value>마다 한번씩 실행됩니다.Reducer클래스는 아래의 클래스를 상속받고, reduce메소드를 재정의합니다. Reducer클래스의 reduce메소드에서는 KEYIN타입의 값을 여러개 전달받아서 집계한 최종결과를 <KEYOUT, VALUE> 타입으로 출력합니다. reduce메소드는 각 Key별로 한번씩 수행됩니다.Mapper클래스와 Reducer클래스를 활용한 Map/Reduce 프로그램은 다음 시간에 간단한 예제를 통해서 알아보도록 하겠습니다.  마지막으로 Job클래스 입니다. Job클래스는 Map/Reduce 작업를 실행하는 Driver클래스에서 필요한 정보를 지정할 때 사용되는 클래스입니다.Job 클래스는 Map/Reduce 작업의 Key클래스와 Value클래스, 실행할 Mapper클래스와 Reducer클래스, 입력포맷형식과 출력포맷형식, 입력데이터 경로와 출력데이터 저장경로 등을 지정하고, Map/Reduce 작업을 실행시킵니다.일반적인 Driver클래스에서 Job 클래스의 설정은 아래와 같은 형태입니다.  이상 맵리듀스(Map/Reduce) 프레임워크에 대해서 간단히 살펴보았습니다. 다음에는 Map/Reduce 프레임워크를 활용해서 간단한 예제를 작성하고 실행결과를 확인해보도록 하겠습니다.날씨가 무척 쌀쌀해졌네요.다들 감기조심하시고 건강 챙기시길 바랍니다.감사합니다.<저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>

2017-11-24

썸네일

​[이응수의 IT노트] 하둡(Hadoop)의 구성요소

  ​[이응수의 IT노트] 하둡(Hadoop)의 구성요소   ​안녕하세요. 중앙HTA 이응수 강사입니다. 오늘 이응수의 IT노트에서는 하둡의 구성요소를 살펴보도록 하겠습니다.  하둡은 개인의 개발 PC에 테스트 목적으로 설치할 수도 있고, 네트워크상의 서로 다른 서버를 클러스터로 구성해서 설치할 수도 있습니다. 하둡의 설치가 완료되면, 빅데이터를 저장하고, 분석하기 위해서 하둡을 실행하게 되는데, "하둡을 실행한다"라는 의미는여러 개의 데몬(deamon)을 실행하는 것을 말합니다. ​​이 데몬들은 각각 특별한 역할을 수행하는데 하나의 컴퓨터에 모든 데몬이 실행될 수 도 있고, 클러스터로 구성된 환경에서는 네트워크상의 서로 다른 서버에서 실행될 수 도 있습니다. 하둡의 데몬에는 NameNode, DataNode, SecondaryNameNode, JobTracker, TaskTracker 등이 있습니다.  ​하둡은 분산 저장과 분산 연산을 수행하기 위해서 master/slave 구조를 가지고 있습니다. 이런 분산저장시스템을 하둡 파일 시스템(Hadoop File System) 또는 HDFS라고 부릅니다. 하둡은 보통 master 역할을 수행하는 한 대의 NameNode와 slave 역할을 하는 여러 대의 DateNode로 구성됩니다. ​HDFS에서 master 역할을 수행하는 NameNode는 slave인 DateNode에게 읽기/쓰기 작업을 지시하고, HDFS(하둡파일시스템)의 모든 정보를 관리합니다. HDFS에서 파일을 저장하는 방식은 일반적인 파일저장방식과는 차이가 있습니다. HDFS는 파일을 블록 단위로 나누어서 저장합니다. 하나의 블록 크기는 보통 128MB입니다. 크기가 큰 파일은 여러 개의 블록으로 나뉘고 각각의 블록은 여러 DateNode에 흩어져서 저장됩니다. 따라서, 어떤 DataNode가 어떤 블록을 저장하고 있는지 등의 정보를 관리할 필요가 있는데, NameNode가 그 정보를 가지고 있습니다. ​HDFS에서 NameNode와 DataNode가 파일의 블록단위로 나누어서 저장하는 일반적인 모습은 아래와 같습니다. ​    위의 그림처럼 NameNode는 파일의 메타데이터(디렉토리명, 파일명, 복제본 수, 블록의 위치정보)를 저장하고, 파일은 여러 개의 블록으로 나누어져서 여러 대의 DateNode에 블록단위로 저장됩니다. 그림에서 각 블록은 3개의 복사본을 가지게 됩니다. 이로 인해 하나의 DataNode에 장애가 생겨도 사용자는 장애없이 계속 파일을 읽을 수 있게 됩니다. 위의 그림처럼 하둡에서 NameNode는 복수 개 구성되지 않습니다.그래서 하둡클러스터에서 NameNode는 단일장애지점이 됩니다. NameNode에 장애가 생기면 하둡 클러스터의 어떤 파일에도 접근할 수 없게 됩니다.  하둡의 slave노드에는 DataNode 데몬이 존재합니다. DataNode는 사용자가 하둡파일시스템에 파일을 읽거나 쓸때, 이 파일들을 블록단위로 나누어서 저장하거나, 읽는 단순한 기능을 수행합니다. 클라이언트가 하둡파일시스템에서 파일을 읽거나 쓸때 NameNode는 그 파일의 블록이 어느 DataNode에 있는지 클라이언트에게 알려줍니다. 클라이언트는 블록을 읽기위해서 DataNode와 직접 통신해서 파일을 읽거나 씁니다. DataNode는 주기적으로 heartbeat와 자신이 가지고 있는 블록정보를 NameNode로 보고합니다. NameNode는 그 정보를 바탕으로 DataNode의 상태와 블록정보를 관리합니다.  SecondaryNameNode(SNN)는 NameNode의 백업서버가 아닙니다. NameNode는 HDFS의 메타데이터를 메모리에서 처리합니다. HDFS는 메모리에서 처리되는 HDFS의 메타데이터가 유실되지 않게 하기 위해서 editslog와 fsimage 파일을 사용합니다. editslog는 HDFS의 모든 변경이력을 저장하고, fsimage는 메모리에 저장된 메타데이터를 파일시스템이지로 저장한 파일입니다. NameNode가 초기화될 때 fsimage를 메모리로 로딩해서 새로운 메타데이터 파일시스템 이미지를 생성하고, 파일시스템 이미지에 editslog의 변경이력을 적용합니다. ​이때 editslog의 파일 사이즈가 너무 크면 파일시스템 이미지 갱신에 많은 시간이 소요되게 되고, 이 시간동안 HDFS를 대상으로 읽기 쓰기 작업을 할 수 없게됩니다. SNN은 NameNode의 editslog와 fsimage를 다운받아서 fsimage를 갱신하는 역할을 대신 수행하는 데몬입니다. SNN이 fsimage를 갱신하는 과정을 체크포인팅이라고 하고, 체크포인팅은 1시간 마다 주기적으로 일어납니다.  하둡은 데이터의 저장과 관련해서 master/slave구조의 NameNode, DataNode로 구성되어 있는 것과 마찬가지로 데이터의 연산처리과 관련된 데몬도 master/slave 구조를 가지고 있습니다. JobTracker 데몬은 master 역할을 수행하고, TaskTracker는 slave 역할을 수행합니다. JobTracker는 master로서 사용자가 제출한 MapReduce 애플리케이션의 전체 실행을 감독합니다. ​사용자가 MapReduce 애플리케이션을 하둡에 제출하면 JobTracker는 여러 가지 실행계획을 결정하고, 클러스터의 여러 노드에 task를 할당합니다. 여기서 Task는 사용자가 제출한 MapReduce 애플리케이션을 HDFS에서 병렬처리가 가능하도록 분할한 처리단위입니다. JobTracker는 실행되는 모든 Task를 모니터링하고, Task가 실패하면 자동으로 실패한 Task를 실행합니다. 하둡 클러스터에서 하나의 JobTracker 데몬만 존재합니다. JobTracker와 TaskTracker의 관계는 아래 그림과 같습니다.         각 TaskTracker는 각 salve 노드에 할당된 작업의 실행을 담당합니다. 각각의 TaskTracker는 JobTracker가 할당한 개별작업을 실행합니다. 각 slave노드에는 TaskTracker가 하나만 존재하지만, 여러 개의 JVM을 생성해서 다수의 map작업과 reduce작업을 병렬처리할 수 있습니다. TaskTracker는 JobTraker에게 주기적으로 heartbeat를 전송합니다.JobTracker는 TaskTracker로부터 정해진 주기내에 heartbeat가 도착하지 않으면 해당 TaskTracker에 문제가 발생했다고 간주하고, 해당 작업을 하둡 클러스터 내에 위치한 다른 노드에 할당합니다.  지금까지 하둡의 구성요소들과 하둡클러스터의 구조를 간단히 살펴보았습니다. NameNode와 DataNode 데몬은 HDFS에 데이터를 읽고 쓰는 작업과 관련된 데몬 프로그램이고, JobTracker와 TaskTracker는 하둡 클러스터에서 MapReduce 애플리케이션의 병렬처리를 지원하는 데몬 프로그램이라고 할 수 있습니다. ​ 이상 하둡(Hadoop)의 구성요소를 마치도록 하겠습니다.다음에는 MapReduce 프레임워크에 대해서 알아보겠습니다. 어느덧 2017년 9월도 얼마 남지 않았네요.마무리 잘하시고 즐거운 추석 연휴 보내시기 바랍니다.​감사합니다.        <저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>

2017-09-19

썸네일

[이응수강사의 IT노트] 하둡 (Hadoop) 개발환경 설치 방법

[이응수강사의 IT노트] 하둡 (Hadoop) 개발환경 설치 방법  안녕하세요. 중앙HTA 이응수 강사입니다. 이번 이응수의 IT노트에서는 하둡(Hadoop) 분산환경의 데이터 처리 방식과 하둡(Hadoop) 개발환경 설치과정을 설명하도록 하겠습니다. 먼저 간단하게 하둡(Hadoop)에 대해서 알아보도록 하겠습니다.하둡(Hadoop)은 대용량 데이터를 처리하는 분산 응용 프로그램을 작성하고 실행시키기 위한 오프소스 프레임워크입니다. 하둡(Hadoop)의 장점으로는 다른 분산 컴퓨팅 시스템에 비해서 접근성, 견고성, 확장가능성이 매우 뛰어납니다. 하둡(Hadoop)은 윈도우 PC와 같은 범용 컴퓨터들로 큰 규모의 클러스터 환경을 쉽게 구성할 수 있고, 하드웨어의 빈번한 고장을 가정하고 설계되었기 때문에 하드웨어 고장 발생시 적절한 대응을 할 수 있습니다. 하둡(Hadoop)은 단순히 컴퓨터를 추가함으로써 클러스터 규모를 선형적으로 확장할 수 있고, 분산환경에서 실행되는 병렬코드를 간단하고 빠르게 작성할 수 있습니다. 하둡(Hadoop)의 이런 특징은 초보자도 빠르고 저렴한 비용으로 하둡 클러스터를 쉽게 구성하고, 분산 컴퓨팅 환경에서 실행되는 프로그램을 작성하고 실행해볼 수 있게 합니다. 일반 사용자가 하둡 클러스터와 어떤 식으로 상호작용하는지는 아래의 그림으로 나타낼 수 있습니다. 하둡 클러스터는 네크워크로 연결된 범용 컴퓨터들의 집합체입니다. 데이터의 저장과 처리는 모두 하둡 클러스터 내에서 이루어집니다. 사용자들은 개인 컴퓨터를 통해서 필요로 하는 연산 작업을 하둡 클러스터에 요청하기만 하면 됩니다.  다음으로 하둡 클러스터 내에서 어떻게 데이터를 처리하는지를 설명하겠습니다. 하둡(Hadoop)의 데이터 처리 모델은 MapReduce 프레임워크입니다. MapReduce 프레임워크를 사용해서 데이터를 처리하는 응용프로그램을 작성하면 확장성, 병렬성, 내고장성과 같은 일은 하둡(Hadoop)이 모두 알아서 처리해 주기 때문에 사용자는 데이터를 처리하는 로직의 구현에만 집중하면 됩니다. MapReduce 프레임워크는 크게 매핑(mapping)과 리듀싱(reducing)의 두 단계로 나누어서 처리됩니다.각각의 단계는 mapper와 reducer라는 데이터 처리 메소드로 정의되어 있습니다. mapper는 입력데이터를 필터링하고 reducer가 처리할 수 있는 형태로 데이터를 변형합니다. reducer는 mapper로부터 데이터를 받아서 데이터를 통합하는 작업을 수행합니다. 매핑과 리듀싱은 데이터를 처리할 때 많은 프로그램에서 공통적으로 발견되는 특징을 모델링한 것입니다. 그리고 분산 컴퓨터 환경에서는 여러 대의 컴퓨터를 사용해서 입력데이터를 필터링하고 변형하는 매핑 단계를 수행한 후에 그 결과값을 reducer함수에게 전달하는 과정에서 특별한 처리가 필요합니다. 리듀싱 단계에서 각 컴퓨터들이 독립적으로 작업을 처리하기 위해서는 적절한 크기로 데이터가 분할되어 각 컴퓨터로 전달되어야 합니다. 이 과정을 셔플링(suffling)이라고 합니다. 셔플링 단계에서는 mapper의 출력 데이터를 파티셔닝(partitioning)과 정렬(sorting)을 활용해서 reducer함수의 입력 데이터로 전달합니다. 셔플링과 파티셔닝은 모든 MapReduce 프로그램에서 공통적으로 사용되는 일반적인 단계이기 때문에 하둡의 MapReduce 프레임워크에서는 대부분의 상황에서 사용할 수 있는 기본 기능을 제공하고 있습니다. MapReduce는 위에서 설명한 매핑, 리듀싱, 파티셔닝, 셔플링 단계가 적절하게 동작하게 하기 위해서 특별한 데이터 구조를 사용합니다. MapReduce는 키와 값의 한 쌍으로 구성된 리스트를 데이터의 기본 단위로 사용합니다. MapReduce 프레임워크의 매핑단계와 리듀싱단계의 입력과 출력데이터의 형식은 아래와 같습니다.  입력출력map<k1, v1>list(k2, v2)reduce<k2, list(v2)>list(k3, v3)   그럼, 간단한 단어세기 예제를 통해서 하둡의 MapReduce 프레임워크의 데이터 흐름을 살펴보도록 하겠습니다. 이 예제에서 데이터는 텍스트를 포함하고 있는 파일입니다. 각 단계의 입력데이터는 반드시 키와 값으로 구성되어 있어야 합니다. mapper에 있는 map함수는 키/값(<k1, v1>)으로 이루어진 입력데이터를 전달받아서 하나씩 처리합니다.보통 k1은 파일의 행번호이고, v1은 각 행의 레코드입니다. map함수는 각각의 <k1, v1>을 <k2, v2>형태로 변환합니다. 이 예제에서는 레코드를 공백단위로 잘라서 <word, count>로 변환합니다. 셔플링 단계에서는 mapper의 처리결과를 k2의 값이 같은 경우, 새로운 <k2, list(v2)>의 형태로 가공해서 reducer에 전달합니다. 이 예제에서는 world 단어가 2번 나오는 경우 <world, list(1, 1)>과 같은 형대로 구성됩니다. reducer에 있는 reduce함수는 <k2, list(v2)>의 형태로 전달받은 입력데이터를 집계해서 <k3, v3>의 형태로 출력하는데, 이 예제에서는 <world, list(1, 1)>을 <world, 3>의 형태로 집계해서 파일에 기록합니다. 단어세기 예제에서 살펴본 것처럼 사용자는 데이터 처리에 적합한 형태로 입력데이터를 변형하는 맵함수를 정의하면 MapReduce 프레임워크는 셔플링과 파티셔닝을 사용해서 맵함수의 출력데이터를 정렬하고 병합해서 리듀스 함수로 전달합니다. 리듀스 함수에서는 key별로 병합된 입력데이터를 전달받아서 실질적인 데이터 분석을 수행하는 작업을 구현하면 됩니다.       이번에는 하둡 개발환경의 설치과정을 설명하도록 하겠습니다. 하둡은 독립실행 모드, 가상분산 모드, 완전분산모드 3가지의 실행모드를 가지고 있습니다. 독립실행모드는 하둡의 기본 모드입니다. 하둡 환경설정파일에 아무런 설정하지 않고 실행하면 로컬 장비에서만 실행되는 독립실행 모드가 됩니다. 하둡에서 제공하는 여러 데몬들이 실행되지 않기 때문에 분산환경을 고려한 테스트가 불가능합니다. 가상분산 모드는 한 대의 컴퓨터로 클러스터를 구성하는 것입니다. 하둡의 모든 데몬이 한 대의 컴퓨터에서 실행됩니다. 일반적으로 하둡을 처음으로 공부하는 사람들이 MapReduce 프로그램을 작성하고 테스트해보기 위해서 가상분산 모드로 하둡 개발환경을 구성합니다. 완전분산 모드는 여러 대의 장비로 하둡 클러스터를 구성하는 것입니다. 하둡으로 실제 서비스를 하게 될 경우 완전분산 모드로 구성하게 됩니다. 이번 과정에서 가상분산 모드로 하둡환경을 구성하는 경우에 대한 설명을 하도록 하겠습니다.  하둡은 리눅스 및 다양한 유닉스 계열 운영체제에 설치할 수 있습니다. 윈도우를 사용하는 경우 오라클 VirtualBox를 설치해서 리눅스 가상머신 환경을 구성하도록 합니다. 이번 과정에서는 VirtualBox에 우분투 16.04.3을 설치한 후 하둡을 설치하는 과정을 설명하도록 하겠습니다. VirtualBox의 설치과정과 우분투 설치과정은 아래의 url을 참고하시기 바랍니다. VirtualBox 설치방법 : https://extrememanual.net/7184 VirtualBox에 우분투 설치방법 : https://extrememanual.net/7223  우분투를 포함한 데비안 계열 리눅스는 apt-get(Advanced Packing Tool)이라는 패키지 관리 도구를 제공합니다. apt-get를 활용해서 개발과 관련된 패키지를 설치할 수 있다.  하둡을 설치하기 위해서는 먼저 자바가 설치되어 있어야 합니다. # apt-get으로 패키지 인덱스 정보를 업데이트 합니다. # openjdk를 설치합니다. # 설치된 자바 버전을 확인합니다. # JAVA_HOME을 .bashrc 파일에 등록하도록 하겠습니다. # .bashrc파일의 끝에 JAVA_HOME 환경변수를 추가합니다.    # javac에 대한 절대경로를 설치된 openjdk의 javac로 설정합니다. 다음으로 하둡 사용자 계정을 생성하도록 합니다.# 하둡 사용자 계정을 위한 그룹(hadoop) 생성하겠습니다. # 하둡 사용자(hduser)를 생성하고 hadoop 그룹에 추가합니다.      # 생성된 하둡계정이 sudo 명령어를 실행할 수 있도록 합니다.  다음은 SSH패키지 설치 및 관련 설정을 하겠습니다. 하둡은 클러스터를 구축할 때 master노드와 slave노드로 구성하게 됩니다. master노드는 클러스터에 위치한 slave노드에 접근해서 하둡의 데몬을 실행시켜야 하는데 이러한 접근을 위해서 SSH를 이용합니다. SSH는 표준 공개키 암호화를 이용해서 한 쌍의 키를 생성합니다. 이 키는 사용자를 확인하는데 사용됩니다. # SSH 패키지를 설치합니다.    # 암호를 입력하지 않아도 로그인할 수 있도록 다음과 같이 빈 암호를 가진 SSH키를 생성합니다.      # 생성된 id_rsa.pub 파일을 authorized_keys 파일에 추가합니다.   # SSH를 이용해서 접속할 수 있는지 확인해봅니다.  자바와 SSH설치가 완료되었으면 하둡을 설치하도록 하겠습니다. 본 과정에서는 hadoop-1.2버전을 설치해보도록 하겠습니다. # wget을 이용해서 하둡을 다운받습니다.    # 다운받은 하둡파일을 현재 디렉토리에 압축 해제합니다.   # /usr/local 디렉토리에 hadoop 디렉토리를 생성합니다. # 위에서 압축 해제한 하둡파일을 /usr/local/hadoop 디렉토리로 이동시키고, 디렉토리에 대한 접근권한을 변경합니다. 하둡 파일 설치가 완료되었으면 가상분산모드로 동작하도록 하둡환경파일에 설정정보를 추가해보겠습니다. 하둡 환경설정파일은 하둡설치경로/conf 폴더에 있습니다. 하둡환경 설정 파일은 hadoop-env.sh, core-site.xml, hdfs-site.xml, mapred-site.xml 파일을 수정해야 합니다. hadoop-env.sh는 하둡을 실행하는 셜스크립트에서 필요한 환경변수를 설정합니다. 이 파일에는 JDK 경로등을 설정합니다. core-site.xml은 hdfs와 맵리듀스에서 공통적을 사용할 환경정보를 설정합니다. hdfs-site.xml은 hdfs에서 사용할 환경 정보를 설정합니다. mapred-site.xml은 맵리듀스에서 사용할 환경 정보를 설정합니다.  # hadoop-env.sh에 JDK 설치경로를 추가합니다.    # core-site.xml에 네임노드 주소와 하둡에서 발생하는 임시 데이터를 저장하는 디렉토리를 설정합니다. # 디렉토리는 미리 생성되어 있어야 합니다.  # hdfs-site.xml에 복제본 갯수를 설정합니다.  # mapred-site.xml에 잡트래커 데몬의 주소를 설정합니다. 하둡 환경설정파일의 수정이 완료되면 하둡 네임노드를 초기화합니다. # 하둡 네임노드를 포맷합니다.     하둡 데몬을 실행시키고, 하둡 데몬이 정상적으로 실행되었는지 확인하면 하둡 설치가 완료됩니다. # 하둡 데몬을 실행합니다. # 모든 하둡데몬이 정상적으로 실행되었는지 확인합니다. 네임노드, 보조네임노드, 잡트래커, 데이터노드, 태스크트래커가 정상적으로 실행중인 것을 확인할 수 있습니다. 이것으로 하둡의 가상분산모드 설치가 완료되었습니다. # 모든 하둡 데몬의 종료는 stop-all.sh를 실행하면 됩니다.    설치과정에서 등장하는 하둡의 구성요소들은 다음 글에서 자세히 설명하도록 하겠습니다. 그럼 더운 날씨에 모두들 건강 조심하세요!  <저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>

2017-08-18

썸네일

[이응수의 IT노트] 빅데이터의 3대요소와 하둡 프로그래밍이란?

 [이응수의 IT노트] 빅데이터의 3대요소와 하둡 프로그래밍이란? 안녕하세요. 중앙HTA의 이응수 강사입니다.오늘부터 빅데이터를 주제로 IT노트를 한장한장 만들어가려고 합니다.평소에 빅데이터에 관심이 많으신 분들의 많은 관심 부탁드립니다. ^^​먼저 빅데이터가 무엇인지 먼저 알아보도록 하겠습니다.1. 빅데이터란? 빅데이터는 기존의 데이터베이스 관리도구를 사용해서 데이터를 수집, 저장, 관리, 분석할 수 있는 역량을 넘어서는 데이터를 말하기도 하고, ​다양한 종류의 데이터로부터 저렴한 비용으로 가치가 있는 정보를 추출하기 위해서 데이터의 수집, 저장, 분석을 지원하는 차세대 기술 및 아키텍처를 말하기도 합니다. 빅데이터를 이해하기 위해서는 빅데이터의 3대 요소에 대해서 알아볼 필요가 있습니다. 아래 그림은 빅데이터의 3대요소를 나타냅니다.​  빅데이터의 3대 요소는 Volume(양), Velocity(속도), Variety(다양성)입니다. ​빅데이터의 3대 요소 중 두 가지 이상만 충족한다면 빅데이터라고 볼 수 있습니다. ​(1) Volume(양)빅데이터는 일반적으로 수십 테라바이트(terabyte) 혹은 수십 페타바이트(petabyte) 이상의 크기를 가집니다. ​기존의 데이터베이스는 이런 대용량의 데이터를 소화하기 힘들기 때문에 확장가능한 분산형 파일시스템을 이용해서 데이터를 저장하고, ​분석하는 컴퓨팅 기법이 필요합니다. 대표적인 기술로 구글의 GFS(Google File System), 아파치 하둡 등이 있습니다. (2) Velocity(속도)빅데이터를 속도 측면에서 접근한 것이 Velocity다. 데이터가 생성되고, 저장되며, 시각화되는 과정이 얼마나 빨리 이루어져야 하는지에 대한 정의입니다.​데이터의 처리방식은 실시간 처리방식과 배치처리 방식으로 나눌 수 있습니다. 수집되는 데이터의 특성에 다양한 수집방법, 분석, 시각화 기술을 사용할 수 있습니다. (3) Variety(다양성)빅데이터는 다양한 종류의 데이터로 구성될 수 있습니다. ​데이터의 종류는 크게 정형화 정도에 따라서 정형 데이터, 반정형 데이터, 비정형 데이터로 나눌 수 있습니다. ​정형 데이터는 고정된 필드에 저장되는 데이터를 의미하며, 데이터베이스에 저장할 수 있는 데이터들이 정형 데이터에 해당됩니다. ​반정형 데이터는 XML, HTML, 로그처럼 고정된 필드는 없지만, 일정한 규칙을 가지고 있는 데이터가 해당됩니다. ​비정형 데이터는 고정된 형식이 없는 데이터를 의미하며, sns나 유투브에 올린 사진과 오디오 데이터들이 이에 해당됩니다. ​빅데이터는 이런 비정형 데이터도 처리할 수 있는 능력을 가지고 있어야 합니다. 2. 하둡하둡은 대용량 데이터를 병렬 분산 처리할 수 있는 자바 기반의 오픈소스 소프트웨어 입니다.​하둡은 분산 파일 시스템인 HDFS(Hadoop Distributed File System)에 데이터를 저장하고, 분산 처리 시스템인 MapReduce로 데이터를 분석합니다. ​하둡은 10 ~ 1000대의 서버로 하나의 클러스터를 구성하여 대용량의 데이터를 저장하고 처리하는 것도 가능합니다. 하둡은 자바 기반으로 개발되었기 때문에 하둡을 설치/운용하기 위해서 특별한 서버나 장비가 필요하지 않습니다. ​하둡은 클러스터를 구성하는 서버 대수를 추가하기만 하면 저장 용량을 확장하거나 분산 처리 성능을 향상시킬 수 있는 스케일 아웃(Scale-out)을 지원합니다. 관계형 데이터베이스가 낮은 대기 시간으로 작은 데이터 셋을 처리하는 것이 목표라면, 하둡은 대용량의 데이터를 대상으로 일괄 처리를 실행한다.  하둡은 아파치 소프트웨어 재단의 최상위 프로젝트 중 하나입니다. ​대규모 데이터 처리를 필요로 하는 많은 개발자들이 개발에 직접 참여하고 있어서 계속 발전하고 있습니다. ​3. 하둡 에코 시스템 하둡 코어 프로젝트는 분산 데이터 저장을 지원하는 HDFS와 데이터 분석처리를 지원하는MapReduce입니다.​하둡의 코어 프로젝트를 지원하는 다양한 서브 프로젝트가 제공되는데, 이를 하둡 에코시스템이라고 합니다. ​하둡 에코시스템은 아래 그림과 같이 다양한 프로젝트로 구성되어 있습니다.​ ​​(1) ​Zoo keeper는 분산 코디네이터입니다. 분산환경에서 서버사이의 상호작용이 필요한 서비스를 제공하고, 하나의 서버에만 서비스가 집중되지 않게 하며, ​​하나의 서버에서 처리한 결과를 다른 서버와 동기화 시킵니다. ​Zoo keeper는 운영서버에 문제가 발생했을 때 대기중인 다른 서버를 운영서버로 전환시켜서 서비스가 지속되도록 하며, 분산환경을 구성하는 환경설정정보를 통합적으로 관리할 수 있게 합니다.​​(2) Oozie는 워크플로우 관리를 지원하는 자바 웹 애플리케이션입니다. MapReduce 작업이나 Pig 작업으로 구성된 워크플로우를 제어합니다.​​(3) Hbase는 HDFS에서 운용되는 컬럼기반 데이터베이스입니다. 실시간 랜덤조회 및 업데이트가 가능하고, 각 프로세스는 데이트를 비동기적으로 업데이트할 수 있습니다.​(4) Pig는 분산 데이터를 처리하는 복잡한 MapReduce 프로그램을 대체하는 피그라틴(Pig Latin)이라는 자체 언어를 제공합니다. 피그라틴은 MapReduce API를 매우 단순화시킨 SQL과 유사한 형태의 언어입니다.​(5) Hive는 하둡 기반의 데이터 웨어아우징 솔루션입니다. SQL과 매우 유사한 HiveSQ 쿼리 언어를 제공합니다. HiveQL를 이용하면 자바를 다룰 줄 모르는 데이터 분석가도 HDFS에 저장된 데이터를 분석할 수 있습니다. HiveQL은 내부적으로 MapReduce Job으로 변환되어 실행됩니다.​(6) Mahout은 하둡기반의 데이터 마이닝 알고리즘을 구현한 오픈소스 프로젝트입니다. 다양한 기계학습 라이브러리를 제공하며, 비즈니스 환경에 맞게 최적화해서 사용할 수 있습니다.​(7) HCatalog는 하둡으로 생성한 데이터를 공유할 수 있는 테이블 및 스토리지 공유 서비스를 제공합니다. 하둡 에코시스템사이의 데이터모델 공유를 지원하기 때문에 상호운영성이 향상됩니다. Hive에서 생성한 테이블이나 데이터모델을 Pig나 MapReduce에서 쉽게 이용할 수 있게 합니다.​​(8) Avro는 RPC(Remote Procedure Call)와 데이터 직렬화를 지원하는 프레임워크입니다. JSON을 이용해서 언어 중립적 스키마을 정의합니다. 한 언어로 직렬화된 데이터를 다른 언어에서 읽을 수 있게 합니다.​(9) Chukwa는 분산환경에서 생성되는 데이터를 HDFS에 안정적으로 저장하는 플랫폼입니다. 분산된 각 서버에 에이전트를 실행하고, 콜렉터가 에이전트로부터 데이터를 받아서 HDFS에 저장합니다. ​​(10) Flume은 Chukwa와 유사합니다. Flume은 전체 데이터 흐름을 관리하는 마스터 서버가 있기 때문에 데이터를 어디서 수집하고, 어떤 방식으로 전송하고, 어디에 저장할 것인지를 동적으로 변경할 수 있습니다.​(11) Scribe는 페이스북에서 개발한 데이터 수집 플랫폼입니다. 데이터를 중앙 집중 서버로 전송하는 방식입니다. 최종 데이터는 HDFS 외에 다양한 저장소에서 활용할 수 있습니다.​(12) Sqoop은 대용량 데이터 전송 솔루션입니다. HDFS, RDBMS, NoSQL 등과 같은 다양한 저장소에 대용량 데이터를 신속하게 전송하는 방법을 제공합니다.(13) Hiho도 Sqoop와 유사한 데이터 전송 솔루션입니다. 하둡에서 데이터를 가져오기 위한 SQL을 지정할 수 있으며, JDBC 인터페이스를 지원합니다. ​(14) Impala는 하둡기반의 분산 쿼리 엔진입니다. 데이터 조회를 위한 인터페이스로 HiveQL를 사용하며, 수초 내에 질의결과를 확인할 수 있습니다.​(15) Tajo는 하둡기반의 데이터 웨어하우스 시스템입니다. MapReduce가 아닌 자체 분산처리 엔진을 사용하며 표준 SQL을 지원합니다. ​(16) HDFS, AWS S3, Hbase, DBMS 등에 저장된 데이터를 표준 SQL로 조회할 수 있고, 다른 종류의 저장소 간의 데이터 조인처리가 가능합니다.​​하둡은 위와 같이 코어프로젝트와 다양한 서브 프로젝트가 존재합니다. 이를 하둡 생태계라고 부르기도 합니다.​다음에는 하둡 서버를 설치하는 방식을 알려드리고, HDFS 아키텍처를 살펴보도록 하겠습니다. 그럼 더운데 수고하시고 좋은 하루 보내세요 ^^​  저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지> 

2017-07-18

썸네일

[송규남의 IT 다이어리] 제이쿼리(jQuery) 열여섯번째 이야기

​[제이쿼리 모바일(jQuery Mobile) 웹 페이지 만들기 두번째이야기]​​​안녕하세요?    중앙HTA강사 송규남 입니다.  이번 강좌에서는 지난 강좌에 이어 계속 jQuery Mobile(제이쿼리 모바일) 에 대해서 알아보겠습니다.     먼저 지난 시간처럼 예제를 만들기 위한 sample1 이란 이름의 폴더를 하나 만들고 sample1폴더안에  css폴더와 js폴더를 만듭니다.  css폴더 에 jquery.mobile-1.4.5.min.css 파일을 넣고,  압축 푼 폴더에 있는  images파일(이미지파일)도 css폴더 안에 넣습니다. js폴더 에는 jquery.mobile-1.4.5.min.js파일 과  jquery.js파일 을 넣습니다.     해당 폴더 안에 test1.html파일 을 만듭니다.  ​디렉토리 구조는 아래와 같습니다.     ​     ​이번 예제는 메뉴를 클릭하면 다음 페이지로 전환이 될 때 다이얼로그형태로 변환되어 페이지가 보이도록 해보겠습니다.   아래와 같은 코드를 작성합니다. ​​    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <style type="text/css">     #bb{top:500px; left:10px;position:fixed;z-index: 999; } </style> <link rel="stylesheet" href="css/jquery.mobile-1.4.5.min.css"> <script src="http://code.jquery.com/jquery-1.12.1.min.js"></script> <script type="text/javascript" src="js/jquery.mobile-1.4.5.min.js"></script> </head> <body> <div data-role="page" id="page1" >     <div data-role="header">         <h1>우리우리 동물병원</h1>     </div>     <div role="main" class="ui-content" >         <div style="z-index: 555">             <p><img src="images/6.png"></p>             <a href="#page2" data-rel="dialog"             data-transition="flip" class="ui-btn">애완견정보</a>             <a href="#menupanel" class="ui-btn">메뉴보기</a>                 </div>     </div>     <div id="bb">         </div>     <div data-role="footer" data-position="fixed" style="z-index:100">         <p>찾아오시는길:서울시 종로구 xxx</p>     </div> </div> <div id="page2" data-role="page">     <div data-role="header">         <h3>애완견 이미지</h3>     </div>     <div data-role="main" class="ui-content">         <div>             <img src="images/3.png">             <img src="images/4.png">             <img src="images/5.png">         </div>     </div> </div> </body> </html>     위의 코드 중에 아래의 화살표 부분에 해당하는 코드 data-rel="dialog" 속성을 설정하면 a태그에  링크된 page가 보일 때 다이얼로그 형태로 보이게 됩니다. ​ ​  <div role="main" class="ui-content" >    <div style="z-index: 555">       <p><img src="images/6.png"></p>     <a href="#page2" data-rel="dialog"   <--- 요부분                  data-transition="flip" class="ui-btn">애완견정보</a>             <a href="#menupanel" class="ui-btn">메뉴보기</a>         </div> </div>   ​​[실 행 결 과]             -메뉴를 클릭하면 다이얼로그형태로 출력된다. ​           ​- 여기에 패널을 삽입하는 코드를 추가해 보겠습니다.   - ​패널은 숨어있다가 왼쪽이나 오른쪽에서 밀듯이 나타나는 영역인데요 스마트폰 처럼 화면이 작은 장비에서      메뉴 등을 보여줄 때 많이 사용하는 방법입니다. ​​- ​html파일에 아래처럼 패널로 보이기 위한 메뉴를 작성합니다.        ​​ - 패널은 data-role="panel" 로 지정해서 만들어 주며 header나 main이 아닌 영역에 만들어 줍니다.     data-display 속성을 이용해서 화면에 드러날 때 어떤 방식으로 나타나는지를 정해 줍니다.    "overlay"는 겹쳐져서 보이게 되는 옵션입니다.  ​- ​자 코드를 작성 후 실행해 보시면 메뉴보기 버튼을 누르면 아래와 같이 패널 나타나는 것을 볼 수 있습니다​  ​     ​​ - ​그런데 우리가 테스트를 웹 브라우저를 통해서 하기 때문에 스마트폰에서는 화면이 어떻게 보여지는지 확인하기가  어렵지요? 그래서 저는 크롬에서 Ripple emulator이라는 확장프로그램을 설치했습니다.   Ripple emulator을 설치하면 스마트폰 기종에 따라  어떻게 화면에 보이지는 간단하게 테스트해볼 수 있습니다.   - 크롬 웹스토어 페이지에 접속합니다.   ​​https://chrome.google.com/webstore/       ​ - Ripple emulator를 검색 후 설치합니다.        ​  설치하면 크롬 브라우저에 아래와 같은 아이콘이 생기고 모바일(Mobile)로 보여질 페이지에서 enable을 클릭하면  ​모바일(Mobile) 페이지로 실행해서 볼 수 있습니다.             jQuery Mobile(제이쿼리 모바일) 에 관련된 부분은    http://jquerymobile.com/demos/   사이트에  관련 예제들이 많으니 ​보고 하나하나 따라 해보시면 큰 어려움을 없을 거라고 생각됩니다.         이번 강좌를 마지막으로 jQuery(제이쿼리)강좌 는 모두 마치겠습니다.         ​  ​​ 감사합니다!    저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>​

2017-04-03

썸네일

[송규남의 IT 다이어리] 제이쿼리(jQuery) 열다섯번째 이야기

[제이쿼리 모바일(jQuery Mobile) 웹 페이지 만들기]      안녕하세요?  중앙HTA 강사 송규남입니다. ​    이번 시간에는 jQuery Mobile(제이쿼리 모바일)에 대해서 알아보겠습니다. ​ 우리가 스마트폰으로 인터넷사이트에 접속하면 화면이 데스크 탑보다 작기 때문에 보기가 힘든 부분이 있거나 마우스로   클릭하면 어렵지 않지만 손가락으로 터치해서 선택하려면 radio button이나 checkbox같은 경우 힘들 수 있습니다.   jQuery(제이쿼리)에서는 모바일 웹 페이지를 만들기 위한 여러 가지 좋은 기능들을 담고 있는   자바스크립트(javascript) 라이브러리 입니다.  jQuery(제이쿼리)사이트로 가서 라이브러리를 다운받습니다.     먼저 jquery.js파일은 존재해야 하고 http://jquerymobile.com/ 사이트로 접속하여 하고 jquery-mobile.js파일을 추가로 받습니다.             http://jquerymobile.com 사이트에서 위 그림의 화살표에 해당하는 버튼을 클릭하여 파일을 다운로드 받아 압축을 풉니다.  압축 푼 폴더에 jquery.mobile-1.4.5.min.js 파일과 폴더에 jquery.mobile-1.4.5.min.css 파일을 이용하여   jQuery Mobile(제이쿼리 모바일)페이지를 만들 수 있습니다.     예제를 만들기 위한 샘플(sample) 이란 이름의 폴더를 하나 만들고 샘플(sample)폴더 안에 css폴더와 js폴더를 만듭니다.   css폴더에 jquery.mobile-1.4.5.min.css 파일을 넣고 압축 푼 폴더에 있는 이미지(images)파일도 css폴더 안에 넣습니다.   js폴더에는 jquery.mobile-1.4.5.min.js파일과 jquery.js파일을 넣습니다.    디렉토리 구조는 아래와 같습니다.             jQuery mobile(제이쿼리 모바일)페이지를 만들기 위한 기본 형태는 아래와 같습니다.      ---------------------------------------------------------<!DOCTYPE html> <html> <head>     <title>Page Title</title>     <meta name="viewport" content="width=device-width, initial-scale=1">     <link rel="stylesheet" href="http://code.jquery.com/mobile/[version]/jquery.mobile-[version].min.css" />     <script src="http://code.jquery.com/jquery-[version].min.js"></script>     <script src="http://code.jquery.com/mobile/[version]/jquery.mobile-[version].min.js"></script> </head>  <body>     ...content goes here... </body> </html>     ---------------------------------------------------------   우리는 관련 파일을 직접 다운로드 받았으니 아래와 같은 형태의 HTML파일을 작성 후 샘플(sample)폴더 안에 넣습니다.       ---------------------------------------------------------<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="css/jquery.mobile-1.4.5.min.css" type="text/css"> <script type="text/javascript" src="js/jquery-1.12.4.js"></script> <script type="text/javascript" src="js/jquery.mobile-1.4.5.min.js"></script> <script type="text/javascript">  </script> </head> <body>  </body> </html>   ---------------------------------------------------------==> jQuery Mobile을 위한 css파일과 js파일을 포함해 줍니다. ※주의할건 js파일을 포함할 때 jquery-1.12.4.js 파일이 jquery.mobile-1.4.5.min.js파일보다 먼저 포함해 줘야합니다.      jQuery(제이쿼리) 사이트에 모바일 관련된 데모예제 코드들이 많이 있습니다.  예제코드들을 따라 해보면 쉽게 모바일 페이지를 만들 수 있습니다.            http://jquery.mobile.com/demos 사이트에서 예제들을 살펴봅니다.  jQuery Mobile(제이쿼리 모바일)에서 기본단위는 페이지(page)입니다.  하나의 HTML파일안에 여러 개의 페이지(page)를 만들어 줄 수 있으며 이때 data-role이라는 속성을 사용합니다.  아래와 같이 하나의 페이지(page)는 header영역, content영역, footer영역을 가질 수 있습니다.      ---------------------------------------------------------  <div data-role="page">      <div data-role="header">         <h1>Page Title</h1>     </div><!-- /header영역 -->      <div role="main" class="ui-content">         <p>Page content goes here.</p>     </div><!-- /content 영역-->      <div data-role="footer">         <h4>Page Footer</h4>     </div><!-- /footer 영역--> </div><!-- /page -->   ---------------------------------------------------------   그럼 위의 코드를 HTML파일에 넣어 볼까요?     --------------------------------------------------------- <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="css/jquery.mobile-1.4.5.min.css" type="text/css"> <script type="text/javascript" src="js/jquery-1.12.4.js"></script> <script type="text/javascript" src="js/jquery.mobile-1.4.5.min.js"></script> <script type="text/javascript">  </script> </head> <body> <div data-role="page">     <div data-role="header">         <h1>Page Title</h1>     </div><!-- /header -->     <div role="main" class="ui-content">         <p>Page content goes here.</p>     </div><!-- /content -->     <div data-role="footer">         <h4>Page Footer</h4>     </div><!-- /footer --> </div><!-- /page --> </body> </html>   ---------------------------------------------------------​    웹 브라우저로 열어보면 아래와 같은 화면이 나오네요.                아래처럼 하나의 HTML파일에 여러 개의 페이지(page)구성도 가능합니다.    ---------------------------------------------------------  <!-- 첫번째페이지 --> <div data-role="page" id="foo">      <div data-role="header">         <h1>Foo</h1>     </div><!-- /header -->      <div role="main" class="ui-content">         <p>I'm first in the source order so I'm shown as the page.</p>         <p>View internal page called <a href="#bar">bar</a></p>     </div><!-- /content -->      <div data-role="footer">         <h4>Page Footer</h4>     </div><!-- /footer --> </div>      ---------------------------------------------------------<!-- 두번째페이지 --> <div data-role="page" id="bar">      <div data-role="header">         <h1>Bar</h1>     </div><!-- /header -->      <div role="main" class="ui-content">         <p>I'm the second in the source order so I'm hidden when the page loads. I'm just shown if a link that references my id is beeing clicked.</p>         <p><a href="#foo">Back to foo</a></p>     </div><!-- /content -->      <div data-role="footer">         <h4>Page Footer</h4>     </div><!-- /footer --> </div> </body>   ---------------------------------------------------------   웹브라우저로 실행을 시켜보면 아래와 같은 화면이 나옵니다. 두 개의 페이지(page)가 모두 보이는 것이 아니라  첫 번째 페이지만 화면에 보이게 됩니다.            Bar라는 문자를 누르면 <div data-role="page" id="bar"> 영역이 페이지형태로 보이게 됩니다.           위와 같이 하나의 HTML페이지에 여러 개의 페이지(page)를 구성하고 페이지이동은 아래처럼 a 태그의 href속성에  page의 id속성을 링크해주면 됩니다.       ---------------------------------------------------------<p>View internal page called <a href="#bar">bar</a></p> ... <div data-role="page" id="bar"> ...   ---------------------------------------------------------   이번 강좌에서는 jQuery Mobile(제이쿼리 모바일)을 하기 위한 기본 page작성 방법 에 대해서 알아보았습니다. ​다음 시간에는 모바일 웹에서 사용하기 위한 여러 UI관련 기능들 을 알아보도록 하겠습니다.  저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>

2017-01-19

썸네일

[송규남의 IT 다이어리] 제이쿼리(jQuery) 열네번째 이야기

안녕하세요?중앙HAT 강사 송규남입니다.지난 강좌에서는 jQuery(제이쿼리)에서 제공하는 UI에 대하여 알아보았는데요.이번 송규남의 다이어리 14번째 이야기는 jQuery(제이쿼리)에서 제공하는 UI중에서 Draggable에 대해서 알아보겠습니다.jQuery(제이쿼리) 사이트에 가시면 아래처럼 Interactions에 Draggable과 Droppable 메뉴가 있습니다.    순수 자바스크립트로 드래그(Draggable) 앤 드롭(Droppable)을 구현하려면 조금 복잡한데요 jQuery UI에서는 쉽게 드래그앤드롭기능을 구현할 수 있습니다.자 그러면 간단하게 드래그(Draggable) 기능을 구현해 보겠습니다.먼저 아래와 같이 html페이지를 만듭니다. ( jquery(제이쿼리) 관련 자바스크립트 파일과 jquery(제이쿼리) ui관련 css파일은 아래와 같지 않더라도 제대로 링크만 잘 걸리도록 해주시면 됩니다. )<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><link rel="stylesheet" type="text/css" href="css/jquery-ui.min.css"><script type="text/javascript" src="js/jquery-1.11.3.min.js"></script><script type="text/javascript" src="js/jquery-ui.min.js"></script><script type="text/javascript">       //$(function(){은 $(document).ready(function(){ 을 축약해서 쓴 형태입니다.      $(function(){            $("#box1").draggable(); //id가 box1인 요소가 드래그(Draggable) 될 수 있도록 합니다.      });</script></head><body><div id="box1" style="width:200px;height: 80px;background: orange;">      <p>나를 드래그하세요</p></div></body></html>실행시킨후 p로 감싸진 문자열을 드래그(Draggable)  해보세요. 아주 간단하게 드래그(Draggable)  기능이 되죠?여기에 좀더 코드를 좀더 추가해 보겠습니다. 아래와 같이 img를 감싸는 div를 하나 추가합니다.   자바스크립트(javascript) 코드에 아래처럼 코드를 추가합니다.​  draggable하면서 옵션을 설정할 수가 있는데 cotainment속성을 사용해서 드래그(Draggable) 영역을 설정할 수 있습니다.옵션에 대한 설명은 아래와 같습니다.      $("#img1").draggable({                 containment:"parent", //부모영역안에서만 드래그가능                 axis:"x", // 드래그 방향(좌우로만 드래그 )                 stop:function(){ //드래그를 멈추면 function수행                      alert("stop!!!!!!!!");                 }             });    실행해보면 이미지는 x방향으로만 이동되고 드래그만 멈추면 경고창이 뜨는 것을 확인할 수 있습니다.자 그럼 드래그(Draggable) 를 이용한 예제를 하나 만들어 보겠습니다.일단 실행된 화면은 아래와 같습니다. 이미지는 총 10개의 이미지이고 좌우로 드래그(Draggable) 가 가능하고 이전이미지와 다음이미지 버튼을 누르면 앞 또는 뒤로 이동할 수 있도록 하겠습니다.   위의 예제를 만들려면 일단 css에 대한 이해가 있어야 하는데요먼저 이미지슬라이드를 감싸는 부모div는 이미지5개가 보일 크기를 갖고 이미지슬라이드는 10개의 이미지가 보여질 크기를 갖습니다.    파란색영역이 부모이고 이미지 슬라이드는 부모영역을 벗어난 크기를 갖게 합니다. 일단 위와 같은 모양의 html페이지를 만듭니다.<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><link rel="stylesheet" type="text/css" href="css/jquery-ui.min.css"><style>      *{margin:0;padding:0}      #slide ul li img{width:185px;height: 240px}      #slide ul li{list-style: none;float:left;}      /* #slide는 이미지 슬라이드로 만들어지며 이미지 10개의 크기를 담을 width 설정.하나의 img가 185px이므로      1850px로 크기 설정 */#slide{width:1850px;height: 240px;position: relative;left:0px;}     /* slidebox는 이미지 5개의 크기를 담을 width 설정. */      #slidebox{width:925px;height: 240px;position: relative;left:200px;      top:40px;border:4px solid blue;}      .bb{width:500px;text-align: center;margin-top:70px;margin-left: 400px;}</style><script type="text/javascript" src="js/jquery-1.11.1.min.js"></script><script type="text/javascript" src="js/jquery-ui.min.js"></script><script type="text/javascript">        $(function(){             $(".bb a").button();//a태그를 버튼으로 만들기        });</script></head><body><div id="slidebox">     <div id="slide">          <ul>               <li><img src="images/slide1.png"></li>               <li><img src="images/slide2.png"></li>                  <li><img src="images/slide3.png"></li>               <li><img src="images/slide4.png"></li>               <li><img src="images/slide5.png"></li>               <li><img src="images/slide6.png"></li>               <li><img src="images/slide7.png"></li>               <li><img src="images/slide8.png"></li>               <li><img src="images/slide9.png"></li>               <li><img src="images/slide10.png"></li>          </ul>     </div></div><div class="bb">            <a href="#" id="btnPrev">이전이미지</a>            <a href="#" id="btnNext">다음이미지</a></div></body></html> 자바스크립트(javascript) 에 아래의 코드를 추가합니다.$(function(){          $(".bb a").button();         //드래그 방향을 x축으로 하고 드래그 가능한 4개의 좌표를            // 설정한다. 좌표는 아래와 같이 지정한다.          // containment:[x1,y1,x2,y2]          $("#slide").draggable({             axis:"x",             containment:[-725,40,200,40]        });      });      여기까지 하면 이미지가 좌우로 드래그(Draggable) 가 됩니다.여기에 버튼을 눌렀을 때 이미지가 움직이도록 코드를 추가합니다. $("#btnPrev").click(function(event){               event.preventDefault();               //left값 얻어오기               var left=parseInt($("#slide").css('left'));               if(left>=0) return;               //현재 위치에 185를 더해서 이전이미지가 보여지도록 합니다.               left += 185;               var pos=Math.floor(left/185.0)*185;//이동할 위치구하기      // // 이미지슬라이드가 우측방향으로 하나의 이미지크기만큼 이동해서 이전이미지가 보입니다.                              $("#slide").animate({"left":pos},1000);              });             $("#btnNext").click(function(event){             event.preventDefault();             //left값 얻어오기             var left=parseInt($("#slide").css('left'));             if(left<=-925) return;             left -= 185;             var pos=Math.ceil(left/185.0)*185;         // 이미지슬라이드가 좌측방향으로 하나의 이미지크기만큼 이동해서 다음이미지가 보입니다.                   $("#slide").animate({"left":pos},1000);            });      자 잘 실행이 되시나요? 전체 완성된 코드를 다시 한번 보여드립니다<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><link rel="stylesheet" href="css/jquery-ui.min.css" type="text/css"><style type="text/css">       *{margin:0;padding:0}       .buttons{padding:10px;border:2px solid #ff9999;background:#ffcc00;        margin-left:10px;border-radius:5px}       a{text-decoration: none;font-size: 0.8em;font-weight: bold;color:red}       .button:hover{background-color: white;}       #slide ul li img{width: 185px;height: 240px}       #slide ul li{list-style: none;float:left}       /* 자식div : 이미지10개가 담길 크기(185*10) */       #slide{width:1850px;height: 240px;position: relative;left:0px;}       /* 부모div : 이미지가 5개 담길 크기(185*5) */       #slidebox{width:925px;height: 240px;position: absolute;       left:200px;top:40px;overflow: hidden}       .fg-button {     outline: 0;     margin:0 4px 0 0;     padding: .4em 1em;     text-decoration:none !important;     cursor:pointer;     position: relative;     text-align: center;     zoom: 1;     }</style><script type="text/javascript" src="js/jquery-1.11.1.min.js"></script><script type="text/javascript" src="js/jquery-ui.min.js"></script><script type="text/javascript">      $(function(){           //containment:[x1,y1,x2,y2]           $("#slide").draggable({                 axis:"x",                 containment:[-725,40,200,40], //드래그 범주 지정                 cursor:"move"           }); $("#btnPrev").click(function(event){           event.preventDefault();           //left값 얻어오기           var left=parseInt($("#slide").css('left'));           if(left>=0) return;           left += 185;           var pos=Math.floor(left/185.0)*185;//Math.floor():내림값구하기           $("#slide").animate({"left":pos},1000);      });$("#btnNext").click(function(event){event.preventDefault();           //left값 얻어오기           var left=parseInt($("#slide").css('left'));           if(left<=-925) return;           left -= 185;           var pos=Math.ceil(left/185.0)*185; //Math.ceil():올림값구하기           $("#slide").animate({"left":pos},1000);      });   });   </script>   </head>   <body>   <div>       <div id="slidebox" >           <div id="slide">                <ul>                     <!-- img:185*240-->                     <li><img src="images/slide1.png"></li>                     <li><img src="images/slide2.png"></li>                     <li><img src="images/slide3.png"></li>                     <li><img src="images/slide4.png"></li>                     <li><img src="images/slide5.png"></li>                     <li><img src="images/slide6.png"></li>                     <li><img src="images/slide7.png"></li>                     <li><img src="images/slide8.png"></li>                     <li><img src="images/slide9.png"></li>                     <li><img src="images/slide10.png"></li>               </ul>          </div>    </div></div>     <div style="clear: both;position: relative;top:300px;left:200px">        <a href="#" id="btnPrev" class='fg-button ui-state-default ui-corner-all'>이전이미지</a>        <a href="#" id="btnNext" class="button">다음이미지</a>  </div> </body></html>  이러한 소스를 보면서 만들어보시면 드래그(Draggable) 앤 드롭(Droppable) 기능을 구현 할 수 있습니다.“송규남의 다이어리 14번째” 이야기는 여기서 마무리 하겠습니다. 다음 강좌에 봐요 *^^*​저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>     

2016-10-27

썸네일

[송규남의 IT 다이어리] 제이쿼리(jQuery) 열세번째 이야기

   제이쿼리(jQuery) UI 위젯 "다이얼로그(Dialog)"를 활용한 일정 만드는 법 강의​안녕하세요?중앙HTA강사 송규남입니다.이번 강좌에서는 지난 강좌에 이어 계속 jQuery에서 제공하는 UI에 대해서 알아보겠습니다.jQuery UI 위젯의 다양한 기능들 속에서 그 중에 다이얼로그(Dialog)에 대한 활용 방법을 살펴볼껀데요.먼저 jQuery UI 위젯의 다이얼로그(Dialog)를 다운받아야 겠죠?다이얼로그(Dialog)를 다운 받기 위해~ "http://jqueryui.com/dialog/" 사이트로 로 접속하면 오른쪽 위젯 메뉴중에 Dialog(다이얼로그)가 있습니다. 먼저 jQuery UI 위젯중에서 다이얼로그(Dialog)가 있는데요. http://jqueryui.com/dialog/ 로 접속하면  오른쪽 위젯 메뉴중에 Dialog(다이얼로그)가 있습니다.​  다이얼로그기능을 만들려면 다이얼로그(Dialog)로 보여질 div를 작성후 dialog(다이얼로그) 함수를 이용해서 다이얼로그로 변환시켜 주면 되는데요..일단 왼쪽 Dialog(다이얼로그)메뉴를 클릭하면 샘플코드랑 실행결과가 있습니다. ​샘플코드를 보면 다이얼로그(Dialog)를 아주 간단히 만들수 있다는 것을 알수 있습니다.  코드를 보면,다이얼로그(Dialog)로 보여질 div를 생성후 jQuey코드에서 dailog()함수를 사용해서 간단하게 다이얼로그(Dialog)로 만들었습니다. <div id="dialog" title="Basic dialog"><p>This is the default dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p></div> ===> 다이얼로그(Dialog)로 보여질 div만들기<script>  $( function() {    $( "#dialog" ).dialog();  } );  </script>==> 자바스크립트에서 div를 다이얼로그(Dialog)로 만들기 위의 사용방법을 토대로 간단한 다이얼로그 (Dialog)를 사용한 예제를 만들어 보겠습니다.먼저 실행결과는 아래와 같은데요.일정생성 버튼을 클릭하면 일정을 등록하기 위한 다이얼로그(Dialog)가 보여지고 해당 정보를 입력후 저장버튼을 누르면 모임일정에 추가되도록 만들어 보겠습니다.  지난시간에 했던대로 아래와 같이 파일이 해당 위치에 존재하도록 합니다.​  다이얼로그(Dialog)가 처음부터 보여지지 않고 버튼을 눌렀을때 보여야 합니다.아래처럼 다이얼로그(Dialog)를 만들면 자동열기가 실행되지 않아 다이얼로그(Dialog)가 보여지지 않게 됩니다. $("#dlg").dialog({      autoOpen:false}); 일정등록버튼을 누르면 다이얼로그(Dialog)가 보여지도록 해야하는데 이때는 아래와 같이 작성하면 됩니다.$("#dlg").dialog("open");//다이얼로그열기   <script type="text/javascript">      $(function(){            //일정생성 버튼을 누르면 다이얼로그(Dialog)가 보이도록 함.            $("#btn1").click(function(){                  $("#dlg").dialog("open");//다이얼로그열기            });            $("#dlg").dialog({                  autoOpen:false, //처음실행시에 다이얼로그(Dialog) 안보이게하기.                  buttons:{ //다이얼로그에 붙여질 버튼만들기                        추가:function(){                  //입력된 값들을 모임일정이 보여지는 div(#list) 에 추가되도록 합니다.                             var ename=$("#ename").val();                             var edate=$("#edate").val();                             $("#list").append(ename +":" + edate +"<br>");                             $("#ename").val("");                             $("#edate").val("");                             $("#ename").focus();                        },                        닫기:function(){                             $(this).dialog("close");//다이얼로그 닫기                        }                  }            });            $("#edate").datepicker({                 dateFormat:'yy/mm/dd'            });      });</script></head><body><button id="btn1">일정생성</button><div id="list" style="width:500px;">      <h3>모임일정</h3></div><div id="box"><!-- 다이얼로그로 보여질 DIV 작성 -->        <div id="dlg" title="일정">            <h1>일정정보입력</h1>            <label for="ename">일정이름</label>            <input type="text" id="ename">            <label for="edate">일정날짜</label>            <input type="text" id="edate">      </div></div></body></html> ​잘 작동되시나요?jQuery(제이쿼리) UI에는 많은 편리한 위젯들이 제공됩니다.UI페이지에 메뉴들을 하나씩 클릭하면서 실행코드를 보면 어렵지 않게 위젯들을 사용할 있습니다.    예를 들면 이와 같은 경우는 스마트폰으로 보여지는 웹페이지에서 radio 나 checkbox같은 요소들은 선택하기가 조금 불편하죠.그런경우 Checkboxradio 위젯을 사용해서 아래처럼 요소들의 모양을 바꿀수 있습니다.  소스코드는 아래와 같습니다. <!doctype html> <html lang="en"> <head>   <meta charset="utf-8">   <title>jQuery UI Checkboxradio - Default functionality</title>   <link rel="stylesheet" href="//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">   <link rel="stylesheet" href="/resources/demos/style.css">   <script src="https://code.jquery.com/jquery-1.12.4.js"></script>   <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>   <script>   $( function() {     $( "input" ).checkboxradio();   } );   </script> </head> <body> <div class="widget">   <h>Checkbox and radio button widgets</h1>   <h2>Radio Group</h2>   <fieldset>     <legend>Select a Location: </legend>     <label for="radio-1">New York</label>     <input type="radio" name="radio-1" id="radio-1">     <label for="radio-2">Paris</label>     <input type="radio" name="radio-1" id="radio-2">     <label for="radio-3">London</label>     <input type="radio" name="radio-1" id="radio-3">   </fieldset>   <h2>Checkbox</h2>   <fieldset>     <legend>Hotel Ratings: </legend>     <label for="checkbox-1">2 Star</label>     <input type="checkbox" name="checkbox-1" id="checkbox-1">     <label for="checkbox-2">3 Star</label>     <input type="checkbox" name="checkbox-2" id="checkbox-2">     <label for="checkbox-3">4 Star</label>     <input type="checkbox" name="checkbox-3" id="checkbox-3">     <label for="checkbox-4">5 Star</label>     <input type="checkbox" name="checkbox-4" id="checkbox-4">   </fieldset> </div></body></html> 이렇게 하나하나 소스를 보면서 따라해 보면 위젯들을 사용해 훨씬 세련된 웹페이지를 만들수 있겠네요.그럼 이번강좌는 여기서 마무리하겠습니다. 다음 강좌에서 뵈요 *^^*    저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>   

2016-09-05

썸네일

[송규남의 IT다이어리] 제이쿼리(jQuery) 열두번째 이야기

  제이쿼리(jQuery) UI를 이용한 달력 만드는 방법 강좌      ​안녕하세요? 중앙HTA강사 송규남입니다. ​이번 송규남의 IT다이어리에는 제이쿼리(jQuery)에서 제공하는 UI에 대해서 알아보겠습니다. 자바스크립트(Javascript)로 달력 등을 구현하려면 상당히 어려운데요.제이쿼리(jQuery)에서는 달력, 다이, 드래그앤드롭 등 여러 UI에 관련된 많은 기능들이 지원되고 있습니다. 먼저 제이쿼리(jQuery) 홈페이지에서 UI관련 라이브러리를 다운받아야 하는데요.. << http://www.jquery.com >>으로 접속하셔서 아래의 화살표방향에 있는 이미지를 클릭합니다.    ​링크된 페이지로 들어가서 아래의 화살표방향에 있는 stable버튼을 클릭해서 라이브러리를 다운받습니다.    다운로드 받은 zip파일을 압축을 풀고 images폴더와 jquery-ui.min.js, jquery-ui.css 파일을 선택해서 프로젝트의 해당위치에 넣습니다. ​    이클립스에서 프로젝트 생성 후 아래와 같이 파일을 위치하게 합니다. ​      - WebContent폴더에 html파일을 하나 작성 후 아래와 같이 파일을 포함 후 간단한 코드를 작성해 봅니다. ​<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <link rel="stylesheet" href="css/jquery-ui.min.css" type="text/css"> <script type="text/javascript" src="js/jquery-1.12.3.min.js"></script> <script type="text/javascript" src="js/jquery-ui.min.js"></script> <script type="text/javascript">     $(document).ready(function(){         $("#mydate").datepicker();     }); </script> </head> <body> <div id="mydate"></div> </body> </html>  - 아래와 같이 웹브라우져로 실행해보면 달력이 화면에 나타나는 것을 볼 수 있습니다.        코드를 보면 아래의 사각형안에 있는 코드가 div에 달력을 표시하는 부분입니다. 달력을 나타내기 정말 쉽쥬~?^^   http://jqueryui.com/ 사이트에 들어가보면 jQuery UI가 제공하는 여러 기능들을 살펴볼 수 있고 Sample코드들이 제공되기 때문에 기능들을 쉽게 구현할 수 있습니다. 그럼 jQuery UI를 사용해서 아코디언기능을 구현해 보겠습니다. html페이지를 하나 추가한후 아래와 같은 구조로 html을 작성합니다.  <div id="accordion">     <h2>jQuery</h2>     <div>         What is jQuery?         jQuery is a lightweight, "write less, do more", JavaScript library.                  The purpose of jQuery is to make it much easier to use JavaScript on your website.                  jQuery takes a lot of common tasks that require many lines of JavaScript code to accomplish, and wraps them into methods that you can call with a single line of code.                  jQuery also simplifies a lot of the complicated things from JavaScript, like AJAX calls and DOM manipulation.     </div>     <h2>CSS3</h2>     <div>         What is CSS?         CSS stands for Cascading Style Sheets         CSS describes how HTML elements are to be displayed on screen, paper, or in other media         CSS saves a lot of work. It can control the layout of multiple web pages all at once         External stylesheets are stored in CSS files     </div>     <h2>Bootstrap</h2>     <div>         What is Bootstrap?         Bootstrap is a free front-end framework for faster and easier web development         Bootstrap includes HTML and CSS based design templates for typography, forms, buttons, tables, navigation, modals, image carousels and many other, as well as optional JavaScript plugins         Bootstrap also gives you the ability to easily create responsive designs     </div> </div>  - 아코디언으로 보여질 전체를 감싸는 div를 하나 주고 그안에 h태그와 div태그로 이루어지는 하나의 섹션으로 보여질 탭을 여러개 만듭니다. 여기에 jquery코드로 아코디언으로 보이게끔하는 코드를 추가합니다. <script type="text/javascript">     $(document).ready(function(){         $("#accordion").accordion();     }); </script> ​- 아래와 같이 아코디언형태로 보이는 것을 확인할 수 있습니다.    사실 아코디언에 관련된 샘플코드가 있기 때문에 참고하고 보시면서 만드시면 되는데요.. http://jqueryui.com/ 사이트에 접속후 Widgets의 Accordion을 선택후 아래의 사각형으로 표시되어 있는 view source를 클릭하면 샘플코드를 확인할 수 있습니다.     ​텍스트 입력 창에도 쉽게 달력기능을 적용할 수 있는데요.. 아래와 같이 코드를 작성합니다. ​​<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <link rel="stylesheet" href="css/jquery-ui.min.css" type="text/css"> <!-- jquery파일포함 --> <script type="text/javascript" src="js/jquery-1.12.4.js"></script> <!-- jquery ui 파일포함 --> <script type="text/javascript" src="js/jquery-ui.min.js"></script> <script type="text/javascript">     $(document).ready(function(){         $("#date1").datepicker(); }); </script> </head> <body> 날짜선택 <input type="text" id="date1"><br/>  </body> </html>    ==> 위의 코드는 text에 포커스가 오면 아래처럼 달력이 바로 보여져서 날짜를 선택할 수 있도록 합니다.       위의 달력은 요일이 영문으로 나오고 있습니다. ​여러가지 달력을 나타내는데 옵션을 설정 할 수 있는데요 아래처럼 코드를 작성후 실행해 보세요.  <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <link rel="stylesheet" href="css/jquery-ui.min.css" type="text/css"> <!-- jquery파일포함 --> <script type="text/javascript" src="js/jquery-1.12.4.js"></script> <!-- jquery ui 파일포함 --> <script type="text/javascript" src="js/jquery-ui.min.js"></script> <script type="text/javascript">     $(document).ready(function(){         $("#date1").datepicker({ // 달력에 옵션 설정하기             dayNamesMin:["일","월","화","수","목","금","토"], // 요일에 표시되는 형식 설정             dateFormat:"yy-mm-dd", //날짜 형식 설정             monthNames:["1월","2월","3월","4월","5월","6월","7월",              "8월","9월","10월","11월","12월"], //월표시 형식 설정             showOn:"button", //버튼 보이기             buttonText:"달력", //버튼에 보이는 텍스트설정             showAnim:"fold" //애니메이션효과         });     }); </script> </head> <body> 날짜선택 <input type="text" id="date1"><br/>  </body> </html>  - 실행결과를 보면 아래와 같이 지정한 옵션대로 달력모양이 나타나는 것을 확인할 수 있습니다.     이번 강좌는 jQuery UI에 관련된 예제를 몇 개 해보았는데요.. 따라하기 어렵진 않으셨나요? ​그럼 다음 강좌에서 다시 찾아뵐께요!       저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>    

2016-07-05

  1. 1
  2. 2
  3. 3

TOP