본문 바로가기

2018/04/2056

데이터베이스에서 null 과 빈 문자열(empty string)의 차이점 테이블의 NULL 허용 필드에 데이터를 넣을 때 빈 문자열(empty string)을 넣으면 어떻게 될까요? 아래의 두가지 쿼리가 어떻게 동작할지를 말하는 것입니다. INSERT INTO tb_test (id, name) VALUES (1, NULL); INERRT INTO tb_test (id, name) VALUES (2, ''); 1. Oracle 오라클에서는 NULL과 빈문자열 '' 이 모두 NULL 로 처리 됩니다. 위에서 id 가 1, 2 인 행의 name은 모두 NULL 이 들어갑니다. SELECT * FROM tb_test WHERE name IS NULL; 위와 같이 쿼리하면 id가 1, 2인 행이 모두 조회됩니다. 데이터베이스에서 NULL은 등호(=)로 비교할 수 없습니다. 반드시 IS.. 2018. 4. 20.
MySQL locking - Table-Level Locking, Row-Level Locking, Optimistic Locking 웹 프로그래밍은 기본적으로 다중 사용자 환경입니다. 동일한 자원에 여러 사용자가 동시에 접근하는 상황이 발생할 수 있습니다. 쇼핑몰에서 물건을 구매하는 상황을 생각해 봅시다. 두 명의 사용자가 재고가 하나밖에 없는 제품을 조회하고, 동시에 구매를 한 상황입니다. 서버로 요청이 넘어가면 서버에서는 다음 세 단계를 거쳐 구매를 처리한다고 가정해 봅니다. 1) 다시 한번 재고를 확인합니다.2) 재고를 감소 시킵니다.3) 구매정보를 입력합니다. 재고를 확인하고 구매할 수 있다고 판단한 후에 재고를 감소하기 전에 다른 요청을 처리하는 쓰레드 또는 프로세스가 재고를 확인하게 되면 둘 다 구매 할 수 있다고 판단하게 되고 구매 처리가 되어 버립니다. MySQL 데이터베이스를 사용하는 경우 이런 환경에서 어떻게 처리하.. 2018. 4. 20.
iPhone 5s에 iOS 11.1 업데이트 기기는 iPhone 5s 운영체제는 iOS 11.0.3 에서 11.1 로 업데이트 했습니다. 업데이트 용량은 245.8MB 이고 업데이트 시간은 다운로드와 설치에 35분정도 걸렸습니다. 업데이트 후 집에서 안테나가 두 개 밖에 안뜨는데, 이게 업데이트로 인한 문제인지 기지국 사정인지는 좀 더 지나봐야 알 수 있겠습니다. 그외에 프로그램 실행이나 와이파이 연결, 배터리 등은 문제가 없는것 같습니다. 1. 새로워진 기능 및 오류 수정 - 70여 개의 이모티콘이 새로 추가 되었다고 합니다. 그런데, 받는쪽도 iOS 11.1 이라야 추가된 이모티콘을 볼 수 있다네요. 나에겐 별 의미가 없군요. 이모티콘은 쓰지 않아서 이모티콘 키보드도 지워버린 상태 이네요. - 사진앱에도 일부 사진이 흐릿하게 나올 수 있는 문제.. 2018. 4. 20.
Oracle에서 VARCHAR2 컬럼을 CLOB으로 변경하기 VARCHAR2(4000) 으로 사용하던 컬럼에 데이터를 더 많이 저장할 필요가 생겨서 CLOB 타입으로 변경하려고 합니다. ALTER 명령으로 바로 변경하려면 에러가 발생합니다. ALTER TABLE table_name MODIFY (CONTENTS CLOB) 오류 보고 - ORA-22858: 데이터유형의 변경이 부적당합니다 22858. 00000 - "invalid alteration of datatype" *Cause: An attempt was made to modify the column type to object, REF, nested table, VARRAY or LOB type. *Action: Create a new column of the desired type and copy the .. 2018. 4. 20.
스프링프레임웍 다국어 메세지 프로퍼티 파일에 한글 바로쓰기 다국어 처리를 위한 메세지 프로퍼티 파일을 이클립스의 기본 에디터로 열어보면 다음과 같이 한글이 깨어져 보입니다. 실제로 유니코드로 저장되어 있는것입니다. fail.common.msg=\uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4! 예전에는 한글로 파일을 만들고, 변환 프로그램을 이용해서 서로 변환하여 사용했었습니다. 이제는 유니코드를 바로 보고 편집할 수 있는 이클립스 플러그인들이 나와서 편리하게 사용할 수 있습니다. 이런 플러그인을 통해서 위의 파일을 보면 아래 처럼 보이고, 바로 편집할수도 있습니다. fail.common.msg=에러가 발생했습니다! 이클립스에 유니코드를 지원하는 프로퍼티 에디터 플러그인을 설치하는 방법을 알아보겠습니다. 전자정부.. 2018. 4. 20.
전자정부표준프레임워크 Spring Security 사용시 로그인한 사용자정보에 추가정보 넣기 전자정부표준프레임워크에서 스프링 시큐리티가 적용되어 있을 때 로그인한 사용자의 정보를 얻기 위해서는 다음과 같이 사용합니다. import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.com.cmm.LoginVO; ... // 로그인 여부 확인 Boolean isLogin = EgovUserDetailsHelper.isAuthenticated(); // 로그인한 사용자 정보 LoginVO user = null; if(isLogin) { user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); } 로그인 후 세션에 저장되어 있던 Log.. 2018. 4. 20.
전자정부표준프레임워크 Controller에 AOP 적용하기 전자정부표준프레임워크 Business 템플릿에서 Controller에 AOP를 적용해 보겠습니다. 1. 컨트롤러에 적용될 테스트 클래스입니다. package com.tistory.pentode.log; public class TestAspect { public void callFromController() { System.out.println("컨트롤러에 적용된 Aspect 입니다."); } } 2. context-aspect.xml 파일과 context-syslogaop.xml 파일에 예외 처리 및 로그를 남기기 위한 AOP가 적용되어 있습니다. 하지만, 여기서는 컨트롤러에 대한 AOP 를 추가하더라도 동작하지 않습니다. 루트 컨텍스트에서는 서비스와 DAO 객체만 로딩하고, 컨트롤러 객체는 없기 때문입.. 2018. 4. 20.
CSS - display 와 visibility 프로퍼티 사용하기 화면에서 HTML 요소를 숨기거나, 다시 보여주기 위해서 display 또는 visibility 프로퍼티를 사용합니다. 이러한 작업을 하기 위해서 display 프로퍼티는 none과 block 또는 inline 값을 사용하고, visibility 프로퍼티에서는 hidden과 visible 값을 사용합니다. 화면에서 HTML 요소를 숨기는 작업을 함에 있어 이 두 가지 프로퍼티에는 큰 차이가 존재합니다. visibility:hidden 을 사용하면 그 요소가 차지하던 공간은 그대로 유지되고, 화면에 보이지만 않게 됩니다. display:none 을 사용하면 그 요소가 아예 없었던것 처럼 처리됩니다. 레이아웃에 변화가 오게 되는 것입니다. 두 가지의 프로퍼티의 특성을 잘 고려해서 사용해야 하겠습니다. dis.. 2018. 4. 20.
CKEditor 한글 파일명 이미지 업로드 에러(Spring Framework) 스프링 프레임웍에서 CKEditor에 한글 파일명의 이미지를 업로드 할때 다음과 같은 오류가 발생하는 경우 입니다. 업로드할 수 없는 확장자의 이미지를 업로드하였다는 메세지인데 실제 업로드한 이미지는 업로드 가능한 확장자를 가진 이미지일 경우 입니다. 로그를 확인해보니 한글 파일명이 깨져서 확장자를 판단하지 못해서 발생하는 에러입니다. 서블릿에서 POST 방식으로 보내진 데이터의 엔코딩을 지정하기 위해서는 request.setCharacterEncoding("utf-8"); 처럼 지정할 수 있습니다. 모든 서블릿에 매번 지정하게되면 중복된 코드를 계속 적어야 하므로 스프링 프레익웍에서는 엔코딩 필터를 제공합니다. 이 엔코딩 필터는 모든 다른 필터보다 먼저 나와야 전체에 적용이 됩니다. CKEditor 이.. 2018. 4. 20.
Srping Security 권한 직접 체크하기(시큐리티 태그와 인증 클래스) 스프링 시큐리티는 롤에 따른 URL에 대한 접근제어를 기본으로 하고, 이에 관한 설정을 xml 설정 파일에 기술합니다. 전자정부표준프레임워크에서는 접근을 제어할 URL 및 ROLE 정보를 데이터베이스에서 관리할 수 있도록 커스터마이징 되어 있습니다. 메인화면 등에 로그인 여부에 따라 다른 정보를 보여 준다던가, 같은 프로그램이지만 사용자의 롤에 따라 다른 처리가 필요한 경우 직접 프로그램으로 권한을 확인해서 처리를 해야 하는 경우가 있습니다. 프로그램으로 권한 체크를 하기 위해 HttpServletRequest 객체를 사용해서 권한 정보를 얻는 것이 가능합니다. 스프링 시큐리티를 체크하는 필터가 원본 HttpServletRequest 객체를 래핑해서 기능을 추가해서 제공하기 때문입니다. 다른 방법으로는 .. 2018. 4. 20.
CKEditor 이미지 업로드에 Spring Security CSRF 토큰 적용하기 Spring Security의 CSRF 방어 기능을 사용하게 되면 CKEditor의 이미지 업로드에도 CSRF 토큰을 보내줘야 됩니다. 이때 전자정부표준프레임웍 템플릿에서 처럼 이미지 업로드를 필터를 통해서 처리하고 있다면 필터의 순서가 중요해집니다. CKEditor 이미지 업로드를 처리하는 필터가 스프링 시큐리티를 처리하는 필터보다 앞에 나오게 되면 스프링 시큐리티 자체가 적용되지 않습니다. 필터의 순서는 web.xml 파일에 이 나오는 순서대로 적용이 됩니다. 1. 필터 순서는 스프링 시큐리티가 앞에 나오게 적습니다. springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChai.. 2018. 4. 20.