분류

2019년 10월 29일 화요일

egovframework Datasource 여러개 사용

1. 개요 

몇개의 프로젝트를 통합하는 작업을 진행하게 되었습니다. SK프레임워크와 전자정부 프레임워크 2.0으로 되어있는 녀석인데 서로 다른 프로젝트를 통합하다보니 다양한 데이터베이스에 대한 지원이 필요했습니다. 그리고 앞으로도 자주 있을 작업 같은데 까먹을 것 같아 적어봅니다.

2. 설정방법 

설정방법은 간략하게 파일별로 기술하겠습니다.

가) context-datasource.xml 

우선 연결에 사용할 데이터의 환경정보를 입력합니다. 

<? xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http:www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id="데이터소스ID1" class="org.apache.commons.dbcp.BasicDatasource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">
    <property name="url" value="데이터베이스 접속정보1">
    <property name="username" value="접속id">
    <property name="password" value="접속비번">
</bean>

<bean id="데이터소스ID2" class="org.apache.commons.dbcp.BasicDatasource" destroy-method="close">
    <property name="driverClassNamevalue="oracle.jdbc.driver.OracleDriver">
    <property name="urlvalue="데이터베이스 접속정보2">
    <property name="username" value="접속id">
    <property name="password" value="접속비번">
</bean>

</beans>

나) context-sqlMap.xml

다음은 접속정보와 sqlMap을 연동해줍니다.
이때 주의해야 할 점은 데이터 소스별로 SqlMapClient의 경로를 다르게 지정해야 합니다.
<? xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:aop="http://www.springframework.org/schema/aop"
      xmlns:tx="http://www.springframework.org/schema/tx"
      xmlns:util="http://www.springframework.org/schema/util"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http:www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">


<bean id="클라이언트ID1" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
    <property name="configLocations">
        <list>
            <value>classpath:/egovframework/경로1/*.xml</value>
        </list>
    </property>
    <property name="dataSource" ref="데이터소스ID1" />
</bean>

<bean id="클라이언트ID2" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
    <property name="configLocations">
        <list>
            <value>classpath:/egovframework/경로2/*.xml</value>
        </list>
    </property>
    <property name="dataSource" ref="데이터소스ID2" />
</bean>
</beans>

다) DAO설정

egovFramework에서는 기본 datasource로 설정된 데이터베이스를 이용하는 것 같습니다. 따라서 첫번째 datasource로 지정된 데이터베이스를 사용 할 경우 DAO에 작업을 하지 않아도 자동으로 사용됩니다. 반면 2번째 데이터 소스를 사용 할 경우 DAO클래스에 선언을 해주어야 합니다. 물론 DAO가 달라지므로 IMPL과 SERVICE를 모두 작성해주어야 합니다.
package egovframework.rte.....
import ......

@repository("DAO이름")
public Class DAO이름 extends EgovAbstractDAO{

  @Resource(name = "클라이언트ID2")
  public void setSuperSqlMapClient(SqlMapClient sqlMapClient){
    super.setSqlMapClient(sqlMapClient);
  }

  public List .......
      ...
      ...

3.잘못된 설정으로 발생할 수 있는 오류

가) DAO에 sqlMapCLient 를 등록하지 않고 SQL을 호출한경우

등록된 SQL맵의 ID를 찾을 수 없습니다. 라는 메시지가 화면 호출시 발생합니다. 
 There is no statement name 호출된 SQL ID in this SqlMap
DAO 클래스의 내용을 확인해보세요.

나) SqlMapConfig에 잘못된 파일명이나 경로를 등록한경우 

sqlMapConfig/sqlMap 경로에 작성된 파일을 점검해보세요 .
 Could not find resource egovframework/sqlmap-xml/......
context-sqlMap.xml 파일에 등록되어있는 xml파일중 비정상적인 경로를 가진 xml이 있습니다.

다) context-sqlMap.xml 파일에 잘못된 정보가 기입된경우

SQL맵을 찾을 수 없다는 오류가 발생할 수 있습니다.
Error creating bean with name "클라이언트ID2" defined in file ......

라) dataSource의 정보가 잘못된경우 

커넥션 오류가 발생합니다. 접속정보를 확인 하시면 됩니다.
The Connection descriptor used by the client was : ......

마)sql문에 바인드 된 클래스가 잘못된경우

각 sql에서 오류가 발생합니다.  이 경우 오류가 발생한 파라미터로 class가 바인드된 sql map에서 클래스의 경로를 확인해주세요.
java.lang.runtimeEception : Error parsing XPath 'sqlMapConfig/sqlMap': ......
java.lang.RuntimeException : Error parsing XML. Cause: java.lang.RuntimeException : Error Parsing Xpath '/sqlMap/select'. Cause: com.ibatis.sqlmap.client.SqlMapException : 
java.lang.RuntimeException : Error parsing XML. Cause: java.lang.RuntimeException : Error Parsing Xpath '/sqlMap/delete'. Cause: com.ibatis.sqlmap.client.SqlMapException : 
java.lang.RuntimeException : Error parsing XML. Cause: java.lang.RuntimeException : Error Parsing Xpath '/sqlMap/update'. Cause: com.ibatis.sqlmap.client.SqlMapException : 
java.lang.RuntimeException : Error parsing XML. Cause: java.lang.RuntimeException : Error Parsing Xpath '/sqlMap/insert'. Cause: com.ibatis.sqlmap.client.SqlMapException : 


이상입니다.
읽어주셔서 감사합니다.

2019년 10월 24일 목요일

다단계 소득에 대해 분석해보았습니다.

1. 개요 

최근 다양한 다단계 업자들이 주변에 나타나고 주변 지인들을 꼬드기는데 그 중 '교원더오름' 이라는 다단계 마케팅회사에 대한  객관적인 자료를 확보하였습니다. 공정거래위원회에 올라온 자료를 기준으로 다단계 판매원이 돈을 얼마나 버는지 확인해보았습니다.

공정거래위원회 공개자료

위 내용을 충분히 훑어본다면 당연히 돈을 못 번다는 사실을 알 수 있겠지만, 굳이 강조하고 싶은 부분이 있다면 아래 표입니다.

공정거래위원회에 공개된 후원 수당 지급 내역(2018년도 분) 

2. 소득 내역 분석 

모아진 회원이 36,446명인데 그중 실제 소득을 가져가는 사람은 2,879명입니다. 그리고 저 우측에 보이는 1인당 후원 수당 평균 지급 금액 은 1년간 지급된 금액입니다. 돈을 수령해간 사람은 전체 회원 중 총 7.8%

그 중 월 20만원도 채 되지 않는 인원인 2734명을 제외하면 145명의 사람이 월 50만 원 이상의 소득을 받고 있고 이들의 비율은 0.3%입니다.


통계청 가구특성별 소득원천별 가구소득통계에 따르면 2018년도 근로자 가구의 평균소득

일반적인 근로를 하는 가구의 평균 소득인 3639만 원 이상에 해당하는 다단계 종사자는 단 24명. (약 0.06%) 수치로 역산해보면 이 안에 들어가려면 회원 1666명을 모아야 한다는 이야기가 됩니다.

최저임금(8,350원)을 월급으로 환산한 1,745,150의 1년간 소득인 20,941,800원보다 상위 소득을 버는 사람의 경우가 위 사람을 포함하여 33명(약 0.09%) 그리고 나머지는 최저임금 이하가 되겠습니다.

3. 납득할만한 소득을 버는데 걸리는 기간은 얼마? 

저는 이것을 전업으로 하려면 적어도 가구 평균 소득은 벌어야 하는 것 아니냐 하는 생각이 있습니다. 그래서 계산해보았습니다.

1666명의 회원을 모집해야 하는데 하루 1명의 회원을 모집 할 경우 4.5년이 걸린다는 계산이 나옵니다. 최저임금을 벌려면 1,111일 3년이 걸립니다. (이런 경우는 실제 없겠죠? ㅎㅎ )

모집이 수월하지 않아 1주일에 1명을 모집한다고 한다면 가구 연간 가구 평균 소득을 벌 때 까지 32년 최저임금을 수준을 벌 때 까지 21년이 걸립니다.

이런 상황에서 가구 평균 소득 이상의 돈을 벌고 있는 사람에 대한 추측을 해보자면 창업  맴버와 초기 투자자 그리고 대규모 마케팅 팀을 꾸려서 회원 모집을 한 사람 정도밖에 없어 보입니다.

4. 추정 가능한 실제 모집은 어느 정도일까? 



현대 기아차의 월 평균 영업 사원의 판매량이 최대 약 5대입니다. 왜 자동차와 비교 하냐 하겠지만, 물건을 지속적으로 파는 것이 아니라 회원을 모집하는 것 입니다. 자동차의 경우 평균 수명이 10-15년이고 한번 구매한 것을 두 번 연속 구매 할 일이 없기 때문에 회원 가입과 비슷하다고 보입니다. 더군다나 한번 회원이 두 개의 계정을 가질 경우 판매량이 2배가 되는 것이 아니기 때문에 오히려 자동차보다 불리할 수 있습니다.

이 경우를 대입해보면 일반 근로 가구의 연평균 소득을 벌게 되는 시점은 27.7년 걸립니다. 물론 이 이후에도 해당 다단계 회사가 정상적으로 영업을 하고 있다면 든든한 노후 소득이 될 것입니다. 하지만 당장의 눈앞에 단기적인 이익을 보고자 불가능 한 이야기 입니다.

27.7년간 1시간 씩 최저임금으로 노동한다면 82,289,250원의 소득을 벌게 되며 전업으로 했다고 할 경우 670,137,600원의 수입을 얻게 됩니다. (오 생각보다 많네요)

5. 마무리

수입이라고 할만한 것이 들어올 때 까지 걸리는 기간이 10년 그리고 27년은 해야 다른 사람들 만큼 벌 수 있게 된다면 상당히 좋지 않은 조건입니다. 뭐 일 1시간 투자로도 그렇게 된다면 나쁘지는 않다고 봅니다. 하지만 그렇게 요령 좋게 된다면 전문 교육을 받은 자동차 영업 사원이 월 평균 5대 판매하는 것이 최대일 리가 없습니다. 전업으로 하고 있어도 어려운 일 입니다.

또한 전업으로 하면서 10년 간 제대로 된 소득이 없다면 그것은 당연 문제입니다. 그리고 대게의 다단계 회사가 10년을 넘기는 것을 본 적이 없습니다. 만약 앞으로 60년이 보장된다면 부업으로서는 그다지 나쁜 편은 아니라고 봅니다. 27년 열심히 일해 나머지 33년의 노후가 보장되는 것이니까요. 하지만 수익이 발생하기 전에 대부분의 다단계 회사는 영업을 종료할 것 입니다.

27년 이후의 미래를 누가 알 수 있을까요?

묻고 싶습니다.

"그 회사가 그때도 있을 거라고 장담 할 수 있습니까?" 

그리고 기사 링크 
한국 장수기업 현황과 특징…100년 기업 단 세 개뿐

100년 기업 단 3개뿐이라 하는군요 ㅎㅎㅎㅎㅎ

전 당장 열심히 일하고 자격증 하나 더 따려 공부하는 쪽을 택하겠습니다.

이상입니다. 읽어주셔서 고맙습니다.

어설픈 사기꾼의 감언이설 1탄 - 법원경매
어설픈 사기꾼의 감언이설 2탄 - 다단계(네트워크 마케팅)
어설픈 사기꾼의 감언이설 3탄 - 취업사기
어설픈 사기꾼의 감언이설 4탄 - 기획부동산 사기
어설픈 사기꾼의 감언이설 5탄 - 유사 수신 사기
어설픈 사기꾼의 감언이설 6탄 - 비트코인 사기
다단계 소득에 대해 분석해보았습니다.

2019년 10월 17일 목요일

테클라스트 P80X 개봉기

기존에 사용하던 코넥티아 8 DUAL 제품이 두 번의 심폐 소생을 거친 끝에도 동영상만 플레이 하면 사망하는 증상이 다시 나타났습니다. 또한 충전 후 사용하지 않아도 2일이 지나면 배터리가 방전되어 매번 충전을 해줘야 하는 불편함이 생겼습니다. 집에서 웹툰 볼 때, 유투브 볼 때 사용하는 터라 없으면 허전함이 이만저만이 아닙니다.

원래는 블랙프라이데이를 기다려보느라 해외쇼핑을 눈팅 하는데 10월이 되니 대게의 판매자들이 기존 판매 제품의 가격을 슬쩍 올리는 것을 보았습니다. 한국의 90년대 뉴스에 자주 나왔던 백화점 세일 전에 가격표 바꿔치기와 닮았습니다.

그러던 중 다행이 테클라스트에서 P80X를 12만원에 무상 2년 AS를 포함해 판매한다는 소식을 듣고 상품을 구매하게 되었습니다. 태블릿 제품은 국산은 너무 비싸고 해외 제품은 항상 AS가 문제가 되었는데 2년 무상AS 라면 조건도 나쁘지 않습니다.

1. 스펙


항목 정보
크기 8인치   (208mm X 124mm X 9.3mm)
CPU 옥타코어 (UNISOC 64bit) SC9863A
화면 1280X800 IPS
메모리 2GB
저장소 32GB eMMC
OS 안드로이드 9.0
블루투스 5.0
WIFI 2.4Ghz, 5Ghz
배터리 4200mAh


2. 상품 개봉 

포장은 매우 두터운 에어 캡으로 안전하게 왔습니다.
내용품은 패드와 추가 구매한 케이스, 그리고 사전예약 구매 신청으로 인한 사은품 보호필름 또 다른 사은품 32기가 sd카드

3. 간단한 리뷰 

상품을 뜯어보니 기본적으로 보호필름이 한 장 붙어서 왔습니다. (기포는 하나 있지만 그래도 수고를 줄여주니 매우 좋습니다. )

기존의 코넥티아 w8과 비교해보니 사이즈는 완전 동일하고, 스피커의 위치가 반대입니다. 무광 블랙의 뒷면이 때가 잘 타지 않을 것 같아 마음에 듭니다.

전면의 화면 사이즈도 동일. 베젤 두께나 그런걸 봐도 기존 w8과 차이가 없어 보입니다. 다만 두 스크린이 호환되지는 않을 것 같습니다. (코넥티아 w8의 홈 버튼 때문에... 커넥터가 다를 것 같습니다.)


코넥티아 w8에 비해 알루미늄과 플라스틱 케이스 재질 차이 때문인지 19그램 가볍습니다.


부팅시간은 24초라고 기록되어있는데 구지 오래된 코넥티아 w8듀얼과 비교해보았습니다.


3일밖에 사용하지 않았지만 벌써 장단점이 있습니다.

장점
1. 부팅 속도가 빠르다.
2. 안드로이드의 종료, 시작 예약을 통해 사용하지 않는 시간의 배터리 사용을 획기적으로 줄일 수 있다.
3. 사용 중 배터리 소모가 적다 (일 약 2,3시간 사용했는데 3일째 사용 중이고 배터리는 40% 남았습니다. 10시간 연속재생이 가능하다고 합니다. )

단점
전원 버튼과 볼륨 버튼이 통상적인 위치와 반대라 잘못 누른다.

이상입니다. 읽어주셔서 감사합니다.

다이소 1구 스위치 콘센트 설치하기

30년이 다 되어가는 낡은 집에 살면서 불편한 일이 매우 많습니다. 그중 이번에는 욕실에 콘센트가 없는 관계로 등 스위치를 스위치 겸 콘센트로 변경하는 작업을 해보았습니다.

1. 배선파악


기존의 전기 선로가 어떤 식으로 되어있는지 먼저 파악해보았습니다. 출촐하게 녹색선이 2가닥 들어오는데 딱 스위치 기능만을 위한 선으로 보입니다. 구조는 대략 아래와 같습니다.
천정의 배전구에서 상전압, 뉴트럴 그리고 연락선(배전용 예비선)이 나오고 그 중 상전압을 스위치로 등에 전력의 입력을 제어하게 됩니다. 낡은 집은 대체로 이렇습니다. 220v의 전기가 제가 중2때 대전에 상용 보급 되었으니 1995년이라 +-10년 이래로 지어진 집들은 대게 접지가 없습니다. (그전엔 110v)

상전압 뉴트럴은 간단하게 집에 2개의 전기선이 들어오는데 하나는 전력량이 많은 상전압이고 하나는 작은 뉴트럴이다. 두개가 모두 연결 돼야 조명이 켜진다. 정도로 간단하게 생각하고 살고 있습니다. 자세한 내용이 궁금하시면 유투브 검색이 빠르십니다.

저 스위치에 들어온 배선은 결국 하나의 배선만 가져 온 것이니 연결하면 불이 들어오지 않습니다. 하나의 선만 갖고 연결 할 경우 아래 영상처럼 불이 깜빡이게 됩니다.


결국 정상적으로 콘센트와 전등을 사용하려면 2개의 선을 추가로 삽입하여 뉴트럴과 상전압을 하나씩 더 가져와야 한다는 이야기가 됩니다.

천정의 조명에 상전압과 뉴트럴 모두 연결되어 있을 테니 확인하여 가져오면 됩니다.

욕실 등을 뜯어보았습니다. 

예전에 별다른 도구 없이 대충 배전을 해서인지 합선 되었던 흔적이 보입니다.
자세히 보시면 천정 배전파이프에서 나온 선  그리고 스위치 배전파이프에서 나온 선이 있는 것을 확인할 수 있습니다.

2. 자재구매 

일단 연락선이 없는 관계로 기존의 스위치 배전선 중 한 개를 사용해 2개의 선을 넣어야 합니다. 거리는 대략 5m정도이지만 든든하게 10m 선을 2개 구매하기로 합니다.

A) 스위치는 다이소에서 구매한 [위너스]스위치 부착 1구 콘센트 이며 국산이라고 합니다.

B) 전선은 가정용 HIV 2.5SQ 단선 2개를 구매하셔도 되고 , CV 2.5SQ 2C (2.5SQ짜리 선이 2개 들어있는 전기선입니다. ) 를 구매하셔도 됩니다. 단단한 동선으로 이루어진 제품으로 구매해야 합니다. F짜가 들어가있는 선은 대게 스피커용 연선 여러가닥이 연결되어있으므로 사지 않는게 좋습니다.

C) 와고커넥터 3구 2개 (전기선끼리 연결하기 위해 필요합니다.)

3. 설치 

설치는 매우 간단합니다. 기본적으로 위처럼 기존선에 신규선 2가닥을 절연선으로 꽉 감싸 배전 파이프 반대편까지 통과시켜주면 어려운 작업은 끝난겁니다. 다음은 상전압과 뉴트럴을 각각 1개씩 연결해주면 됩니다.


a) 전등 누전차단기를 내린 후 스위치에 연결된 선을 하나 빼서 위 사진과 같이 연결합니다. 그리고 등에 설치된 선들 중 해당 선을 배전파이프의 맞은편까지 통과시켜줍니다. 여기서 주의해야 할 것은 전등으로 들어가는 선이 아닌 천정 배전구에서 스위치로 나오는 상전원 선을 빼야 한다는 것. (뭐 전등으로 들어가는 선을 뺐다면 천정에서 두 선을 바꿔줘도 됩니다.)


b) 새로 넣은 선중 하나를 와고커넥터를 이용하여 기존의 상전압 선과 연결하고, 다른 하나는 뉴트럴 선과 연결해줍니다. 전선 끝의 약 1~1.5cm 부분의 피복을 벗긴 후 꽂으면 연결됩니다.  기존 연결된 선을 변경해주는 것이기 때문에 작업이 어렵지는 않습니다.

작업 완료된 천정 선 
와고커넥터가 3개나 보이는 이유는... 기존에 욕실 환풍기가 없어 추가 작업을 했기 때문입니다. 왼쪽이 스위치로 연결된 기존 상전압 대체, 우측이 기존 뉴트럴 중앙이 상전압 환풍기 배전(스위치 하나로 제어하기 위해 스위치에서 나온 상전압을 활용) 입니다. 갑자기 복잡해진 기분입니다.

d) 스위치에 연결합니다.
노란색 점퍼는 처음부터 동봉되어있는 녀석이고 기존의 상전압과 새로 개설한 뉴트럴, 그리고 기존 전등으로 연결된 상전압 대체한 선을 이렇게 연결하면 종료됩니다. 상전압중 전등으로 나가는 선이 아니라 들어오는 선을 콘센트에 연결하고 스위치로 점프시켜줍니다. 그리고 뉴트럴을 콘센트에 연결해주면 콘센트는 상시 작동하며 전등으로 들어갈 상전압을 스위치에 연결해주면 작업은 끝입니다.

이상입니다. 읽어주셔서 감사합니다.