개발 53

안드로이드/ios webview 자바스크립트로 뒤로가기 감지하기

안드로이드/ios의 webview에서 자바스크립트로 뒤로가기를 감지하는 방법 * 앱에서 뒤로가기가 시작되면 자바스크립트에서 뒤로가기 이벤트를 블로킹 할 수는 없습니다. * 아래 코드를 사용하면 뒤로 가기 이벤트를 감지 해서 앱에서 제공하는 javascriptinterface를 호출하는 방식으로 중간에 코드를 실행할 수 있습니다. 아이폰에서 뒤로 가기 감지 // 뒤로가기 이벤트 감지 - ios 전용 window.onpageshow = function (event) { if (event.persisted || (window.performance && window.performance.navigation.type == 2)) { // 실행할 이벤트 - javascriptinterface 호출 등... } } ..

개발 2020.11.27

톰캣에서 HTTP Method 설정하기

웹서버는 HTTP 통신 방식에 따라 GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE 메서드를 제공합니다. 이러한 메서드를 모두 사용 가능하게 할 경우 보안상 문제가 발생함으로 GET, POST 이외에는 사용하지 못하도록 설정을 해야 합니다. 다음은 톰캣에서 HTTP Method 설정 방법입니다. Tomcat으로만 vi /usr/local/tomcat/conf/web.xml 아래 내용을 추가해줍니다. 예를 들어 PUT, DELETE, TRACE, OPTIONS 외부 질의 시 거부하도록 설정하는 구문입니다. Forbidden Forbidden /* PUT DELETE TRACE OPTIONS web.xml에 설정을 추가한 후 telnet localhost 8080을 입력합니다..

개발 2020.08.16

리눅스에서 apache + tomcat 연동 방법

1. Tomcat 설치 먼저 톰캣을 다운로드한 후 리눅스 서버에 업로드합니다. 업로드한 톰캣은 /usr/local/src로 이동합니다. 톰캣 압축 해제 후 심볼릭 링크를 설정합니다. cd /usr/local/src tar zxvf apache-tomcat-8.5.57.tar.gz mv apache-tomcat-8.5.57 /usr/local ln -s apache-tomcat-8.5.57 tomcat 톰캣 폴더 안에 있는 bin 폴더에서 startup.sh 스크립트를 실행합니다. 권한이 없을 경우에는 아래 명령어를 실행합니다. chmod 755 startup.sh 정상적으로 실행되면 에러 없이 아래와 같이 표시됩니다. Using CATALINA_BASE: /usr/local/tomcat Using CAT..

개발 2020.08.16

해시(Hash) 기본 개념과 구조

1. 해시(Hash) 정의 - 배열은 검색 속도가 빠르나 데이터 삽입/삭제 시 속도가 느립니다. - 링크드 리스트는 삽입 삭제시 인근 노드의 참조 값만 수정해서 속도가 빠르나 순회 검색만 가능하여 데이터가 많아질수록 속도가 느려집니다. - 이러한 한계를 극복하기 위해 제시된 방법이 해시(Hash)입니다. 2. 특징 - 내부적으로 배열을 사용하여 데이터를 저장하여 검색 속도가 빠릅니다. - 데이터의 삽입/삭제 시 해시 알고리즘을 이용하여 데이터와 연관된 고유한 숫자를 만들어 인덱스로 사용합니다. - 해시가 내부적으로 사용하는 배열을 Hash Table 이라고 하며 크기에 따라서 성능 차이가 납니다. 3. 해시 메서드(Hash Method) - 해시는 Hash Table을 사용하여 데이터를 저장합니다. - ..

개발 2020.08.13

JVM 메모리 구조 및 JVM 튜닝

jvm 튜닝에 앞서 jvm 메모리 구조에 대해 먼저 알아보겠습니다. 1. Method Area (메서드 영역) - 클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보, 필드 정보, 메서드의 이름, 리턴 타입, 파라미터 등의 변수 등이 생성되는 영역 2. Heap Area(힙 영역) - new 키워드로 생성된 객체와 배열이 생성되는 영역 - 메서드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역 3. Stack Area(스택 영역) - 지역 변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등이 생성되는 영역 4. PC Register (PC 레지스터) - Thread가 생성될 때마다 생성되는 영역으로 Program Coun..

개발 2020.08.13

Centos7 jdk 1.8 설치

centos7에서 jdk 1.8버전 설치에 대해 알아보겠습니다. 1. jdk 1.8 다운로드 - oracle jdk(https://www.oracle.com/kr/java/technologies/javase/javase-jdk8-downloads.html)를 다운로드 합니다. 2. open jdk 삭제 - 설치하기전에 open jdk가 설치 되어 있는지 확인해야 합니다. rpm -qa | grep jdk - 만약 설치되어 있으면 다음과 같이 콘솔에 표시됩니다. java-1.6.0-openjdk-1.6.0.0-1.48.1.11.3.el6_2.x86_64 - 삭제하기 위해 아래 명령어를 실행합니다. yum remove java-1.6.0-openjdk-1.6.0.0-1.48.1.11.3.el6_2.x86_6..

개발 2020.08.10

리눅스 mysql(5.5.9) 설치 방법

리눅스에 mysql을 설치할 때 버전마다 설치 방법이 다릅니다. 이 포스팅을 참고하면서 mysql을 설치할 때 꼭 mysql 5.5.9(https://downloads.mysql.com/archives/community/) 버전을 다운받아서 진행해야 문제가 발생하지 않습니다. * 리눅스는 centos 7 버전에 설치를 진행합니다. 1. mysql 다운로드 - mysql 사이트에서 (https://downloads.mysql.com/archives/community/) tar.gz 파일로 5.5.9 버전을 다운받습니다. - 다운받을 파일을 리눅스 서버의 /usr/local/src 폴더에 업로드 합니다. 2. 미리 설치 되어 있는 mysql 삭제 - yum으로 미리 설치되어 있을 수 있는 mysql을 삭제해..

개발 2020.08.08

AngularJs 보안 가이드

AngularJs 보안 가이드에는 4가지 항목에 대해 설명합니다. 1. 데이터와 HTML에 대한 인증되지 않은 접근 방어 2. 스누핑 방어를 위한 연결 암호화 3. 크로스사이트 스크립팅(XSS) 공격 및 크로스 사이트 요청 위조(XSRF) 방어 4. JSON 주입 취약점 방어 1. 인증되지 않은 접근 처리 (Cross-site request forgery - CSRF) - 인증되지 않은 사용자가 DB에 get 이외의 요청을 보내는 경우 - 관리자가 아닌 사용자가 프로젝트나 사용자 DB에 대해 get 이외의 요청을 보내는 경우 위와 같은 경우 401 에러를 발생시켜야 합니다. POST / login - post 요청의 body를 기준으로 사용자 인증 POST / logout - 인증 쿠키 삭제함으로써 현재..

개발 2020.07.28

AngularJs 성능 개선 가이드

많은 회사에서 2013년부터 AngularJs를 도입해서 현재도 사용하고 있는 곳이 많이 있습니다. 하지만 AngularJs 최적화가 되어 있는 경우가 드물어 성능에 문제가 있어도 해결 방법을 찾기 어렵습니다. 오늘은 AngularJs의 성능 개선 방법에 대해 알아보겠습니다. 1. AngularJs가 모델 변경 사항을 추적하는 상황 - DOM 이벤트(사용자가 input 필드의 값을 변경하거나 버튼을 클릭을 클릭해서 자바스크립트 함수를 호출하는 경우) - XHR 응답으로 인한 콜백 - 브라우저의 주소 변경 - 타이머(setTimeout, setInterval)로 인한 콜백 * 실제로 어떤 이벤트도 발생하지 않으면 모델의 변경 사항을 주시하지 않습니다. * AngularJs는 $scope.$apply() 메..

개발 2020.07.28

Redis 튜닝하기

1. Redis 메모리 운영 효율적으로 관리하기 - Redis는 in-memory 데이터 저장 관리 기술을 제공합니다. - 그러나 시스템 메모리 크기는 제한이 있습니다. - 사용자가 저장하는 데이터는 이보다 훨씬 크기 때문에 모든 데이터를 메모리에 저장해서 관리할 수가 없습니다. - 이러한 문제점을 개선하기 위해 Redis는 LRU / LFU 알고리즘을 제공합니다. - 메모리를 효율적으로 사용하기 위해서 LFU 알고리즘으로 설정해서 사용하는걸 추천합니다. * LFU 알고리즘 설정 vi redis.conf lfu-log-factor 10 // LFU 알고리즘에 의한 메모리 운영 lfu-decay-time 1 - LRU 알고리즘은 lfu-log-factor 값을 변경하면서 튜닝하는데 기본값은 10입니다. (..

개발 2020.07.27