JPA - 복합키와 식별 관계 매핑
·
TIL
JPA 심화 강의를 들으면서 코드를 보다가 엔티티 클래스에 처음보는 @EmbeddedId와 @MapsId 어노테이션이 있길래 뭔지 궁금해서 찾아봤는데 @EmbeddedId는 식별자 클래스를 생성할 때 사용하는 어노테이션이며, @EmbeddedId를 식별 관계로 매핑할 때 @MapsId를 사용하면 된다고한다고 하는데이렇게만 봐서는 잘 모르겠어서  복합키와 식별 관계에 대해 알아보며,  정리한 글입니다.식별, 비식별 관계DB에서는 FK가 기본 키에 포함되는지 여부에 따라 식별, 비식별 관계로 구분된다.식별 관계 : 부모 테이블의 기본 키를 받아서 자식 테이블의 기본 키 와 외래 키 로 사용하는 관계비식별 관계 : 부모 테이블의 기본키를 받아서 자식 테이블의 외래 키로만 사용하는 관계외래키의 null을 허용하..
미리 서명된 URL(Pre-signed url) 사용해보기
·
TIL
저번 포스트에서 사용한 코드에서 조금 수정하여서 사용하였으니 저번이미지 업로드 포스트를 참고해주시면 감사하겠습니다 ~2024.11.08 - [TIL] - GCS를 이용한 이미지 업로드 기능 구현Pre-signed url 이란클라우드 스토리지 서비스에서 제공하는 기능으로, 사용자가 생성한 URL을 통해 지정된 시간동안 서버의 자원에접근할 수 있게 해주는 임시 링크이다.  해당 링크를 통해 이미지를 업로드, 다운로드 할 수 있다.다만, url의 정해둔 유효 시간이 지나면 해당 url을 통해 더 이상 접근이 불가능하다. 사용방법구글에 검색을 해봐도 S3를 이용한 케이스들이 대부분이라 아래 링크를 참고해서 구현해봤다. Cloud Storage 도구를 사용한 V4 서명 프로세스  |  Google Cloud의견 ..
GCS를 이용한 이미지 업로드 기능 구현
·
TIL
😀 GCS 이용하게 된 배경이번 프로젝트에서 메뉴를 추가할 때 메뉴의 이미지 파일도 업로드 하는 기능 구현 파트를 맡았다.이미지 업로드 방식에는이미지 , 동영상 등 파일을의 미가공 데이터를 나타내며 2진비트로 저장되는 BLOB 방식WAS나  GCS와 같은 저장소에 이미지 파일을 저장하고 해당 객체의 URI를 DB에 저장하는 방식이렇게 2가지가 있다. 하지만 BLOB 방식 같은 경우에는 데이터베이스의 크기가 빠르게 증가할 우려가 있을 뿐 더러 백업 및 복구작업이 복잡해진다는 단점이있기 때문에 2번째 방법으로 정하였고, 처음에는 유명한? WAS를 이용하기로 했었다.근데 WAS 같은 경우 신규 가입 후 1년동안은 무료로 이용할 수 있지만 이미 가입되어 있던 계정이 1년이 지난 계정이라 다른것을 알아보던중 G..
AOP
·
TIL
AOP (Aspect Oriented Programming) AOP는 부가기능을 핵심 기능에서 분리해 한 곳으로 관리하도록 하고, 이 부가 기능을 어디에 적용할지 선택하는 기능을 합한 하나의 모듈입니다. AOP 용어조인 포인트어드바이스가 적용될 수 있는 위치로, AOP를 적용할 수 있는 모든 지점포인트컷조인 포인트 중에서 어드바이스를 어디에 적용할 지, 적용하지 않을 지 위치를 판단하는 필터링 기능타겟어드바이스를 받는 객체, 포인트컷으로 결정 Advice 부가 기능Aspect어드바이스  + 포인터컷을 모듈화 한 것Advisor하나의 어드바이스와 하나의 포인트 컷으로 구성AOP 적용 방식컴파일 시점클래스 로딩 시점런타임 시점컴파일 시점과 클래스 로딩 시점 적용 방식은 AspectJ 프레임 워크를 직접 사용..
기능 개선 과제
·
TIL
과제 내용이번 과제는 테스트 코드를 연습해보고 기능들을 개선시켜보는 과제입니다. 트러블 슈팅배경기능들을 개선 시키는 과제 목록중에 Service에 도메인 로직을 엔티티에 위임시키는 목록을 진행하면서 Service에 있는 Password 체크와 같은 유효성 검사들을 Entity 클래스에 위임하던 중  Entity 클래스는 이미 DB와 소통하는 클래스로서의 책임을 가지고 있는데 과연 Entity 클래스에 유효성 검사와 같은 책임을 맡게해도 될까? 라는 생각이 들었습니다. 해결구글링을 통해 Entity 클래스가 과연 유효성검사와 같은 책임들까지 맡게 해도 될지 찾아봤는데 Entity 클래스는 이미 DB와 소통하는 클래스로서의 책임을 가지고 있는데 거기에 유효성 검사와 같은 책임들 까지 넘겨주면 SRP 원칙을 ..
Todo 프로젝트 리팩토링 하기
·
TIL
1. 현재 문제점현재 Todo프로젝트에서는 토큰에 저장되어있는 유저 정보를 사용하기 위해 각 컨트롤러 마다 아래와 비슷한 코드들이 중복으로 발생하게된다. 무엇보다 각 컨트롤러마다 getUser라는 메서드를 만들기 때문에 만약 내가 request.setAttribute로"user"가 아닌 "users"로 저장하게된다면 각 컨트롤러마다 들어가서 바꿔줘야하는 불편함이 생긴다. 그래서 이 부분을 고쳐보고자 한다. @GetMapping("/myInfo") public ResponseEntity findMyInfo(HttpServletRequest request) { return ResponseEntity.ok(userService.findById(getUser(request))); } ..
뉴스피드 프로젝트 리팩토링
·
TIL
현재 게시물을 페이징 처리하는 ResponseDto를 Post만 처리하는 Dto가 아닌 제네릭 클래스로 만들어서 Post뿐만이 아니라 다른 곳에서도 쓰일 수 있게 하면 어떨까?? 라는 피드백을 받았는데 제네릭클래스를 아예 생각지도 못하고 있었던 나는 머리를 한대 맞은 기분이였다 왜 제네릭으로 만들 생각을 못했지... ?? 아무튼 그래서 한번 제네릭 클래스로 한번 만들어 봤습니다. 기존 PostPagingResponseDto기존에는 이름부터 PostPaging으로 오직 게시물만을 위한 페이징 Dto였다..@Getterpublic class PostPagingResponseDto { private final Long id; private final String content; private ..
REST, REST API, RESTful
·
TIL
RESTREST 정의Representational State Transfer의 약자이다.Rest는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나이다.자원(resource)의 표현(representation) 자원 : 해당 소프트웨어가 관리하는 모든 것-> ex) 문서, 그림, 데이터, 해당 소프트웨어 자체 등자원의 표현 : 그 자원을 표현하기 위한 이름-> ex) DB의 게시글 정보가 자원일 때,  'post'를 자원의 표현으로 정한다.상태(정보) 전달데이터가 요청되어지는 시점에서 자원의 상태(정보)를 전달한다.JSON 혹은 XML를 통해 데이터..