공휴일 달력표시정보 구성이 필요해서 음력 날짜를 양력 날짜로 변환하는 작업이 필요했다. 

 

인터넷을 찾아보니 몇가지 안을 도출하게 되었다. 

1. ibm에서 제공한 중국음력 유틸리티 라이브러리 참조

 - com.ibm.icu.util.ChineseCalendar 

 > 장점 : 범용적으로 많이 사용한 듯(표준프레임워크에서도 해당라이브러리를 사용하여 기능 구현) 하여 관려 자료가 많음

 > 단점 : 중국 음력과 한국 음력의 차이로 간혹 음력일자의 오차 발생 - 치명적 결함으로 비추

2. 공공API 조회

 - 한국천문연구원에서 제공하는 양력, 음력 매핑정보 조회 API를 이용하여 날짜조회

 > 장점 : 가장 정확하고 다른 기능에 부담없이 사용 가능

 > 단점 : 외부연계 필요, API 변경사항 현행화 관리 필요

3. 변환로직 직접 구현

 - 한국천문연구원에서 제공하는 음력일자를 기준으로 메타데이터를 구성하여 매핑로직 구현

 > 장점 : 이슈에 적극적으로 대응할 수 있다. (현실적 대안 : 관련 소스를 참조하여 디버깅 후 사용)

 > 단점 : 로직구현 및 천문연구원 메타정보 변경시 현행화 필요

4. 매핑정보 수동관리

 - 천문연구원에서 제공하는 날짜 대비 매핑일자를 메타정보로 관리 (테이블, 공통코드 등)

 > 장점 : 구현 및 관리에 가장 부담이 적음

 > 단점 : 매핑정보 관리 및 범용성이 떨어짐 (등록한 날짜만 사용가능)

 

서비스에서는 4번을 적극적으로 제안했지만, 3번이 현실적인 대안으로 보인다. 

* [참고1] 3번 검토자료

https://github.com/corestone/jsphelper3/blob/master/src/chk/jsphelper/util/LunarCalendarUtil.java

 - 음력 20330815 날짜 조회시 0908일이 조회되어야 하는데, 1007 로 응답된는 버그 확인
 > 80093aa

/* 2031 ~ 2040 까지 */
{ 2, 1, 5, 2, 1, 2, 2, 1, 2, 1, 2, 1, 384 }, // 2000년
{ 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 2, 355 }, // 2000년
{ 1, 2, 1, 1, 2, 1, 5, 2, 2, 2, 1, 2, 384 }, // 2000년 <-해당 메타정보
{ 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 384 }, // 2000년 <-수정 메타정보

* [참고2] 아래 블로그의 소스도 테스트한 결과 동일한 날짜에서 동일한 버그 확인

 - 아마 천문연구원에서 제공하던 메타정보가 변경된게 아닐까?

https://billcorea.tistory.com/113

 

안드로이드 앱 만들기 : 음력을 양력으로 변환 하기

예전에 어떤 앱을 만들기 할 때 사용했던 음력 변환 하는 소스를 어딘가에서 찾았던 거 같은데... 다시 한번 기억해 보기 위해서 적어 보기로 했다. https://billcorea.tistory.com/4 구글로간 음력 설명서

billcorea.tistory.com

 

* [참고3] 한국의 양력과 중국의 양력이 다를 수 있어서 ibm 라이브러리 사용을 제외하게된 참고자료

https://blog.naver.com/birdparang/221445233118

 

[자바] 양력에서 음력 변환 - ChineseCalendar 클래스가 맞지 않는 이유, 한국과 중국의 음력 차이

((year % 4) == 0 && (year % 100) != 0) || (year % 400) == 0; 위 코드는 양력의 윤년(2월 29일...

blog.naver.com

 

결론.

[참고1] 자료의 버그를 수정하여 유틸로 사용

 - 테스트 데이터 구성 : 천문연구원의 2023~2050 음력 공휴일(설날, 부처님오신날, 추석) 매핑자료 검색

 > https://astro.kasi.re.kr/life/pageView/8

(행활천문관 > 음양력변환계산 > 특정음력일찾기 : 2023~2050 음력일자 조회 결과)

 

음양력변환계산 | 생활천문관 | 천문우주지식정보

양력 날짜를 입력하여 대응하는 음력 날짜 확인 ※ 입력범위 : -59년 02월 13일 ~ 2050년 12월 31일 --> ※ 1582년 로마 교황 그레고리우스 13세는 율리우스력을 그레고리력으로 개정함에 따라 (율리우스

astro.kasi.re.kr

 

 

test 메타정보.txt
0.01MB

기본앱 위치를 확인하여 시작프로그램에 등록

 - 기본앱 경로의 탐색기 접근시 권한이슈 대응

 > https://www.tabmode.com/goods/windows10/win10_owner_admin.html

 

현재 이 폴더에 대한 액세스 권한이 없습니다. - 폴더에 소유권과 액세스 권한을 취득하기《1/2》

파일이나 폴더를 열려고 하면 이 폴더에 액세스 할 권한이 거부되었습니다. 라는 메시지가 표시되면서 파일 또는 폴더에 액세스 할 수없는 경우가 있습니다. 이 문제는, 파일 또는 폴더에 대한

www.tabmode.com

- 프로그램 위치 확인 : 관리자권한실행시 메시지 창에 경로 표시됨

> C:\Program Files\WindowsApps\Microsoft.YourPhone_1.22022.147.0_x64__8wekyb3d8bbwe\

 - 내 경우
 > C:\Program Files\WindowsApps\Microsoft.YourPhone_1.23022.140.0_x64__8wekyb3d8bbwe\PhoneExperienceHost.exe

 

* 시작프로그램에 PhoneExperienceHost.exe 바로가기 파일을 넣어본다.

 

* 인터넷에서는 삭제하는 방법만 널려있는데, 난 사용하려고 하네.. 

https://albaeconomy.tistory.com/entry/yourphoneexe-%EC%82%AC%EC%9A%A9%EC%9E%90-%ED%9C%B4%EB%8C%80%ED%8F%B0-%EC%A0%95%EC%B2%B4-%EB%B0%8F-%EC%82%AD%EC%A0%9C

 

yourphone.exe : 사용자 휴대폰 정체 및 삭제

yourphone.exe : 사용자 휴대폰 정체 및 삭제 작업관리자에 존재하는 프로세스 중에 사용자 휴대폰 yourphone.exe 는 윈도우에서 제공하는 PC 와 스마트폰 간의 파일 동기화 프로그램이라고 합니다. 파일

albaeconomy.tistory.com

 

mobilehostapot_on.bat
0.00MB
mobilehotspot_on.ps1
0.00MB

참고

https://jjam89.tistory.com/147

 

[Windows] 노트북 모바일 핫스팟 자동 실행(호스트된 네트워크 지원이 ''아니요'' 일 시 해결방법)

Batch File 생성 전 명령어 실행 해보기 관리자 권한으로 cmd 실행 아래의 명령어를 실행시킵니다. (앞의 $는 빼고 복사해주세요.) $ netsh wlan start hostednetwork //start hotspot 이미지의 cmd창과 실제 cmd창에

jjam89.tistory.com

 

윈도우 시작프로그램 폴더에 아래 두 파일을 넣는다.

 - 경로 : C:\Users\{user}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

 - 스크립트파일 : mobilehotspot_on.ps1

$connectionProfile = [Windows.Networking.Connectivity.NetworkInformation,Windows.Networking.Connectivity,ContentType=WindowsRuntime]::GetInternetConnectionProfile()
$tetheringManager = [Windows.Networking.NetworkOperators.NetworkOperatorTetheringManager,Windows.Networking.NetworkOperators,ContentType=WindowsRuntime]::CreateFromConnectionProfile($connectionProfile)
 
# Start Mobile Hotspot
$tetheringManager.StartTetheringAsync()

 - 실행파일 : mobilehostapot_on.bat

@echo off
Powershell.exe -noprofile -executionpolicy bypass -file "C:\Users\jkoogi\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\mobilehotspot_on.ps1"

Intellij

마우스 사용 최소화를 위해 방향키를 단축키로 사용할 수 있도록 적요해본다. 

 

좌 : alt+shift+H

우 : alt+shift+K

상 : alt+shift+Y

하 : alt+shift+U

 

기존 매핑된 것들을 피해서 적용해봤다.

 

 


eclipse

도 알아봤지만, 쉽지않다.

 

상 : ctrl+alt+shift+Y

하 : ctrl+alt+shift+U

좌, 우 는 바인딩 대상을 못찾았다. 억지로 previous word(좌), next word(우) 로 매핑할 수 있지만, 단어단위로 이동할거라 마음에 들지 않는다.

(shift left, shift right 도 있지만, tab, shift+tab 의 매핑인 것 같다)

 

좌, 우 도 ctrl+alt+shift+H, ctrl+alt+shift+K 로 매핑하고 싶은데, 방법이 없을까... 

이클립스통째로 전달받아서 개발환경 설정시 

이전사용자의 git user, email 이 적용되어 수정이 필요하다.

 

인터넷에 찾아보면 perferences 설정을 통해 수정한다고 되어 있는데, 

 - perferences > team > git > configuration

적용해보니 프로젝트 하나만 적용되고 나머지 2건의 프로젝트에는 반영이 되지 않았다. 

 

찾아보니 git repositories 에 설정된 레파지토리 별 속성에도 사용자를 설정할 수 있게 되어 있어서 

남은 프로젝트에도 user, email을 적용할 수 있었다. 

* 알면 상식, 모르면 기적

제목이 부끄러울 만큼 간단한 팁.

 

윈도우 탐색기에서 메뉴로 복사 > 붙혀넣기 하면 된다.

(마우스로 드래그하여 이동하면 안되기에 맨붕이었다가 발견? 했다.)

 

아래는 일기다. 더 안읽어도 된다. 내용없다.

더보기

폰 바꾸면 앱으로 자료를 한번에 옮기지 않고, 설치부터 하나하나 한땀한땀 설정하는 타입이다. 

 

앱설치하고 로그인하고 사용환경 맞추고, 은행앱, 인증서, 삼성페이, 페이북... 많다.

 

그 지난한 작업의 끝에 화룡점정. 카카오톡이 남았다. 

 

언제부턴가 메시지는 카톡 백업으로 하고, 

미디어는 아래 경로의 카톡 메시지 컨텐츠를 폴더이동하여 유지해왔다.

내 PC\Jk S23 Ultra\내장 메모리\Android\data\com.kakao.talk\contents

 

지난번에는 8기가가 넘었던 것으로 기억을 하는데, 

이번 확인해보니 17기가.. 

앞으로 512를 해야하나.. ㅋ

 

기존 폰에서 contents 폴더를 노트북에 옮겼다.

 

마지막으로 새폰에 옮기면 되는데... 드래그가 안됐다.

 

뭐지? 보안정책으로 이제 파일이동이 안되나?

 

폰투폰으로 usb선을 연결해서 앱으로  카카오톡 앱만 이동해 봤다.

contents 폴더는 이동이 안됐다.

 

궁여지책으로 설치된 파일관리앱을 다 시도해봤지만, 

이제 \Android\data\com.kakao.talk\contents 폴더로 접근이 안되는 것 같았다.

 

 

그러다가.. 우연히 성공했다.

 

복사 > 붙혀넣기.

 

마우스 드래그 이동은 안되는데, 복사하여 붙혀넣기를 하니 된다. 복사.

3시간.. 언제끝날까..

 

 

기본브라우저 설정을 안하면 발생하는 오류인가?

dbeaver의 브라우저 설정을 크롬으로 지정해 본다.

.. 다 실패

vdi 가상OS에 보안프로그램 영향으로 뭔가 안되는건지. 해결이 안된다.


dbeaver를 사용하며 이상한 오류가 발생하기 시작했다. 

가끔 발생을 하다가 프로시저 Declaration 조회시 항상 표시되기 시작했다.

프로그램 재실행이 필요한 오류라 더이상은 못참겠다.
싶어 대응방안을 찾아봤다.

 

 

참고 : https://stackoverflow.com/questions/15594590/eclipse-bug-unhandled-event-loop-exception-no-more-handles

 

Eclipse Bug: Unhandled event loop exception No more handles

I've built a GUI using Swing and the MigLayout. I am using Eclipse 4.2.2 (64-bit) on Windows 7 Ultimate. Every time I click back into the window to edit my code, a popup comes up, then I'm prompte...

stackoverflow.com

java 파일의 연결 에디터를 WindowBuilder 로 설정하라고 했지만, 

연결이 없어서 발생하는것인가 싶어 일반 편집기로 설정해보니 효과가 있는것 같다.

 

쓰다 문제있으면 WindowBuilder 로 다시 시도해봐야겠다.

 


 

* 2차 시도 : dbeaver 브라우저 연결 설정
  - 기본 브라우저 설정

  • 플러그인 : org.jkiss.dbeaver.model
  • 심각도 : 오류
  • 메시지 : No more handles
  • 예외스텍추적
    org.eclipse.swt.SWTError: No more handles
        at org.eclipse.swt.SWT.error(SWT.java:4944)
        at org.eclipse.swt.SWT.error(SWT.java:4833)
        at org.eclipse.swt.SWT.error(SWT.java:4804)
        at org.eclipse.swt.widgets.Widget.error(Widget.java:450)
        at org.eclipse.swt.widgets.Control.createHandle(Control.java:718)
        at org.eclipse.swt.widgets.Label.createHandle(Label.java:186)
        at org.eclipse.swt.widgets.Control.createWidget(Control.java:744)
        at org.eclipse.swt.widgets.Control.<init>(Control.java:116)
        at org.eclipse.swt.widgets.Label.<init>(Label.java:106)
        at org.jkiss.dbeaver.ui.controls.StatusLineContributionItemEx.fill(StatusLineContributionItemEx.java:52)
        at org.eclipse.jface.action.StatusLineManager.update(StatusLineManager.java:290)
        at org.eclipse.ui.internal.WorkbenchPage$E4PartListener.partDeactivated(WorkbenchPage.java:240)
        at org.eclipse.e4.ui.internal.workbench.PartServiceImpl$3.run(PartServiceImpl.java:266)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
        at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.firePartDeactivated(PartServiceImpl.java:263)
        at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:750)
        at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:683)
        at org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer.activate(AbstractPartRenderer.java:97)
        at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.lambda$0(ContributedPartRenderer.java:63)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
        at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4256)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1090)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1075)
        at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:1530)
        at org.eclipse.swt.widgets.Shell.WM_MOUSEACTIVATE(Shell.java:2441)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4787)
        at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340)
        at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1478)
        at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2284)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method)
        at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4844)
        at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:5022)
        at org.eclipse.swt.internal.win32.OS.PeekMessage(Native Method)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3637)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
        at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
        at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:643)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:550)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:171)
        at org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication.start(DBeaverApplication.java:296)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
    
    
  • 세션 데이터
    eclipse.buildId=unknown
    java.version=11.0.12
    java.vendor=Eclipse Foundation
    BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=ko_KR
    Command-line arguments:  -os win32 -ws win32 -arch x86_64
    

validation 체크하는 util class를 만들어봤다. 

값을 확인하려고 로그를 표시해봤는데, soniqube 에서 System.out.pirntln()을 막아놔서 logger로 출력할 필요가 생겼다. 

막상 해보니 로그가 안찍혔다.

 

로직은 돌아가는 것 같은데, 로그만 안찍힌다니.. 

 

메소드를 static으로 선언해서 동작을 안하는 것 같았다.

 

찾아보니 main()와 같이 static 선언된 경우 사용하는 로그 어노테이션(@Slf4j)이 있다는 것을 발견했다.
thanks to https://www.devkuma.com/docs/java/lombok/

 

Java Lombok 사용법

Lombok이란? 어노테이션을 선언하면, getter, setter, toString, equals등의 “반복적으로 작성하는 코드"를 컴파일시에 자동 생성해 준다. 하지만 Getter, Setter 자동 생성은 함부로 하게 되면, 객체 지향을

www.devkuma.com

 

별 기대없이 log 어노테이션을 바꿔줬는데.. 로그가 표시된다.

고맙다 lombok.

 

PS. Util 클래스를 만들면 static 메소드 사용시 객체를 생성해서 사용하는 오용의 소지가 있어서 생성자를 막기위해 

private 생성자를 선언해준다고 한다. (소나큐브가 뭐라고 했다.)

 

그래서 private 생성자를 선언해 줬는데, lombok이 또 이녀석을 해결해주고 있었다.

생성자 생성 대신 @UtilityClass 생성해주면 자동으로 private 생성자 메소드를 대응해준다고 한다.

 

dbeaver 사용시 줄바꿈을 하면 이전 줄의 첫문자의 아래칸으로 줄바꿈이 된다. 

쿼리작성에 편한 부분이 있지만, 

단락이 끝나면 줄앞 공백을 지우고 다시 써야하는 경우가 있다. 

이런 상황을 고려하여 단축키를 하나 추가했다. 

 - alt + backapace


줄바꿈 후 단축키를 이용하여 첫칸으로 이동한다.

https://lahuman.jabsiri.co.kr/158

 

[TIP] JAVA CODE STYLE GUIDE

JAVA CODE STYLE GUIDE 코드 스타일 가이드가 있으면 결과적으로 코드의 질이 좋아진다. (당장은 아니겠지만) 기본적으로 많은 곳에서 사용되는 자바 스타일 가이드는 SUN 의 스타일 가이드이다. 스타

lahuman.jabsiri.co.kr

 

* SUN style guide

* Google style guide

 - javaguide.html

 - Google style guide for Eclipse

 - ECLIPSE를 실행하고 다음 메뉴로 이동한다.   
   > Window > Preference > java > Code Style > Formatter
 - Import를 선택하고 내려받은 XML 파일을 선택하고 Active Profile을 GoogleStyle로 설정

 

* 오류확인

 - https://github.com/google/styleguide/issues/338

javaguide.htm
0.27MB
htmlcssguide.xml
0.14MB
eclipse-java-google-style.xml
0.03MB
javascriptguide.xml
1.04MB
jsoncstyleguide.xml
0.45MB

 

* 추가 eclipse 설정

 

* 블럭 주석 내용 formating([C]+[S]+f) 대상 제외

 - Window - Preference - Java - Code Style - Formatter - New(새로운 프로필 생성) - Edit - Comments

 > Enable block comment formatting 체크 해제

+ Recent posts