스프링 트랜잭션설정이 정상적으로 안먹는 문제

context-transaction.xml 에 txManager, txAdvise, AOP, annotation-driven 이 정상적으로 되어 있는데, 트랜잭션이 안되는 문제를 찾아보니

context-mapper.xml에
<property name=”dataSource” ref=”dataSource”> 만 있고,
<property name=”transactionFactory”> 설정이 없어서 문제가 있었음

transationFactory설정을 넣으니, context-transaction.xml에 AOP, annotaion-driven 둘 다 정상적으로 됨을 확인함

참고 :
[SPRING] Mybatis-Transaction Management
출처: https://sime.tistory.com/115 [심이 블로그]

엑셀다운로드 했는데 한글이 깨짐문제

윈도우서버에서 리눅스서버로 톰캣을 옮겼다.
리눅스서버로 옮긴 후 서비스도 정상적으로 나오고 문제가 없었는데
엑셀다운로드를 했을 때, 엑셀안에 내용 중에 한글이 깨지는 문제가 발생했다.

엑셀다운로드용 jsp파일을 만들어서 그리드 내용을 엑셀로 다운로드하도록 되어 있는데 한글깨짐이 발생하자 구글링해서 문제를 해결하기 위한 방법을 찾아봤는데
전부다 실패했다.
사용해본 방법은 web.xml에 charset 필터추가 => 실패
server.xml에 charset필터 추가 => 실패

문제를 해결한 방법은 jsp페이지 상단에 page contentType 설정이 문제였음을 알겠됬다.

ㅎ.문제가된 내용
<%@page contentType=”application/vnd.ms-excel; name=’FileName_Excel’, text/html; charset=euc-kr” language=”java”%>

ㅎ.변경한 내용
<%@page contentType=”application/vnd.ms-excel; charset=euc-kr” language=”java”%>

윈도우에서는 문제가 없었는데, 리눅스환경의 톰캣에서는 엑셀에서 한글이 깨지는 문제를 야기시켰다.

jsp파일 인코딩이 utf8로 되어 있어야 엑셀에서 한글이 안깨지는걸 확인했다.
이클립스에서 파일을 선택하고 마우스오른쪽클릭 메뉴중에 properties를 눌러보면, 현재 파일의 text file encoding정보를 볼수 있는데, 이정보가 euckr이 아니라 utf8로 되어 있어야만 문제가 없다.

아무래도 서버리눅스의 locale이 ko_KR.UTF8로 되어 있는데, 이것때문에 이런 문제가 있는게 아닌지 의심스럽다.

pivot을 사용해서 날짜별로 값을 보여주기

시작일자, 종료일자를 가지고 있는 원본데이터와 캘린더 데이터를 조인해서 일별로 사용자의 실적을 만들어 준 후에 pivot을 사용해서 한줄로 사용자의 실적을 보여준다.

SELECT *
FROM (
    SELECT AA.NAME, SUBSTR(BB.DT_DD,-2) AS DT_DD
    FROM  
        (
            select 'HADOOH1' as name , '20210701' as startdt, '20210708' as enddt from dual union all
            select 'HADOOH2' as name , '20210710' as startdt, '20210715' as enddt from dual union all
            select 'HADOOH3' as name , '20210718' as startdt, '20210730' as enddt from dual
        ) AA,
        (
            SELECT *  -- 해당월 캘린더정보
            FROM CALENDAR
            WHERE DT_DD LIKE '202107%'
        ) BB
    WHERE 1=1
        AND BB.DT_DD BETWEEN AA.STARTDT AND AA.ENDDT
    )
PIVOT (
        COUNT(*)
        FOR DT_DD 
        IN ('01' as D01,'02' as D02,'03' as D03,'04' as D04,'05' as D05,'06' as D06,'07' as D07,'08' as D08,'09' as D09,'10' as D10
        ,'11' as D11,'12' as D12,'13' as D13,'14' as D14,'15' as D15,'16' as D16,'17' as D17,'18' as D18,'19' as D19,'20' as D20
        ,'21' as D21,'22' as D22,'23' as D23,'24' as D24,'25' as D25,'26' as D26,'27' as D27,'28' as D28,'29' as D29,'30' as D30
        ,'31' as D31)
      )

원본데이터
결과값

sheetjs사용해서 IE11에서 xlsx 파일 import에러 문제해결

chrome에서는 정상동작하는데 IE11에서 아래와 같은 에러가 발생함
var wb = XLSX.read(fileData, {type : ‘binary’}); 구분때문에 발생하는 문제로 해결방법을 찾다가 결국 알아내서 남겨둔다.

해결방법

xlsx.full.min.js 라이브러리 바로 아래에 xlsx.extendscript.js를 추가한다(xlsx.extendscript.min.js는 안됨)

참고페이지

SheetJS : JS로 엑셀 파일 읽기 예제
https://eblo.tistory.com/83

SheetJS IE호환성 문제 해결
https://velog.io/@y46028911/1.-SheetJS-IE%ED%98%B8%ED%99%98%EC%84%B1-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0

[안드로이드] 버튼 클릭시 이벤트동작할 때 레이아웃 깨지는 문제


버튼을 클릭할 때마다 이벤트로 버튼 글자 사이즈를 변경하는 이벤트를 넣었는데 위와같이 레이아웃이 깨지는 문제가 발생함

뭐가 문제인지 한참을 헤매다가 결국 해결했다.
아래의 링크에서 나와 똑같은 문제가 있었고 해결방법은 버튼에 layout_gravity=”center_vertical”을 주면 해결된다!!

http://www.masterqna.com/android/35066/%EB%B2%84%ED%8A%BC-text-%EA%B0%9C%ED%96%89%EC%8B%9C-%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83-%EA%B9%A8%EC%A7%90

유닉스 test 명령어 와 crontab

두번째 주의 수요일에 배치작업을 실행
= 8-14일 사이에 수요일이 있으면 배치작업을 실행한다

crontab
00 10 8-14 * * test `date +\%u` == 3 && batch.sh

테스트방법
echo `date +\%u` 를 실행하면 숫자가 나옴
숫자의미 : 1 월요일 , 2 화요일 … 5 금요일 .. 7 일요일

test `date +\%u` == 3
echo $? => 바로전에 실행한 결과값을 출력한다
같으면 0 다르면 1을 출력한다.

정리하자면 8-14일 사이에 계속 실행을 하지만
test명령어를 사용해서 해당요일이 수요일이면 배치가 실행되고 아니면 배치를 실행하지 않는다.

virtualbox에 ubuntu16.04설치 후 oracle11g(64bit)설치 완료

공부목적으로 컴퓨터에 오라클을 깔아야되는데, 경험상 윈도우에 오라클을 깔아버리면 나중에 지울때는 그냥 포맷해야하는 이유로 가상머신을 찾아봄
가상머신은 wmware 와 virtualbox, hyper-v 3가지가 있음
wmware는 써봤지만 무료(개인사용자무료도 있긴함,기능제한버전)가 아니라서 패스, hyper-v는 윈도우프로에서만 가능하므로 패스(https://answers.microsoft.com/ko-kr/windows/forum/windows_10-power/window-101-home-edition-hyper-v-%EC%84%A4%EC%B9%98/8ccf0232-b9ff-41a5-990c-0a9f1e3a93ee)
virtualbox는 사용안해봤지만 일단 무료에다가 사용이 간편해보여서 공부목적으로 선택함
virtualbox는 오라클에서 무료로 배포하는 제품임, 버전은 VirtualBox-5.2.20 윈도우용
ssd에다가 virtualbox 저장소를 설정하니깐 일단 굉장히 빠르다. 무조건 ssd에다가 저장소를 설정하자.

설치할 리눅스는 회사에서 사용하는 red hat enterprise linux(통칭 RHEL)를 설치하려고 생각했는데, 그냥 예전에 사용해봤던 우분투를 설치하기로 함
우분투는 desktop(gui)과 server(cli) 제품으로 나누어지는데, server로 사용할 목적으로 server 64bit(amd64)로 선택함, 버전은 16.04버전 굳이 신버전을 사용할 필요가 없어서 구버전중에 안정화된 버전으로 선택함.
우분투는 오라클을 공식적으로 지원해주지 않는 리눅스이므로 설정할게 많다.
우분투에 오라클설치해서 성공하면 redhat으로 시도해봐야겠음.

(중요)오라클 설치하려면 gui가 무조건 필요하다고 함, 그래서 gnome을 설치함(https://idchowto.com/?p=43024)
gnome 일반설치는 2.5G, 최소설치하면 800M이므로 최소설치만 함(옵션 –no-install-recommends)

우분투 설치 후에 계정환경설정,오라클 설치준비에 시간이 많이 들어감.
오라클은 설치하기 전에 환경설정을 잡아야하는게 좀 많다.
virtualbox 콘솔에서는 불편한 점(클립보드)이 많아서 ssh서버설정(http://blog.elmitash.com/78)하고 ssh접속해서 작업함
ssh접속할 때는 Xhell5을 사용함, 개인사용자는 무료인데, ui가 깔끔하고 putty보다는 확실히 좋다.

첫번째 오라클 설치는 실패함, 설치는 완료됬지만 sqlplus실행하면 Segmentation Fault (core dumped) 에러 발생하고 실행이 안됨
구글링을 열심히 했지만, 결국 버전문제로 보임(우분투는 64bit인데 오라클은 32bit를 설치했음)
설치한 오라클을 삭제(http://euless.tistory.com/75)하려고 $ORACLE_HOME/deinstall/deinstall을 했지만 삭제가 안됨
그냥 우분투부터 다시 설치하기로 함(오라클홈페이지에서 oracle11g 64bit버전을 다운받음)

두번째 우분투 설치는 일사천리로 설치후 환경설정까지 30분정도밖에 안걸림.
만반의 준비를 하고서 오라클을 실행했는데, 그냥 바로 설치되서 놀랐음.

설치해서 sqlplus를 실행하니깐 잘된다.

아래는 작업요약
=======================
1. virtualbox 설치
=======================
cpu 2, ram 4G, 디스크 30G 설정(동적할당, 그래도 SSD라서 빠르다)
virtualbox설치 후에 Oracle_VM_VirtualBox_Extension_Pack-5.2.20 확장팩설치

=======================
2. ubuntu16.04 설치
=======================
무조건 영어로만 설정함, 한글로 설정하면 한글도 깨지고 귀찮아진다.
우분투 설치 후 작업
virtualbox 게스트확장설치 (https://kldp.org/node/156898)
게스트 확장 이미지CD삽입으로 실패하면 aptget으로 직접설치한다.
sudo apt-get update
sudo apt-get disk-upgrade
sudo apt-get install virtualbox-guest-x11

history명령어에 날짜/표시 (http://faq.hostway.co.kr/?mid=Linux_ETC&page=8&document_srl=1424)
# vi /etc/profile
HISTTIMEFORMAT=”%F %T — ”
export HISTTIMEFORMAT
# source /etc/profile

ssh 접속설정 (http://blog.elmitash.com/78)

=======================
3. 오라클 설치
=======================
공유폴더설정 후 오라클압축파일 해제 작업
mkdir -p /download/oracle11g
cp /media/sf_oracle11g/linux.x64_11gR2_database*.zip /download/oracle11g
upzip linux*.zip

oracle 계정생성 (다른곳은 oinstall을 oracle계정의 기본그룹으로 두지만, 나는 dba를 기본그룹으로 지정함)
sudo groupadd oinstall
sudo groupadd dba
sudo mkdir -p /home/oracle
sudo useradd -g dba -G oinstall -d /home/oracle -s /bin/bash oracle
sudo passwd oracle
sudo chown -R oracle:dba /home/oracle

오라클 설치하려면 gnome을 설치해야한다. (https://idchowto.com/?p=43024)
# apt-get update
# apt-get install –no-install-recommends ubuntu-gnome-desktop (최소설치 800M)
# apt-get install ubuntu-gnome-desktop (일반설치 2.5G)

설치하기전에 설정해야될거 (http://dimpl.tistory.com/8)

# vi oraerr.sh
sed -i ‘s/^\(\s*\$(MK_EMAGENT_NMECTL)\)\s*$/\1 -lnnz11/g’ $ORACLE_HOME/sysman/lib/ins_emagent.mk
sed -i ‘s/^\(TNSLSNR_LINKLINE.*\$(TNSLSNR_OFILES)\) \(\$(LINKTTLIBS)\)/\1 -Wl,–no-as-needed \2/g’ $ORACLE_HOME/network/lib/env_network.mk
sed -i ‘s/^\(ORACLE_LINKLINE.*\$(ORACLE_LINKER)\) \(\$(PL_FLAGS)\)/\1 -Wl,–no-as-needed \2/g’ $ORACLE_HOME/rdbms/lib/env_rdbms.mk
sed -i ‘s/^\(\$LD \$LD_RUNTIME\) \(\$LD_OPT\)/\1 -Wl,–no-as-needed \2/g’ $ORACLE_HOME/bin/genorasdksh
sed -i ‘s/^\(\s*\)\(\$(OCRLIBS_DEFAULT)\)/\1 -Wl,–no-as-needed \2/g’ $ORACLE_HOME/srvm/lib/ins_srvm.mk

# setting up oracle environment variables
export ORACLE_BASE=/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2/dbhome
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=testdb

오라클 설치하기전에 무조건 따라하기
HOWTO install Oracle 11g on Ubuntu Linux 12.04 (Precise Pangolin) 64bits

오라클 설치하는방법2(gui설정)
https://ttend.tistory.com/158

우분투에 오라클11g 설치하기
https://sarc.io/index.php/oracledatabase/529-ubuntu-oracle-11gr2