개발 51

mybatis bulk insert 쿼리

mybatis를 사용하다 보면 성능을 위해 bulk insert를 사용할 때가 있다 bulk insert 쿼리는 다음과 같다. INSERT INTO test_table(name, age, register_date, modify_date) VALUES (#{map.name}, #{map.age}, #{map.register_date}, #{map.modify_date}) 저장할 데이터를 List에 담고 foreach를 사용하여 insert문을 만들어 한번에 저장하는 방법이다. 한번에 너무 많은 데이터를 저장하려고 하면 성능상 문제가 생길 수 있으므로 대량으로 insert 할 경우 보통 1,000건 정도로 잘라서 저장한다.

개발 2020.11.29

안드로이드 usb디버깅 크롬으로 확인하기

안드로이드 폰에서 먼저 설정 > 개발자 모드 > usb 디버깅 모드 활성하를 진행해야 한다. usb와 안드로이드 폰을 연결 후 크롬브라우저에 아래 주소를 입력한다. chrome://inspect/#devices 폰이 연결되면 Shared Workers에 핸드폰 기종이 표시된다. 안드로이드 폰에서 어플리케이션을 가동하면 Other 영역에 디버깅을 확인할 수 있는 UI가 표시된다. 만약 어플리케이션에서 디버깅모드가 꺼져있을 경우에는 디버깅을 확인할 수 없다.

개발 2020.11.29

스프링 properties profile 적용하기

개발 환경에 따라 properties 값이 다른 경우 하나의 properties 파일을 사용하기 보다 profile별로 구분하여 사용하는 방식이 좋다. properties파일명 뒤에 profile 명을 다음과 같이 설정한 후 vm options에 다음과 같이 사용할 프로파일을 지정하면 해당 properties를 읽어서 사용할 수 있다. 먼저 @Configuration 어노테이션을 선언한 설정 클래스에서 프로퍼티를 읽을 수 있도록 설정을 추가한다. @Profile("prod") @Bean public static PropertySourcesPlaceholderConfigurer prodProperties() { PropertySourcesPlaceholderConfigurer configurer = new..

개발 2020.11.29

자바 배열 자르기 subList의 문제점과 해결 방법

자바에서 리스트를 담을 때 주로 List를 사용하는데 리스트의 원소를 잘라서 사용해야 할 경우에 subList 함수를 사용한다. 이때 subList를 사용하여 자른 원소를 사용하다 보면 메모리 누수가 발생할 수 있다. List list = Lists.newArrayList(1,2,3,4,5); list.subList(0, 2); ArrayList의 List는 자신이 생성된 부모(parent) 객체 정보를 가지고 있기 때문에 불필요한 메모리를 점유하기 때문이다. 이를 방지 하기 위해서는 Lists.newArrayList 안에 subList한 배열을 넣어서 따로 리스트를 생성하면 된다. List list = Lists.newArrayList(1,2,3,4,5); List newList = Lists.newA..

개발 2020.11.29

인텔리제이 .gitignore 사용하기

인텔리제이에서 git을 사용하다 보면 제외하고 싶은 디렉토리나 파일이 있을 때 gitignore에 추가하면 된다. 아래 내용을 복사한 후 프로젝트 최상단에 .gitignore로 파일명을 추가한다. 그리고 제외하고 싶은 디렉토리를 하단에 추가해주면 끝!! # Created by https://www.gitignore.io/api/windows,intellij,java ### Windows ### # Windows image file caches Thumbs.db ehthumbs.db # Folder config file Desktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ # Windows Installer files *.cab *.msi *.msm *..

개발 2020.11.29

js/css 파일 캐시 방지 처리

웹 개발을 하다보면 css나 js 파일을 수정할 경우 브라우저 캐싱때문에 바로 적용이 안되는 경우가 있다. 특히 상용에 문제가 생겨서 수정하였는데 바로 수정된 파일이 반영이 안된다면 문제는 점점 더 커진다. 이를 방지 하기 위한 간단한 방법은 css/js 파일 뒤에 파일명을 변경해주는 방법이 있다. css, js 파일 뒤에 ?version=날짜시간 을 텍스트로 추가하여 주면 브라우저 캐싱을 피할 수 있다.

개발 2020.11.29

스프링 중복 로그인 방지하기

스프링 프레임워크를 사용하면서 중복 로그인을 막는 가장 쉬운 방법은 스프링 시큐리티의 중복 로그인 방지 기능을 사용하는 방법이다. 스프링 시큐리티의 중복 로그인 방지 설정 http.sessionManagement() .maximumSessions(1) .maxSessionsPreventsLogin(false) .expiredSessionStrategy(this.securitySessionExpiredStrategy()) .sessionRegistry(this.sessionRegistry); 설정을 간단하게 설명하면 maximumSessions 갯수를 1개로 지정하여 2개 이상 세션이 생성되지 않도록 한다. 이 설정을 사용하면 중복 로그인을 어느정도는 막을 수 있으나 톰캣에서 세션을 관리하는 어플리케이션에..

개발 2020.11.29

안드로이드/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