api 속도를 측정해보기 위한 방법을 서칭하다가
코드를 사용하는 방법이 있어서
클래스를 생성해봤다
package com.project.api;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ApiResponseTimeMeasurement {
public static void main(String[] args) {
log.info("main 메서드 시작");
// 측정하려는 API
String apiUrl = "http://localhost:8080/api/mountain-info";
try {
measureApiResponseTime(apiUrl);
} catch (Exception e) {
log.error("에러 발생: " + e.getMessage());
e.printStackTrace();
}
}
private static void measureApiResponseTime(String apiUrl) throws Exception {
// API 요청 전에 현재 시간 기록
long startTime = System.currentTimeMillis();
// API에 GET 요청 보내기
URL url = new URL(apiUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
// API 응답 코드 확인
int responseCode = connection.getResponseCode();
log.info("#### HTTP 상태 코드: " + responseCode);
// API 응답 내용 읽기 (옵션)
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder responseContent = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
responseContent.append(line);
}
reader.close();
// API 응답 후에 현재 시간 기록
long endTime = System.currentTimeMillis();
// 응답 시간 계산 (밀리초 단위)
long responseTime = endTime - startTime;
log.info("#### 응답 시간: " + responseTime + " 밀리초");
// API 응답 내용 출력 (옵션)
// log.info("응답 내용: " + responseContent.toString());
// 연결 종료
connection.disconnect();
}
}
++ currentTimeMillis는 성능 측정을 위한 코드의 수행 시간을 기록하기에는 적합하지 않을 수 있다고 한다
wall-clock time이기 때문에 다른 작업의 영향을 받거나 시스템의 시간을 변경하는 경우 등 측정 결과에 영향을 줄 수 있는 요소들이 있기 때문이다
따라서 날짜와 관련한 계산을 위해 사용하는 것이 더 적합하며, 코드의 수행 시간 측정은 nanoTime를 사용하는 것이 더 정확하므로 위 코드를 수정했다!
이때 발생한 에러

/favicon.ico가 뭔지 검색해보니
favorites icon의 약자로 웹페이지나 웹사이트를 대표하는 아이콘 이라고 한다.

웹 브라우저는 페이지를 요청할 때 자동으로 favicon을 요청하는데, 이때 favicon이 존재하지 않으면 위와 같은 에러가 난다고 한다
해결 방법은?
프로젝트의 src/main/resources/static 폴더에 favicon.ico 파일을 추가하면 된다
(이 위치는 Spring이 정적 자원을 기본적으로 찾는 경로 중 하나이다)
favicon.ico 파일을 생성 해주니 에러가 해결됐다
그 다음
ApiResponseTimeMeasurement를 실행 시켰는데 로그가 console에 찍히지 않았다..
log에 대한 설정이 잘 되어있나 찾아봤다
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<!-- Appenders -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d %5p [%c] %m%n</Pattern>
</encoder>
</appender>
<!-- Logger -->
<logger name="com.project" level="DEBUG" appender-ref="console" />
<!-- Root Logger -->
<root level="info">
<appender-ref ref="console" />
</root>
</configuration>
logback의 로그 level이나 root에 대한 설정도 잘 되어있고
초기에 lombok 설정도 해놓아서 따로 gradle에 의존성 추가를 하지 않아도 되는 상태였다
package com.project.test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
private static final Logger log = LoggerFactory.getLogger(LogTest.class);
public static void main(String[] args) {
log.info("---------- Log 테스트 ---------");
}
}
로그 찍기 테스트를 만들어서 실행해봐도 로그는 찍히지 않는다