2020. 05. 09
Jaewoo KIM
시작하기 전에
시작하기 전에
시작하기 전에
시작하기 전에
메인페이지 로딩 속도가 느려요
메인페이지 로딩 속도가 느려요
정적 리소스가 캐싱되지 않고 매번 다운로드 하고 있다
메인페이지 로딩 속도가 느려요
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/png "access plus 1 week"
ExpiresByType image/gif "access plus 1 week"
ExpiresByType image/jpeg "access plus 1 week"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/x-javascript "access plus 1 week"
</IfModule>
mime-type 별로 캐시 기간을 설정할 수 있다
메인페이지 로딩 속도가 느려요
메인페이지 로딩 속도가 느려요
메인페이지 로딩 속도가 느려요
<link type="text/css" href="/design/css/default.css?20200507">
<link type="text/css" href="/design/css/main.css?20200505">
<link type="text/css" href="/design/css/popup.css?20200503">
메인페이지 로딩 속도가 느려요
chin:
strategy:
fixed:
enabled: true
version: 20200508-1
chin:
strategy:
content: true
application.yml 간단한 설정으로 적용이 가능하다
메인페이지 로딩 속도가 느려요
// Fixed Version Strategy
<link type="text/css" href="/20200508-1/design/css/default.css">
<link type="text/css" href="/20200508-1/design/css/main.css">
<link type="text/css" href="/20200508-1/design/css/popup.css">
// ContentVersion Strategy
<link type="text/css" href="/design/css/default-235452j3skclxl87879789b.css">
<link type="text/css" href="/design/css/main-268bj3skclxl8780b789b.css">
<link type="text/css" href="/design/css/popup-gee97j3skclxl87879789b.css">
외부 API가 간헐적으로 실패나요
외부 API가 간헐적으로 실패나요
외부 API가 간헐적으로 실패나요
외부 API가 간헐적으로 실패나요
for (int i = 1; i <= RETRY_MAX_COUNT; i++) {
try {
Response response = apiCall() // 외부 API 호출
return response.result();
} catch(RuntimeException e) {
if (i == RETRY_MAX_COUNT) {
throw e;
}
Thread.sleep(100);
}
}
외부 API가 간헐적으로 실패나요
외부 API가 간헐적으로 실패나요
// retry(수행 메서드, 재시도 횟수, 메서드 인자);
retry(AService::call, 3, aServiceRequestDto);
retry(BService::call, 4, bServiceRequestDto);
retry(CService::call, 5, CServiceRequestDto);
외부 API가 간헐적으로 실패나요
이건 언제 삭제되는 파일인가요?
....
이건 언제 삭제되는 파일인가요?
이건 언제 삭제되는 파일인가요?
이건 언제 삭제되는 파일인가요?
1. 파일 데이터를 사용하는 기능 개발
2. 일별 배치를 통해 유지기간이 지난 DB 데이터 조회
3. DB 데이터 삭제 후 연관된 파일 데이터 삭제
이건 언제 삭제되는 파일인가요?
이건 언제 삭제되는 파일인가요?
photoImage(dir)
ㄴ 1_image.jpg
ㄴ 2_image.jpg
ㄴ 3_image.jpg
ㄴ 4_image.jpg
photoImage(dir)
ㄴ 20200506(dir)
ㄴ 1_image.jpg
ㄴ 2_image.jpg
ㄴ 20200507(dir)
ㄴ 3_image.jpg
ㄴ 4_image.jpg
이건 언제 삭제되는 파일인가요?
// DB 저장된 데이터를 읽어와서 삭제
List<Path> deleteList =
findByFileType(FileType.PHOTO_IMG);
deleteList.forEach(path -> {
File.delete(path);
if (File.exists(path)) {
//error: 파일이 존재함
}
})
// FileType에 해당하는 RootPath를 찾고
// YYYYMMDD 디렉토리 기준으로 유지기간이 지났으면
// 삭제하도록 함
deleteFile(
FileType.PHOTO_IMG,
93,
(Path path) -> {
return DateUtil.of(
path.getFileName(),
DateTimeFormat.YYYYMMDD
).getLocalDateTime();
});
.class 에서 바이트코드를 읽고 메모리에 저장
로딩: 클래스를 읽어오는 과정
링크: 레퍼런스를 연결하는 과정
초기화: static 값들 초기화 및 변수에 할당
메소드: 클래스 수준의 정보 저장, 공유 자원
힙: 객체를 저장, 공유 자원
스택: 쓰레드 마다 런타임 스택을 만들고. 메소드 호출을 스택 프레임이라 부르는 블럭으로 쌓는다.
인터프리터: 바이트 코드를 한줄 씩 실행
JIT 컴파일러: 인터프리터 효울을 높이기 위해 반복되는 코드를 발견하면 네이티브 코드로 바꿔둔다.
GC: 더이상 참조되지 않는 객체를 모아서 정리
자바 애플리케이션에서 C, C++, 어셈블리로 작성된 함수를 사용할 수 있는 방법 제공
Native 키워드를 사용한 메소드 호출