Project
[CANCER-FINE] 팩토리 메서드 패턴을 활용해 탄탄한 Entity 구성하는 방법
1. 배경JPA를 사용하여 엔티티를 작성할 때 우리는 보통 정형화된 방식으로 작성합니다. 예를 들어 아래와 같은 형태가 일반적입니다.@Entity@Table( name = "board", indexes = [Index(name = "idx_fts", columnList = "title, content", unique = false)]) class Board( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null @Column(nullable = false) var title: String, @Column(columnDefinition = "TEXT", nullabl..
![[CANCER-FINE] 프로젝트 init](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5knhp%2FbtsNF0RjCfR%2FkKiHo4BX0UnXtkrKYrZDZ1%2Fimg.png)
[CANCER-FINE] 프로젝트 init
이번에 순전히 저를 위한 개인 사이드 프로젝트를 시작했습니다. 1. 프로젝트 개요현재 암환자에 대한 정보는 산재되어 있으며, 각 환자에게 fit한 정보를 찾는것이 너무 어려움암환자를 위한 맞춤형 정보 제공 사이트2. ERD 다이어그램ERD는 다음과 같습니다. 그렇게 복잡하진 않습니다.3. 기술 스택FrontEnd : React.js , html, css, javaScriptBackEnd : SpringBoot 3.3.4, Kotlin1.9, MySQL, Spring Data JPA, AOP, Functional Programming, JUnit54. 참여 인원작성자 혼자 진행5. 핵심 기능1) 회원회원가입로그인로그아웃회원정보수정회원 탈퇴Session 기반 로그인 유지AOP 활용한 SessionCheck..
![[Gasip] queryDSL을 활용하여 교수 평균 평점 구하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYMCfu%2FbtsHEZFrLZ0%2Fey5D95Y3rPUBucRlyxLagk%2Fimg.png)
[Gasip] queryDSL을 활용하여 교수 평균 평점 구하기
배경저희 비즈니스 로직을 살펴보면, 교수님에 대한 평점을 CRUD 할 수 있는 요구사항이 있습니다.(Delete 기능은 없지만,,,일단.. 예...) 계정 당 최초 1회에 한해 교수님들에 대한 평점을 1점~5점 이내로 등록할 수 있는데요.쉽게 바꿔 말하자면 각 교수님들에 대한 평점 등록을 한 번 밖에 못한다는 뜻입니다. 또한 평점을 확인하러 특정 교수님의 페이지에 접속한다면, (당연히) 교수님의 평균 평점을 확인할 수 있습니다. 이런 요구사항을 종합해본다면,한 계정 당 특정 교수님의 평점은 한번만 등록할 수 있다.특정 교수 페이지에서 각 사용자들이 평가한 평균 평점을 확인할 수 있다.사용자는 기존에 등록한 평점을 수정할 수 있다.정도입니다. 사실 이런 요구사항을 선정하는데까지 여러 논의가 있었는데요. 논..
![[Gasip] Redis & Sync Schedule 을 적용해 조회수 동시성 처리](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkTFp8%2FbtsGASGjPLW%2FX1p4kmn86eX8Mv0RpEaGTk%2Fimg.png)
[Gasip] Redis & Sync Schedule 을 적용해 조회수 동시성 처리
배경 Gasip 프로젝트를 진행하던 도중 게시글 조회수를 올릴 때 동시성 문제를 해결하고자 조사하고 고민한 방법을 공유하고자 합니다. 조사하면서 정말 다양한 방법이 있었고, 저는 왜 이런 방법을 선택했는지도 함께 풀어서 설명해보겠습니다. 해결하고자 하는 문제는 당연히 조회수 동시성 문제입니다. 로컬 환경에서 JMeter를 활용하여 500개의 멀티쓰레드 환경에서 동시에 게시글을 조회한 결과,조회수가 500만큼 오르는 것이 아닌 200~250내외로 조회수가 오르는 것을 확인할 수 있었습니다. 당시 조회수를 올리는 로직은 아래와 같습니다. 서비스 레이어에서 게시글을 조회하는 메서드 내에서 위 increaseView를 호출했습니다. @Transactional public BoardReadResponse find..
![[Gasip] 게시글 조회수 중복 방지 처리 로직 구현](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc92IJ7%2FbtsGfxp1jDx%2FTua3MHYuDJDkHgRuuBszBk%2Fimg.png)
[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://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqw4Sk%2FbtsELpNwX10%2FtkX9ISxKSkhzusaduuiev0%2Fimg.png)
[채팅] 채팅 메세지 전송 속도 개선
안녕하세요! 반갑습니다! 이번 포스팅에서는 채팅 메세지 전송 속도를 어떻게 개선했는지 자세히 설명해보고자 합니다! 자세한 코드는 깃허브에서 확인하실 수 있습니다! 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://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbD0UUn%2FbtsEAZOIOH5%2F9eISpOKZQF1S4l5xuDoQzk%2Fimg.png)
[채팅] 채팅방 리스트 최신화 속도 개선
안녕하세요! 이번 채팅 시스템을 구축하면서 채팅방 리스트 최신화를 어떤 방식으로 진행시켰는지 설명해보겠습니다! 그 전에 이해를 돕고자 서비스(서비스명 : 캐치룸) 아키텍처에 대해 간략히 설명드리겠습니다. 자세한 코드는 깃허브에서 확인 가능합니다! https://github.com/HyemIin/Catchroom_Chat 0. 서비스(캐치룸) 프리뷰 1) 채팅서버와 메인서버 분리 먼저 채팅서버와 메인서버가 구분되어 있는 것을 확인하실 수 있습니다. 채팅서버는 말 그대로 채팅 관련 요청을 전담하는 서버이고, 메인 서버는 채팅 외 캐치룸에서 적용되는 모든 API를 처리하는 서버입니다. 서로 구분한 이유는 채팅 트래픽이 일반 API 호출 대비 많을 것이라 예상했고, 만약 모놀리식으로 서버를 구축한 상태에서 채팅..
![[Gasip Project] JPA / could not initialize proxy - no Session.](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLsWRh%2FbtszTAmk0Ll%2F3jARexDmfw7e9xQcv4XiD0%2Fimg.png)
[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으로 연관관계 매핑해줄 때..