코딩테스트(36)
-
99클럽 6일차 TIL: Unix Time (nanoseconds)
#1. 오늘의 학습 키워드 자바스프링에서의 unix 시간을 나노초 단위로 구하고 싶을 때: 이전글인 Loki 에 로깅 정보를 API POST request 로 보낼 때 로그 라인에 앞 부분은 nanoseconds( 나노초 ) 단위로 찍힌 timestamp이다. 이 timestamp 를 보낼 때 자바 스프링에서 제공하는 나노초 단위의 현재 시각을 반환하는 메서드가 있다. System.nanoTime() 그런데 이로는 loki 에서 400 에러를 리턴하였다. 그래서 밀리초 단위의 현재 시각을 반환하는 메서드를 통해 나노초로 변환하여 log를 보냈더니, 오류가 나질 않았다. System.currentTimeMillis() 이 두 메서드를 통한 값을 디버깅 툴을 사용해 비교해보니 숫자의 자리수가 큰 차이가 없었..
2024.04.09 -
99클럽 5일차 TIL: Loki
#1. 오늘의 학습 키워드 자바스프링에서 로깅을 데이터를 저장하고 조회하는 방법 - Loki 개발하면서 모니터링은 필요하게 된다. 모니터링 툴 없이 로그를 조회하는 방법은 코드 자체에 log 명령어를 작성해, 실행되는 서버의 터미널에서 이를 조회하는 것인데, 이는 서버 자체에 부하를 줄 뿐 더러, 휘발성이 강하고, 가독성이 부족하기 때문에 모니터링 툴의 도움을 받아 로깅을 관리할 수 있으면 좋다. 그라파나 같은 툴로 데이터를 시각화, 분석을 할 수 있다. 그리고 오늘 소개할 로키와 같은 툴로 로그 데이터를 수집하고 저장할 수 있다. #2. 공부한 내용 Loki 그라파나 상 로그 출력 및 가시화를 할 수 있게 하는 로그 데이터 수집 툴. 수집 된 데이터는 저장이 되어 휘발되지 않는다. 프로메테우스, 쿠버네..
2024.04.08 -
99클럽 4일차 TIL: Collectors.toMap()
#1. 오늘의 학습 키워드 자바스프링에서 특정 리스트에서 구조를 분해하여 Map 구조로 만들고 싶을 때 편하게할 수 있는 방법 기존에는 리스트에서 특정 요소를 뽑아서 Map 구조로 만들고 싶으면, Map 객체를 선언하여 초기화해준다음, .put() 메서드로 for 문으로 리스트의 요소를 일일이 순회하여 Map 객체안에 집어넣어줬다. 이때 toMap() 메서드를 사용하면 더욱 간편히 Map 객체를 생성할 수 있다는 피드백을 받았다. //기존 방식 Map map = new HashMap(); for (PersonDto dto : dtoList){ map.put(dto.getId(), dto); } //새로운 방식 Map map2 = dtoList.stream() .collect(Collectors.toMap..
2024.04.07 -
99클럽 3일차 TIL: JPA vs. MyBatis
#1. 오늘의 학습 키워드 자바스프링부트로 백엔드에서 데이터를 저장, 조회 시 사용할 프레임워크 Mybatis 와 JPA 중에 선택 현재 회사에서 웹 백엔드 개발 시 MyBatis 를 사용해 PostgreSQL 디비에 있는 데이터를 조회, 저장 등을 하고 있다. 직접 쿼리를 작성하여, 자유도가 높게 데이터에 접근을 하고 있다. 이제 회사에 JPA를 도입하려 한다. 이미 구현된 모든 MyBatis 프레임워크를 통한 데이터 접근 코드를 JPA를 바꾸는 것이 아닌, JPA 프레임워크를 통해 접근하는 것이 더 적합한 데이터들에 대해서만 리팩토링을 하려 한다. 그럼 어떤 것이 더 적합한 지 확인해보자 #2. 공부한 내용 MyBatis SQL Mapper 기술을 제공한다. 개발자가 작성한 SQL 실행 결과를 객체에..
2024.04.06 -
99클럽 2일차 TIL: Spring Boot 에러 핸들링
#1. 오늘의 학습 키워드자바스프링부트에서 커스텀 된 에러 메시지를 controller 로 보내고 싶을 때 방법api 호출 → controller → service로 이어질 때, 일반적인 exception 이 아닌, 사용자 request 의 논리적 오류를 핸들하고 싶을 때:이런 상황에서의 Exception은 RuntimeException 을 상속한 커스텀 Exception 클래스인 ApiException으로 던져진다.실질적인 오류가 아닌 논리 오류로 validation fail에 해당하기 때문에 이렇게 처리를 하였다.프론트엔드 단과 합의된 반환 코드(사용자의 입력값 오류 (클라이언트 error 4xx))와, 커스텀된 메시지로 오류를 throw 한다.public int method(Boolean isErr..
2024.04.05 -
99클럽 1일차 TIL: 쿼리 성능
#1. 오늘의 학습 키워드 SQL 쿼리에서 between 과 부등호의 성능 차이 myBatis 에서 쿼리로 어떤 날짜를 뜻하는 컬럼값을 가지는 테이블에서 날짜 범주 ( start_date 와 end_date ) 사이 조건에 부합하는 행들만 뽑아오고 싶을 떄: 아래와 같은 두 가지 방식이 있다. 이때 좋은 가독성을 가지는 코드는 between 을 사용한 조건문이지만, pr Review 로 부등호가 더 낫다는 피드백을 받았다. SELECT * FROM table_ WHERE date BETWEEN '20240101' AND '20241231' SELECT * FROM table_ WHERE date >= '20240101' AND date
2024.04.04