레거시 프로젝트를 이관하며 레디스에 쌓고 있던 레거시 데이터를 새로운 키값과 자료구조를 가진 새로운 데이터 변경해야했다. 기존에 이미 적재된 레거시 데이터와 하위호환성을 유지하며 새로운 데이터를 추가해보자🫠 데이터의 흐름은 다음과 같아요 데이터 삭제 시에 아래와
레거시 프로젝트를 이관하면서, 레디스 에서 key-value 외에 다양한 자료구조가 있다는 것을 알았다. 자료구조와 메서드 그리고 어떤 상황에 해당 자료구조가 적절한지 알아보자.레디스는 싱글 스레드 기반으로 동작하기 때문에 명령어의 시간복잡도를 파악한 후 해당 명령어로
2장에서는 객체의 생성과 파괴를 다루는데, 아래 내용에 대해 생각하며 아이템 2을 읽어보자.<span style="color:- 객체를 만들어야 할 때는 언제인가객체를 만들지 말아야 할 때는 언제인가객체의 불필요한 생성을 피하는 방법은 무엇인가객체를 제 때에 파괴
2장에서는 객체의 생성과 파괴를 다루는데, 아래 3가지에 대해 고민하면서 읽어보자.객체를 만들어야 할 때는 언제인가객체를 만들지 말아야 할 때는 언제인가올바른 객체 생성 방법은 무엇인가객체의 불필요한 생성을 피하는 방법은 무엇인가객체를 제 때에 파괴시키는 방법은 무엇인
로드 밸런서는 클라이언트와 서버 중간에 위치하며 클라이언트 요청을 풀에서 처리할 수 있는 사용 가능한 서버로 라우팅한다. 한 서버가 다운되면 트래픽은 풀에 있는 다른 서버 중 하나로 자동 라우팅해주거나, 새 서버가 추가되면 트래픽을 자동으로 해당 서버로 라우팅해준다.A
서비스의 설정값을 변경해주었는데도, 반영이 안 되는 경우가 있다🫠설정값들이 위치하는 설정파일의 우선순위를 공부하고, 알맞은 파일에 설정값을 변경해주자.11번 application.properties(yml) 의 경우 파일 위치와 프로파일에 따른 우선순위가 적용된다.c
우리 서버로 오기까지의 많은 인스턴스를 거쳐오지만, 우리는 최초 IP(Client IP) 가 필요하다.스프링은 X-Forwarded-For 에서 어떻게 최초 IP 를 가져오는지 알아보자.framework 로 설정 시, 표준 헤더 외에 비표준 헤더를 가져올 수 있다.임베
사용자가 사용한 기기, IP, 프로토콜 등등 사용자를 식별하는데 필요한 값들이 있다.위 값들은 헤더값을 통해 얻을 수 있다.웹 브라우저나 다른 HTTP 클라이언트가 웹 서버에게 자신의 식별 정보를 전달하는 HTTP 요청 헤더 중 하나이다. 이 헤더는 클라이언트가 어떤
@DataJpaTest 로 OneToOne 연관관계가 있는 객체를 조회하는데, Owner 에는 null 이 들어와서 테스트 코드는 실패한다.위의 테스트는 setUp(), getOwnerTest() 로 나누어져 있지만, 사실은 위와 같이 하나의 트랜잭션에서 수행되는 것과
Person (사람)과 Animal(동물)이라는 객체가 있다.사람은 동물을 가지고 있을 수도 있고, 가지고 있다면 1마리만 가지고 있을 수 있다.Animal(동물)의 ownerId(주인 아이디) 필드에는 personId(사람 아이디)가 들어간다.사람에게 hasAnima
번거로운 회원가입 절차없이 버튼 클릭 하나만으로 서비스를 이용할 수 있는 소셜 로그인은 사용자 유입에 도움이 된다.하지만 iOS 앱은 카카오, 구글 로그인과 같은 소셜 로그인을 추가하려면 애플 로그인이 구현되어있어야 앱스토어 심사에서 리젝을 면할 수 있다.카카오나 구글
A 서버에서 Insert / Update 로직(Writer DB) 로직 수행 후에 B 서버에서 Select(Read DB) 로직이 수행되는 경우, Replica Lag 현상이 발생할 수 있다.Replica Lag복제 지연은 슬레이브(또는 보조)가 마스터(또는 기본)에서
"Aurora DB 사용하면 Transaction readOnly 인 경우에 Reader(Slave) Connection 타지 않아요?"어플리케이션에 있는 설정 정보라고는 Writer(Master) Cluster 설정뿐인데, 어떻게 Reader DNS를 찾아서 커넥션을
10000개의 데이터를 처리하는데 1시간 20분 정도가 걸리고 있다. 클라이언트와 read timeout 설정이 5분이라서 해당 메서드는 @Async 처리를 하였지만, 여전히 백그라운드에서 로직처리에 1시간 20분이 소요되고 있고, 이 시간동안 요청자는 기다려야 한다.
엄청 유명한 배민의 블로그 글(응? 이게 왜 롤백되는거지?)에서 봤던 에러가 발생했다. 이 참에 공부해보자.참여 중인 트랜잭션이 실패하면 기본정책이 전역롤백인데, 이 에러는AbstractPlatformTransactionManager(https://github
findByXXX 로 영속성 컨텍스트에 저장 후에 더티체킹을 통해서 update 를 할 수 있다.findByXXX 에서 XXX 가 Pk(@Id) 인지 아닌지에 따라 더티체킹 순서에 차이가 있는 것을 발견했다.편의상 PK 로 조회하는 경우를 findByPk, PK 외에
소셜 로그인 토큰 검증을 위해서 프록시 서버 -> 인증 서버로 호출을 하고 있다.개발 후에 클라분들께 전달 드렸는데, 프록시 서버에서 해당 API 를 호출하자 인증서버에서 프록시 서버로 응답하는 시간이 5초를 초과하여 타임아웃 에러가 발생했다.기존에 카카오 간편가입 밖
IDE 에서 잘 읽히던 파일이 배포하면 아래와 같은 에러가 났다.에러가 발생하는 곳은 이곳이다.IDE 실행 경로(URL)JAR 실행 경로(URL)jar 파일 내부로 들어갈 때 파일 경로에 !가 포함되게 된다.업로드중..file 로 시작하지 않으면, FileNotFoun
다른 서버와의 통신을 위해 Spring Cloud Feign 을 사용하고 있다. 요청 필드 중에 디폴트값으로만 보내야하는 요구사항이 있어 해당 필드는 final 필드로 선언을 해놓았다.다른 서버에서 해당 필드(job) 에 유효성 검증(@NotNull)을 추가하면서, 슬
역시 해치웠나를 외치면 안 되는 것인가... 또 울기 시작한 페페... (그만 울어잇!)의미있는 경험으로 남기기위해 기록해보자.parent 테이블의 id를 index로 가지고 있는 child_index 테이블 생성(외래키는 운영에서 삭제되어서 테스트시 고려하지 않습니다