본문 바로가기

Java23

[JAVA] byte[] to File, File to MultipartFile (fin. byte[] to MultipartFile) 타 API 와 통신해서 AWS S3 에 업로드 할 일이 생겼다. MSA 에 맞춰서 다른 팀에서 S3 에 업로드하는 API 를 뚫어줬는데, 업로드 할 binary file 데이터 타입을 MultipartFile 로 만들어주셨다.. 그렇기에 내가 할 일이란 타 API 와 통신 -> byte array 겟! -> File 객체로 변환 -> MultipartFile 객체로 변환하는 것이었다. 여기서 중요했던건 ★ no disc , in memory(buff) ★ 에 초점을 맞췄다는 점이다. 왜냐면 통신해서 받은 데이터를 S3 에 업로드할건데 굳이 was 에 올릴 필요가 없었기 때문에 !! ( 사실은 일정 환경 이상에서 디렉토리 핸들링 권한이 없어서 was 에 저장 자체가 불가능했음.. ) (byte[] -> M.. 2020. 9. 9.
[JAVA] List 반복문 안에서 객체 remove (feat.ConcurrentModificationException) List 를 돌면서 조건에 부합하는 객체는 해당 List 에서 제거를 해줘야 했다. 하지만 List(Collection.....😩) 를 루프돌면서 remove 하는 것은 쉽고 간단하지 않았고 ( 테스트 도중 빈번하게 ConcurrentModificationException 요 아이와 마주했다;ㅎ) 구글링에 나오는 아래 두 가지 방법을 했지만 뭔가.. 소스 읽기도 힘들고 이중으로 돌아서 NPE 아이가 올 때도 있어서 아예 메소드를 리팩토링했다. 1. while(it.hasNext()) {} 2. for (Iterator it = List.iterator(); it.hasNext();) {} 바로 JAVA8 이상에서만 사용할 수 있는 List.removeIf() !! https://docs.oracle.co.. 2020. 8. 6.
[JAVA] 객체(Model) 를 통으로 화면에 찍기 (대체:@Data, .toString()) 이번에 신규 프로젝트를 작업하면서, 화면을 작업하다가 객체에 내가 원하는 데이터가 잘 있는지 디버깅해보고 싶어서 사용했던 방법을 공유하고자 글을 작성한다. 보통 화면에서 객체 디버깅을 한다면, 1. lombok 의 훌륭한 @Data 어노테이션을 사용하거나, 2. .toString() 메소드를 오버라이딩으로 확인하면 되겠지만, 이 글에선 두 방법 모두 사용하지 않고 Gson 으로 디버깅하였다. === TMI 개인적으로 @Data 어노테이션 남발을 금지하고, .toString() 오버라이딩은 지저분해보이고 별로 선호하지 않기 때문에.. 핵심은 GsonBuilder 의 .setPrettyPrinting() :) /** * 화면 출력용 컨트롤러 (임시) todo: 테스트 끝나면 제거 */ @PostMapping.. 2020. 5. 11.
[ERROR] org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) Mybatis 로 개발하다가 발생한 에러. 처음엔 에러만 읽고 무언가 Binding 을 못했다길래 1. 부분과 2. 쿼리에서 parameterType 부분과 3. @MapperScan('') 부분도 봤는데 잘 되어있어서 좀 헤맸다.. ㅎ 구글링하니까 Interface 경로를 못찾는 경우가 태반이라 그래서, 경로가 올바른지에만 집중했었는데 나의 에러는 경우가 조금 달랐다. 단순 오타가 아닌 경로의 문제 였으니까... 원인 : main/java/.../..Mapper.class 경로와 resources/.../..Mapper.xml 경로가 일치해야 한다. 해결 : m.. 2020. 4. 6.
[Java] 문자열이 Enum 에 포함되어 있는지 확인하는 방법 입력받은 문자열에 대한 검증이 필요했고, 그 문자열은 Enum 으로 관리하는 영역에 대한 문자열이었다. 고로.. 나는 입력받은 문자열이 Enum 의 값과 일치하는지 확인해야했다 :) #1. Stream 사용 Arrays.stream(이넘.values()).anyMatch(v -> v.name().equals(문자열)); #2. Enums 메소드 사용 Enums.getIfPresent(이넘.class, 문자열).isPresent(); #3. EnumUtils 사용 // 기본 EnumUtils.isValidEnum(이넘.class, 문자열); // 기본 + 대소문자 무시 EnumUtils.isValidEnumIgnoreCase(이넘.class, 문자열); 이 중 3번째 방법이, 대소문자 무시해주는 메소드가 .. 2020. 3. 23.
[JAVA] 사용했던 정규식 모음 DTO 에 받는 필드들의 유효성 검증을 위해 @Pattern 어노테이션을 활용하기로 했다. 그 중 사용했던 정규식을 잊지 않기 위해 정리함.. 😊 1. 우편번호 포멧 (6자리 숫자 또는 건물번호(n, nn, n-nn, nn-n, nn-nn)) [0-9]{4}[-]?[0-9]{2}[-]?[0-9]{2} "123-456" -> 성공 "12-34" -> 성공 "1234" -> 성공 "1234-" -> 실패 2. 날짜 포멧 (YYYY-MM-DD 또는 YYYYMMDD) [0-9]{4}[-]?[0-9]{2}[-]?[0-9]{2} "20200202" -> 성공 "2020-02-02" -> 성공 "2020-0202" -> 성공 "202002021" -> 실패 "2020-02--02" -> 실패 3. 비밀번호 포멧 (숫.. 2020. 3. 10.