jqGrid 무료버전 및 유료 버전 리스트를 표시하기 위한 Grid 제품 중에 jqGrid라는 것을 많이 사용하는데, 이 제품은 버전에 따라 유료/무료가 나뉘어 상업용으로 사용하려는 경우 버전을 꼭 확인하고 사용해야 합니다. 결론부터 말하면, v4.7(포함) 이하의 버전은 무료이고, v4.8부터는 유료입니다. 라이선스 정책 변경 공지 2014년 12월까지 무료로 제공 확인 사용방법은 아래 wiki를 확인하시면 됩니다. jqGrid wiki 웹 개발 2021.10.26
chrome으로 모바일 웹 페이지 디버깅하는 방법 모바일 웹 페이지 개발 시, 브라우저에서 F12를 눌러 개발자 모드에 진입 후 아래와 같이 Toggle device toolbar를 사용하여 보는 경우가 많은데요. 이 기능이 편하고 좋지만 결국 모바일 기기에서 직접 하는 것이 아니기 때문에 PC 브라우저에서 아무리 테스트를 해도 실제 모바일 기기에서 테스트를 하면 안 되거나, 다르게 동작하는 부분이 있습니다. (대표적으로 더블클릭 이벤트, Drag & Drop 이벤트) 그렇다면 아예 모바일에서 테스트 하면 되는데 왜 PC 브라우저에서 테스트를 하는가?라고 생각해봤을 때 가장 큰 이유는 아무래도 개발자 모드를 이용한 디버깅이라고 할 수 있는데요 이번에는 PC 브라우저에서 내 모바일 기기에 연결하여 확인하는 방법을 소개하려고 합니다. 방법은 아래와 같습니다.. 웹 개발 2021.10.26
웹 페이지가 캐시(cache) 되지 않도록 설정 웹 페이지 개발 시, 난 분명 수정을 했고, 서버에도 반영이 되어있는데 웹 브라우저에서 확인해보면 수정하기 이전 파일이 로딩되어 사용자가 안된다고 하거나 에러가 난다고 하는 경우가 항상 있습니다. 그럴때 가장 먼저 하는 말은, "캐시 삭제해 보셨나요?" 입니다. jsp같은 경우에는 이런 상황을 예방하기 위해 현재 시간을 parameter로 넣는 경우도 있습니다. parameter가 다르면 브라우저가 다른 파일이라고 인식해서 다운로드 받기 때문인데요 이렇게 일일히 javascript나 css 파일에 parameter로 넣지 않고도 다음과 같이 meta tag로 캐시를 사용하지 않게 할 수 있습니다. HTTP/1.0 HTTP/1.1 캐시를 사용하지 않기 위한 Cache-Control 옵션은 다음과 같.. 웹 개발 2021.09.23
[java] IE에서 이미지 표시되지 않는 경우 해결 방법 html 웹 페이지 개발 시 이미지를 표시하기 위해 보통 아래와 같이 img 태그를 사용합니다. 그런데, 실무에서 웹 서비스를 개발하다보면 아래와 같이 특정 URL을 호출해서 이미지를 보여주는 경우가 정말 많습니다. 이렇게 URL을 호출해서 이미지를 보여줄 경우, Chrome은 아무 문제가 없는데 Internet Explorer에서만 이미지가 보이지 않는 경우가 있습니다. 결론부터 말씀드리면 header에 Content-Type을 명시하지 않았기 때문인데요. Internet Explorer의 경우 Content-Type을 명시하지 않으면 이미지가 아니라 (악의적일 수 있는) XML 또는 HTML이라고 판단되어 이미지를 표시하지 않습니다. 따라서 아래와 같이 Content-Type을 추가해야 합니다.(ex.. 웹 개발 2021.09.23
IE(Internet Explorer)에서 호환성보기를 사용하지 않게 하는 방법 IE는 웹 개발자의 암 유발자인데요. 그중에 큰 비중을 차지하는 것이 바로 "호환성 보기"입니다. 마이크로소프트는 호환성 보기(Compatibility view)를 다음과 같이 설명합니다. 이전 버전의 Internet Explorer에서는 정상적으로 표시되던 메뉴, 이미지 및 텍스트 상자가 제 위치에 있지 않고 뒤섞여 나타날 때가 있습니다. 이는 해당 문제가 발생하는 웹 사이트가 이전 버전의 Internet Explorer에 맞추어 설계되었기 때문에 발생하는 문제입니다. 마이크로소프트사에서는 이전 버전의 호환성을 위해 호환성보기를 개발했다고 하지만, 오히려 이 호환서보기를 활성화 하면 화면이 이상하게 보이는 경우가 많습니다. 웹 개발을 하면 사용자가 자신도 모르는 사이에 호환서보기를 활성화를 하여 화면이.. 웹 개발 2021.09.23
Spring Boot SQL 보기 옵션 총 정리 SQL 보기 옵션 - Hibernate가 DB에 보내는 모든 쿼리를 보여줍니다. application.properties인 경우 spring.jpa.properties.hibernate.show_sql=true application.yml인 경우 spring: jpa: properties: hibernate: show_sql: true 추가된 로그 Hibernate: select user0_.id as id1_0_, user0_.age as age2_0_, user0_.name as name3_0_ from user user0_ where user0_.name=? sql 보기 좋게 변경 properties인 경우 spring.jpa.properties.hibernate.format_sql=true.. 웹 개발 2021.08.08
JPA에서 생성일, 수정일 자동 입력하는 방법 데이터베이스를 사용할 때 등록일, 수정일을 기록하는 경우가 아주 많습니다. 이력 관리 차원에서 아주 중요합니다. JPA에서 엔티티를 등록, 수정할 때 아래와 같이 날짜를 수정하는 코드가 많이 들어갑니다. Book book = new Book(); book.setTitle("Eclipse"); book.setCreateDate(LocalDateTime.now()); 그런데 매번 이것을 입력하기는 너무 번거롭습니다. 등록할 때는 등록일을 입력해야 하고, 수정할 때는 수정일을 입력해야 합니다. 이렇게 구분해서 입력해야 하고, 사람이 하는 일이다 보니 실수할 수도 있는 것이죠 이 문제를 해결할 수 있는 것이 JPA Auditing입니다. 먼저, JPA Auditing 어노테이션을 활성화 할 수 있도록 Appli.. 웹 개발 2021.08.08
Jackson Convert Object to Map preserving Date type Jackson ObjectMapper을 이용하여 Object(VO, DTO 등)를 Map으로 값을 복사할 때 그중 날짜 형태의 데이터(java.util.Date나 java.util.LocalDateTime 등)가 포함되어 있다면 그 값이 우리가 알고 있는 yyyy-MM-dd(2021-01-01)이 아니라, Long 형태의 값으로 Map에 들어가게 됩니다. 먼저, 테스트를 위한 Book 클래스 입니다. import lombok.Getter; import lombok.Setter; import java.time.LocalDateTime; import java.util.Date; @Getter @Setter public class Book { private LocalDateTime datetime; priva.. 웹 개발 2021.08.07
Get the Current Working Directory in Java Method 1 String userDirectory = System.getProperty("user.dir"); System.out.println("path : " + userDirectory); Method 2 String userDirectory = new File("").getAbsolutePath(); System.out.println("path : " + userDirectory); Method 3 이 방법은 JDK 7 이상에서 동작합니다. String userDirectory = FileSystems.getDefault() .getPath("") .toAbsolutePath() .toString(); System.out.println("path : " + userDirectory); M.. 웹 개발 2021.08.01
Copying a HashMap 생성자를 사용한 복사 HashMap src = new HashMap(); src.put("name", "hong"); src.put("age", "19"); HashMap dst = new HashMap(src); clone()을 사용한 복사 HashMap dst = (HashMap)src.clone(); putAll()을 사용한 복사 HashMap dst = new HashMap(); dst.putAll(src); Map.Entry를 사용한 복사 HashMap dst = new HashMap(); for(Map.Entry entry : src.entrySet()) { dst.put(entry.getKey(), entry.getValue()); } keySet()을 사용한 복사 HashMap ds.. 웹 개발 2021.07.31