안드로이드 웹뷰에 대해서 한번 정리했었는데요.. 안드로이드 웹뷰(WebView) 사용하기 안드로이드 웹뷰에서 뒤로가기 버튼 처리 - 웹페이지 리다이렉트 경우 웹에서 액티비티 호출하기 웹뷰를 사용하다보면 카카오링크와 같이 인텐트로 외부 앱을 모바일에서 실행하는 경우가 있습니다. 폰에 내장된 브라우저에서는 잘 되는데, 안드로이드 4.4. SDK부터 Chrominum 기반으로 웹뷰가 변경되면서 웹뷰에서 인텐트를 지원하지 않는 이슈가 있습니다. 인텐트를 지원하도록 WebViewClient를 상속한 함수에서 shouldOverrideUrlLoading 메소드를 다음과 같이 수정하면 됩니다. private class MyWebViewClient extends WebViewClient { public static f..
자바스크립트를 통해서 브라우저를 확대 축소하는 방법을 정리해 보려고 한다. 태그의 style 속성 중 하나인 zoom을 활용하면 쉽게 구현할 수 있다. 브라우저 확대 축소 자바스크립트 구현 20%씩 확대하고 축소하는 자바스크립트 구문은 다음과 같다. scale 값을 기본값인 1로 설정하고, 확대의 경우 20%를 곱하고 축소는 20%로 나누어서 계산하도록 했다. 그리고 document.body.style.zoom 값을 변경해서 확대 축소를 구현할 수 있다. 다양한 브라우저 지원 그러나 위 예제는 인터넷 익스플로러, 구글 크롬, 사파리에서만 동작한다. 파이어폭스나 오페라 등을 지원하기 위해서는 CSS3의 Transform을 활용해야 한다. 이 부분까지 적용한 전체 소스는 다음과 같다. 미니의 확대/축소 테스..
Sitemesh를 사용하다보면 웹 페이지에서 Decorator 파일에 현재의 위치를 전달해야 할 경우가 있다. 예를 들어 네비게이션 메뉴가 있다면, 현재 선택한 페이지를 다르게 표시할 때 주로 사용한다. 다음과 같은 화면을 구성한다고 생각해 보자. Sitemesh를 사용해서 상단 네비게이션까지 공통영역으로 처리했는데, 세번째 메뉴 선택시 상단의 네비게이션을 각 페이지에 맞춰서 선택한 형태로 변경할 때 바로 이 기능을 사용하면 된다. 메타 태그 넣기 먼저 각 페이지에 다음과 같이 메타 태그를 삽입한다. 미니 메뉴 첫번째 첫번째 메뉴를 선택한 화면입니다. 5번째 줄에 이름이 "selection"이고, 값이 "mini1"인 메타 태그를 추가한 것을 볼 수 있다. 다른 페이지에도 각각의 고유한 값을 가진 메타 ..
일반적으로 쿠키나 세션을 활용해서 로그인 처리를 많이 한다. 스프링 기반에서 인터셉트를 통해 세션 로그인 처리를 하는 부분을 정리해 보려고 한다. 전체적인 과정은 다음과 같다. 로그인 체크 인터셉터를 만든 다음, applicationContext.xml에 해당 인터셉터를 설정한다. 마지막으로 로그인 처리 중에 세션에 정보를 저장하면 된다. 이후, 인터셉터가 지정된 URL에 접근할 때는 로그인 체크 인터셉터를 통해서 로그인 여부를 확인하게 된다. 인터셉터를 활용한 흐름도는 다음과 같다. 로그인 체크 인터셉터 먼저 세션 정보가 있는지 여부를 확인하는 인터셉터를 만들어 보자. package kr.co.acronym.mini.util; import javax.servlet.http.HttpServletReque..
모바일 웹을 하다보면 SNS 공유 버튼 기능이 필요할 때가 있다. 간단하게 카카오톡, 페이스북, 트위터 공유 기능을 자바스크립트로 구현하는 것을 정리해 보도록 한다. 카카오톡 링크 공유하기 카카오톡 공유하기를 위해서는 먼저 카카오톡에 개발자 계정 등록을 해야 하고, 개발한 사이트의 URL도 앱 생성후 등록해야만 한다. http://developers.kakao.com 에서 기존 카카오톡 계정으로 설정하면 된다. 내 어플리케이션으로 이동해서 신규 어플리케이션을 웹으로 만든 다음, "설정 > 일반"에서 Javascript 키 (빨간색으로 표시)를 사용해서 카카오톡 링크를 구현할 수 있다. 그리고 카카오톡으로 공유하기를 보내기 위해서는 반드시 플랫폼이 등록되어야 한다. 위와 같이 사이트 도메인을 추가하고 저장..
일반적으로 DB에서 특정 단어가 포함된 레코드를 찾기 위해서 LIKE 를 주로 사용한다. 그러나 LIKE는 '%단어%'와 같이 사용할 때, 인덱스를 사용하지 않기 때문에 속도가 느려진다. 또한 LIKE를 여러 필드 (예를 들어, title과 keyword 등)에 동시에 적용하면서 여러 단어를 검색어로 전달하면 쿼리가 복잡해지기도 한다. > select * from board > where (title like '%학교%' or body like '%학교%') > and (title like '%취업%' or body like '%취업%'); 이를 대체하기 위해서 정규표현식을 적용할 수도 있다. 그러나 정규표현식도 마찬가지로 인덱스를 거치지 않고 풀 스캔(Full Scan)이 일어나기 때문에 느리다. > ..
톰캣(Tomcat)을 설치하고 난 후, catalina.out 로그 파일에서 한글이 깨질 경우, tocmat 설치 디렉토리/bin/catalina.sh 파일의 톰캣 실행 명령에 다음 빨간색으로 표시한 인코딩 정보를 추가하면 된다. exec "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \ -Dcatalina.base="$CATALINA_BASE" \ -Dcatalina.home="$CATALINA_HOME" \ -Djava.io.tmpdir="$CATALINA_TMPDIR" \ -Dfile.encoding="utf-8" \ org..
휴대폰 뿐만 아니라 TV, 컴퓨터가 상호간 실시간 대화를 한다고 상상해보자. 영상 통화를 하면서 동시에 채팅과 P2P 데이터 공유까지 가능하다면... 이것이 현재 떠오르고 있는 WebRTC 기술의 비전이다. WebRTC를 활용한 아자르 국내 업체 하이퍼커넥트가 만든 영상 채팅으로 전세계 친구를 찾는 앱 "아자르(Azar)"도 WebRTC 기술을 활용한다. 아자르는 2013년 앱 론칭 후, 6개월만에 500만 다운로드, 11개월만에 1,000만 다운로드를 달성했다. (현재 2,000만 가입자 수...) 2011년 발표된 WebRTC 기술과 영상 채팅 서비스를 잘 결합한 성공 모델이라 할 수 있을 듯 하다. WebRTC란? WebRTC는 웹을 위한 실시간 통신 규격을 의미한다. 오디오나 비디오 스트림을 P2..
자바에서 리스트의 정렬은 Collections.sort() 메소드를 이용해서 쉽게 수행할 수 있다. 리스트의 값이 기본 타입일 경우에는 바로 Collection.sort(list)를 적용하면 된다. 만약 리스트의 값의 자체적으로 만든 객체(Object)일 경우, 어떻게 처리해야 할까? 우선 Comparator 인터페이스를 구현해서 내부에 compare 메소드로 정렬할 방식을 정한다. 그리고 Collection.sort를 호출할 때 Comparator 인터페이스를 구현한 클래스의 객체를 전달하면 된다. 예제를 통해서 살펴보도록 하자~ 먼저 name과 volume의 멤버 변수를 가진 MiniVo 객체를 다음과 같이 만든다. package kr.co.acronym.mini; public class MiniVo..
터미널로 접속해서 명령어를 실행한 후, 해당 터미널을 종료해도 계속 명령어가 실행되도록 유지하고 싶을 때 nohup 명령어를 사용한다. 만약 mini.sh을 nohup으로 실행할 경우 다음과 같이 사용하면 된다. > nohup ./mini.sh &nohup: ignoring input and appending output to ‘nohup.out’ &는 백그라운드로 명령어를 실행하라는 것이다. 만약 &를 빼고 해서 실행했을 경우, Ctrl+Z를 눌러 백그라운드로 돌릴 수 있다. 그리고 nohup으로 실행할 경우, 화면에 출력될 내용이 기본적으로 nohup.out 파일로 리다이렉트 된다. 다음 명령어로 쉘 프로그래밍이 제대로 진행되는지 결과를 확인할 수 있다. > cat nohup.out 참고로 실행중인 ..