* 웹서비스 환경 및 버전 *

1. jdk

   - jdk 1.6.0_31 : 버전에서 실패. 

                       web.xml에 웹서비스 관련 servlet container를 등록 후 was를 restart시키면 start도중 오류 발생

                        (servlet container 목록 :
                          org.apache.axis.transport.http.AxisServlet,  org.apache.axis.transport.http.AdminServlet)

   - jdk 1.6.0_45 : 웹서비스 정상 구동

 

2. axis2를 이용해서 webservice 정상 환경 

   a. eclipse : Indigo  (Build id : 20120216-1857)
      jdk : 1.6.0_45
      tomcat : 6.0
      axis2 : 1.7.9
   b. eclipse : Helios (Build id : 20100917-0705)
      jdk : 1.6.0_45
      tomcat : jeus 6.0
      axis2 : 1.6.2 ~ 1.7.9 까지 모두 가능

   c. eclipse : 2021-12 (4.22.0)
      jdk : 17.0.2
      tomcat : tomcat 9.0
      axis2 : 1.7.9



3. axis2 다운로드

    * 모든 버전 다운로드 : https://archive.apache.org/dist/axis/axis2/java/core/

 

Posted by 농부지기
,

[ eclipse-svn lock 해결하기 ]

a. error 종류
    - Path is not a working copy directory
    - attempted to lock an already-locked dir
b. 해결방법 (4가지)
1. 해당폴더 : [Team] ? [Refresh/Cleanup]
2. 상위폴더 : [Team] ? [Refresh/Cleanup]
3. DB.Browser.for.SQLite이용
   ㄱ. 다운로드
      - 파일명 : DB.Browser.for.SQLite (64bit) (<--클릭시 다운로드)
      - 다운로드 : https://github.com/sqlitebrowser/sqlitebrowser/releases/download/v3.12.1/DB.Browser.for.SQLite-3.12.1-win64-v2.msi
      - 다운로드 : https://sqlitebrowser.org/dl/
   ㄴ. 설치
      - 설치도중 
        DB Browser(SQLite)      [v]Desktop  체크
        DB Browser(SQLCipher) [v]Desktop  체크
   ㄷ. 프로그램 실행
      - 상단icon [데이터베이스 열기]
      - .svn폴더 하위에 : wc.db 선택  (hidden파일임)
      - [SQL실행] TAB
        DELETE FROM WC_LOCK;
        DELETE FROM WORK_QUEUE;
        [>] 실행
      - [저장]
4. wc.db 파일이 없을 경우
   ㄱ. eclipse 종료
   ㄴ. lock발생한 폴더 삭제 (삭제 전 backup 필수)
   ㄷ. eclipse 실행
   ㄹ. team -> synchronizing
   ㅁ. lock발생했던 폴더 또는 파일만 [ Overrite and Update ]
   ㅂ. 폴더 및 파일이 생성 되었으면 -> 해당 폴더 및 파일 다시 삭제
   ㅅ. 다시 team -> synchronizing  : 이때도 lock 발생 하면 -> lock발생했던 폴더 또는 파일만 다시 [ Overrite and Update ]
   o. 해당 폴더 및 파일 다시 삭제
   ㅈ. 다시 team -> synchronizing 후 commit
   

Posted by 농부지기
,

AOP

카테고리 없음 2021. 5. 13. 10:47

[출처] Spring - AOP(관점 지향 프로그래밍)|작성자 repid2

 

AOP의 구성 요소(시점, 적용)

- AOP를 실행하려면 실행 시점을 파악하고, 해당 시점에 맞춰 적용하는 것이 있다.

구성 요소 설명
JointPoint - 횡단 관심(Advice)을 실행할 장소나 시점을 의미한다.
PointCut - JointPoint 내용을 언제 호출할지 정한다.
Aspect - 공통 기능을 모듈화한 것
Target - Aspect가 적용되는 곳으로 공통 기능을 부여할 대상
Advice - Aspect를 담은 것으로 실질적으로 공통 기능을 담은 구현체이며 공통 기능을 언제할지 정의한다.
Weaving - Advice을 핵심 기능에 적용하는 행위
Proxy : Advice가 적용되었을 때 만들어지는 객체

 

Posted by 농부지기
,

0. 한글처리
    - 참조url : https://syriusta.tistory.com/14
    - 파이썬 코드 첫문장에 아래와 같이 한다.
       #!C:\Python34\python.exe
       #-*- coding: utf-8 -*- <-- utf-8로 문자를 처리하는 부분.

 

1. app.exec_();
    - 이벤트 루프 (Event Loop)
    - QApplication클래스의 객체를 생성한 후 exec_ 메서드를 호출하는 순간 생성된다.
    - 한번 생성된 이벤트 루프는 사용자가 윈도우를 닫을 때까지 실행되면서 위젯에서 발생한 시그널을
       처리하는 슬롯을 호출하는 역할을 한다.

 

2. Widget(위젯)
    - 사용자 인터페이스(UI, 화면)을 구성하는 핵심 요소이다.
    - QT Designer 에서 사용되는 객체(label, edit, button...)들을 의미한다.

 

3. slot (슬롯)
    - PyQt에서는 특정 시그널(event)이 발생했을 때 호출되는 함수 또는 메서드를 slot이라고 한다.

 

4. dialog (다이알로그)
    text,ok = QInputDialog.getInt(self, "나이", "나이를 입력하시오."); #int형
    text,ok = QInputDialog.getDouble(self, "나이", "나이를 입력하시오."); #double 형
    text,ok = QInputDialog.getText(self, "나이", "나이를 입력하시오."); #문자형
    text,ok = QInputDialog.getItem(self, "나이", "나이를 입력하시오."); #항목 선택
 

4.1 MessageBox (메세지 box)
    QMessageBox.about(self, "제목명", "상세내용"):

5. connect
   - 예) btn.clicked.connect(clicked_slot);
   - 시그널(event)과 슬롯(function, method)을 이벤트 루프를 생성하기 전에 연결(connect)한다.
     . 버튼 클릭 시 clicked_slot function을 호출 하도록 연결(connection)을 설정한다.
     . 설정 후 사용자가 btn 을 클릭 시 clicked_slot function을 호출 및 수행 한다.


6. class
    - class name(inherit_Calssname)
    - name : class name
    - inherit_Calssname : 상속class name

 

7. __init__
    - class 생성자 method
    - 예) def __init__(self)
          super().__init__();

 

8. 외부 모듈
    1. 브라우져 실행하기
       - import webbrowser
         url = "http://naver.com";
         webbrowser.open(url);

 

8. visible 객체 생성 1
    1. button생성
       - btnSave = QPushButton("저장", self); #버튼 객체 생성
         btnSave.move(20, 50); #move() : 버튼 위치 이동
         btnSave.clicked.counect(self.btnSave_clicked); #버튼 slot 연결

    2. Label 생성
       - self.label = QLabel("Message : ", self);
         self.label.move(20, 20);
         self.label.resize(200, 20)

    3. Edit 생성
       - self.lineEdit = QLineEdit("", self);
         self.lineEdit.move(20, 20);
         self.lineEdit.textChanged.connect(self.lineEditChanged); #텍스트값이 변경될 때 발생
         self.lineEdit.returnPressed.connect(self.lineEditReturnPressed); #에터 키를 눌렀을 때 발생
    4. Radio button 생성
       - 생성
         self.radio1 = QRadiobutton("항목1", self)
         self.radio1.move(20, 20);
         self.radio1.setChecked(True);
         self.radio1.clicked.connect(self.radioButton_clicked);
         self.radio1 = QRadiobutton("항목1", self)

         self.radio2.move(20, 40);
         self.radio2.setChecked(True);
         self.radio2.clicked.connect(self.radioButton_clicked);
         self.radio2 = QRadiobutton("항목2", self)
     - 클릭된 radion 알아내기
         def radioButton_clicked(self):
             msg = "";
             if self.radio1.isChecked():
                msg = "항목1 선택";
             if self.radio2.isChecked():
                msg = "항목2 선택";
     5. checkbox 생성
        - 생성
          self.checkBox1 = QCheckBox("항목1", self);
          self.checkBox1.move(20, 20);
          self.checkBox1setChecked(True);
          self.checkBox1.clicked.connect(self.checkBoxStateChanged);

          self.checkBox2 = QCheckBox("항목2", self);
          self.checkBox2.move(20, 40);
          self.checkBox2setChecked(True);
          self.checkBox2.clicked.connect(self.checkBoxStateChanged);

      - 클릭된 radion 알아내기
         def radioButton_clicked(self):
              msg = "";
              if self.checkBox1.isChecked():
                 msg = "항목1 선택";
              if self.checkBox2.isChecked():
                 msg = "항목2 선택";

6. QGroupBox 생성
    - 생성
        groupBox = QGroupBox("항목 그룹", self);
        groupBox.move(10, 10);
        groupBox.resize(150, 80);
    - 참고
       radio을 QGroupBox위에 위치 하기 위해서는 QGroupBox를 먼저 생성 후 radio을 만들어야 한다.
      순서가 바뀐 경우 radio button이 여러게 동시 선택된다.

 

7. QSpinBox 생성
    - 생성
       self.spinBox = QSpinBox(self);
       self.spinBox.move(40, 20);
       self.spinBox.resize(60, 20);
       self.spinBox.valueChanged.connect(self.spinBoxValueChagned);
    - 값 얻기
       def self.spinBoxValueChagned(self):
            val = self.spinBox.value();

 

9. visible 객체 생성 2
    0. 참고url : https://m.blog.naver.com/sisosw/221419144691
       1. QTableWidget 생성
          - 생성
            self.tableWidget = QTableWidget(self);
            self.tableWidget.resize(400, 300);
            self.tableWidget.setRowCount(2);
            self.tableWidget.setColumnCount(2);
            self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers);

            self.tableWidget.setItem(0, 0, QTableWidgetItem("(0,0)"));
            self.tableWidget.setItem(0, 1, QTableWidgetItem("(0,1)"));
            self.tableWidget.setItem(1, 0, QTableWidgetItem("(1,0)"));
            self.tableWidget.setItem(1, 1, QTableWidgetItem("(1,1)"));
         - Head Lable 등록
            column_headers = ["학번", "이름", "학년"];
            self.tableWidget.setHorizontalHeaderLables(column_headers);
         - row별 값 set
            students = { "no" : [ "2018001", "2018002", "2018003" ],
                             "name" : [ "홍길동", "이순신", "김성철" ],
                             "group" : [ "1학년", "2학년", "3학년" ] };
            column_idx_lookup = { "no" : 0, "name" : 1, "group" : 2 };

            for k, v in students.items():
                col = column_idx_lookup[k];
                print(k, v, col);
                for row, val in enumerate(v):
                   item = QTableWidgetItem(val);
                   if col == 2:
                      item.setTextAlignment(Qt.AlignVCenter | Qt.AlignRight);
                      self.tableWidget.setIem(row, col, item);

           self.tableWidget.resizeColumnsToConTents();
           self.tableWidget.resizeRowsToContents();

Posted by 농부지기
,

[ python 용어. 정의. 관련tool. library ]

 

1. Python Windows에 설치하기
    1. 설치파일 url
        - https://www.python.org/downloads/
        - 목록중에서 최신버전 클릭 > [ Windows X8-64 executable installer ] 클릭해서
            > python-3.7.7-amd64.exe 다운로드 (64bit) (2020.04.01기준)

    2. 설치
        - 파일명 : python-3.7.7-amd64.exe (64bit) (2020.04.01기준)
        - 설치 옵션] 
            . install Now (아래 둘다 체크)
                [v] Install launcher for all users (recommended)
                [v] Add Python 3.7 to PATH
        - 사용자 계정 제어]
            . [사용자 계정 제어] alert창이 뜨면 [Yes] 선택
             (환경에 따라서 안뜰 수 있음)
        - 설치 완료

2. Python과 Apache tomcat 연동

    - python은 tomcat과 같은 웹서버 위에서 수행 된다.

    - https://blog.ayukawa.kr/archives/1342
 
3. Python소스를 다른 웹싸이트 (브라우저)에서 실행하기
    - 참고url : https://iamaman.tistory.com/1882
                 http://pythonfiddle.com/
                 https://www.tutorialspoint.com/execute_python_online.php

 

4. python으로 안드로이드 앱 만들기
    - 참고 url : https://minhwan.kim/python-android-app-dev-with-kivy-and-buildozer/

    - windows 환경에서 안드로이드 앱만들기는 아직 어렵다.

    - linux환경에서는 가능한듯

 

5. 파이썬 개발방법 url
    - https://wikidocs.net/8 (잘되어 있음) (점프 투 파이션 책을 기준으로 만들어 졌음)

 

6. 다운로드 및 설치
    - url : https://www.python.org/downloads/
    - version : python-3.8.2.exe (2020.04.28 기준)
    - 설치 - 설치시 [v] Add Python 3.7 to PATH 를 체크
    - [설치] - [end]

 

7. PyQt5
    1. 정의
        - Windows, Linux, UNIX, Android, OS X 및 IOS 플랫폼을 지원한다.
        - 파이썬에서 GUI (Graphical User Interface) 프로그램을 할 때 사용하는 대표적인 패키지.

    2. 설치 참고url
        - 참고url : https://blog.naver.com/o12486vs2/221941480623

    3. 설치 순서
        * dos command에서 실횅
        * 아래 2번만 수행하면 됨. (1번방법은 뭔지 모르겠음)
        1. 가상환경에서 실행 : conda activate venv32
        2. pyqt인스톨 : pip install PyQt5
        3. PyCharm 에서 PyQt5 설치 (win용)
           . 참고url : https://m.blog.naver.com/PostView.nhn?blogId=sisosw&logNo=221419014406&proxyReferer=http:%2F%2Fwww.google.com%2Furl%3Fsa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26source%3Dweb%26cd%3D14%26cad%3Drja%26uact%3D8%26ved%3D2ahUKEwjhxNnR25npAhW5L6YKHaD-BY4QFjANegQIARAB%26url%3Dhttp%253A%252F%252Fm.blog.naver.com%252Fsisosw%252F221419014406%26usg%3DAOvVaw10i9nXuwcjnZfDEbTh68Xv


    4. 다양한 예제
        - https://opentutorials.org/module/544
        - http://codetorial.net/pyqt5/index.html

    5. 안드로이드 매크로 예제
        - https://m.blog.naver.com/PostList.nhn?blogId=sisosw&categoryNo=36&logCode=0
          (https://m.blog.naver.com/sisosw/221419779178)
        - https://pacific-ocean.tistory.com/121

8. QT Designer
    1. 참고 url
        - https://m.blog.naver.com/sisosw/221419779178

    2. 정의
       - 위지위그(WYSIWYG : What You See Is What You Get) 방식으로 UI화면을 만들도록 도와주는 프로그램

    3. 설치 방법1(pip로 설치하기)
        - Qt Designer는 하나의 독립적인 프로그램으로 아나콘다 배포판에 포함돼 있으며, 보통 PyQt를 설치할 때 함께 설치된다.
        - 예) C:\ProgramData\Anaconda3\Libaray\bin\designer.exe
        - 설치 : pip3 install pyqt5-tools
        - 설치 위치 : * 웹상에는 여기에 설치 된다 했는데..
                               C:\Python37\Lib\site-packages\pyqt5_tools\designer.exe
                         * 아래 3곳 폴더에 설치되었음 (designer.exe 파일에 3곳 폴더에 존재)
                         - 3개 폴더중 어떤걸 실행해야 되남? 음~~~
                            C:\Users\farmerkyh\AppData\Local\Programs\Python\Python38-32\Scripts\designer.exe
                            C:\Users\farmerkyh\AppData\Local\Programs\Python\Python38-32\Lib\site-packages\QtDesigner\designer.exe
                            C:\Users\farmerkyh\AppData\Local\Programs\Python\Python38-32\Lib\site-packages\pyqt5_tools\Qt\bin\designer.exe
                            - 설치 할 때 폴더를 바꾸는 방법을 알아야 할거 같은데...
              - 환경설정 path 추가
                . PATH=C:\Python37\;
                           C:\Python37\Script;
                           C:\Python37\Lib\site-packages\PyQt5;

    4. 설치 방법2(pip로 설치하기)
        - pip install PyQt5Designer
            (난, pip3 install pyqt5-tools 를 수행후 다시 pip install PyQt5Designer 도 수행 했음. 그래도 아무 문제 없는듯.)
            (pip3 install pyqt5-tools 만 수행해도 문제 없음)

    5. 설치 방법3(다운받아 설치)
        - URL : https://pypi.org/project/PyQt5Designer/
                  https://pypi.org/project/PyQt5Designer/#files 에서 PyQt5Designer-5.10.1-cp37-none-win amd64.whl(3.8MB)를 다운받아 설치
                  pip install PyQt5Designer-5.10.1-cp37-none-win amd64.whl
                  또는, 특정 폴더에 있는 경우
                  pip install C:/폴더명/PyQt5Designer-5.10.1-cp37-none-win amd64.whl

        - 버젼 : PyQt5Designer 5.14.1 (2020.05.04 기준)

9. kivy library
    1. kivy 정의
        - kivy는 파이썬 gui programming에 쓰이는 모듈이다.
        - 안드로이드 지원. (안드로이드 app 생성 가능)
        - 이슈 : kivy로 모바일 앱을 만들려는 경우 --> kivy를 apk로 만들어줘야 하는데,
                  이 라이브러리가 윈도우 지원을 안합니다.. 리눅스로만 가능해요.
                  그래서 기껏 열심히 앱 만들었는데 휴대폰에서 사용을 못합니다.

    2. kivy 설치
         - cmd 창에서 아래 명령어 수행 (python.exe 파일이 path 에 등록 되어 있으면 아무곳에서나 실행)
         - python -m pip install --upgrade pip wheel setuptools
         - python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew
         - python -m pip install kivy.deps.gstreamer
         * 만약, 3.5를 쓴다면 python -m pip install kivy.deps.angle 이것도 해줘야 됨
         - python -m pip install kivy
         * 만약, 3.0을 쓴다면
            . https://kivy.org/doc/stable/installation/installation-windows.html 여기가서
            - [Nightly wheel installation] 쪽으로 가서 아래 목록중 하나 다운받아
               -> 설치 : cmd에서 : python -m pip install <방금다운한 whle>
                  . Python 3.5, 32bit
                  . Python 3.6, 32bit
                  . Python 3.7, 32bit
                  . Python 3.5, 64bit
                  . Python 3.6, 64bit
                  . Python 3.7, 64bit

    3. android apk 만들기
        - https://blog.naver.com/mmatelee/220720071624

    4. 문법 공부
        - https://wikidocs.net/4309

    5. kivy 시작하기
        - 정의 . Kivy는 크로스 플랫폼 사용자 인터페이스의 신속한 개발을위한 오픈 소스 Python 라이브러리다.
                 . Kivy 응용 프로그램은 동일한 코드베이스를 사용하여 Linux, Windows, OS X, Android 및 iOS 용으로 개발할 수 있다.
       - https://riptutorial.com/ko/kivy
       - 설치방법 및 예제 1개 : https://riptutorial.com/ko/kivy

     6. 안드로이드에서 python 실행하기
        - https://c10106.tistory.com/1674
        - https://www.otwojob.com/member/join/step1 :

10. pyautogui library
    1. 정의
        - 그래픽 관련 class
        - 다운로드 : 참고 : 특별하게 libary를 download할 필요가 없음.
        - 설치방법 : dos command에서 : C:\>pip install pyautogui
        - 업그레이드 : dos command에서 : C:\>python -m pip install --upgrade pip

    2. 설치방법
        - dos command에서 : C:\a\programming>pip install pyautogui
        - 참고 : 특별하게 libary를 download할 필요가 없음.
    3. 설치시 error
        1. 오류 : ImportError: No module named 'PIL'
           해결방법 : image 를 install 하고, 다시 pyautogui 를 설치하면 된다.[ref. 1]
                         pip install image

11. AREPL tool
    - visual studio 에서 소스 코딩과 동시에 오른쪽에 실행된 결과를 확인 가능

 

                 

 

Posted by 농부지기
,

 

 

1. Gifcam 

   - playnexa에서 upload가능

   - url : https://gifcam.ko.softonic.com/ 

 

Posted by 농부지기
,

[ web.html 화면을 pdf로 저장하기 ]

 

1. 정의

    - webbrowser에서 보여지고 있는 상태 그래도 pdf로 저장한다.

 

2. 방법

    a. jspdf js 기능

      - jdspdf        : html, 이미지, canvas객체를 pdf로 변환해주는 라이브러리

        html2canvas : html객체를 canvas로 변환해주는 라이브러리

      - 참고 url : https://blog.naver.com/rnjsrldnd123/221526274628

      - 아래 파일 2개를 생성 후 테스트

    b. self.print();

      - 인쇄버튼 누르면 출력 또는 pdf로 저장 가능

 

3. 이슈 및 특징

    가. jspdf를 통해서 html 객체를 바로 pdf로 변환할 수도 있지만

        , css가 깨지는 문제가 있어서 다음과 같은 순서로 작업을 진행
       1. html2canvas를 이용해 원하는 html 객체를 canvas 객체로 변환
       2. 변환된 canvas 객체를 png 이미지로 변환
       3. png 이미지를 기반으로 pdf 생성 및 로컬에 저장

    나. # html2canvas 사용 시 제가 겪은 몇 가지 문제점입니다.
       1. float:left 속성이 있는 div는 canvas에 그려지지 않음
       2. svg 이미지는 canvas에 그려지지 않음
       3. 하위 div의 display 속성이 block일 경우 그려지지 않음

 

4.1 소스 (jsPDF.html)

 

4.2 소스(jsPDF.css)

Posted by 농부지기
,

[Java.reflection-다양한 vo를 받아서 공통으로 처리]

 

* 파일처리 테이블을 저장하는 method

1. 이 파일테이블에 저장하는 method는 여러업무단에서 모두 호출 한다.

2. 각 업무단은 각각의 vo(DTO)가 다르다.

3. 이 다른 vo를 하나의 method에서 받아  파일관련 컬럼들만 추출해서 처리 하는 공통이다.

4. 반드시 파일관련 커럼들은 모든 vo에 존재 해야 만 한다.

5 아래는 method명으로 처리 한 예제이다.

 

//Class bizClass = obj.getClass();

//Object object1 = bizClass.newInstance(); 

//위 문장은 기술하면 안된다.  이것때문에 몇시간을 소비 했음

//신규객체를 새로 생성하는 script문장임.

 

Posted by 농부지기
,

[java-json] 문자형 jsonarray값을 jsonarray객체로 변환

 

1. 예제 : 화면단에서  문자형 jsonarrary값을 받아서 java단에서 jsonarray객체로 변환후에 사용한다.

 

Posted by 농부지기
,

이미지 편집 url

기타/임시 2020. 1. 29. 15:16

이미지 편집 url : https://pixlr.com/editor/

Posted by 농부지기
,