흐르는 시간의 블로그...

개인적인 스터디겸 간단한 프로젝트를 Java SE 8으로 개발하였다.

IntelliJ가 많은 도움을 줘서 쉽게 개발하였다.

배포도 귀찮은지라 IntelliJ에서 jar로 만들어 Linux 머신에서 실행하였다.

사용한 것은 JDBC, TCP, Thread, logger와 HashMap, Hashtable, Multimap의 컨테이너들이다.

전반적으로 C++과 큰 차이점은 느끼지 못했다. 헤더와 소스의 분리가 안되는 것과 int 데이터의 적절한 형변환에 더 조심해야하는 것 외에는 말이다.


이렇게 해피엔딩이면 좋았겠지만 PC에서 문제가 없던 부분이 Linux 머신에서는 문제를 일으켰다.

첫번째는 버전 관련 사항이었다.

http://stackoverflow.com/questions/10382929/how-to-fix-java-lang-unsupportedclassversionerror-unsupported-major-minor-versi

뭐 결론은 Linux에 Java SE 8을 인스톨하여 정리하였다.


두번째는 class path 관련 사항이었다.

귀찮아서 jar로 만들어서 실행하였다.


세번째는 JDBC로 연결하는 시간이 매우 많이 소요 됐다.

그래서 스택오버플로에 검색을 했다.

주로 나오는 내용은 random 관련된 사항이었다.


http://stackoverflow.com/questions/5503063/oracle-getconnection-slow

http://stackoverflow.com/questions/137212/how-to-solve-performance-problem-with-java-securerandom


DriverManager.getConnection()에서 SecureRandom을 호출하는데 일반적인 random의 경우 블럭될 수 있다는 것이다. 이 현상은 Linux에서 나타난다 하였다. 해결방법은 urandom을 사용하는 것과 haveged란 프로그램을 통해 random의 seed를 만드는 노이즈를 빨리 수집하는 방법이 있다.

두가지를 모두 적용하였으나 여전히 connection은 5초~30초 사이로 오래 걸렸다.


결국 팀원에게 도움을 청해 답을 얻었다.

네트웍 문제였던 것이다.

IP로 접근하는 지라 특별히 dns문제나 네트웍 쿼리가 문제가 있을꺼라 생각하지 않았으나 내 착각이었다.

/etc/resolv.conf를 수정하여 접근 속도를 개선하였다.

약 400ms이 소요되는지라 아주 빠르다 할 순없지만 말이다.

http://webdir.tistory.com/116




'프로그래밍???' 카테고리의 다른 글

GO Lang 시작  (0) 2016.09.22
iBatis 설정 자료 링크  (0) 2016.01.20
Redis 시작...  (0) 2015.12.11
DNS의 타입에 대해...  (0) 2015.04.21
엑셀에서 랜덤 문자열 생성하는 VBA 스크립트  (0) 2015.03.04

C++11과 C++14를 사용하기 위해 GCC 5.4.0 버전을 인스톨 했었다.

현재 6.2버전까지 있는 것으로 보인다.


https://ftp.gnu.org/gnu/gcc/ - GCC Source


다시 하려니 기억이 나질 않는다. ㅡㅡ;


그래서 과정을 하나씩 정리해보려 한다.


1. 소스 다운로드

[root@ordweb install]# wget https://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.gz


2. 압축 해제

[root@ordweb install]# tar xvzpf gcc-5.4.0.tar.gz


3. 선행 요구사항 다운로드

[root@ordweb install]# cd gcc-5.4.0/

[root@ordweb gcc-5.4.0]# ./contrib/download_prerequisites


4. 컴파일 - 약 한시간 이상 걸린다. ㅠ.ㅠ

[root@ordweb gcc-5.4.0]# ./configure --prefix=/usr/local/gcc5.4 --enable-checking=release --enable-languages=c,c++


... 에러 발생 ...

...32bit lib가 없어서 발생...


[root@ordweb gcc-5.4.0]# ./configure --prefix=/usr/local/gcc5.4 --enable-checking=release --disable-multilib --enable-languages=c,c++

[root@ordweb gcc-5.4.0]# make

[root@ordweb gcc-5.4.0]# make install





관련해서... 또 다른 삽질...

내가 작성할 application이 실행할따 기존 버전의 gcc library 참조. ㅠ.ㅠ

gcc5.4의 lib64를 먼저 참조하도록 LD_LIBRARY_PATH 변경


[ub1st@ordweb ~]$ vi ~/.bash_profile

...

LD_LIBRARY_PATH=/usr/local/gcc5.4/lib64/:/usr/local/lib:/usr/lib:$LD_LIBRARY_PATH:$ORACLE_HOME/lib

export LD_LIBRARY_PATH

...

[ub1st@ordweb ~]$ source ~/.bash_profile




POCO Library를 gcc 5.4.0으로 컴파일 하기

  •  결국 다시 4.8 버전으로 컴파일해서 올림. ㅠ.ㅠ(앞의 글에서 적었던 문제)

[root@ordweb poco-1.7.5]# cd build/config

[root@ordweb poco-1.7.5]# vi Linux


CROSS_COMPILE = /usr/local/gcc5.4/bin/ 

CC      = ${CROSS_COMPILE}gcc

CXX     = ${CROSS_COMPILE}g++

...
#STRIP   = ${CROSS_COMPILE}strip
STRIP   = strip



perl에 CPAN 설치하고 cpan 콘솔에서 Archive:Zip 설치하려고 삽질하다 실패하고...

걍 git에서 다운받아서 설치.. (아... 눈물난다. ㅠ.ㅠ)


[root@ordweb install]# git clone https://github.com/redhotpenguin/perl-Archive-Zip.git

[root@ordweb install]# cd perl-Archive-Zip/

[root@ordweb perl-Archive-Zip]# perl Makefile.PL

[root@ordweb perl-Archive-Zip]# make

[root@ordweb perl-Archive-Zip]# make test

[root@ordweb perl-Archive-Zip]# make install





관련해서... 오라클의 인코딩이 이상해... ㅠ.ㅠ

한글을 제대로 못 읽는다!


[ub1st@ordweb ~]$ vi ~/.bash_profile

...

NLS_LANG=KOREAN_KOREA.KO16MSWIN949

export NLS_LANG

...

[ub1st@ordweb ~]$ source ~/.bash_profile





마지막 삽질...

코딩중에 file을 열고/쓰고/닫기 위해 기존 C언어의 open/write/close 를 사용...

나름 좀 좋게 해보겟다고 C++의  ofstream 사용... 

그러나 ofstream에서 UTF8 Write는 또 다른 문제 야기...

다시 C언어의 함수로 돌아옴... ㅠ.ㅠ


http://mytalkhome.tistory.com/841 - IntelliJ IDEA 개발환경 세팅하기

'프로그래밍???' 카테고리의 다른 글

Too Slow JDBC Connection  (0) 2016.10.10
iBatis 설정 자료 링크  (0) 2016.01.20
Redis 시작...  (0) 2015.12.11
DNS의 타입에 대해...  (0) 2015.04.21
엑셀에서 랜덤 문자열 생성하는 VBA 스크립트  (0) 2015.03.04

최근 새로운 MariaDB에 데이터를 저장해야할 일이 있다.

DBA가 작성한 쿼리를 보다보니 재밋는 부분들이 보였다. 아래 같은 코드가 눈길을 끌었다.


`XXXX` BIGINT(8)


DataType 문서를 보면 BIGINT면 64bit 숫자를 나타내는 것으로 보인다.


Numeric Data Types - Document for MariaDB

위의 필드가 8자리로 한정되면 차지하는 자릿수는 8byte 일까 4byte일까?

서버팀의 다른 직원과 삼십분 가량 이것저것 뒤져보니 생각보다 황당한 답이 나왔다.


내가 이해한 바로는 일단 8byte를 사용할 것이며 뒤에 붙은 "(8)"은 의미가 없다.


관련한 내용 MySQL 5.5의 문서에서 찾을 수 있었다.


11.1.1 Numeric Type Overview

관련 부분을 발췌하면 다음과 같다.

M indicates the maximum display width for integer types. The maximum display width is 255. Display width is unrelated to the range of values a type can contain, as described inSection 11.2, “Numeric Types”. For floating-point and fixed-point types, M is the total number of digits that can be stored.


maximum display width를 나타내는 것이며 그것은 255까지 될 수 있다. 저장하는 값의 범위와 관련이 없다는 것이다.


좀 더 찾아 다음과 같은 문서를 검색하였다. MySQL 5.7의 Reference Document이다.

12.2.5 Numeric Type Attributes

MySQL supports an extension for optionally specifying the display width of integer data types in parentheses following the base keyword for the type. For example, INT(4)specifies an INT with a display width of four digits. This optional display width may be used by applications to display integer values having a width less than the width specified for the column by left-padding them with spaces. (That is, this width is present in the metadata returned with result sets. Whether it is used or not is up to the application.)


The display width does not constrain the range of values that can be stored in the column. Nor does it prevent values wider than the column display width from being displayed correctly. For example, a column specified as SMALLINT(3) has the usual SMALLINT range of -32768 to 32767, and values outside the range permitted by three digits are displayed in full using more than three digits.


실제로 범위를 넘는 숫자에 대해서 표현하는 것도 제한하지 않으며 저장하는 것도 막지 않는다는 것이다.

도대체 왜 저 기능을 넣어놨을까 궁금해지는 순간이었다.


그래서 아래와 같은 결론을 내고 실행하였다.

필요한 필드의 최대값에 맞는 숫자타입을 기본 숫자타입에서 찾아서 지정하고 maximum display width는 지정하지 않는다.


누군가에게 도움이 되길 빌며 내용을 정리해본다.

...