본문 바로가기

개발/JAVA, Spring24

[Java] "20231222" 문자열을 받아 날짜 계산 하기(with. LocalDate, DateTimeFormatter) 상황. 화면 또는 다른 프로세스에서 "20231222" 형식으로 문자열을 받았다. 하루를 더하고 빼고 비교하는 등의 연산을 해야 한다. 예전(JDK7 이하 버전) 에서는 Calander이나 Date 객체를 사용했었다. 이 객체들에는 소소한 문제들이 있었는데, JDK8 버전부터 LocalDate, LocalTime, LocalDateTime 를 지원하기 시작하면서 그런 문제들이 사라졌다. 따라서 JDK8 이상의 버전을 사용하고 있다면 앞으로 이 객체들을 사용하자 날짜형 전환 우선 "20231222" 라는 문자열로 받은 데이터를 날짜 형식의 객체로 전환해야 한다. LocalDate 에는 LocalDate.of(년, 월, 일) 이라는 훌륭한 메서드를 제공한다. 따라서 "20231222" 를 substring .. 2023. 12. 22.
[JAVA] enum 사용 상수를 사용하는 이유 개발을 하다 보면 여러가지 설정 값들이 특유의 코드로 설정되는 경우가 많다. 가령 월요일은 '1', 화요일은 '2'...... 일요일은 '0' 하는 식이다. 코드에서는 '1', '2' 같은 코드만 바라본다. 아래와 같이 해당 코드를 처음 보는 사람은 그 의미를 쉽게 알 수 없다. if( "1".equals(days)){ //todo } 하지만 이것의 코드에 의미를 부여 하면 처음 코드를 보는 사람들도 그 의미 쉽게 파악 할 수 있다. public static final int MON = "1"; ... //나머지 요일 생략 if(MON.equals(days)){ //todo } 한줄이 더 추가되긴 했지만 코드는 더 가독성이 높아져 쉽게 의미를 파악 할 수 있게 되었다. 코드는 무조건.. 2023. 11. 10.
[JAVA] Util 클래스에서 세션 사용하기 직무에 따른 권한을 설정하기 위해 새로운 권한 설정 룰을 만들어야 할 상황이 발생했다. 일단 방향은 세션을 이용하되 직무에 따른 권한을 체크하기 위한 Util 클래스를 하나 신규를 생성하기로 했다. 문제는 util 클래스와 같은 contoller 이외의 클래스에서 세션값에 접근 할 수 있어야 한다는 것이다. 권한 체크 함수에 세션값을 넘기면 좋기는 하겠지만 controller 이외의 클래스에스 세션값을 확인 하기도 어렵기도 하지만 일일이 세션값을 확인해서 넘기는 작업은 번거롭고, 간편하지도 않으며, 그다지 좋아 보이지 않는다. (값을 확인 할 수 있으면 그 자리에서 처리하는게 낫지 않을까?) 이때 사용할 수 있는 방법이 RequestContextHolder와 ServletRequestAttributes를.. 2021. 8. 2.
[JAVA] 문자열에서 숫자만 남기고 제거하기 (replaceAll) 지난번과 비슷한 일이 벌어졌다. 이번에는 날짜형식으로 된 8자리 데이터를 보내와야 하는데 싹다 무시하고 '0000-00-00' 형식으로 데이터가 날아왔다. 지난번에 작성한 특정 문자열을 제거하는 것으로는 해결이 되지 않는 문제다. 사실 지난번 문제보다 더 간단하다. 숫자만 빼고 모든 문자를 없애버리면 되기 때문이다. 따라서 문자열 메서드 중 replaceAll 을 사용하면 된다. 데이터가 '0000-00-00' 식으로 날아 왔기 때문에 단순히 str.replaceAll("-",""); str.replaceAll("-",""); 식으로 처리해 줘도 되겠지만 또 어떤 형식으로 날아 올지 알 수 없기 때문에 숫자 이외의 문자는 모두 제거 하기로 한다. 따라서 이번에도 정규식을 사용하기로 한다. str.repl.. 2021. 6. 16.
[JAVA] 문자열에 특정 문자가 있는지 확인(matches 이용하기) 다른 기관과 연계 업무를 하던 중 타 기관에서 보내온 파일에 문제가 있어 잘 동작하던 배치에 문제가 생겼다. 정확히 배치 자체의 문제라기 보다는 애초에 서로 약속된 레이아웃으로 데이터를 보내주지 않은 타기관의 문제이었지만 그 레이아웃 정의서만 믿고 예외 상황을 처리하지 않은 배치도 문제라면 문제다. 문제는 간단했다. 원래 '횟수' 로 넘어와야 할 데이터에 숫자 이외의 문자가 끼어 들었다는 것이다. '횟수'라는 이름에서 알 수 있듯이 해당 데이터는 숫자로만 구성된 문자열이다. 따라서 숫자 이외에 문자가 들어 있다면 예외를 발생시키거나 다른 동작을 시켜 주면 된다. 타기관에서 넘어오는 데이터는 텍스트 파일로 되어 있어 읽어 들이는 모든 데이터는 String 타입이다. String 에서 써먹을 수 있는 방법은.. 2021. 6. 9.
[JAVA] 한글이 포함된 문자열 자르기 java 에서 문자열을 자를때 일반적으로 subString 을 사용하는데 알아 두워야 할 점은 subString로는 한글 문자열을 자를 수 없다는 것이다. 정확히는 1바이트만 구성된 문자들(숫자, 영문자 등)의 문자열만 자를 수 있다고 보는게 맞다. 그럼 한글은 어떻게 자르나? 원리는 간단하다. 문자열을 바이트형으로 변환한 뒤 각 글자의 길이를 계산하여 처리하면 되는 것이다. 한글은 2바이트 문자이므로 문자열을 하나하나 반복하다가 해당 문자열이 1바이트 문자인지 2바이트 문자인지 확인 후 잘라 주는 것이다. 이때 주의할 점이라면 자르고자 하는 위치가 2바이트 문자열에 위치해 있다면 1바이트 앞으로 끊어서 읽어주면 된다. 간단한 내용이니 코드를 바로 보자. private String subStrBytes(.. 2021. 5. 13.
Spring Security 적용 후 이유없이 Access Denied 될때 Spring Security 를 적용하고나서 이전에 잘 되던 페이지들이 이유없이 Access Denied 되는 경우가 있다. 특히 무엇인가를 입력하는 화면에서 이런 현상이 발생 했다면 아래의 코드를 입력해 보자 이 코드로 문제가 해결 되었다면 원인은 Spring Security 의 CSRF 설정 때문이다. Spring Security 4.0에서 CSRF 설정이 기본적으로 true로 설정되기 때문이다. 2021. 1. 30.
No qualifying bean of type '...' available 스프링 시큐리티를 적용하던 중 아래와 같은 에러를 만났다. No qualifying bean of type '...' available 문제해결 dataSourceContext.xml 에 mybatis-spring 관련 네임스페이스를 추가해 준다. xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring" http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd 그리고 하단에 mapper 스캔을 위해 아래의 문구를 추가해 준다. 2020. 12. 8.
[java/spring] Spring profile 사용하기 이 포스팅은 java/spring 스터디에서 IntelliJ로 개발하면서 진행했던 내용을 정리한 것입니다. 스프링 프로파일은 중요한 속성 정보를 별도의 파일로 한 곳에 관리 할 수 있는 방법입니다. 보통 DB와 같은 정보는 중요하므로 별도의 속성 파일을 만들어 관리하는 것이 일반적 입니다. 이번 포스팅에서는 DB의 속성 정보를 분리해 보도록 하겠습니다. 1. 데이터 베이스 속성 설정 파일 생성하기 데이터베이스의 속성을 설정할 설정파일(xml)파일을 생성합니다. 위의 화면과 같이 src\main\resources 아래에 properties 라는 디렉토리를 만듭니다. 그리고 그 안에 datasource_properties.xml 이라는 파일을 생성합니다. datasource_properties.xml 파일의.. 2019. 11. 27.
[java/spring] intellij 에서 'Try-with-Resources are not supported at language level 5' 처리 방법 인텔리제이로 자바 프로그래밍을 하다보면 'Try-with-resources are not supported at language level 5' 라는 에러를 만나는 경우가 있습니다. 이것은 인텔리제이 내부에서 컴파일 할때 사용하는 JDK의 버전이 낮아서 발생하는 문제입니다. 보통 intellij 의 language level 을 설정하지 않았다면 jdk 버전은 1.5일 것입니다. 하지만 사용하려 했던 try-with-resources 는 jdk 1.7 버전에 등장한 것으로 1.5 에서는 사용이 불가능 합니다. intellij의 Language level은 'File -> Project Structure...' 의 Modules 에서 확인이 가능합니다. 프로젝트 명을 클릭하면 우측에 위와 같은 화면이 나타.. 2019. 11. 24.
[java/spring] IntelliJ 에서 스프링 개발하기2. DB 설정(MariaDB) 이 포스팅은 java/spring 스터디에서 IntelliJ로 개발하면서 진행했던 내용을 정리한 것입니다. 게시판 만들기를 해볼 것인데 게시글을 저장하기 위한 DB로 MariaDB를 사용할 계획 입니다. MariaDB 설치는 생략합니다. 1. 의존성 추가 우선은 spring 에서 DB를 사용 할 수 있도록 jdbc 드라이버와 MariaDB에 대한 라이브러리를 추가 해야 합니다. 아래의 코드를 pom.xml에 추가해 주어야 합니다. mysql mysql-connector-java 8.0.17 org.mybatis mybatis 3.5.2 org.mybatis mybatis-spring 2.0.2 org.springframework spring-jdbc ${org.springframework-version}.. 2019. 11. 24.
[java/spring] IntelliJ 에서 스프링 개발하기 1. 개발환경 설정 이 포스팅은 java/spring 스터디에서 IntelliJ로 개발하면서 진행했던 내용을 정리한 것입니다. 1. 프로젝트 생성하기 인텔리제이를 실행하면 가장 먼저 아래의 화면과 마주하게 됩니다. 'Create New Project' 를 클릭합니다. 2. 'Maven' 프로젝트 선택하기 좌측에서 'maven' 프로젝트를 선택하고, 우측에서는 어떤 것도 선택하지 않습니다. 그냥 바로 [Next] 버튼을 클릭하여 넘어 갑니다. 3 'GroupId' 와 'ArtifactId' 설정 GroupId는 'com.freehoon.web' 과 같이 이터넷 주소를 뒤집어 써놓은것과 같은 형태 입니다. 가장 마지막에는 보통 프로젝트 ID와 동일하게 설정을 합니다. ArtifactId는 보통 프로젝트 ID와 동일하게 작성합니.. 2019. 11. 24.