반응형

새삼 이 영상과 내용을 올린 것은 이 다큐멘터리 영상은 2007년도에 방송된 내용이고 이 영상이 유튜브에 올라온 것은 2012.10.23 이다. 더군다나 이 영상은 필자가 영상들을 모으기 시작한 것인 2017년 겨울부터 였다. 더구나 영상 댓글 내용을 보면 최근까지도 대학교 인터넷 마케팅 교육 자료로 사용중인 영상인 모양이다.

첫째로

이 영상은 현시점에서 15년전에 EBS에서 제작된 영상중 일부이지만 아직까지 교육 자료로 사용되고 있다는 점이 어의가 없었다.

둘째로

2007년도에 7000달러 이상 벌고 있던 블로거가 있었다는점 7000달러 이면 우리나라 돈으로 이야기 하면 월 1000만원씩 벌고 있었다는 이야기이기 때문이다. 
무려 15년 전 부터 기회가 있었는데 모르고 있었던 부분이 너무나도 안타까웠다.
새삼 기회는 누구에게나 주어지지만 그것을 잡고 자신의 것으로 만들 수 있는건 몇명이 되지 않는 다는 것이 현재 블로그를 쓰고 있는 내자신이 깨닫고 있다. 

과연 나는 지금 기회를 제대로 잡고 있는 것인가 궁금증이 생긴다.

셋째로

이 영상을 보고 나서 확실히 블로그 보다는 영상이 더 가치가 있겠다는 생각이 들었다.
TV 방송에서 한번 하고 볼수 없는 다큐영상이 유튜브라는 플랫폼을 만나 이렇게 계속 노출이 되고 있다는 것이 새삼스럽게 다가왔다.
다큐 방송이 제작되었던 시점에는 검색엔진과 마케팅에 대한 이슈가 있었을 것이다.
기사도 나오고 사회 이슈 부분이었을 것이다. 
물론 지금도 그 이슈의 연속된 세상에서 살고 있지만 그당시 기사를 다시 찾거나 글들을 보기는 힘들다. 
하지만 영상은 다르다 전달하는 정보를 그시점에서 다시 바라 볼 수 있도록 할 수 있고 글로 전달 되지 않는 부분이 그대로 전달 된다.

2007년 제작된 영상이 2012년도에 유튜브 플랫폼에 올라 오고 2017년에 나의 수집영상이 되었고 현재는 2023에 이렇게 글 소재로 사용되고 있다는 것이 다시 한번 고민하게 된다.

2007.6.6 현충일 EBS 시사다큐멘터리에서 <검색엔진 마케팅과 구글의 영향력> 주제로 EBS에서 방송한 일부 영상내용이다.

-- 영상에 나온 존 게일 홈페이지는 아마도 현재까지 운영되고 있지는 않는것 같다.

[내용]

서방측이 은둔왕국으로 부르는 북한.

하지만 검색창에 평양을 치면 곧바로 평양 한가운데 자리잡은 김일성 광장의 위성 사진을 볼 수 있다. 

지구상의 어떤 지명을 쳐도 컴퓨터 화면엔 해상도가 좋은 위성 사진이 나타난다.

미인의 사진이 보고 싶으면 클릭 한번 만으로 200만장 이상의 사진을 불러 올 수 있다.

물론 이 모든건 공짜다.

요즘은 사진 뿐만 아니라 동영상도 보여 준다.

세계 검색 포털 시장에 선두주자 구글은 지금 관련업계 전반에 혁명을 일으키고 있다.

미국에서 ‘구글하다’는 ‘검색하다’의 동의어가 된지 오래다.

정보가 필요한 사람들은 검색창에 다양한 키워드를 치고 인터넷 검색엔진들은 이를 바탕으로 사람들이 원하는 정보를 찾아내 준다.

정보를 원하는 사람들은 검색 포털 구글로 몰려 갔고

이는 이른바 구글 혁명으로 이어졌다. 

이제 포털의 검색결과는 사용자의 의사결정과 기업의 성패에 큰 영향을 미친다.

“15위 안에 드는 것만 신경 쓰십시오”

“5위 안에 들면 더 좋고 10위 안에는 들어야죠.”

“15위 이하는 존재하지 않는 것이나 마찬가지예요.”

 

구글을 일상 생활의 기준으로 삼는 사람들도 늘어 나고 있다.

이 청년에게 구글은 생활의 축이고 수입원이다.

“구글이 보내준 수표에요”

“아 우편함을 열때 제일 반가운거죠”

“어~ 7천 5백 달러가 조금 넘네요”

 

사람들은 결혼 배우자를 찾고 수술받을 병원을 찾고 아기의 이름을 짓는데도 구글을 이용한다.

구글의 목표는 지구상의 모든 정보를 클릭 한번으로 찾아 볼 수 있는 시스템을 구축하는 것이다.

 

“구글의 목표는 모든 정보의 조직화입니다.”

“전세계 모든 사람이 이용하는 모든 정보를 조직화 한다는건 쉬운 일이 아니죠”

 

지구상에서 이루어 지는 정보 검색은 하루 10억 건에 달한다.

인터넷은 대다수의 사람들이 정보 검색위해 이용하는 매체가 됐다.

그리고 미국과 유럽의 인터넷 검색시장을 장악한 구글은 세상을 바꾸고 있다.

“검색엔진 마케팅과 구글의 영향력”

 

할로윈이 다가왔다.

젊은이들은 할로윈 파티의상을 고민한다.

한 조사 결과에 따르면 미국에서는 한 80%이상이 검색엔진을 이용한 후 인터넷으로 의상을 산다고 한다.

“-의상은 어디에서 샀죠?”

“-인터넷에서요.”

“-검색엔진에서 찾아본 다음에요?”

“네”

“검색을 하다가 눈에 띄어서 주문했죠”

“멋지고 재미있잖아요?”

“인터넷에는 온갖 의상이 다 나와있죠”

“영웅에서 동물, 만화주인공까지요”

“이름을 치고 클릭하면 금방 나와요”

 

미국과 유럽에서 구글은 많은 이들의 생활 방식까지 변화시켰다.

21살 청년 ‘존게일’에게 구글은 생활의 중심이고 수입원이다.

게일은 고등학생부터 구글을 사용했다.

“네 지금 떠있는게 제 블로그에요.”

“하하”

게일은 뭘 하던 구글 검색엔진 부터 찾아 본다.

몇 일전엔 구글 맵이라는 지도 서비스를 이용한다.

목적지에 주소만 치면, 지도는 길을 가르쳐 준다.

외식을 할때도 구글을 이용해 맛집과 그 위치를 알아낸다.

구글은 요리법도 가르쳐 준다.

오늘 그는 구글에서 찾아낸 요리법으로 저녁을 준비한다.

“거실에 있는 가구들도 구글에서 보고 산 것들입니다.”

“전부 인터넷으로 골랐죠”

“TV도 마찬가지 구요”

“사용후기를 읽어 보고 샀어요”

“전 매장 직원들을 믿지 않거든요.”

“뭘 골라도 좋다고 말하죠”

“그래서 구글에 들어가 TV들의 사용후기를 읽어본 다음에 물건을 골랐어요.”

게일은 3년 전부터 구글을 통해 수익까지 올리고 있다.

그의 개인 블로그는 휴대전화에 대한 정보를 제공한다.

그의 글 옆에는 애드센스 광고가 있다.

구글의 광고 대행 서비스 애드센스에 가입하면 블로그 운영자는 클릭당 일정 금액의 광고수익을 올릴 수 있다.

“뭘 꺼냈죠?”

“구글이 보내준 수표에요”

“아 우편함을 열때 제일 반가운거죠”

“지난달 제 블로그의 애드센스 광고로 에요.”

약 7천 7백 달러다.

게일은 자기의 블로그에 글을 올리는 댓가로 매달 이정도의 수익을 올린다.

그의 인생은 달라졌다.

이제 게일은 부모님한테 용돈을 받아 쓰는 소년이 아니다.

그는 고급 아파트를 빌렸고 마음에 드는 가구를 수집하는 재미로 산다.

“어느날 갑자기 깨달았죠”

“직업이 별거 있어? 이게 직업이지!! 하고요”

“음~ 수입도 점점느니까. 직장구할 생각도 없어요”

게일은 대학진학을 포기 했다.

취직할 생각도 없는 그는 구글 중심적 삶을 지속하고 싶어 한다.

구글 혁명이 바꾸어 놓은건 게일의 인생만이 아니다.

일상 생활은 물론 직업적인 의사결정과정에서도 구글에 의존하는 사람은 급증했다.

구글 사용자가 급증하면서 검색결과 페이지 윗부분을 찾이 하는건 사업성공의 열쇠가 됐다.

검색엔진에 노출빈도 높이려는 기업들이 늘면서 그 방법을 가르쳐 주는 사업도 호황을 맞았다.

미국에서 열리는 검색엔진 업계의 최대 박람회다.

이 박람회에서 가장 큰 관심을 끈건 검색 순위를 높여 준다는 업체들이 었다.

검색엔진 마케팅이라는 이 새 업종은 각광을 받고 있다.

검색엔진의 시장 규모는 850억 달러를 능가하며 매년 30%씩 성장하는 중이다.

“방문자수와 링크를 늘려 많은 검색 엔진에 들어 가는게 중요합니다.”

“성공적인 검색엔진 마케팅 방법을 알아야 검색 순위에서 상위를 차지할 수 있어요”

 

업체들은 왜 검색 순위를 높이려고 할까?

사용자들이 검색 결과 화면에서 어느 부분을 보는지를 알면 답이 나온다.

붉은 색으로 나타난 부분은 가장 많은 사용자가 보는 부분이다.

남색 부분을 보는 사람은 거의 없다.

사용자들의 눈은 상위 순위에 집중되는 것이다.

5위 이하의 사이트가 사용자의 눈길을 받을 확률은 50%에도 미치지 않는다. 

부르스 클레이는 미국 검색엔진 마케팅 업계의 선두주자다.

그는 구글이 검색 결과의 순위를 매기는 방식을 분석했고 수많은 업체들의 검색 순위를 10위 안으로 끌어 올렸다.

매출을 늘릴 방법이 새로 나왔다는 소문에 미국 전역의 업체 대표들은 클레이의 강연을 듣기 위해 몰려 들었다.

“15위 안에 드는 것만 신경 쓰십시오”

“5위 안에 들면 더 좋고 10위 안에는 들어야죠.”

“15위 이하는 존재하지 않는 것이나 마찬가지예요.”

“검색엔진이 읽을 수 있는 방식으로 웹사이트를 만들지 않으면 검색엔진은 여러분이 글도 읽지 못한다고 생각합니다.”

검색의 순위를 높이기 위해 클레이와 직원들은 고객들의 웹사이트를 개조해 준다.

그의 회사는 지금껏 약 10000개의 사이트를 개조했다.

오늘도 검색 순위에 관심이 많은 업체중 하나가 그에게 전화를 걸어왔다.

전화를 건사람은 시력교정을 위한 라식 수술을 전문으로 하는 샌프란시스코 소재의 안과의 마케팅 책임자다.

지난 몇년간 구글의 검색순위에서 10위 이상을 유지한 덕분에 이 라식 전문병원의 수입은 크게 증가했다.

병원의 마케팅 책임자는 이것이 부르스 클레이의 웹사이트 개조 덕분이라고 생각한다.

클레이의 회사는 그에 대한 포상으로 매년 15000달러를 받는다.

san francisco lasik (샌프란시스코, 라식)이라는 이 두개의 키워드 덕분에 이 병원의 검색 순위는 4위 까지 올라갔고 그후 병원엔 손님들이 몰려 들기 시작했다.

병원을 찾은 환자는 몇년만에 3배로 늘어 났다.

강력한 구글검색엔진의 위력이 병원의 수입을 엄청나게 늘려준 것이다.

라식은 각막의 표면을 얇게 벗겨 낸 후 레이저로 시력을 교정해 주는 수술이다.

비용도 4000달러나 들기 때문에 환자들은 신중히 병원을 선택한다.

하지만 검색 순위가 높다는 이유 만으로 이곳을 찾은 환자들도 많다.

“여긴 여러 디렉토리에 나와 있었어요.”

“검색 순위도 5위 안에 들었죠”

“전 여러 디렉토리를 돌아 다니면서 의사들에 관한 정보를 수집했습니다.”

“인터넷으로 조사를 하다가 이 병원을 알게 됐어요”

“의사 양력을 읽어 보고 마음에 들어서 이렇게 상담을 받으러 왔구요.”

…..<중략>


.................. 이제는 chat GPT 시대가 열인 것인가?

고민보다 먼저 움직여야 할 탠데 생각하고 있다

기회인가? 잡아야 하는 것인가? 

 

반응형
반응형

요즘 가장 핫 키워드인 Chat GPT를 이용해서 안드로이드 개발 방법을 문의해 보았다.

Q&A 형식으로 아래에 정리를 하였습니다. 

답변을 보면서 놀라운 점은 정보성 내용이더라도 자신의 의견을 반영해주는 것이  다시 보개 되는 점이 아닐까 합니다.

내용이 그림 없이 텍스트로 진행하는 것은 Chat 형태를 직관적으로 느끼도록 구성해 봤다.

https://chat.openai.com/chat

Q. 안드로이드 개발 방법을 알려줘

A. 안드로이드 개발을 시작하기 위해서는 다음의 단계를 따라야 합니다:

  1. 개발 환경 설정: 안드로이드 개발을 위해서는 Java SE Development Kit (JDK)와 Android Studio IDE가 필요합니다. Android Studio를 사용하여 안드로이드 프로젝트를 생성하고 코드를 작성할 수 있습니다.
  2. 안드로이드 프로젝트 생성: Android Studio에서 "New Project"를 선택하여 안드로이드 프로젝트를 생성합니다. 프로젝트 생성시 플랫폼 버전, 템플릿, 패키지 이름 등을 선택해야 합니다.
  3. XML 레이아웃 구성: XML을 사용하여 안드로이드 앱의 UI를 구성합니다. 버튼, 텍스트 뷰, 리스트 뷰 등의 위젯을 배치하여 UI를 구성할 수 있습니다.
  4. Java 코드 작성: 안드로이드 프로젝트에서 MainActivity.java 파일에서 앱의 기능을 구현할 수 있습니다. 사용자 입력 처리, 데이터베이스 연동, 네트워크 통신 등의 기능을 구현할 수 있습니다.
  1. 앱 테스트: 안드로이드 스튜디오에서 앱을 테스트할 수 있습니다. 에뮬레이터를 사용하거나 실제 기기에서 앱을 실행하여 테스트할 수 있습니다.
  2. 앱 배포: 앱을 마친 후 Google Play Store에 배포할 수 있습니다. Google Play Console에서 앱 정보, 스크린샷, 빌드 등을 업로드하고 앱을 검수한 후 배포할 수 있습니다.

이와 같은 단계를 따라 안드로이드 개발을 시작할 수 있습니다. 개발에 대한 자세한 정보는 공식 Android Developers 사이트에서 확인할 수 있습니다.

Q. 안드로이드 개발에 필요한 JDK 최신버전은?

안드로이드 개발에 필요한 Java Development Kit (JDK)의 최신 버전은 JDK 17입니다. 그러나 안드로이드 개발을 위해서는 JDK 8 이상이 필요합니다. 안드로이드 개발을 위해서는 Oracle JDK 또는 OpenJDK 둘 중 하나를 설치하셔야 합니다.

개발 환경에 따라 JDK의 최신 버전이 안드로이드 개발에 영향을 미치지 않을 수도 있지만, 가장 최신 버전을 사용하는 것이 좋습니다. 최신 버전을 사용하면 새로운 기능과 보안 개선사항을 누릴 수 있으며, 개발한 앱이 최신 버전의 안드로이드 플랫폼에서도 잘 동작할 가능성이 높아집니다.

A. 안드로이드 스튜디오는 어디에 있지?

Android Studio는 Google에서 개발한 안드로이드 개발을 위한 Integrated Development Environment (IDE)입니다. Android Studio는 공식적으로 무료로 제공되고 있으며, 다음 링크에서 다운로드하실 수 있습니다.

https://developer.android.com/studio/

Android Studio는 안드로이드 개발에 필요한 많은 기능을 통합하여 개발자들이 최적의 개발 환경을 가질 수 있도록 합니다. 예를 들어, 코드 작성, 디버깅, 테스트, 패키징 등의 과정을 모두 통합하여 지원합니다.

반응형

 

Q. 2번 팁에서 플랫폼 버전, 템플릿, 패키지 이름 선택에 대해 설명이 필요해

A. 2번 팁에서 플랫폼 버전, 템플릿, 패키지 이름을 선택하는 것은 안드로이드 개발을 시작할 때 가장 중요한 스텝 중 하나입니다.

  1. 플랫폼 버전: 플랫폼 버전은 안드로이드 운영체제의 버전을 의미합니다. 앱을 개발하려는 기기에서 사용하는 안드로이드 버전을 선택하셔야 합니다. 안드로이드 플랫폼은 지속적으로 업그레이드 되고 있기 때문에, 개발하려는 앱이 최신 버전의 안드로이드에서도 잘 동작하도록 플랫폼 버전을 적절히 선택하셔야 합니다.
  2. 템플릿: 템플릿은 앱 개발을 위한 기본 구조와 코드를 제공합니다. 앱의 기능에 맞는 템플릿을 선택하셔야 합니다. 예를 들어, 단순한 "Hello World" 앱을 개발하려면 "Empty Activity" 템플릿이 적합하고, 다양한 화면을 포함하는 앱을 개발하려면 "Basic Activity" 템플릿이 적합할 수 있습니다.
  1. 패키지 이름: 패키지 이름은 앱의 유일한 식별자입니다. 패키지 이름은 앱의 작성자 도메인을 기반으로 작성되어야 합니다. 예를 들어, 작성자의 도메인이 example.com이면, 패키지 이름은 com.example로 시작해야 합니다.

안드로이드 개발을 시작하기 전에, 앱의 기능과 적합한 플랫폼 버전, 템플릿, 패키지 이름을 선택하시는 것이 중요합니다. 이는 앱의 개발 프로세스를 원활하게 진행하는 데 도움이 될 것입니다.

Q. 적절한 플랫폼 버전은 어떻게 되는지 알려줘

A. 적절한 플랫폼 버전은 앱을 개발할 때 사용할 안드로이드 SDK의 버전입니다. 이 버전은 앱의 기능과 가용성, 그리고 대상 사용자의 디바이스에 설치된 안드로이드 버전에 따라 결정됩니다.

예를 들어, 앱이 최신 기능을 활용하려면 최신 버전의 안드로이드 SDK를 사용해야 할 수 있습니다. 반대로, 대상 사용자의 디바이스가 오래된 버전의 안드로이드를 사용하고 있다면, 그 버전에 맞는 안드로이드 SDK를 사용해야 합니다.

따라서, 적절한 플랫폼 버전은 앱의 기능, 가용성, 대상 사용자의 디바이스 버전을 고려하여 결정하시면 됩니다.

Q. 플랫폼 버전은 몇 가지가 있지?

A. 안드로이드 플랫폼 버전은 매우 많은 버전이 있습니다. 가장 최신 버전은 Android 11이고, 안드로이드 플랫폼은 지속적으로 개선되고 있습니다. 과거에는 Android 1.0 부터 Android 10.0까지의 버전이 있었습니다.

개발자는 앱을 개발할 때, 앱의 기능과 가용성, 대상 사용자의 디바이스 버전을 고려하여 알맞은 플랫폼 버전을 선택할 수 있습니다.

Q. 대중적으로 사용할 수 있는 플랫폼 버전은?

A. 개발자들이 대중적으로 사용하는 플랫폼 버전은 Android 4.4 (KitKat) 부터 Android 10.0 (Q) 까지의 버전입니다. 이 범위의 플랫폼 버전을 지원하는 앱을 개발하면 많은 사용자들이 이용할 수 있게 됩니다. 그러나, 일부 기기에서 최신 플랫폼 버전을 지원하지 않을 수 있으므로, 개발자는 개발하려는 앱의 기능과 제약사항, 대상 사용자 디바이스의 특성 등을 고려하여 알맞은 플랫폼 버전을 선택해야 합니다.

Q. 안드로이드 폰에서 많이 사용되고 있는 플랫폼을 알 수 있을까?

A. 안드로이드 폰에서 많이 사용되고 있는 플랫폼 버전은 시간이 지남에 따라 변경되며, 현재의 전체 점유율을 파악하기 위해서는 각 플랫폼 버전별로 점유율을 조사하는 곳을 참조하면 됩니다. 일부 정보 공유 사이트에서는 안드로이드 플랫폼 버전의 점유율 변화를 시각적으로 표현하여 볼 수 있습니다.

개발자들은 개발하려는 앱의 타겟 사용자 층을 고려하여 알맞은 플랫폼 버전을 선택할 수 있습니다. 예를 들어, 기술이 발전한 새로운 디바이스를 지원하는 최신 플랫폼 버전을 사용하는 것이 좋으며, 대상 사용자 층이 높은 플랫폼 버전을 사용하는 것이 좋습니다. 반면, 보유한 디바이스가 오래된 플랫폼 버전을 사용하는 경우, 그 버전을 지원하는 앱을 개발하는 대중적으로 가장 많이 사용되는 안드로이드 플랫폼 버전은 현재 Android 11(API Level 30)입니다. 그러나, 안드로이드 개발에서는 최신 버전이 아니더라도 적절한 버전을 선택하여 개발할 수 있습니다. 다양한 안드로이드 기기를 지원하기 위해서는 플랫폼 버전의 최소 범위를 적절히 설정하여 개발하는 것이 좋습니다.

템플릿 종류를 알려줘

Android Studio에서 제공하는 템플릿은 다양합니다. 대표적인 템플릿은 다음과 같습니다.

  1. Empty Activity: 가장 기본적인 템플릿으로, 액티비티 하나만 갖는 안드로이드 프로젝트를 생성할 때 사용할 수 있습니다.
  2. Basic Activity: ActionBar와 DrawerLayout을 포함한 액티비티 템플릿입니다.
  3. Bottom Navigation Activity: Bottom Navigation을 포함한 액티비티 템플릿입니다.
  4. Fullscreen Activity: 풀스크린에 맞는 UI를 제공하는 템플릿입니다.
  5. Login Activity: 로그인 기능을 포함한 액티비티 템플릿입니다.
  6. Master/Detail Flow: 마스터/디테일 화면 구조를 갖는 액티비티 템플릿입니다.

이 외에도 다양한 템플릿이 제공되며, 개발자의 프로젝트 요구에 맞춰 적절한 템플릿을 선택할 수 있습니다.

위 답변에서 2번 팁과 3번 팁 차이를 알려줘

2번 팁은 안드로이드 앱을 개발할 때 기본적으로 선택해야 하는 플랫폼 버전에 대한 것입니다. 3번 팁은 앱을 개발할 때 사용할 수 있는 템플릿에 대한 것입니다.

예를 들어, 플랫폼 버전에서는 안드로이드 8.0(Oreo) 또는 안드로이드 9.0(Pie) 등을 선택할 수 있지만, 템플릿에서는 빈 프로젝트, 액티비티, 미디어 플레이어, 블루투스 앱 등 다양한 종류의 템플릿을 선택할 수 있습니다.

3번 팁에 2번 팁에 있는 ActionBar와 DrawerLaout이 포함되어 있나?

3번 팁에서 언급한 템플릿은 대부분 기본 프로젝트 템플릿으로, ActionBar와 DrawerLayout이 포함되어 있을 수 있습니다. 하지만 구체적으로 포함되어 있는지는 템플릿에 따라 다릅니다. 개발자는 자신이 개발하려는 앱에 필요한 UI 요소를 고려하여 적절한 템플릿을 선택해야 합니다.

2번 팁에 있는 ActionBar 설명이 필요해

ActionBar는 안드로이드 앱의 상단에 표시되는 UI 요소입니다. ActionBar에는 앱의 제목, 액션 버튼, 메뉴 등이 표시됩니다. ActionBar는 앱의 제목을 표시하고, 앱의 기능을 빠르게 접근할 수 있는 메뉴 버튼 등을 제공합니다.

ActionBar는 Android 3.0 (API 레벨 11) 이상에서 사용할 수 있으며, Android AppCompat 라이브러리를 사용하여 더 낮은 API 레벨에서도 사용할 수 있습니다. 안드로이드 개발자는 ActionBar를 사용하여 앱의 사용자 인터페이스를 개선할 수 있습니다.

2번 팁에 있는 DrawerLayout 설명이 필요해

DrawerLayout은 두 개의 뷰를 포함하는 컨테이너로, 일반적으로 메인 컨텐츠 영역 (첫 번째 뷰)과 네비게이션 드로어 (두 번째 뷰)로 사용됩니다. 드로어는 화면의 옆에서 슬라이드 아웃하는 패널로, 앱 내의 네비게이션 옵션을 포함한 메뉴가 포함되어 있습니다. DrawerLayout은 머티리얼 디자인의 중요한 부분으로, 앱 내에서 네비게이션 옵션에 손쉽게 접근할 수 있도록 제공합니다.

3번 팁에 있는 Bottom Navigation 설명이 필요해

Bottom Navigation은 안드로이드 애플리케이션에서 바닥 곳에 있는 네비게이션 바의 종류입니다. 이 바는 애플리케이션의 각 화면을 나타내는 아이콘으로 구성되어 있으며, 사용자는 이 아이콘을 클릭하여 애플리케이션의 화면을 전환할 수 있습니다. Bottom Navigation은 애플리케이션의 구조를 간소화하고 사용자 경험을 향상시키는 데 도움이 됩니다.

5번 팁 Login Activity 에서 로그인 기능 중에 google 계정을 이용하는 기능이 포함되어 있나?

Login Activity 템플릿에서는 기본적으로 google 계정을 이용한 로그인 기능이 포함되어 있지 않습니다. 하지만 안드로이드 스튜디오에서 Firebase를 이용하여 구글 계정을 이용한 로그인 기능을 추가할 수 있습니다. 단, 이 기능을 추가하려면 Firebase 계정이 필요하며 앱에서 Firebase 기능을 사용하려면 추가 설정이 필요합니다.

Firebase 추가 설정을 알려줘

Firebase를 안드로이드 앱에 추가하는 과정에 대한 추가적인 설정은 다음과 같습니다.

  1. Firebase 프로젝트 만들기: Firebase 계정을 통해 Firebase 프로젝트를 만들어야 합니다.
  2. Firebase 앱 추가: Firebase 프로젝트에서 안드로이드 앱을 추가할 수 있습니다.
  3. 구글 서비스 설정: 안드로이드 앱에서 구글 서비스를 사용하려면 구글 서비스 플러그인을 설정해야 합니다.
  4. 안드로이드 스튜디오에서 Firebase 설정: 안드로이드 스튜디오에서 Firebase를 추가하기 위해서는 Firebase Assistant를 사용할 수 있습니다.
  5. Firebase 라이브러리 추가: Firebase에서 제공하는 라이브러리를 build.gradle 파일에 추가해야 합니다.
  6. Firebase 인증 설정: Firebase 인증 기능을 사용하려면 Firebase 인증 서비스를 설정해야 합니다.

이와 같은 추가적인 설정이 필요하며, 각 기능에 대한 자세한  Firebase와 안드로이드 스튜디오 사이에서 더 추가적인 설정이 필요한 경우에는 다음 단계를 따라 할 수 있습니다.

  1. Firebase 프로젝트 생성: Firebase 콘솔에서 새 프로젝트를 생성합니다.
  2. Firebase 구성: Firebase 프로젝트의 구성을 수정하여 필요한 서비스를 활성화합니다.
  3. Android 패키지 추가: Firebase 프로젝트에서 Android 앱을 추가하고, 패키지 이름, SHA-1 해시, 앱 버전을 지정합니다.
  4. Google Services JSON 파일 다운로드: Firebase 프로젝트에서 Google Services JSON 파일을 다운로드하고, 안드로이드 스튜디오 프로젝트의 app 디렉토리에 복사합니다.
  5. Gradle 모듈 추가: build.gradle 파일에 Firebase 및 Google Play 서비스 라이브러리를 추가합니다.
  6. 애플리케이션에서 Firebase 구성: Firebase 초기화 코드를 애플리케이션의 onCreate() 메서드에 추가합니다.

이러한 설정을 마치면 Firebase를 안드로이드 Firebase 사용을 위해서는 다음과 같은 추가 설정이 필요합니다:

  1. Firebase 콘솔에서 프로젝트를 생성합니다.
  2. 프로젝트에 Android 앱을 추가합니다.
  3. 앱에 필요한 정보(앱 이름, 패키지 이름 등)를 입력합니다.
  4. Firebase SDK를 Android Studio 프로젝트에 추가합니다.
  5. Firebase에서 생성한 프로젝트와 Android 앱을 연결합니다.
  6. Firebase 기능(예: 로그인, 데이터베이스, 푸쉬 알림 등)을 사용할 수 있도록 앱 코드를 구현합니다.

Firebase 기능을 사용하기 위해서는 Firebase SDK와 Google Play 서비스 플러그인이 필요합니다. 자세한 내용은 Firebase 공식 문서를 참조하시면 됩니다.

여기까지 Chat GPT 질문 답변 내용이었습니다. 

차후에 시간이 지나면(미래에) 지식을 습득하는데 AI가 정리된 부분을 빠르게 습득을 하는 방법이 사용될 것 같습니다.

반응형
반응형

String 값을 확인할 때 가장 많이 사용되는 메소드이다.

Apache common 라이브러리에서 StringUtils 패키지는 Strings(문자열) 처리에 많은 기능들이 있다.

그중에 조건문에서 많이 사용되는 두 메소드 사용 차이점을 알아보자.
isBlank와 isEmpty 이 두 메소드 차이점은 공백(whitespace) 처리 결과의 차이이다. 
isBlank 경우 공백을 비어있는 값으로 true 처리한다. 
isEmpty 경우 공백을 비어있지 않은 값으로 false 처리한다.

예시>
StringUtils.isBlank = 공백을 빈값으로 true 리턴

StringUtils.isBlank(null) => true
StringUtils.isBlank("") => true
StringUtils.isBlank(" ") => true
StringUtils.isBlank(" \n\t") => true

StringUtils.isEmpty = 공백을 비어있지 않아 false 리턴

StringUtils.isEmpty(null) => true
StringUtils.isEmpty("") => true
StringUtils.isEmpty(" ") => false
StringUtils.isEmpty(" \n\t") => false

이 두개의 메소드는 String 값에 " "(공백) 있는 경우를 어떻게 처리 하느냐 하는 정책에 따라
예외 처리가 필요한 경우 사용한다. 

NOT을 붙여 반대로 결과 값이 나오게 하는 메소드도 있다. 

StringUtils.isNotBlank(null) => false
StringUtils.isNotBlank("") => false
StringUtils.isNotBlank(" ") => false
StringUtils.isNotBlank(" \n\t") => false

StringUtils.isNotEmpty(null) => false
StringUtils.isNotEmpty("") => false
StringUtils.isNotEmpty(" ") => true
StringUtils.isNotEmpty(" \n\t") => true

반응형
반응형
반응형

쿠키란? (Cookie)
쿠키는 서버가 클라이언트 브라우저에 저장하는 정보
  다시말해서 사용자 인터넷 브라우저 (크롬, 엣지, 네이버웨일) 등에
  서버에서 필요한 정보를 저장한 것이다. 
  그래서 클라이언트(사용자)와 연결이 끊어져도 저장된 정보가 유지되어 
  서버와 다시 통신을 할 경우 요청정보의 헤더 안에 저장된 내용을 포함하여
  서버로 전달 할 수 있다. 
  서버는 요청정보안에 포함되어 있는 쿠키 정보를 통해 해당 서비스를 처리해서 응답해준다. 
  요청정보안에 쿠키가 없을 경우에는 서버는 신규접속(처음) 접속으로 인식하여 응답을 처리한다. 
  쿠키는 기본적으로 유효시간이 정의 되어 사용되고 유효시간 지난 정보는 사용되지 않는다.

사용예시
 - 이전에 방문한적이 있는지 확인
 - 다시 방문했을때 몇 번째 방문인지 확인
 - 로그인 여부 확인
 - 쇼핑몰에서 주문시 비로그인 사용자의 선택한 상품 정보등을 유지
 - 서버에서 필요한 별도 정보 확인
 - 자동로그인 및 로그인 유지 확인 등
위의 경우 외에도 어려가지 다양한 용도로 활용될 수 있다. 

쿠키 생성
1. 쿠키를 생성하려면 javax.servlet.http.cookie 객체를 새성한다.

Cookie cookie1 = new Cookie("쿠키이름", "쿠키값");


2. 쿠키 유효시간 설정은 setMaxAge()를 사용하고 초단위 유효시간을 지정한다.

cookie1.setMaxAge(60*60*1); // 1시간 설정

3. 서버 호출 특정 경로 (특정 URL) 요청시에 쿠키를 전송하고 싶을때 setPath() 메소드 사용한다.
    setPath() 경로를 지정하면 지정된 경로와 하위 경로의 요청에만 클라이언트로 쿠키가 전송된다.

cookie1.setPath("/");

4. 쿠키에서 도메인을 설정하여 설정 된 다른 도메인에서도 읽어 드릴 수 있다.
 1) 기본적으로 전송된 서버 즉 일치하는 도메인에서만 읽어 드릴 수 있지만, 서브 도메인에서도 읽어 드릴 수도 있다. 

// 정확히 일치하는 도메인
cookie.setDomain("tnsgud.tistory.com");
// 서브 도메인 허용
cookie.setDomain(".tistory.com");

2) 생성된 쿠키를 클라이언트로 보내기 위해서 HttpServletResponse 객체의 addCookie() 메소드를 사용한다.

// addCookie( ) 메소드의 값에 전송할 cookie 객체를 설정 한다. 
resp.addCookie(cookie);

쿠키 추출
 - 클라이언트로 부터 쿠키를 읽어 드릴려면 HttpServletRequest 객체에 getCookies() 메소드를 사용한다.
1. 쿠키배열에 쿠키 정보을 담는다.

Cookie[] list = req.getCookies();

2. 쿠키이름 추출 할때 Cookie 객체 getName() 메소드를 사용한다. 

for(int i=0; list!=null && i < list.length; i++) {
      out.println(list[i].getName() + "
");
}

3. 쿠기값을 추출 할때 Cookie 객체 getValue() 메소드를 사용한다.

for(int i=0; list!=null && i < list.length; i++) {
      out.println(list[i].getValue() + "
");
}

쿠키(Cookie) 정의와 생성, 추출 내용은 간단히 정리해 봤습니다. 
쿠키에 다양한 값을 넣고 처리 할 수는 있느나 기업 보안상 문제점에서
가장 많은 이슈가 되기도 하는 부분이기도 하다.

 


※ 원하는 것은 모두 이루었다 - 감사합니다

반응형
반응형

StringTokenizer 클래스란?
- 문자열(String)을 토큰화한다, 특정 조건으로 문자열을 자른다(Tokenizer)는 뜻이다.
  여기서 토큰은 문자열을 분리한 조각조각들로 이해 하면 쉽다.
 다시말해서 이 문장(문자열)에서 띄어 쓰기 기준으로 각각 나눈 조각들을 이야기 합니다. 

예시>
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args){
String strEx = "이문장을 띄어쓰기 기준으로 분리해보자";
StringTokenizer st = new StringTokenizer(strEx);

System.out.println(st.nextToken());  // 첫번째 문자열 조각
System.out.println(st.nextToken());  // 두번째 문자열 조각
System.out.println(st.nextToken());  // 세번째 문자열 조각
System.out.println(st.nextToken());  // 네번째 문자열 조각
    }
}

결과-----
이문장을
띄어쓰기
기준으로
분리해보자


문자열이 4개의 토큰으로 출력되었다.
배열 출력을 한것과 동일한 느낌이다. 

반응형


띄어쓰기(공백문자)를 구분자로 문자열을 자를 경우에는 위와 같이 구분자 없이 함수를 호출 하면 되지만
특정 구분자를 사용해서 문자열을 자를 경우 아래와 같이 호출를 하면 됩니다. 
여기에서 StringTokenizer 장점이 나오는데 여러가지 구분자를 동시에 사용해 문자열을 분해 할 수 있다는 것이다.

예시>
import java.util.StringTokenizer;

public class Main {

public static void main(String[] args) {
String str1 = "Java StringTokenizer 분리 예제";
String str2 = "Java,StringTokenizer,분리,예제";
String str3 = "Java,String/Tokenizer,분리%예제";
String str4 = "Java,,String,/Tokenizer/분리/예제";

StringTokenizer st1;
StringTokenizer st2;
StringTokenizer st3;
StringTokenizer st4;

// 1. 구분자를 default로 설정 - default는 띄어쓰기 기준.
st1 = new StringTokenizer(str1);
System.out.println("문자열 조각 " + st1.countTokens() + "개");
while (st1.hasMoreTokens()) {
System.out.println(st1.nextToken());
}

// 2. 구분자를 ','(콤마)로 설정.
st2 = new StringTokenizer(str2, "%");
System.out.println("문자열 조각 " + st2.countTokens() + "개");
while (st2.hasMoreTokens()) {
System.out.println(st2.nextToken());
}

// 3. 여러개 구분자를 ','(콤마) and '/' and '%'로 설정. 
st3 = new StringTokenizer(str3, ",/%", true); // true 값은 구분자도 하나의 token 인식 되도록 설정.
System.out.println("문자열 조각 " + st3.countTokens() + "개");
while (st3.hasMoreTokens()) {
System.out.println(st3.nextToken());
}

// 4. 구분자를 ','으로 설정하여 출력하다가, 구분자를 '/'로 재설정하고 출력.
st4 = new StringTokenizer(str4, ",");
System.out.println("문자열 개수 (구분자 : ',') : " + st4.countTokens());
System.out.println(st4.nextToken());
System.out.println(st4.nextToken());
System.out.println(st4.nextToken("/"));
System.out.println("문자열 개수 (구분자 : '/') : " + st4.countTokens());
System.out.println(st4.nextToken());
System.out.println(st4.nextToken());
System.out.println(st4.nextToken());
}
}

1번 출력 결과 2번 출력 결과 3번 출력 결과 4번 출력 결과
문자열 조각 4개
Java
StringTokenizer
분리
예제
문자열 조각 4개
Java
StringTokenizer
분리
예제
문자열 조각 5개
Java
String
Tokenizer
분리
예제
문자열 개수 (구분자 : ',') : 3
Java
String
,
문자열 개수 (구분자 : '/') : 3
Tokenizer
분리
예제

StringTokenizer 강점은 문장을 분해 할때 다양한 구분자를 사용해서 한번에 필요한 문자를 구분해 낼 수 있다는 점이다.

 

반응형
반응형

오늘은 간만에 다시 보게 된 유튜브 영상

명대사가 머리속에 남아서 이렇게 글을 적습니다. 

김사부 드라마를 보셨던 분들을 다 아실 겁니다. 

가슴아픈 사연의 주인공이 가족의 복수 하려고 했던

그 에피소드 내용을 안보신 분이 있으시면 짧게 감상을 하셔도 됩니다. 

글 아래에 영상을 링크를 첨부 하겠습니다. 

이 영상에서 안타까운 에피소드 내용도 중요하지만 

제 마음속에 남는 명사사 장면이 있습니다. 

두 의사의 대화가 잠시 나자신을 뒤돌아 보게 만듭니다. 

김사부 : 그냥 그거 감추려고 죽자사자 
           1등에만 메달리는 그 열등의식
           그게 좀 ....

강동주 : 나름 죽자사자 기를 쓰고
           열심히 하는 중인데 
            그게 그렇게 못마땅 하셨습니까?

김사부 : 야!!
           일하는 방법만 알고
           일하는 의미를 모르면
           의사로서 그게 무슨 가치가 있겠냐?

갑자기 그런 생각이 듭니다. 열심히 살고 있는 이유를 잊고 있는 것은 아닐까? 

그냥 열심히 사는 것이지 의미를 생각하는 것도 사치다 라고 이야기 하실 수 있습니다. 

그래도 오늘 저는 자신을 되돌아 보게 되네요.

내 왜 열심히 일을 하고 돈을 벌고 있는지 무언가를 잊고 있던건 아닌지 그런 생각이 듭니다. 

아니 아차 싶은 생각이 들었다면 잊고 있던것이 맞는 것이라 생각합나다. 

더 많은 돈을 벌기 두기 위해 이리저리 방법을 찾고 고민도 하고 찾고 찾고 또 찾고 하던중

왜? 라는 목적을 잊고 방법, 수단만을 생각하고 있던것은 아닌가?

우리는 돈을 벌어야 합니다. 넉넉하게 벌어야 합니다. 잘 살기 위해서는 꼭 필요한 것이니까요!

방법에만 치우친 결과는 행복하게 살자는 목적을 잊게 만들것 같습니다. 

주위에 1등, 최고, 고스팩, 명품, 사치 등등 수단이 목적을 가려 버리면

김사부의 말 그대로 무슨 의미가 있나라는 생각이 들었습니다. 

목적을 잊고 수단이 목적이 되어버린 의미 없는 삶을 살기는 싫다라는 생각을 합니다. 

보다 행복하게 살고 싶고 이 목적을 잊지 말아야 겠다고 다시 생각했습니다. 

 

김사부 처럼 낭만적인 이야기를 하는 것일지도 모릅니다. 

그렇지만, 드라마 허구이지만, 멋지다는 생각이 듭니다. 

멋진인생, 행복한 인생 그게 제 목표라서 그럴지도 모르겠습니다. 

낭만닥터 김사부

우리 모두 행복한 하루 

감사합니다. 

 

반응형
반응형

IoE 와 서비스 메쉬 (service mesh) 의 뜻은 무엇인가?


IoE ( 만물인터넷 : Internet of Everything )

IoE 는 사람,프로세스,데이터,사물 등 세상 만물이 인터넷에 연결되어 서로 소통하며

새로운 가치와 경험을 창출하는 기술을 의미합니다.

이것은 IoT(사물인터넷)에서 좀 더 확장된 개념으로 사람,모바일,클라우드 등 모든것을

연결시켜 상호 소통할 수 있습니다. 


예를 들면, IoE 세상에서는 무인자동차가 다른 자동차, 집, 도로, 주차장, 가로등과

서로 정보와 데이터를 주고 받게 됩니다. 

이와 같이, IoE 가능한 것은 초연결(Hyper-Connection)이 가능하기 때문입니다.

21세기 인류의 모든 문명은 ICT 기술이 더욱 진일보 할 것이고, 

인터넷에 연결되고 우리의 생활세계는 이러한 초연결 인터넷에 더욱 의존하게 될 것이다.


IoE 세상은 거대한 디지털 행성과도 같은 모습이 될것 이라 한다. IoE가 성장하면서 나타나는

디지털 행성과 같은 미래 사회는 현재보다 1천배이상 초대용량 무한 클라우드가 생기고

유무선 네트워크도 초대규모 네트워크로 연결 된다고 예상한다.


* 초연결이란, 가트너 사가 2008년 처음 사용한 용어로, 모바일 시대에 사람과 사람, 사람과 사물,

사물과 사물이 서로 연결되는 상황을 의미 합니다. 


* ICT기술이란(Information & Communication Technologies)

정보기술과 통신기술을 합쳐서 정보통신기술을 이야기 한다.


* ICT와 IT 차이

IT는  인터넷, 휴대전화 등에 사용되는 전반적인 기술을 말하는 큰 개념

ICT는 IT라는 큰 개념에서 통신(Communication)에 관련된 사업을 이야기하고 IT에 포함되어 있는 개념

ICT는 IT 범주내에서 통신사업과 관련된 부분을 지칭한다고 보면 된다.


서비스 메쉬 ( Service Mesh ) 란 ?

application의 다양한 부분들이 서로 데이터를 공유하는 방식을 제어하는 방법

서비스간 커뮤니케이션을 관리하는 다른 시스템들과 달리, 서비스 메쉬는 어플리케이션에

구축된 전용 인프라 계층이다. 이 가시적인 인프라 계층은 서로 다른 어플리케이션 부분이

얼마나 원활하게 상호 작용하는지를 기록 할 수 있으므로, 더욱 손쉽게 커뮤니케이션을

최적화 하고 어플리케이션 확장에 따른 다운 타임을 방지 할 수 있다.


MicroService Architecture를 적용한 시스템의 내부 통신이 Mesh 네트워크 형태를 띄는 것을

빗대어 이야기 하는 것을 Service Mesh 라 한다.


Service Mesh는 MSA구현된 서비스간 통신을 추상화하여 안전하고, 빠르고, 신뢰할 수 있게

만드는 전용 InfraStructure Layer 이다.

추상화를 통해 복잡한 내부 네트워크를 제어하고, 추적하고, 내부 네트워크 관련 로직을 추가

함으로써 안정성, 신뢰성, 탄력성, 표준화, 가시성, 보안성 등을 확보합니다.


Service Mesh의 구현체인 경량화 Proxy를 통해 다양한 Routing Rules, circuit breaker(서킷브레이커)등 

공통기능을 설정 할 수 있다. 이는 서비스간 통신에 연관된 기능뿐만 아니라, 서비스의 배포 전략에도

도움이 된다.


Service Mesh를 사용하는이유?

MSA의 문제점 중에서 시스템의 런타임 복잡성 때문이다.

시스템 규모에 따라 다르지만 수십게의 MSA 서비스가 분리되어 있고

이 서비스 사이에 수백 수천의 Instance가 동작합니다.

Paas 환경에서 각서비스의 Instance는 스케일링 되며 동적으로 처리됩니다. 

이 수백~수천개의 Instance를 모니터링하고 로깅 처리하고 Instance를 관리해야 합니다.

이 많은 서비스간의 통신에서 안정적이지 않은 내부 네트워크는 시스템의 신뢰성, 안정성을 보장할수 없다.

동적으로 수많은 Instance가 up/down 사이에 이런 복잡한 상황에서 내부 네트워크를 안정적으로 다루기 위해 

새로운 기능, 요구사항 관리포인트 들이 필요하기 때문에 Service Mesh를 사용한다.


Service Mesh 구현

구성은 보통 서비스 앞단에 경량화 프록시를 사이드카 패턴으로 배치하여 서비스 간 통신을 제어하는 방법으로 구현

서비스간의 통신은 사이트카로 배치된 경향화 Proxy를 통해 동작한다.

Proxy에 Routing rules, retry, timeout등 설정하고 로직을 공통기능으로 기본 어플리케이션에서 분리 할수 있다.


현재 활발하게 발전하고 있는 Service Mesh 는 istio, linked, conduit 등이 있다.


다시 쉽게 정리 하자면

Service Mesh는 마이크로 서비스 간의 통신(네크워크)를 담당하는 요소이다.


마이크로 서비스 구성 요소간 상호 통신을 위해서 Service Discovery(서비스 확인),

서비스 라우팅, Failure recovery(실패복구), load balancing(트래픽 관리), 보안 등의 

문제를 처리 할 수 있는 별도 메커니즘이 필요하다.


그래서 Service Mesh는 통신 및 네트워크 기능을 비즈니스 로직과 분리한 네트워크 통신 인프라이다.

모든 서비스의 Infra layer(인프라 레이어)로서 서비스들 간의 통신을 처리하며, 위에 이야기한 별도의 

메커니즘 처리 기능을 포함하고 있다.

[그림 참조]


반응형
반응형

Mysql select 조회시 특정값 제외, 포함 검색 및 LIKE NOT 활용


데이터를 조회하는 select 쿼리 조건절 부분을 간단히 정리합니다.

데이터베이스에 존재하는 데이터 중에서 원하는 부분을 조회 하기 위해서는 

조건절을 잘 사용해야 하는데 이때 사용되는 여러 키워드를 정리해 봅니다.


Mysql 에서는 조건절 처음은 where 구문으로 시작되고 그 이후에는 and, or 등으로 조건을 추가 합니다. 

그 외에 기호등도 사용이 되는데 "||, %, =" 등이 있습니다. 

아래의 예문중 대문자는 구문을 표시하여 예시 하였습니다. 

대문자가 아닌 부분은 변경되는 부분입니다.

NOT 구분은 제외 검색시 사용됩니다.


-) 조건과 일치하는 값을 조회하는 방법

SELECT * FROM table_name WHERE column_name = "value";

// table_name 테이블에 컬럼명 column_name 데이터 중에 값이 value와 동일한 데이터 조회

-) 조건과 일부가 포함한 값을 조회 하는 방법

SELECT * FROM table_name WHERE column_name LIKE "%value%";

// table_name 테이블에 컬럼명 column_name 데이터 중에 값이 value를 포함한 데이터 조회

-) 데이터 값중 조건값 앞문자에 상관없이 조건을 포함한 값을 조회하는 방법

SELECT * FROM table_name WHERE column_name LIKE "%value";

// column_name 데이터 중에 앞문자 상관없이 value를 포함한 데이터 조회

-) 데이터 값중 조회값 뒷문자에 상관없이 조건을 포함한 값을 조회하는 방법

SELECT * FROM table_name WHERE column_name LIKE "value%";

// 데이터 중에 뒷문자 상관없이 value를 포함한 데이터 조회

-) 여러 검색어를 하나의 컬럼에서 비슷한 값을 조회 하는 방법

SELECT * FROM table_name WHERE column_name LIKE "%value%check%";

// 데이터 값중에 value와 check 값이 포함되어 있는 데이터만 조회

-) 여러 검색어를 하나의 컬럼에서 일치하는 값들을 조회 하는 방법

SELECT * FROM table_name WHERE column_name IN ("value","check");

// 데이터 중에 value 값과 일치 거나 check 값이 일치한 데이터만 조회

-) 나머지 여러 조건을 추가 할 경우에는 AND, OR 구문을 사용해서 조회 합니다. 

   설명 까지 할 부분이 아닌 것 같아 예시는 생략합니다. 

-) 검색중 제회할 데이터가 있을 경우 NOT 구문을 이용하여 조회 합니다. 

SELECT * FROM table_name WHERE column_name NOT IN ("value","check");

// 데이터 중에 value 값과 일치 거나 check 값이 일치한 데이터를 제외한 나머지를 조회

-) NOT 구문은 반대 값을 구하라는 뜻이기 때문에 단일 조건 구문 앞에서도 사용됩니다. 

SELECT * FROM table_name WHERE column_name NOT LIKE "%value%";

// value 값이 포함된 값을 제외한 나머지 값을 조회 

-) 데이터 값들이 숫자이거나 날짜일 경우에는 부등호를 사용하여 조회합니다.

SELECT * FROM table_name WHERE value < 100 AND value > 10;

// 숫자, 날짜 데이터의 경우 부등호의 사용이 가능



반응형
반응형

PowerMockup 4.3.3.0 설치

기획자에게 필요한 기획서 작업을 할때 필요한 UI 디자인 목록이 많이 들어 있는 목업 툴 입니다.

설치 버젼 다운로드 URL :  https://www.powermockup.com 입니다. 

들어 가시면 아래와 같은 페이지를 확인 하실 수 있으며 처음에 TRIAL VERSION 으로 사용이 가능 합니다. 

TRIAL VERSION 을 사용시에는 기본으로 제공 되는 목업 UI 디자인을 사용할 수 있습니다.

위 그림에서 DOWNLOAD TRIAL 버튼을 눌러 다운로드

다운로드 파일을 받고 설치 하면 다음 화면을 확인 할 수 있습니다. 

이 툴은 파워포인트에 플러그인 되어 사용이 가능한 프로그램입니다.

설치를 완료하면 파워포인트 상단 탭에 POWERMOCKUP 탭이 생성된것을 확인 할 수 있습니다.


추가된 디자인 UI로 다양한 파워포인트 작업을 할 수 있습니다. 

우리는 파워포인트 작업을 할때 생각 보다 많은 시간을 잡아 먹는 부분이 UI를 만들거나 구성 할 때가 아닌가 싶습니다.

물론 한번 만들어 놓은 자신만의 UI 목록들이 있다면 편하고 빠른 작업을 할 수도 있지만 

상황과 내용에 따라 변경이 필요한 PPT 문서에서 그때그때 맞는 디자인을 찾기에는 수고스러움이 많습니다. 

특히 회사업무로 인해 작업을 많이 할 경우 효율성을 위해 이런 툴을 사용해 보는 것도 도움이 될 것 같습니다. 


물론 TRIAL VERSION에서 제공하고 있는 UI 들이 있지만 그이상을 사용하고 싶은 경우에는 

유료 결제를 해야 하며 결제시 모든 디자인 UI 가 사용이 가능해 집니다. 

결제방법은 사용자 단위로 결제를 할 수 있도록 되어 있습니다. 

아래 그림을 참고 하시면 될 것 같습니다.


 https://www.powermockup.com 에 들어가 보시면 확인 할 수 있습니다.


급히 PPT 작업을 하다 간단히 글을 정리해 봤습니다.

빠른 칼퇴를 위해 툴을 사용해 보는 방법도 좋은 방법이라 생각됩니다. 

회사 업무로 인한 PPT 작업에서 디자인 부분에 대한 충분한 경비 처리도 가능 할 것입니다. 

물론 아직 까지도 공짜로 퀄리티가 높은 PPT를 원하는 회사들도 있습니다. 

하지만 사실 무료로 사용할 수 있는 디자인들은 요즘에는 그리 많지 않습니다. 

이미지 하나도 라이센스 비용이 드는 요즘 같은 시대에는 프리웨이버전들을 전전 긍긍 하며

자신의 시간을 낭비 하는 것 보다는 빠른 업무효율이 날 수 있는 방법을 찾는 것도 답이라 생각합니다.

PPT는 대부분 공적인 업무로 사용되는 경우가 많은 많큼 라이센스 부분도 주의를 해야 합니다. 

저역시 프리웨어 버전을 좋아 하지만 디자인에 관해서는 제가 전공자가 아니기 때문에  애를 먹는 경우도 있습니다.

이전에 지금보다 풋내기 시절에는 공부나 경험을 한다고 도전을 해볼 수도 있겠지만

요즘에는 내 시간을 좀더 많이 갖기위한 최적의 업무를 할 수 있는 부분이 좋다고 생각을 하고 있습니다. 

본의 아니게 디자인 이야기를 하다 삼천포로 이야기가 많이 빠진 느낌입니다.

필요한 부분이 있으시면 사용해 보시면 좋을 것 같습니다. 

감사합니다. 

우리는 모두 운이 좋습니다.


추가 팁으로 개인적으로 사용을 무료로 할수 있는 방법이 있습니다. 

개인적으로 운영을 하는 블로그가 있을 경우 2번째 그림에 있는 support@powermockup.com 메일로

파워목업 툴 정보를 올리고 라이센스키 요청을 하면 심사를 하여 무료로

라이센스 키를 받을 수도 있습니다. 


도움이 되셨길 바랍니다. 


반응형
반응형

infrastructure - 인프라스트럭처 (기반시설,기간시설)

우리나라에서는 줄여서 '인프라'라고 표기하는 경우가 많다.

정보기술이나 인터넷에서 인프라는 컴퓨터와 사용자들을 연결하는데 사용되는 물리적인 하드웨어를 말한다.

인프라는 전화회선,케이블 TV회선, 인공위성 및 안테나 등과 같은 전송매체와, 라우터,리피터 등의 전송제어장치 등을 포함한다.

인프라는 또한, 신호를 보내고 받고, 관리하는데 사용되는 소프트웨어를 포함한다.

경우에 따라서는, 인프라는 컴퓨터나 기타 다른 장치에 연결되어 있는 것은 아니지만, 서로 연결되어 있는 하드웨어와 소프트웨어를 지칭하기도 한다.

그러므로, 정보기술 사용자들에게, 인프라는 정보의 흐름과 처리를 지원하는 모든 것처럼 보여지기도 한다.


인프라 회사들은 상호 연결되어 접근할 수 있는 형태 그리고 얼마나 많은 정보를 얼마나 빠르게 보낼 수 있느냐는 

두가지 측면 모두에서 인터넷의 발전에 지대한 역활을 한다.

사회적 생산 기반, 또는 경제 활동의 기반을 형성하는 기초적인 시설.

댐,도로,항만,발전소,통신시설 등의 산업 기반 및 학교,병원,공원 등의 사회 복지·환경 시설이 이에 해당합니다.

현대사회의 경제활동에 있어서 인프라를 구축하는 것은 정말로 중요합니다. 

아무리 좋은재화라도 인프라가 제대로 구축이 되지 않았다면 그것을 활용하는데 많은 제약이 있을 수 있습니다.

그렇다면 여기서 말하는 인프라 뜻은 무엇일까요?

Infrastructure 인프라스트럭처를 줄여서 부르는 말로 본래의 뜻은 하부구조,하부조직 등의 용어입니다.

오늘날에는 경제활동에 대한 기반을 형성하는 제도나 시설등의 의미로 쓰이고 있습니다. 

기반을 형성하는 시설 즉 기반시설은 나라 혹은 도시를 예를 들어 보면

도로,수도,항만,공항,철도,통신,관개,배수시설 등을 이야기 합니다.

만약 동네에서 조그만 슈퍼를 창업하여 경제활동을 하려면 슈퍼에 진열할 물건을 운송해줄 차량과 도로 

그리고 건물내부로 들어오는 전기,전화 등의 통신시설과 수도,정화조 등의 시설이 있어야 원활한 활동을 할수 있습니다.

또한 손님이 카드로 계산하면 카드결제 시스템 전산망이 구축되어 있어야 불편함 없이 결제가 가능합니다. 

이렇게 경제활동을 위한 기반시설들을 인프라라고 생각하면 됩니다.

인프라는 쉽게 말해서 기반을 이야기 합니다. 그것이 시설일수도 서비스, 또는 시스템 일수도 있습니다.


반응형
반응형

Spring Jasypt 설정으로 DB 정보 암호화


DB 정보 암호화 설정 4단계

1. Spring 설정 xml 파일에 설정 구문 추가

2. 프로퍼티스(properties) 해당 DB 정보 추가

3. Maven pom 파일에 <dependency> 구문 추가

4. Spring 설정중 dataSource 값 properties 값으로 처리 추가


1. Spring 설정 xml 파일에 설정 구문 추가

<bean id="environmentVariablesConfiguration" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">  

        <property name="algorithm" value="PBEWithMD5AndDES" />  

        <property name="password" value="BRACE_PASS" />

</bean>

<bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">  

        <property name="config" ref="environmentVariablesConfiguration" />  

</bean>  

<bean id="propertyConfigurer" class="org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer">  

        <constructor-arg ref="configurationEncryptor" />  

        <property name="locations">  

            <list>  

                <value>[파일위치]/dbinfo.properties</value>

<value>[파일위치]/db2info.properties</value>

            </list>  

        </property>  

</bean>

 스프링에 설정 파일 servlet-context.xml 파일등에 위와같이 설정 구문을 추가 하면 됩니다.

<property name="password" value="BRACE_PASS" /> 부분에 value 값은 암호화 키를 설정한 것이다.

<property name="algorithm" value="PBEWithMD5AndDES" />  알고리즘은 DES로 할것임을 알 수 있다.

일반적으로 보통 패스워드는 단방향 암호화를 사용합니다. 하지만 위에 설정된 MD5는 양방향 암복호화가 가능 합니다.

복호화시에는 위에 설정된 키값을 이용해서 확인이 가능합니다.


2. 프로퍼티 DB 정보 설정

1번 설정 정보있는 <value>[파일위치]/dbinfo.properties</value>

위 설정된 위치에 dbinfo.properties 파일을 생성하고 UTF-8 방식으로 파일을 저장합니다.

프로퍼티 내용은 "key = value"와 같은 양식으로 작성합니다.

예를 들어 설정한 값은 아래와 같습니다.

db.driver = org.mariadb.jdbc.Driver (드라이버)

db.url = jdbc:mariadb://192.168.0.100:3306/testdb (접근주소)

db.username = testuser (접근계정)

db.password = ENC(Yl2wdgxnrY9C%4ddQzDzjCMXXdw/lHUNm)

password 값 ENC() 안에 있는 값을 생성 또는 확인하기 위해서는 

http://www.jasypt.org/download.html 사이트에 들어가서 다운로드받은 뒤 확인 할 수 있는데

최신 버전은 1.9.3 버전으로 2019.05.25로 갱신된것 같습니다.

DOWNLOAD JASYPT (from GitHub) 를 클릭하여 GitHub에서 다운로드 받을 수 있습니다.

콘솔에서 암호화 값을 확인하려면 jasypt-dist 를 확인하시면 됩니다.

GitHub에서 프로젝트를 다운받아 설정하는데 어려움이 있는 분들을 위해서 압축된 파일을 같이 첨부합니다.

jasypt-1.9.2-dist.zip

해당 파일을 다운로드 받아 압축해제 하시고 사용하면 됩니다.

cmd 창에서 압축해제한 폴더로 이동하여 윈도우에서 bat 파일을 실행하면 됩니다. 

명령어는 아래쪽에 정리되어 있습니다. 


3. Maven pom 파일에 <dependency> 구문 추가

GitHub 주소(https://github.com/jasypt/jasypt) 페이지로 들어 가보면 알수 있지만

다양한 프레임워크에서 사용이 가능합니다. 

그중 Spring3으로 설정하는 부분을 예로 들겠습니다.

<dependency>  

    <groupId>org.jasypt</groupId>  

    <artifactId>jasypt-spring3</artifactId>  

    <version>1.9.3</version>  

</dependency>

POM.xml 파일에 추가하면 됩니다.


4. Spring 설정중 dataSource 값 properties 값으로 처리 추가

Spring DB dataSource 설정 부분에 아래와 같이 설정 합니다.

servlet-context.xml 파일등에 같이 설정 할 수도 있습니다.

위 1번에서 선언한 프로퍼티 파일에서 선언된 값을 ${} 방식으로 호출하여 사용합니다.

<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">

<property name="driverClass" value="${db.driver}" />

<property name="url" value="${db.url}" />

<property name="username" value="${db.username}" />

<property name="password" value="${db.password}" />

</bean>


dist 에 있는 sh파일 기능및 명령어 간편정리

listAlgorithms : 사용가능한 암호화 알고리즘 리스트를 보여줍니다.

    DIGET, PBE 2가지 리스트로 알고리즘이 구분되어 확인 할 수 있습니다.

[실행]

C:\>listAlgorithms

digest : 입력값(input)과 알고리즘(algorithm)을 변수에 값을 입력하여 암호화

         DIGET 알고리즘만 가능합니다.

[실행]

C:\>digest input="test123" algorithm="MD5"

encrypt : 입력값(input),키값(password),알고리즘(algorithm) 변수에 값을 입력하여 암호화

  PBE 알고리즘만 가능합니다.

  password는 <property name="password" value="BRACE_PASS" /> 이유가

  설정에서 password 설정부분이 키값이 되는 이유입니다.

[실행]

C:\>encrypt input="test123" password="BRACE_PASS" algorithm="PBEWithMD5AndDES"

decrypt : 입력값은 암호화 된값으로 받아 값을 디코딩하여 확인 할 수 있습니다.

  encrypt와 동일한 방법으로 명령어만 decrypt를 사용합니다.

[실행]

C:\>decrypt input="Yl2wdgnrY9C+4dn" password="BRACE_PASS" algorithm="PBEWithMD5AndDES"


반응형
반응형

Request 객체 메소드 간단정리

자바 Request 메소드들을 간단히 정리해 보았다.

자주사용하면서도 매번 찾게 되는 휘발성 기억력 때문에 정리를 해보았다.

깔끔하게 정리 해놓으신 분들도 많다는 것을 알지만 

정리를 다시 해본다는 의의를 가지고 글을 쓰게 되었다.


String getParameter(name) :  파라미터 변수 name에 저장된 변수를 얻어내는 메소드로, 이때 변수의 값은 String으로 리턴된다. 

String[] getParameterValues(name) : 파라미터 변수 name에 저장된 모든 변수값을 얻어내는 메소드로, 이때 변수의 값은 String 배열로 리턴된다. checkbox에서 주로 사용된다.

Enumeration getParameterNames() : 요청에 의해 넘어오는 모든 파라미터 변수를 java.util.Enumeration 타입으로 리턴한다. 


String getProtocol() : 웹 서버로 요청 시, 사용 중인 프로토콜(HTT/1.1)을 리턴한다.

String getScheme() : 웹 서버로 요청시, (http,https,ftp 등)을 리턴한다.

String getServerName() : 웹 서버로 요청 시, 서버의 도메인 이름을 리턴한다.

int getServerPort() : 웹 서버로 요청 시, 서버의 Port번호를 리턴한다.

String getMethod() : 웹 서버로 요청 시, 요청에 사용된 요청 방식(GET, POST, PUT 등)을 리턴한다. 

String getQueryString() : 웹 서버로 요청 시, 요청에 사용된 QueryString을 리턴한다. 

String getRequestURI() : 웹 서버로 요청 시, 요청에 사용된 URL 로부터 URI 값을 리턴한다. 

String getRemoteAddr() : 웹 서버로 정보를 요청한 웹 브라우저의 IP주소를 리턴한다. 

String getContextPath() : 해당 JSP 페이지가 속한 웹 어플리케이션의 콘텍스트 경로를 리턴한다. 

String getHeader(name) : 웹 서버로 요청 시, HTTP 요청 헤더(header)의 헤더 이름인 name에 해당하는 속성값을 리턴한다. 

Enumeration getHeaderNames() : 웹 서버로 요청 시, HTTP 요청 헤더(header)에 있는 모든 헤더 이름을 리턴한다. 

boolean isSecure() : SSL 보안 여부. https와 같은 보안 채널의 사용 여부 true/false

Locale getLocale() : 지역 정보(ko_KR)


Local 정보 (서버 정보)

getLocalAddr() : 반환값 127.0.0.1 IP 값으로 반환

getLocalName() : 반환값 localhost 도메인 값으로 반환

getLocalPort() : 반환값 8080 등


Remote 정도(클라이언트 정보)

getRemoteAddr() : 클라이언트 IP 값 반환 

getRemoteHost() : 클라이언트 HOST 값 반환

getRemotePort() : 클라이언트 port

request.getRemoteAddr()로 IP 값이 정확하지 않을 때가 있다.

예를 들어 서버가 로드 밸런스 뒤에 있을 경우 메소드는 원격 클라이언트 IP를 찾아 주는 것이 아니고 로드 밸런스 IP를 반환한다.

이 경우에는 request에 추가로 헤더가 붙기 때문에 IP를 얻어 낼수 있다.

아래는 IP 주소를 얻을 수 있는 코드

public static String getClientIpAddr(HttpServletRequest request){

String ip = request.getHeader("X-Forwarded-For");

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

        ip = request.getHeader("Proxy-Client-IP");  

    }  

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

        ip = request.getHeader("WL-Proxy-Client-IP");  

    }  

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

        ip = request.getHeader("HTTP_CLIENT_IP");  

    }  

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

        ip = request.getHeader("HTTP_X_FORWARDED_FOR");  

    }  

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

        ip = request.getRemoteAddr();  

    }  

    return ip; 

}

request 메소드 getRequestURL() 과 getRequestURI() 차이

request.getRequestURL() : 호출된 FULL 주소를 가져 온다.

request.getRequestURI() : 도메인이후 하부 주소를 가져 온다.

예) https://www.testRequestCall.com/testcall.jsp 호출 할 경우

getRequestURL() 호출 결과 값은 

https://www.testRequestCall.com:80/testcall.jsp

프로토콜 뿐 아니라 포트까지 표시 된다.

getRequestURI() 호출 결과 값은 /testcall.jsp 값을 가져 온다.


모든 Parameter 값 표시 코드

Enumeration params = request.getParameterNames();

while (params.hasMoreElements()) {

    String name = (String) params.nextElement();

    String value = request.getParameter(name);

    logger.debug(name + "=" + value);

}


모든 Cookie 값 표시 코드

Cookie cookies[] = request.getCookies();

for(int i = 0; i < cookies.length; i++) {

    String name = cookies[i].getName();

    String value = cookies[i].getValue();

    logger.debug(name + "=" + value);

}


모든 Attribute 값 표시 코드

Enumeration<String> attrs = request.getAttributeNames();

while (attrs.hasMoreElements()) {

    String name = (String)attrs.nextElement();

    String value = (String)request.getAttribute(name);

    logger.debug(name + " : " + value);

}


모든 Header 값 표시 코드

Enumeration<String> headers = request.getHeaderNames();

while (headers.hasMoreElements()) {

    String name = (String) headers.nextElement();

    String value = request.getHeader(name);

    logger.debug(name + "=" + value);

}


Request Body 값 표시 코드

DataInputStream dis = new DataInputStream(request.getInputStream());

String str = null

while ((str = dis.readLine()) != null) {

    logger.debug(new String(str.getBytes("ISO-8859-1"), "utf-8") + "/n");

    // euc-kr로 전송된 한글은 깨진다.

}


우리는 모두 운이 좋다.

하나의 page가 오늘 생겼다.

감사합니다. 고맙습니다.

반응형
반응형

contains 자바 String 메서드 


자바 String contains() 메소드는 String 값에서 특정 순서를 검색합니다.

정의 : boolean contains(charSequence s)

charSequence 지정된 문자열 s 이 포함되어 있는지 확인하여 boolean 값을 반환 합니다.


String str = "test contains method example";

boolean  containValue = str.contain("con");

if( containValue ) {

  system.out.println("str 문자열내에 con 문자열이 포함되어 있다" )

}else{

  ...

}

str.contain("con") 는 true를 반환한다. 


또는 indexOf 메소드를 사용해서 문자열을 검증체크 하는데 자주 사용된다.

실제로 indexOf 메소드는 문자열 위치를 찾는 메소드 이지만 

찾고자 하는 문자열이 포함 되어 있는지 여부를 체크 할때 많이 쓰여지는 것을 볼수 있다.


String str = "test contains method example";

int indexOfValue = str.indexOf("con");

system.out.println("indexOfValue 값은 : " + indexOfValue + " 이다".);


여기에서 실제 indexOfValue 반환값은 정수값 6 이 반환 될 것이다. 

단어를 찾을 때 첫글자의 위치를 반환 한다.

만일 문자열에 찾는 값이 없다면 반환 되는 값은 -1 이다. 



반응형
반응형

Spring Boot application.properties 설정 방법


Spring Boot를 이용할 때 대부분의 경우 설정 파일로 application.properties를 이용한다. 

application.properties는 기본적으로 Spring Boot가 읽어 들이도록 되어있기 때문에 사실 파일만 만들어서 'src/main/resources' 폴더에 넣어 주면 바로 설정 파일로 이용이 가능하다.

너무 쉬운 설정 방법이다.


사용법


# application.properties

name=propertiestest

# PropertiesTest.java

 import org.springframework.stereotye.*

 import org.springframework.beans.factory.annotation.*

@Component

public class PropertiesTest {

    @Value("${name}")

    private String name;

   // ...

}

위의 PropertiesTest 클래스의 name멤버변수는 @Value 어노테이션을 지정한 것으로 application.properties에 설정된 name=propertiestest 의 값인 "propertiestest" 입력 된다.

실질적인 어노테이션 import 부분은 import org.springframework.beans.factory.annotation.Value; 에 정의 된다. 

만약에 application.properties 파일에 name 값을 정의 하지 않았을때 default 값을 지정 하는 방법은 아래와 같다.

@Value 어노테이션에서 properties 선언변수 name 옆에 콜론(:)을 찍고 초기 값을 지정하면 된다.

   @Value("${name:testtest}")

   private String name;


   @Value("${snumber:1004}")

   private int snumber;

위처럼 선언을 하면 default 값은 application.properties에 정의 되어 있지 않아도 알맞게 변환되어 입력된다.


Spring Boot 문서에 보면 property source 설정 방법이 다양하게 정의 되어 있다.

1. Devtools global settings properties on your home directory (~/.spring-boot-devtools.properties when devtools is active).

 2. @TestPropertySource annotations on your tests.

 3. @SpringBootTest#properties annotation attribute on your tests.

 4. Command line arguments.

 5. Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property)

 6. ServletConfig init parameters.

 7. ServletContext init parameters.

 8. JNDI attributes from java:comp/env.

 9. Java System properties (System.getProperties()).

10. OS environment variables.

11. A RandomValuePropertySource that only has properties in random.*.

12. Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants)

13. Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants)

14. Application properties outside of your packaged jar (application.properties and YAML variants).

15. Application properties packaged inside your jar (application.properties and YAML variants).

16. @PropertySource annotations on your @Configuration classes.

17. Default properties (specified using SpringApplication.setDefaultProperties).

우선순위는 1번부터 차례대로 정의 된다. 

위에 설명한 방식은 15번째 나오는 방법 입니다. 


우선순위에 대한 주의점은 하위방식으로 정의된 설정값들이 상위우선순위가 있을 경우 완전히 무시 되는 구조가 아니고 

하위 우선순위부터 순차적으로 덮어 씌워 지는 방식으로 설정 된다고 해야 한다. 

만일 하위에만 설정되어 있는 number 값이 있다고 한다면 상위 property에 number에 대한 정의가 없을 경우 하위에 정의된 값을 그대로 사용한다.


위 17개의 우선 순위중 테스트 환경을 제외하고 4번째인 Command line arguments 부분이 가장 우선순위가 높게 사용할 수 있다.

command line을 이용하는 방법은 다음과 같다. 서버 console에서 사용하는 방법이라 이해하면 편할 듯하다.

$ java -jar testapp.jar --snumber=2000

콘솔창에서 바로 정의 하여 실행을 해볼 수 있다. 



반응형
반응형

open <tag> in XML mapper - mybatipse plugin 사용하기


1. mybatipse plugin 의 사용 이유

스프링으로 controller service serviceImpl dao vo 파일에서 작업 시 컨트롤러에서 서비스로 이동할때 

F2, F3를 이용하거나 ctrl을 눌러 open declaration을 통해  컨트롤러에서 이동할 서비스 위치를 찾아 갑니다.

service에서 serviceImpl도 그렇고 DAO에서 VO도 사용을 합니다. 

serviceImpl 이나 dao에서 선택자(id)에 해당하는 mapper 쿼리를 빠르게 이동할 때 사용할 수 있습니다.

일반적으로는 plugin이 설치 되지 않아 바로 이동이 불가능 합니다. 

이럴 경우 mybatipse plugin (Eclipse plugin adding support for MyBatis SQL Mapper Framework.) 을 사용하면 많은 도움이 된다.


2. 설치 방법

Help -> Eclipse MarketPlace -> mybatipse 검색합니다.

[마켓 검색]


현재 최신 버전은 MyBatipse 1.2.2 버전입니다. 버전은 변경 될 수 있습니다.

프로그램을 Installed 하고 난후 sts나 eclipse를 재기동을 하면 설치가 됩니다. 

설치 방법은 아주 간단합니다. 


3. 사용 방법

설치를 하고 sts나 eclipse가 재기동이 되면 이동할 메소드(dao)에서 ctrl키를 눌러 보면

open <tag> in XML mapper 옵션이 추가 된것을 확인 할 수 있습니다. 



반응형

+ Recent posts