File 을 읽고 쓸 때 `.tmp` 파일은 왜 필요할까
·
LINUX/Linux
요구사항애플리케이션에서 어떤 파일을 쓰고, 읽을 수 있어야한다.파일은 반드시 완결된 내용을 갖춰야한다.즉, "쓰는 중" 과 같은 상태는 허용하지 않는다.구현 방법/data/ |--- data.snapshot |--- data.snapshot.tmpdata.snapshot.tmp 파일에 데이터를 쓴다.data.snapshot.tmp 파일 쓰기를 완료한다.data.snapshot.tmp 파일을 data.snapshot 파일로 이름을 변경한다.data.snapshot 파일이 있는 경우, 덮어쓰기한다.이런 순서로 구현할 수 있다..tmp 는 왜 필요할까?.tmp 파일 이름은 temporary 임시파일로부터 왔다.그럼 '임시' 파일이란게 왜 필요한지를 생각해보자.파일의 완결성과 가시성파일에 데이터를 '쓰는 중'이..
[Docker] multiplatfom 이미지 빌드하고 푸시하기
·
기타/Docker
OSChip: Apple M4archituecture: arm64문제 상황private repository 에 architecture amd64 / arm64 모든 이미지를 넣고싶다.즉, DockerHub 에서 흔히 볼 수 있는 multiplatform image 를 빌드하고 관리하고 싶다. MultiPlatform image 란?여러 OS / architecture 를 지원하는 이미지라는 뜻이다.쉽게 생각하면, 내 운영체제가 linux / amd64 라면 linux / amd64 빌드 이미지를 사용하게 되고linux / arm64 라면 linux / arm64 이미지를 자동으로 받는다.$ podman pull adobe/s3mock:5.0# image $ podman inspcect adobe/s3mo..
Docker 대신 Podman 으로 이미지 업로드 하기
·
기타/Docker
문제 상황- OS: MacOS M4 CPU (arm64)- Docker version: v29.1.3# arm 대신 amd 아키텍처 이미지 다운로드$ docker pull --platform linux/amd64 eclipse-temurin:25-jdk# 다운로드 결과 확인시 `Architecture` 가 빈 값으로 출력됨$ docker inspect eclipse-temurin:25-jdk | grep Architecture"Architecture": "",로컬 PC 는 Mac arm 아키텍처고 서버 PC 는 amd64 아키텍처를 사용한다.따라서 사용할 이미지 아키텍처를 linux/amd64 로 지정했으나 정상적으로 pull 되지 않는 현상이 있다. Podman 설치 절차 (1) Podman Des..
2025년 개발 회고
·
기타/잡동사니
카프카 내부 소스를 뜯어보다.2025년 1월 1일 Kafka Topic Replication , Compact 원리를 파악하기 위해 소스를 뜯어봤다.머릿속에서 많이 휘발되긴 했지만이 경험이 카프카 기반 서비스를 운영하다가 발생한 이슈를 해결하는데 큰 도움이 되었다. JVM 멀티스레드 학습미뤄왔던 JVM 진영에서 비동기 프로그래밍에 사용되는 기술(Completable)Future APIJVM GC, Heap Memory LayoutMulti Thread / ThreadPool등등을 학습했다.부끄럽지만 JVM 기반지식은 텅 비어있었는데 동료들과의 간극을 조금이나마 채울 수 있었다.가장 행복할 때사람들이 나를 불러줄 때 내가 존재하고 있음을 느낀다고 했다.첫 회사를 퇴사한 이유도 내가 만든 서비스를 아무도 사..
[Java] Decorator Pattern
·
JVM/Java
요구사항FileRepository 인터페이스는 파일 스토리지로부터 파일키를 입력받아 파일 InputStream을 반환한다./** * Get the file contents from a file storage (e.g. LocalFile System, S3, GCS, Azure Blob Storage, etc.) */public interface FileRepository { InputStream getFile(FileKey fileKey) throws IOException;}LocalFile 은 LocalFileRepository,AWS S3 File 은 S3FileRepository 클래스로 파일을 가져와 InputStream 을 반환한다.기존 기능에 다음과 같은 스팩이 추가되어야 한다.".zip, ..
[Java] JUnit Inner class 를 정의하는 팁
·
JVM/Java
PurposeInner class 로 static class 로 선언하는 방식과 class 로 선언하는 방식의 차이를 안다.static inner classclass Car { public static final Duration fixDuration; private final String name; static class Painting { private final String color; public void paint(){ }; }}ProsOutter 인스턴스 생성없이 바로 인스턴스 생성이 가능하다.Painting painting = new Painting("RED");painting.paint();ConsOutter 인스턴스의 내부 변수에 접근 불가능하다.오로지 static ..