Project

    [Gasip] queryDSL을 활용하여 교수 평균 평점 구하기

    [Gasip] queryDSL을 활용하여 교수 평균 평점 구하기

    배경저희 비즈니스 로직을 살펴보면, 교수님에 대한 평점을 CRUD 할 수 있는 요구사항이 있습니다.(Delete 기능은 없지만,,,일단.. 예...) 계정 당 최초 1회에 한해 교수님들에 대한 평점을 1점~5점 이내로 등록할 수 있는데요.쉽게 바꿔 말하자면 각 교수님들에 대한 평점 등록을 한 번 밖에 못한다는 뜻입니다. 또한 평점을 확인하러 특정 교수님의 페이지에 접속한다면, (당연히) 교수님의 평균 평점을 확인할 수 있습니다. 이런 요구사항을 종합해본다면,한 계정 당 특정 교수님의 평점은 한번만 등록할 수 있다.특정 교수 페이지에서 각 사용자들이 평가한 평균 평점을 확인할 수 있다.사용자는 기존에 등록한 평점을 수정할 수 있다.정도입니다. 사실 이런 요구사항을 선정하는데까지 여러 논의가 있었는데요. 논..

    [Gasip] Redis & Sync Schedule 을 적용해 조회수 동시성 처리

    [Gasip] Redis & Sync Schedule 을 적용해 조회수 동시성 처리

    배경 Gasip 프로젝트를 진행하던 도중 게시글 조회수를 올릴 때 동시성 문제를 해결하고자 조사하고 고민한 방법을 공유하고자 합니다. 조사하면서 정말 다양한 방법이 있었고, 저는 왜 이런 방법을 선택했는지도 함께 풀어서 설명해보겠습니다. 해결하고자 하는 문제는 당연히 조회수 동시성 문제입니다. 로컬 환경에서 JMeter를 활용하여 500개의 멀티쓰레드 환경에서 동시에 게시글을 조회한 결과,조회수가 500만큼 오르는 것이 아닌 200~250내외로 조회수가 오르는 것을 확인할 수 있었습니다. 당시 조회수를 올리는 로직은 아래와 같습니다. 서비스 레이어에서 게시글을 조회하는 메서드 내에서 위 increaseView를 호출했습니다. @Transactional public BoardReadResponse find..

    [Gasip] 게시글 조회수 중복 방지 처리 로직 구현

    [Gasip] 게시글 조회수 중복 방지 처리 로직 구현

    자세한 코드는 깃허브 주소를 참고 부탁드립니다. (BoardService.java) https://github.com/GASIP-PROJECT/gasip-service/tree/develop/src/main/java/com/example/gasip/board gasip-service/src/main/java/com/example/gasip/board at develop · GASIP-PROJECT/gasip-service 가천 수강 프로젝트 입니다. Contribute to GASIP-PROJECT/gasip-service development by creating an account on GitHub. github.com 1. 배경 조회수 기능을 개발 중입니다. 서비스를 개발하면서, 특정 사용자에 의해..

    [채팅] 채팅 메세지 전송 속도 개선

    [채팅] 채팅 메세지 전송 속도 개선

    안녕하세요! 반갑습니다! 이번 포스팅에서는 채팅 메세지 전송 속도를 어떻게 개선했는지 자세히 설명해보고자 합니다! 자세한 코드는 깃허브에서 확인하실 수 있습니다! https://github.com/HyemIin/Catchroom_Chat GitHub - HyemIin/Catchroom_Chat: 캐치룸 서비스의 채팅 서버 레포입니다. 캐치룸 서비스의 채팅 서버 레포입니다. Contribute to HyemIin/Catchroom_Chat development by creating an account on GitHub. github.com 또한 기초적인 채팅 아키텍처 설명은 아래 포스팅을 참고해주세요! https://hyem5019.tistory.com/entry/%EC%B1%84%ED%8C%85-%EC%..

    [채팅] 채팅방 리스트 최신화 속도 개선

    [채팅] 채팅방 리스트 최신화 속도 개선

    안녕하세요! 이번 채팅 시스템을 구축하면서 채팅방 리스트 최신화를 어떤 방식으로 진행시켰는지 설명해보겠습니다! 그 전에 이해를 돕고자 서비스(서비스명 : 캐치룸) 아키텍처에 대해 간략히 설명드리겠습니다. 자세한 코드는 깃허브에서 확인 가능합니다! https://github.com/HyemIin/Catchroom_Chat 0. 서비스(캐치룸) 프리뷰 1) 채팅서버와 메인서버 분리 먼저 채팅서버와 메인서버가 구분되어 있는 것을 확인하실 수 있습니다. 채팅서버는 말 그대로 채팅 관련 요청을 전담하는 서버이고, 메인 서버는 채팅 외 캐치룸에서 적용되는 모든 API를 처리하는 서버입니다. 서로 구분한 이유는 채팅 트래픽이 일반 API 호출 대비 많을 것이라 예상했고, 만약 모놀리식으로 서버를 구축한 상태에서 채팅..

    [Gasip Project] JPA / could not initialize proxy - no Session.

    [Gasip Project] JPA / could not initialize proxy - no Session.

    잘만되던 CRUD가 갑자기 안되기 시작했다. DB에 저장된 정보 불러오기(Get)을 할 때 이런 문제를 발견했다. 1. 문제 정의 아니 왜 안돼??? 젠장 또 에러메시지야.. LazyInitializationException : could not initialize proxy - no Session 즉, 프록시를 시작할 수 없다 그말씀이시네요. 프록시 문제인 것을 보니 아무래도 JPA 연관관계 매핑에서 오류가 난 듯하다. 2. 해결방안 접근 JPA 연관관계 매핑을 해 둔 엔티티로 가보자. 현재 Professor - Major 가 1:1 연관관계를 맺고 있다. (Professor가 major_ID 를 FK로 갖고 있는 구조다) 아무래도 위 사진에서 major 객체를 OneToOne으로 연관관계 매핑해줄 때..

    [Gasip Project] 왜 Column Name이 중복이라고 뜨죠? _ DuplicateMappingException

    [Gasip Project] 왜 Column Name이 중복이라고 뜨죠? _ DuplicateMappingException

    오늘도 어김없이 찾아온 Error 메시지.(그만) 자세히 읽어보니 아래 친절히 알려주는 에러 메시지님. Failed to initialize JPA EntityManagerFactory: Table [prof] contains physical column name [major_id] referred to by multiple logical column names: [major_ID], [majorId] 예? 아니 제가 뭘요...? 제가 한 설정이라곤 1. 테이블에 맞게 엔티티 클래스 생성 2. Major 테이블 : Prof(프로페서) 테이블 = 1 : 1 매핑 Prof 테이블이 major_ID를 FK로 갖고 있으므로, @OneToOne&@JoinColumn을 prof 테이블에 달아줬다. 난 잘못한게 없는..