본문 바로가기
반응형

java17

Java List 사용자 정의 정렬 예제 @Override public int compareTo(ShowMainResBody o) { if (o.seq seq) { return -1; } return 0; } 몇 몇의 개발자가 스쳐 지나가면서 소스는많이 닳고 변해 버렸다. 따라가면서 읽기도 힘들고, 뭐가 뭔지도 모르겠고... 이걸 한땀 한땀 리팩토링을 하면서 작성자의 의도를 읽어, 정정해야하는가? 나둬야 하는가를 가지고 동료한 이야기 한 후, 그냥 두기로 했다. 리스트 형태로 결과를 내려줘야 하는 API에, 초기 설계 당시 없던 order by에 대한 다양한 요건이 들어왔고 가장 빠르게 해결할 수 있는 방법은, 그간에 어떤 일들이 있던 없던 제일 마지막에 만들어진 List형태에.. 2023. 6. 29.
@Transient 사용 예, - Entity클래스에 임시 프로퍼티 정의할 때 지난번 MSA관련 책을 읽을 때 JPA파트에서 얼핏 읽었던 것 같아 기억을 더듬어 검색을 해보니 기억이 맞았다. 이번에 1.0서비스의 데이터베이스 중 일부 테이블의 데이터를 2.0으로 마이그레이션을 해야하는 일이 있는데, SQL에서 하는 것이 아니라 사용자별 마이그레이션이고 어플리케이션 단에서 처리를 해서 마이그레이션을 해야 하는 상황이다. Legacy 테이블의 Entity에서 2.0 테이블로 마이그레이션을 위해 로직을 구현하다 보니, 건당 repository조회를 해야할 상황이 너무 많아, 최초로 조회해 리스트를 순환하면서 해당 Entity클래스에 필요하는 관계를 맺은 객체(Entity)를 담아, 최종적으로 save()를 하면 좋겠다는 생각이 들었다. Legacy 테이블의 Entity에 정형화 되지 않.. 2023. 4. 12.
Java/Spring 클라이언트 IP 구하는 함수 아련하지만, 몇 년 전 스프링부트 프로젝트를 할 때 신입사원이 아이피를 구해 테이블에 저장한 것을 보고 이상하다며 이의를 제기했던 일이 생각났다. 오늘 프로젝트 검색 API를 외부에 열어주어야 하는데, 원격 호출하는 IP에 대해서 예외처리를 하고자 클라이언트 IP를 구하는 함수를 보면서 정리해두면 좋겠다는 생각이 들어 간단하게 요약, 정리를 한다. public static String getClientIP(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); if (ip == null) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null) { ip = req.. 2023. 2. 9.
Java Long 타입의 비교 에피소드? Long타입의 변수가 2개 있다. 두 값을 비교해서 같을 때 데이터베이스의 특정 컬럼의 값을 업데이트 하는 로직이다. 아주 간단한 작업이다. 로컬에서 테스트할 때 로컬 데이터베이스에 있는 Row를 가지고 테스트했을 때는 잘 되었다. 분명 값이 변경되는걸 확인했고 스웨그로 몇 번을 테스트했다. 그리고 개발 서버에 배포를 하고 프론트 개발자분들에게 API가 개발되었다고 이야기했다. 퇴근길에 안된다는 메일을 받았고 온통 왜지? 라는 물음을 가지고 있었다. 출근을 해서 소스를 열어보고 테스트를 진행했다. 클라이언트에서 테스트한 Long형 값을 가지고 개발 데이터베이스와 연결했는데, 정말 변경이 일어나지 않는다. 뭔 일이지? 하는 마음에 혹시 비교가 잘못되나 싶어 if문에 log를 남겨보았다. 역시나 서로 다르다.. 2023. 2. 2.
IntelliJ 사용하지 않는 import문 제거 방법 2가지. 1. C.E버전에서는 IntelliJ IDEA메뉴 > Settings > Edit > General > Auto Import 항목에서 Java의 Optimize imports on the fly항목에 체크 하면 된다. 그런데 이미 만들어진 java파일에 대해서는 일괄 적용은 안되나? 2. Code > Optimize imports 실행 (단축키 : control + option + o) 지저분?한 것을 별로 좋아하지 않는다. 대신 손발이 고생이다. edit툴속에 있는 코드들을 정갈하게 유지하고 싶을 뿐. 2023. 1. 6.
Java 매달, 첫번째 월요일 확인 예제 매주 월요일, 특정 정보를 수집하도록 만들어진 크롤러가 있다. 이 크롤러는 특정 사이트의 링크정보를 조합, 동적 URL을 생성하고 해당 URL로 접속했을 때 나오는 데이터를 수집하는 기능이 있다. URL을 만드는데 소요되는 시간이 약 20분정도, 이 시간을 아껴보고자 CSV파일을 이용, 동적 URL에 들어가는 파라미터 정보를 사전에 수집, 파일로 생성한 다음 실제 크롤링을 할 때 생성되어 있는 파라미터정보(CSV파일)를 읽어서 사용하도록 했다. 처음에는 상당한 시간을 단축할 수 있었다. 그런데 시간이 지나면서 조금씩 문제가 나타나기 시작했다 동적으로 생성한 URL의 파라미터 값들이 변경되는 즉, 메인 페이지의 링크정보가 변질 또는 없어지는 경우가 발생하면서 순차적인 리스팅 크롤링이 되지 않는 현상이 나타.. 2020. 6. 29.
반응형