JPA - QueryDSL
·
TIL
👻 QueryDSL이란 ?SQL, JPQL 등을 코드로  작성할 수 있도록 해주는 프레임워크이며, 쿼리를 type-safe(컴파일시 에러 체크 가능)하게 Java 코드로 작성할 수 있다. JPQL 이란?JPA에서 지원하는 다양한 쿼리 방법 중 가장 단순한 조회 방법으로, SQL의 경우에는 DB 테이블을 대상으로 쿼리를 질의하지만, JPQL은 엔티티 객체를 대상으로 쿼리를 질의JPQL의 경우 아래 코드에서 볼 수 있듯, 쿼리를 문자열로 입력하므로 오타가 발생하면 관리가 어렵고, type-safe 불가능하여 런타임에서 해당 쿼리가 실행되어야만 오류를 발견할 수 있다는 단점이있다.@Query("select t from Todo t inner JOIN fetch t.user where t.modifiedAt ..
Service와 ServiceImpl 왜 나누는거지?
·
TIL
지금까지는 Service Interface를 따로 두지 않고  Service 클래스를 단일로 사용하는 구조로 개발을 했다.그런데 다른 분들의 코드나 강의에서 나오는 코드들 중 Service - ServiceImpl 구조가 많이 보였다.많은 분들이 쓰신다면 저 구조로 설계를 하는 것이 맞는 것이겠지만 왜 저런 구조로 쓰는지 알지도 못하면서아무 생각 없이 저 구조를 사용한다면 의미가 없다는 생각이 들어 관련 블로그들을 보며 정리해보게됐다. Service interface와 ServiceImpl class 구조를 사용하는 이유인터페이스와 구현체의 분리를 통해 특정 기술이나 외부환경에 독립적으로 보다 자유로운 확장이 가능하다.구현체 클래스를 변경하거나 확장해도 이를 사용하는 클라이언트의 코드에 영향을 주지 않도..
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..
아웃소싱 프로젝트 - 회고
·
프로젝트
저번주 금요일부터 약 일주일간 팀 프로젝트를 진행하였다.이번 프로젝트는 배달 어플리케이션을 개발하는것 이였다.아웃소싱  프로젝트 깃헙 주소https://github.com/out-sorucing/out-sourcing GitHub - out-sorucing/out-sourcingContribute to out-sorucing/out-sourcing development by creating an account on GitHub.github.com이번에는 6가지의 도메인을 기준으로 기능을 구현하였다.회원회원가입로그인회원탈퇴가게가게 생성가게 수정가게 폐업가게명과 메뉴명으로 가게를 검색가게 단건, 목록 조회메뉴메뉴 생성메뉴 수정메뉴 삭제메뉴 이미지 업로드주문주문 요청주문 상태 변경주문 목록 조회재주문가게 별 ..
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 원칙을 ..