본문 바로가기

개발/JAVA & Spring

정규 표현식(전방탐색, with String.replaceAll) 마스킹 문제를 정규식으로 해결하려고 하다가 알게 된 표현식입니다. 다음과 같이 폰번호 뒤 4자리를 제외하고 마스킹을 하려고 합니다. 01012341234 -> *******1234 1 2 3 public String mask(String phoneNumber) { return phoneNumber.replaceAll("(?=.{5}).", "*"); } Colored by Color Scripter cs 사용한 정규표현식은 전방탐색 표현식이며 처음 사용해보는 표현식이라 관련된 표현식을 따로 정리합니다. * (?=) : 전방탐색, 찾고자 하는 표현식 뒤에 전방탐색 표현식을 넣으며 (?= 와 ) 사이에 표현식을 넣습니다. 전방탐색 표현식을 통해 문자가 존재하고, 그 앞에 찾고자 하는 문자가 존재할 때 일치합..
The server time zone value 'KST' is unrecognized or represents more than one time zone 오류 해결 DB 의존성을 추가하였는데도 'KST' 라는 서버 타임존을 알수 없다는 오류가 발생하면서 DB에 연결할수 없었습니다. 심각: StandardWrapper.Throwable org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [spring/applicationContext-database.xml]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to in..
Driver net.sf.log4jdbc.sql.jdbcapi.DriverSpy claims to not accept jdbcUrl 오류 해결하기 Spring mvc 에서 mysql DB 프로퍼티 설정하고 연결하면 아래와 같은 오류 메시지가 나오면서 DB 연결이 되지 않습니다. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [spring/applicationContext-database.xml]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer...
이미지 파일의 판단 :: checkImageType(File file) 파일이 이미지 타입인지 확인하기 위해 Files.probeContentType() 사용하여 메소드를 만들었으나 이미지 파일인데도 false 를 반환하였다. private boolean checkImageType(File file){ try{ String contentType = Files.probeContentType(file.toPath()); return contentType.startsWith("image"); } catch(IOException e){ e.printStachTrace(); } return false; } 디버그를 해보니 Files.probeContentType() 가 null 을 반환하여 false 가 리턴됨. 해결책을 찾기 위해 검색을 해봤으니 버그라고 한다. https://st..
Log4j 로그 패턴 패턴 %p : debug, info, warn, error, fatal 등의 priority 가 출력된다. %m : 로그내용이 출력됩니다. %d : 로깅 이벤트가 발생한 시간을 기록합니다. 포맷은 %d{HH:mm:ss, SSS}, %d{yyyy MMM dd HH:mm:ss,SSS} 같은 형태로 사용하며 SimpleDateForum에 따른 포맷팅을 하면 된다. %d{ABSOLUTE} %d{DATE} %d{ISO8601} %t : 로그이벤트가 발생된 쓰레드의 이름을 출력합니다. %% : % 표시를 출력하기 위해 사용한다. %n : 플랫폼 종속적인 개행문자가 출력된다. rn 또는 n (?) %c : 카테고리를 표시합니다. 예) 카테고리가 a.b.c 처럼 되어있다면 %c{2} 는 b.c 가 출력됩니다. %C :..
가장 얇은 지갑 만들기 1만원, 7만원, 11만원, 17만원권 지폐가 있다. 원하는 액수를 입력하면, 가장 얇은 지갑을 만들 수 있도록, 지폐의 갯수를 최소화 한 구성을 보여주는 프로그램을 작성하시오. 입력값 150000 인 경우 가장 좋은 구성은 7만원 2장, 1만원 1장으로 총 3장이다. 입력 : 프로그램의 첫번째 인자로 숫자를 받는다. 예) 입력값에 오류는 없다고 가정한다. 즉, 135000원 같이 구성 불가능한 입력값은 없다. 별도로 오류 처리를 할 필요 없음 출력 : 예) 1만원 x장, 7만원 x장, 11만원 x장, 17만원 x장 /** * 화폐 찾기 문제 * @author Jong-gook Bae, 까망군 */ import java.util.Scanner; public class Code { public static..
Palindrome Palindrome(이하 회문)은 앞/뒤 어느쪽으로 읽어도 같은 말이 되는 어구를 의미한다. 예) 191, 4325234, 123321, eye 어떤 수를 받아서 그 수를 뒤집은(reverse) 다음 원래의 수에 더하여 나온 값이 회문이 될 때까지, 뒤집은 수 더하기를 반복하여 회문을 찾는 프로그램을 작성하라. 입력값이 195인 경우 1) 195 + 591 = 786 2) 786 + 687 = 1473 3) 1473 + 3741 = 5214 4) 5214 + 4125 = 9339 출력 : 195 4 9339 회문을 찾을 수 없는 수도 있다. 예) 아직 증명되지는 않았지만 196은 회문을 찾을 수 없는 수 이다. 뒤집어 더하는 것을 100번 해도 회문을 찾을 수 없는 경우는 회문이 없다고 가정한다. 입력 ..
JAVA 메모리 영역 구조 JAVA 메모리 영역 구조 JVM은 힙을 다음과 같이 3개의 영역으로 나누고 있다. Permanent Space : JVM 클래스와 메소드 개체를 위해 쓰인다. Old Object Space : New 영역에서 count를 세어서 어느정도 증가된(만들어진지 좀 된) 개체를 위해 쓰인다. New(Young) Object Space : 새로 생성된 개체들을 위해 쓰인다. New Object Space는 다시 3개의 부분으로 나누어 지는데, 모든 새로 생성된 개체들이 가는 Eden(에덴동산)과 그 개체들이 Old Generation으로 가기 전 생존해 있는 Survivor Space(From, To) 1과 2가 있다. Old Generation이 어느정도 차 있거나 특정 Time이 지나면 GC가 발생한다. 이..