메모하는 습관/백엔드 스프링 7

실시간 통신 기술

Polling다른 프로그램의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때, 데이터 처리 하는 방식을 말한다.당연히 주기가 짧을수록 요청은 많아지기 때문에 답해줄 메시지가 없는 경우에도 서버 자원이 불필요하게 낭비되는 문제가 있다.다음은 클라이언트에서 서버에 새 메시지가 있는지 5초 주기로 요청하는 client polling 예시이다.// 5초마다 서버에 요청setInterval(async () => { const response = await fetch('/api/new-messages'); const messages = await response.json();}, 5000); 클라이언트가 계속 요청을 하기 때문에 클라이언트가 많아지면 그만큼 서버의 자원도 더 필요해진다.새로운 메시지가 없더라..

캐싱 전략

캐싱은 성능 향상, DB 트래픽 부하 감소 이로인한 비용 절감등의 이유로 많은 시스템에서 사용된다.어떠한 전략을 선택하느냐에 따라 데이터 정합성 문제, 조회 성능이 달라질 수 있기 때문에 전략을 고려해야한다.캐시 읽기 전략Cache-Aside캐시를 옆에 두고 필요할 때만 데이터를 캐시에 로드하는 전략이다.초기 조회 시 DB에서 데이터를 호출 해야 하므로 단건 호출 빈도가 높은 서비스보다는 반복적으로 데이터를 조회하는 서비스에 적합하다.Look Aside, Lazy Loading 전략이라고도 불린다.가장 일반적으로 사용되는 캐싱 접근 방식이다.Memcached 와 Redis가 널리 사용된다.캐시에 붙어있던 connection이 많다면, 캐시가 다운된 순간 많은 요청이 DB로 몰려서 부하가 발생한다.웹 서버..

Redis 캐시 적용 해보기

조회 API Redis 캐싱빈번하게 요청되는 조회 API에 Redis를 활용하여 캐싱을 적용해보자. 캐싱 구조 흐름Spring 애플리케이션:클라이언트 요청이 들어오면 먼저 캐시에서 데이터를 확인하기 위해 Redis로 요청을 보낸다.Redis:Redis는 메모리 기반으로 작동하며, 자주 사용되는 데이터를 캐시로 저장한다.만약 Redis에 요청된 데이터가 있다면, Spring 애플리케이션은 MySQL에 접근하지 않고 Redis에서 데이터를 바로 가져온다.Redis에 해당 데이터가 없으면, MySQL로 요청이 전달된다.MySQL:MySQL은 디스크 기반 데이터베이스로, Spring 애플리케이션이 필요로 하는 데이터를 제공한다.이 데이터는 Redis에 저장되어, 이후 동일한 요청이 들어왔을 때는 MySQL을 거..

낙관적락이 롤백되는 이유

체크 예외와 언체크 예외의 Rollback 여부체크 예외와 언체크 예외의 차이점 중에 같이 보아야 할 점은 Rollback의 여부이다.https://docs.spring.io/spring-framework/reference/data-access/transaction/declarative/rolling-back.html Rolling Back a Declarative Transaction :: Spring FrameworkYou must carefully consider how specific a pattern is and whether to include package information (which isn’t mandatory). For example, "Exception" will match nea..

Mybatis 동작 원리

추후 레거시 시스템 개선, 마이그레이션을 위해 Mybatis Legacy 프로젝트를 경험해보자.세팅, 동작 원리가 더 중요하다 생각되어 사용 방법은 생략한다. Mybatis 세팅 주의할점plugins { id 'java' id 'org.springframework.boot' version '3.3.2' id 'io.spring.dependency-management' version '1.1.6'}스프링 부트 3.3.2 버전에서 오류가 발생했다.Invalid bean definition with name 'userProfileMapper' defined in file 생략 'factoryBeanObjectType': java.lang.String상위 버전에서는 스프링 컨테이너에 빈 주입이 실패한다.plug..

SHA-256 핵심, 요약, java 구현, 결론

SHA256은 미국 국가안보국(NSA)에서 설계한 해시 함수이다.NIST(National Institute of Standards and Technology)에서 관리하는 FIPS (Federal Information Processing Standards) 180-4 문서에 정의되어 있다.https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf굳이 해당 내용을 다 알고있을 필요는 없다.복잡한 해시 알고리즘을 통해 해싱 한다는것만 가져가면 된다.SHA-256은 SHA-2 계열에 속한다.SHA-3 계열은 SHA-2에 비해 더 강력한 보안을 제공하기 위해 개발되었지만, 오랜 기간 동안 널리 사용되면서 안정성과 보안이 검증되었기 때문에 대부분의 시스템에서 SHA..

Patch 메서드가 멱등이 아닌 이유

HTTP 메서드 스펙을 보면 PATCH는 멱등성을 보장하지않다고 나와있다.보통 데이터 수정에 PUT, PATCH가 많이 사용된다.여기서 PUT은 데이터 로우를 완전히 교체하기때문에 멱등성이 보장된다.하지만 PATCH는 멱등성이 보장이 되는 설계도, 안되는 설계도 가능하다.먼저, 멱등성이 보장된 설계이다.PATCH - api.ex.com/users/1{ "name" : "홍길동"}이번에는 멱등성이 보장되지 않는 설계이다.PATCH - api.ex.com/users/1/add/point{ "addPoint" : 10}수정 메서드는 보통 엔티티 필드를 더티체킹으로 변경하는 방식으로 많이 사용된다.실제 코드는 이러할것이다.public void addPoint(int Point) { this.point += po..