1.QueryDSL 이란?타입 안전한 쿼리를 자바 코드로 작성할 수 있게 해주는 프레임워크이다. 기존 JPA에서 @Query로 JPQL을 직접 이렇게 작성했다.이렇게 작성한 쿼리문은 런타임까지 문법오류를 알수없다는 단점이 있었다....@Query("SELECT m FROM Member m WHERE m.username = :username")List findByUsername(@Param("username") String username); 반면 QueryDSL은 Q클래스를 활용하여 코드기반으로 작성하기 때문에 컴파일 시점에서 오류 체크가 가능하다.QMember member = QMember.member;List result = queryFactory .selectFrom(member) ...
                    BackEnd/SpringBoot
1.204 No Content204 코드에 대한 설명을 MDN 플랫폼에서는 다음처럼 정의하고 있다.HTTP 204 No Content 성공 상태 응답 코드는 요청이 성공했으나 클라이언트가 현재 페이지에서 벗어나지 않아도 된다는 것을 나타냅니다. 2. 404 Not Found404 코드에 대한 설명을 MDN 플랫폼에서는 다음처럼 정의하고 있다.HTTP 404 Not Found 클라이언트 오류 응답 코드는 서버가 요청받은 리소스를 찾을 수 없다는 것을 의미합니다. 404 페이지를 띄우는 링크는 대체로 브로큰 링크(broken link) 또는 데드 링크(dead link)라고 부릅니다. 3. 204 와 404사용에 대한 의문현재 대학교 동아리에서 개발중인 웹사이트를 개발자도구를 키고 살펴보며 단건 조회에..
                    1.NULL 이란?NULL은 값이 없음을 나타내는 문자이다. (참조가 아무 객체도 가리키고 있지 않다.)사실 맨 처음 프로그래밍을 배울때 NULL의 개념에 대해 들으면, 이게 뭔지 햇갈릴수 있다. 여기 간단한 예시용 사람 클래스가 있다. class Person { private String name; public Person(String name) { this.name = name; } public String getName() { return name; } public void sayHello() { System.out.println("안녕하세요! 제 이름은 " + name + "입니다."); }} 그리고 이제 사람들의 리스..
                    1.Flyway란?Flyway는 데이터베이스 마이그레이션 도구다.데이터베이스 스키마 변경을 버전관리할수있게 해주는 도구라고 보면 된다. 2.Flyway쓰는 이유SpringBoot에서 jpa ddl-auto를 auto로 해두면 자동으로 db 구조를 바꿔주는데 이걸 왜써야할까? 개발자가 직접 SQL 실행하면 누가 언제 어떤 변경을 했는지 추적하기 어려워 지고, 그렇다고 auto로 해두면 production 환경에서의 실제 데이터가 사라질 위험이 있을수있다.그래서 이를 파일로 남겨서 안전하게 db에 접근하고 변경 이력을 버전으로 관리하는거다. 3.FlyWay 사용하기우선 기존 JPA 의 ddl-auto 설정을 validate로 바꿔줘서 이제 Entity를 만들었을때 자동으로 db에 반영되는것을 막는..
                    1. @Mock을 사용하는 이유 단위테스트는 테스트 대상 클래스만 검증하려는 목적이 있지만, 보통 클래스는 여러 다른 클래스에 의존되어있다.그래서 다른 클래스들은 정상적으로 작동하고 있다고 가정을 해야지 원하는 대상 클래스에 대한 테스트를 진행할수 있을것이다. 여기에 서비스에 대한 단위테스트를 작성하고 싶지만 레포지토리와 연결되어있다. 하지만 레포지토리에서 DB를 사용해서 데이터를 얻어야하고, 또한 서비스에 대한 테스트인데 DB정보가 바뀌는거에 의해 서비스의 단위테스트 결과가 바뀐다면 그건 잘못된 테스트일것이다.public class UserService { private final UserRepository userRepository; public UserService(UserRepos..
                    1. ReflectionTestUtils이란Spring Framework에서 제공하는 테스트 유틸리티 클래스이다.테스트 코드에서 Reflection을 사용해서 private 필드나 private 메서드에 접근하기 위해 사용한다. 2.사용예시다음 DiscountService는 할인률을 private 필드로 가지고있다.class DiscountService { private double discountRate = 0.1; public double applyDiscount(double price) { return price - (price * discountRate); }} 하지만 테스트에서는 다른 할인률에 대해서도 테스트하고 싶다면, ReflectionTestUt..
                    1. DTO Projection 이란?데이터베이스에서 엔티티 전체를 가져오지 않고 필요한 컬럼만 조회해서 DTO로 매핑하는 방식을 말한다. 만약 이런 테이블이 있을다고 생각해보자 근데 ResponseDto로 Quest를 반환할때 좋아요수랑 제작자의 이름까지 같이 반환하고싶다.그러면 일반적인 경우라면 Service단에서 연관된 객체들에서 어쩌구저쩌구.... 를 해서 해당 dto를반환할것이다.public record QuestWithLikeResponseDto( Long id, String title, String description, String createrName, Long createrId, Long likeCount, String createdAt) {} ..
                    0.예전에 만든 로컬 이미지 업로드https://asa9874.tistory.com/673이건 예전에 만들었던 이미지 업로드 기능인데 이번에는 이것을 AWS S3를 사용해서 마이그레이션 할것이다.public class ImageUploadService { private static final String UPLOAD_DIR = "C:/uploads/"; public String uploadImage(MultipartFile file) throws IOException { if (file == null || file.isEmpty()) { throw new IOException("Image file is empty"); } try { ..