반응형

마니의 공부방/Java 10

[java] int와 Integer의 차이

내 책장에는 가장 두꺼우면서도 오랫동안 버리거나 팔거나 하지않은 책이 딱 2권 있다. java 기본 / spring 기본 !!!! 언젠가는 책상에 앉아서 기본을 다시 공부하리라 했는데.. 요즘 블로그를 다시 시작하면서 이웃분들의 글을 보고 이렇게 다시 책을 꺼내서 보고 자주 글을 올릴까 한다. 인터뷰 질문, int와 Integer의 차이에 대해 아시나요? 이전에 인터뷰 도중에 int와 Integer의 차이을 아는지에 대한 질문을 받은적이 있다. 물어보신분은 명료하게 "자료형이냐? 클래스냐?의 차이다"라고 하셨지만, 그 단순한 차이가 실제 업무에서 사용할때 고려해야하는 상황들이 참 많다. 자료형과 Wrapper 클래스 int primitive 자료형으로, 산술연산이 가능하고, null로 초기화 할수없다. ..

[java] SimpleDateFormat YYYY 사용시 버그관련

알고쓰면 약이고, 모르고 쓰면 독이라 했다. 예전 어느 프로젝트에서 2019-12-30일 날짜를 기준으로 아래코드를 실행시키면 202012 로 나오는 상황때문에 주말에 급히 원격작업을 해야했던 적이 있었다. SimpleDateFormat yyyymm = new SimpleDateFormat("YYYY-MM") Year와 WeekYear의 차이를 알자 java 1.7기준 SimpleDateFormat 'Date and Time Patterns'를 보면 yyyy와 YYYY는 큰 차이를 보인다. YYYY는 주 년 (javadoc를 참조)이며, 로케일에 따라서는 1 월 상순 날짜를 사용하는 경우는 과거 1 년 53 주를 12 월 하순 날짜를 사용하는 경우 새해 1 주 눈을 반환 할 수 있습니다. SimpleDa..

[java] Exception printStackTrace() 를 문자열로

알고써야할텐데.. Exception printStackTrace() 간혹 개발을 하다보면 Exception이 발생한 곳에서 catch(Exception e) 해서 exception 을 캐치하고 e.printStackTrace()를 통해 로그에 exception 내용을 남기는 경우가 있다. 그런데 이놈의 Exception에 printStackTrace()를 하면 여러 exception 발생 순서를 따라가다보니 에러내용이 보고싶은데로 보여지지 않는경우가 발생한다. Exception 로그를 처리할때 방법이 참 여러가지이긴한것 같다. 설계하기 나름이니까~ 1. catch 구문에서 log만 찍고 throw 할건지 2. throws 이후에 Framework에서 log를 찍을건지 그런데 후자가 더 낫고, 전자의 경우..

[java] JsonAraay null 입력

Array가 null이거나 비워보내면 되지, 뭐.... 간혹 API 문서에 {"items": [null]} 로 샘플데이터가 입력된 경우가 있다. list가 비어있는 경우에 대하여, 데이터 수신하는곳에서 어떻게 처리하느냐에 따라 그에 맞추어 개발하면 되는데 일반적으로 list가 비었으면 [] 처럼 비어있는 list를 보내거나, null Object로 대체 하는 경우가 많기는 하다. 비어있는 list data를 [null] 로 보내야 하는 경우 그런데 list안에 null을 딱하니 적어서 처리하는 경우도 있더라구요. 이외에도 여러 방법들이 있겠지만, 이전에 했던 프로젝트에서 아래와 같이 처리하는 경우가 있어 공유해봅니다. 항상 프로그램 작성에 정답은 없다는걸 기억하면서.. 도움이 되길 바랍니다. packag..

[myBatis] update 와 함께 insert 하기

update와 동시에 insert를? 사실 저는 잘 사용하지 않는 방법이긴한데.. update와 동시에 insert를 사용하시는 분들이 계실까하여 ... 사실 with ~ as 구문을 통합방법은 조합하기 나름이라 insert전에 with~as를 통해 select하는 등으로도 종종 사용하긴 하는것 같습니다. 어지간하면 나누어서 쓰는게 좋다보지만.. 저는 update와 insert는 별개로 봐서 어지간해서는 각각 update와 insert를 나누어 작업하는 쪽에 속합니다. WITH jobUpdate AS ( UPDATE CAM SET CAM_ID = #{camId} ,JOB_STATUS = #{jobStatus} ,JOB_DATETIME = NOW() WHERE CAM_ID = #{camId} RETURNI..

[spring] profiles 개발용/서버용 나누어 적용하기

개발과 운영시 설정정보들이 다른경우가 많다. 예를들어 결제요청하는 url이 개발서버용과 운영서버용이 다르듯이 말이다. 이런경우 대게 profiles 를 '개발용'과 '운영용'으로 나뉘어 설정하고, 파일자체를 아에 application-dev/application-prod 처럼 각기 다르게 두어 사용한다. 한개의 파일에 같이 사용하는 경우는 드물긴 하지만 이런경우 아래와 같이 설정한다. server: ## 상단은 기본값 port: 8080 --- spring: ## 개발용 설정 profiles : dev main: show-banner: false server: port: 8080 --- spring: ## 운영용 설정 profiles : prod main: show-banner: false server:..

[java] excel 셀안의 텍스트 색상 적용

이전 프로젝트 진행중에 poi를 이용하여 기존 개발된 내용을 수정하는 작업이 있었다. 요구사항은 셀안의 텍스트를 ON/OFF에 따라서 글자색상을 다르게 해달라는 !! 예시 > ON/OFF/ON/OFF 확인해 보니 여러방법들이 있긴하지만, 시간이 급한터라 더 맞는 방식을 고민할 여지가 없었다. HSSFFont를 시용하여 색상을 선언 HSSFRichTextString.applyFont() 를 이용하여 글자 지정 및 앞서 선언한 색상을 적용 Font 클래스에 컬러가 없는값은 IndexedColors를 사용 // 빨간색을 지정 HSSFFont fontRed = (HSSFFont) sheet.getWorkbook().createFont(); fontRed.setColor(Font.COLOR_RED); // 파란색..

[Spring] yml 암호화 - @ConfigurationPropertiesBinding 사용

properties 파일과 yml에 db password등을 평문 상태로 입력해두는 경우 보안에 문제가 될수 있습니다. 이에 중요 데이터는 properties나 yml등의 설정파일에 암호화하여 기입하고, 처음 기동시 복호화 하여 사용하는 경우가 있습니다. 물론 제가 했던 프로젝트에서도 이와 같은 경우가 있어서, 정리한 내용을 공유합니다. ■ 암호 데이터 확인 ※ 아래 방법은 AES 128을 통해 암호화하였습니다. [springboot 설정] @Component @ConfigurationPropertiesBinding public class PrePropertiesConfig implements Converter { private static String encKey = "1234567890123456";..

[maven] local repository dependency 추가

메이븐 중앙 리포지토리에서 관리되고 있지 않은 라이브러리를 maven dependency에 추가해 주고 싶을 경우가 있다. 회사에서 제공해 주는 jar 파일을 현재 개발중인 메이븐 프로젝트에 추가해 줘야 하는 상황이 발생하는 경우처럼. 사설 리포지토리를 구축하지 않아도 third party library를 dependency 해 줄 수 있는 방법이 있었다. 메이븐 프로젝트의 특정 디렉토리를 repository로 등록하는 방법이다. My-Project My-Project Custom Jars file://${project.basedir}/ext_lib ... 위에 추가된 repository중 url이 file로 시작되는 설정이 특정 디렉토리를 repository로 등록하는 부분이다. ${project.ba..

자바 환경설정 ( 윈도우 )

jdk1.6.0을 기준으로 설명함 시작 > 설정 > 제어판 > 시스템 > 고급 > 환경변수 > 시스템 변수 또는 사용자 변수 (나는 개인 PC이므로 시스템 변수 선택함) 새로만들기 클릭 > 변수 이름: JAVA_HOME, 변수 값: C:\Program Files\Java\jdk1.6.0 변수: CLASSPATH 값: .;%JAVA_HOME%\jre\lib\rt.jar;%JAVA_HOME%\lib\tools.jar; 변수: PATH (수정) 이미 입력되어 있는 값들의 제일 뒤에다가 ;%JAVA_HOME%\bin; 추가