분류 전체보기
OneToOne 관계에서 FetchType.LAZY는 만능이 아니다 ?! 여태까지 ToOne 관계에서 무분별한 조회를 막기 위해 default인 EAGER가 아닌 LAZY로 설정하면 프록시로 호출되기 때문에, 실제 조회 쿼리가 실행되지 않는다고 알고 있었다. 하지만, @OneToOne 양방향 관계에서, 연관관계의 주인이 아닌 테이블 조회 시, LAZY는 동작하지 않는다.그 이유는 생각해보면 단순하다. JPA에서 양방향 연관관계 설정 시에 FK는 연관관계의 주인인 테이블이 보유한다. 즉, Member와 Patient가 있고 Patient가 연관관계의 주인이라면 Patient 테이블에는 member_id가 존재하지만 Member 테이블에는 patient_id가 존재하지 않는다. 그러면 여기서 LAZY 전략..
7/1리스트 불러올 때, 원본 그대로 불러오면 당연히 용량을 너무 많이 불러옴. 이미지 리사이징을 해야하는데,나는 multipart를 사용 안하고, presigned url을 사용해서, 자바 코드로 서버에서 리사이징이 불가능함. (애초에 서버리스로 설계해서 서버를 통해 리사이징 한다는게 말이 안됨.) 그래서 aws lambda@edge를 사용해 원본 origin s3버킷에 접근해서 이미지를 받아올 때, cloud front에 캐싱이 되는데, 이 받아올 때 리사이징을 해서, cloud front에는 캐싱된 이미지를 저장하면 처음 요청시에만 좀 걸리고, 이후 요청부터는 캐싱 + 리사이징으로 인한 용량 저하로 매우 대단한 효과 나타남. !그런데 계속 안되다가,온갖 재시도 끝에 aws lambda@edge와 a..
저는 환자와 간병인이 서로를 지역, 조건에 따라 검색하고, 리스트를 찾아서 매칭 신청을 보내고 응답하는 팀프로젝트를 진행중입니다.이 과정에서 매칭 신청을 보내려면 본인의 세부 프로필이 등록이 되어있어야 한다는 조건이 있습니다.그래서 세부 프로필 등록 시, 본인의 이미지를 선택사항으로 프로필에 등록할 수 있어야 한다는 기획이 있어서이미지 등록 기능을 진행하였습니다. 고려한 이미지 등록 방법은 크게 두 가지 였습니다.1. Multipart Upload를 이용한 서버에 저장 or 외부 저장소에 저장2. Presigned URL를 이용한 외부 저장소에 클라이언트에서 직접 저장 Multipart 를 이용한 이미지 처리의 경우는 DB에 저장을 하든 외부 저장소에 저장을 하든, 결국 server에서 이미지를 받아서 ..
6/241. jmeter로 속도 측정 하려다가, 프로필 컨트롤러 수정, 삭제, 조회 메서드에서 @Pathvariable을 안쓰고 있었다는 사실을 발견..!안쓰고도 할 수 있지만 rest api 형식은 넣어줘야 한다. 왜? => 더 자세히 찾아보기그래서 @Pathvariable 를 넣고 서비스에서 getMember, getPatient로 두 번 리포지토리에서 데이터를 가져오던걸 findByIdAndMemberUsername을 통해 한번에 환자 프로필을 가져오게 됨. 멤버와 환자가 동일한지도 자동 검사 가능. 이렇게 리팩토링을 하고 테스트를 수정하려는데, 바뀐 메서드들 매개변수에 기존 매개변수에 Long id가 추가됨.(Pathvariable Long id의 id) 그런데 단위 테스트는 @Autowired가..
6/161. 매칭 신청을 위한 검색 기능 시작하려한다. Elastic Search를 쓰면 고속 검색 가능하고, 복잡한 쿼리도 가능하다.2. 사실 데이터가 적을 때는 문제가 없지만 많을 경우 고속 검색이 필요하다. 이를 예상하고 진행하는 것이므로구현 후에 100,000개의 데이터를 넣고 성능을 꼭 비교하고 kibana를 통해 데이터를 시각화까지 하자.- 먼저 FULL TEXT INDEX로 시작을 하고, 이후 성능 테스트 진행해보고 개선사항이나 성능 문제 찾아서 해결하면서 도입 고려해보자. 현재 자신의 동네 위치 정보를 받고,그 동네 지도가 자동으로 나오며,동네 지도에 환자 or 간병인들이 존재하는 모든 곳들에 marker가 표시 되고,오른쪽에는 리스트가 나와서 상세보기를 누를 수 있어야 한다. 현재 프로필..
6/11리팩토링, todo 기능 추가프로필 이미지 등록할 필요, 이후 채팅에서도 사진 저장 필요, 이후 계약에서도 계약서 저장 필요aws s3 도입, 왜?확장성(Scalability)파일 서버는 트래픽이 증가함에 따라 서버 인프라 및 용량 계획을 변경해야 되는데, S3가 확장 및 성능 부분을 대신 처리해준다.내구성(Durability)여러 영역에 여러 데이터 복사본을 저장하므로 한 영역이 다운되더라도 데이터를 사용할 수 있고, 복구가 가능하다. MultipartFile 방식은 다수의 사용자로부터 동시에 요청이 들어올 경우, 서버의 스레드가 빠르게 소진될 수 있다는 문제가 있다. 안전하면서 대용량 트래픽을 어떻게 받을 수 있나? 방법 1? s3 presigned url1.1. Multipart Upload..
6/5기존에는 가입 시에, role 정한 대로 바로 환자 OR 간병인도 엔티티를 같이 생성했었는데, 그러면 환자 프로필 등록 후에 다른 환자로 변경해서 등록하고 싶을 때, 불가능해진다. (환자가 매치 리스트를 가지고 있음) 환자 엔티티 삭제 시 매치도 다 날라감.새로 회원가입 해서 다른 환자 등록 하는 방법. -> 즉, 환자 프로필 전체 삭제가 안되고, 처음 등록한 환자로 쭉 간다. 세부정보 수정만 가능. ->? 새로운 환자 등록 버튼. -> 등록 되면 기존 환자 엔티티 삭제후 멤버와 연결. 이러면 환자 엔티티가 새로 만들어지고 기존 환자 정보, 매치리스트 사라짐.Member가 매치리스트를 가지고 있고, 환자 등록, 변경, 삭제가 자유로움.세부 작성아님 (아예 새로운 환자로 바꾸고 싶을 때) 새로운 환..
5/27OSIV를 꺼야하나, 켜야하나?테스트코드 커버리지 강제성? jacoco를 사용해?커버리지 통과를 위해 무의미한 테스트코드 삽입하는 경우 발생우선 강제하지 않고 자율적으로 테스트 작성 후추후 정밀한 테스트코드의 커버리지 측정 필요성 느껴지면 도입해도 괜찮겠다. 5/28requestDTO에 기본생성자(protected)를 왜 넣어야하지? 왜 JPA entity에 기본생성자(protected)가 있어야하지?공지사항 테이블만 만들어서 진행할건지? 아니면 추후 확장을 고려해 커뮤니티로 깊게 들어갈지?회원가입, 로그인 후 access_token 받아와서 matchList를 조회하는 api 테스트를 했는데 2024-05-28T18:28:34.624+09:00 ERROR 26736 --- [backend] [n..
POJO : 평범한 오래된 자바 객체자바 언어 스펙을 제외한, 특정 기술(프레임워크)에 대한 종속성이 없는 객체.즉, 어떤 자바 프로젝트에서도 사용 가능한 객체.Java 언어 자체 규약에 의한 제한 외의 규약에 구속받지 않는 Java 객체.제약사항미리 지정된 클래스를 extend 해서는 안된다. 즉, 어떤 클래스의 자식클래스가 될 수 없다.미리 지정된 인터페이스를 implement 해서는 안된다.미리 정의된 어노테이션을 포함해서는 안된다.장점비즈니스 로직과 특정 환경 종속적인 코드를 분리하기 때문에 코드가 단순해진다.특정 환경에 종속적인 로직이 포함된 객체는 테스트가 어렵지만, POJO는 그렇지 않다. 즉, 테스트 자동화에 유리하다.객체지향적인 설계를 자유롭게 적용할 수 있다. POJO vs Java B..