분류 전체보기 130

좋아요 기능 동시성 처리

요약 : 좋아요 service에 redis 분산 락 처리를 하여 동시성 테스트 완료 1차 커밋 : feat : 좋아요 기능 추가(redis를 사용한 동시성 처리, queryDSL 사용), board test code 추가 · jeoningu/Springboot-JPA-Blog@3726ea1 (github.com) 1. 좋아요 service 멀티쓰레드 동작시 갱신손실 문제 동시성 처리를 해주지 않으면 좋아요 service를 테스트 코드에서 멀티쓰레드로 동작시켰을 때 동시성 테스트에 통과하지 못 합니다. 동시성 테스트를 해봤을 때 아래 로그에서 볼 수 있듯이 여러 쓰레드로 한 자원에 대해서 update를 하려고 할 때 이전 쓰레드에서 update를 하기 전 값을 select함으로써 이전 쓰레드에서 updat..

Project & Issu 2023.05.04

링크 모음

학습,이직,면접 리뷰https://velog.io/@prettylee620/인프런-멘토-우연님-후기이자-방향성-초보개발자의-고민들     블로그 링크 모음 @Async는 어떤식으로 실행될까? (tistory.com)https://etloveguitar.tistory.com/101https://ch4njun.tistory.com/269  it회사 기술블로그국내외 IT 기업 기술 블로그 + 큐레이션 사이트 모음.zip » 혼자 공부하는 책 (hanbit.co.kr)  테스트 코드[Java] JUnit을 활용한 Java 단위 테스트 코드 작성법 (2/3) - MangKyu's Diary (tistory.com)[TDD] 단위 테스트와 TDD(테스트 주도 개발) 프로그래밍 방법 소개 - (1/5) - MangK..

기타 2023.05.03

공유 자원에 대한 동시성 처리(ex) 좋아요 기능, 재고 시스템 상품 구매, 주식 매매)

redis 분산 락을 사용하는 이유 (1) 토스ㅣSLASH 22 - 애플 한 주가 고객에게 전달 되기까지 - YouTube 상품을 구매하거나 주식을 매매하는 시스템에서는 재고나 잔고와 같은 공유자원을 동시에 갱신하는 트랙잭션이 여러개 발생합니다. 이 때 공유 자원에 대해서 각 사용자의 수정사항이 무시되지 않고 데이터의 일관성을 유지시키고 데드락을 방지하기 위해 안전한 동시성 처리가 필요합니다. 대표적인 방법으로는 디비 락을 걸어서 처리할 수 있습니다. 하지만 성능저하와 데드락이 많이 발생할 수 있고 MSA구조인 경우 각 서비스 모듈 간의 결합도가 올라갈 수 있고 스케일 아웃한 경우에도 각 서버들이 데이터의 일관성을 유지하기 위한 별도 처리가 필요하기 때문에 다른 방법을 사용합니다. 요청이 몰리는 경우 대..

캐시

- 캐시를 사용하는 이유 - 어떤 캐시 기술을 사용하는 것이 적합한지 - EhCache의 설정 옵션들 공부 예정 : 캐시 전략, 분산 캐시 - 캐시가 뭔지, 캐시를 사용하는 이유 캐시란 자주 사용되는 데이터를 일시적으로 저장할 수 있는 임시 저장공간입니다. 디스크 즉 DB에서 데이터를 얻어오는 것보다 훨씬 빠른 I/O성능을 얻을 수 있기 때문에 사용합니다. 데이터를 빠르게 읽어옴으로써 서버 부하를 줄이고 요청 속도를 높일 수 있습니다. - 어떤 캐시 기술을 사용하는 것이 적합한지 어떤 캐시 기술을 사용할지는 어플리케이션의 요구사항과 사용 목적에 따라서 선택해야합니다. 캐시 기술을 선택할 때는 캐싱속도, 캐시를 사용하려는 서버 구조, 캐시 데이터의 크기, 데이터의 유지성, 별도 비용 등을 고려해야합니다. ..

오류 해결 - 순환참조 The dependencies of some of the beans in the application context form a cycle

순환 참조 오류 The dependencies of some of the beans in the application context form a cycle: 2023-01-11 17:23:41.435 ERROR 10128 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: The dependencies of some of the beans in the application context form a cycle: ┌─────┐ | securityConfig (field priv..

게시판 개인 프로젝트 JPA 이슈 해결 - N+1, LazyInitializationException

서론 JPA를 사용하면 연관관계를 갖는 엔티티에 의해 N+1 문제가 생긴다고 하던데, 게시판 개인 프로젝트에서도 게시물 목록을 조회 시 N+1 문제가 발생했다. 추가적으로 연관관계에서 성능을 위해 FetchType을 EAGER 보단 LAZY로 변경하는 걸 권장하길래 글 엔티티와 댓글 엔티티 연관관계에서 FetchType을 LAZY로 변경했더니 게시글 글 조회 시 LazyInitializationException 으로 인한 500Error가 발생했다. 위 2가지 문제 상황에 대해서 해결해보자. "배운점 선 요약"에서 주요 학습 내용 요약을 보고 "버그 내용", "처리 내용 및 결과"의 상단 부분을 보면 된다. 자세한 내용은 ""에 작성하였다. 게시판 개인 프로젝트에서 소스 참조 : https://githu..

Project & Issu 2023.05.02

Hash 자료구조, hashCode()와 equals() 재정의, List/Map/Set, String/StringBuilder/StringBuffer, int/Integer

Hash 자료구조는 key-value 형태로 저장되는 자료구조이고 해시 함수를 이용해서 저장, 검색하기 때문에 해시충돌이 일어나지 않는 경우에 속도가 빠르다는 장점이 있고 메모리를 미리 만들어놓고 메모리를 사용하지 않는 경우가 있기 때문에 공간 효율이 안좋고 해시 함수에 의해 해시 충돌이 많이 일어나는 경우 성능이 안좋아 질 수 있다는 단점이 있습니다. 해시 충돌이란 해시 자료구조에 저장을 할 때 키로 해시함수를 이용해 계산한 해시를 주소로 하는 위치에 값을 저장하는건데, 이 때 서로 다른 키를 해시 함수로 계산했는데 같은 값이 나오는 경우를 말합니다. 그래서 해시 충돌이 일어나느 경우 개방형주소 방벙, 채이닝 방법 같은 걸 사용해서 해결을 합니다. 개방형 주소는 해시충돌이 일어나는 경우 다른 해시값을 ..

java 버전 별 특징

참고 : https://www.youtube.com/watch?v=_6YP2FNTt80 java8부터 람다표현식, 스트림, 인터페이스의 default, optional이 추가됐다는 는 특징이 있습니다. 람다표현식은 함수형으로 프로그래밍 할 수 있게 되었고 스트림을 통해서 반복문을 병렬처리로 좀 더 빠르게 할 수 있게 되었고 인터페이스에서 default 메서드를 추가할 수 있게 돼서 공통 메서드를 인터페이스에서 구현할 수 있게 됐고 null이 될 수 객체를 감싸는 래퍼클래스 Optinal을 통해서 null 처리를 좀 더 잘 할 수 있게 되었습니다. java11에는 String 클래스에 isBlank같은 특정 메서드가 추가되었고 File클래스에 readString, writeString 같은 메서드가 추가 ..