본문 바로가기

Backend/JAVA23

[Java] Comparator 로 복잡한 정렬 비즈니스 녹여내기 오랜만에 올리는 게시글은 Java 8 의 Comparator 사용하여 복잡하고 null-safe 한 정렬 비즈니스를 녹였던 방법에 대한 정리 글이다. * 여기서 복잡하다는 건, 같은 정렬조건이면 한번 더 정렬 할 우선순위가 존재함을 뜻함 전제 조건 1. 정렬할 대상은 서울에 있는 (모든)학교 리스트다. ==> schools 2. 정렬조건 [1순위] 각 학교에 있는 도서관의 사서 선생님 연세 내림차순 ==> school > library > teacher.age (학교1:도서관1:사서쌤1 관계) [2순위] (나이가 같으면) 학교 seq 오름차순 3. 이때 학교 정보가 없을 수도 있고, 사서 선생님의 연세 또한 null 일 수 있다고 가정하자. 생각나는대로 적은 정렬 코드 모든학교리스트.sort( Compa.. 2022. 11. 21.
[Java] 운영 도중에 XML Parsing Error 가 발생했다! (with. NoSuchMethodError) 제목 그대로다. 운영 도중에 XML Parsing Error 가 발생했다 🙀 로컬과 개발환경, 그리고 3개월 간 운영에서 이슈없이 잘 되던 기능이었다. 그런데 어제부터 갑자기 아래와 같은 원인으로 오류가 발생하면서 기능이 멈추는 현상이 발생했다. java.lang.NoSuchMethodError: org.json.JSONTokener.(Ljava/io/Reader;) 코딩에 `갑자기` 가 없다는 것을 안다. 결국은 내가 무지 했거나 완벽하게 분석, 설계하지 못해서 발생한거다. 그럼에도 이 포스팅을 작성함으로써 나를 포함한 다른 이들에게 도움이 되었으면 한다 😇 원인은 JSONTockener 클래스가 내 라이브러리에서 중첩되어 있는 상황에서 JSONObject resultJson = XML.toJSONOb.. 2021. 8. 6.
[Java] Root(/) path 진입 시 Swagger 로 이동시키는 방법 WebMvcConfigurer 의 구현체를 만들어서 addViewController 메소드를 재정의하면 된다. @Configuration public class ServletConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("redirect:/swagger-ui.html"); } } 2021. 7. 14.
[JAVA] SHA256 암호화 Util 서비스단에서 SHA256 암호화가 필요했는데, 뭔가 너무 수동으로 짠 느낌의 메소드들만 있어서 분명 어딘가에 Util 이 있을거라 생각하고 계속 서칭하니까 나온! import org.apache.commons.codec.digest.DigestUtils; DigestUtils.sha256Hex("암호화 할 문자열"); apache 짱짱. 2021. 1. 13.
[JAVA] CURL 로 다른 API 호출하는 방법 (with. HttpClient) Java + Spring framework 에서 CURL 처럼 리턴 받을 데이터 없이 다른 API 를 호출 할 일이 생겼다. 일반 Http 통신을 하기보다는 CURL 처럼 쓕 보내보고 싶었는데, 생각만큼 소스를 가볍게 짜기엔 어려운 것 같았고 아래가 최선이었다. public void sendOtherApi(Object sendObj) { try { // POST 메소드 URL 생성 & header setting HttpClient client = HttpClientBuilder.create().build(); HttpPost postRequest = new HttpPost("http://localhost:8080/test/curlConnect"); postRequest.setHeader("Accept",.. 2020. 12. 1.
[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.