-
[Programmers] 입양 시각 구하기(1) (MySQL)
📌 문제 : 입양 시각 구하기(1) 📖 문제 설명 ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. NAME TYPE NULLABLE ANIMAL_ID VARCHAR(N) FALSE ANIMAL_TYPE VARCHAR(N) FALSE DATETIME DATETIME FALSE NAME V... Read More
-
[Spring] GraphQL 이란? 실습해보기
오늘은 REST API와 조금 다룬 GraphQL에 대해서 기본적인 개념와 실습을 위해 프로젝트를 하나파서 만들어봤다. 내가 만든 GitHub 레포지토리를 참고하면 가장 기초적인 셋팅과 사용법을 볼 수 있으니 참고바란다. GraphQL GraphQL 이란? GraphQL은 REST API의 대안으로 페이스북에서 제시한 새로운 Web API 컨셉이라고한다. REST API 는 우리가 알듯이 다양한 HTTP Method가 서버에 존재하는 리소스와 대응되어서 동작한다. 클라이언트의 요청사항과 리소스가 잘 들어맞지 않는다면 성능 문제가 발생할 수 있다. GraphQL 은 클라이언트 단일 요청에서 여... Read More
-
[Java] Object Mapper 역직렬화 문제 (final 키워드로 인한 기본생성자 사용불가)
배경 테스트 코드 작성중 String → Dto 객체로 역직렬화하는 과정에서 실패케이스 발생 public class BuddyDto { @Getter @Builder @AllArgsConstructor public static class ResponseRecruitment { private final String title; private final String content; private final String travelNationality; private final LocalDate travelStartDat... Read More
-
[Junit5] ResultActions 응답 객체 한글 깨짐 문제
배경 Intergration 테스트 코드 작성 중 Dto객체의 담긴 데이터를 검증 진행중 한글 깨짐 현상을 발견 expected: "ë°íë§ ë°°í¸ ëí 구í´ì" but was: "바하마 배편 동행 구해요" 오류 내용 테스트 코드 실행 시 response 값이 깨져서 나오는 현상 발생 mockMvc.perform(post(url)) 진행시 반환값인 ResultActions actions의 actions.andReturn().getResponse().getContentAsString(); 반환할 경우 한글이 깨져서 나오는 Content를 String으... Read More
-
[Java] Generic을 활용한 Class 타입 매개변수로 전달하기
Generic - Class 타입을 매개변수로 전달 리펙토링 배경 테스트 코드를 작성 중 Jackson 라이브러리 ObjectMapper를 사용하여 객체를 직렬화, 역직렬화를 진행하였다. 해당 부분은 자주 사용하는 부분이기 때문에 Utils라는 클래스로 만들어 관리하면 어떨까? 하는 생각에 클래스를 만들었고 public class ObjectMapperUtils { private static final ObjectMapper objectMapper = new ObjectMapper(); // 코드 생략 ... public static LoginResponse actionsSing... Read More
-
[Programmers] 가격이 제일 비싼 식품의 정보 출력하기 (MySQL)
📌 문제 : 가격이 제일 비싼 식품의 정보 출력하기 📖 문제 설명 다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블입니다. FOOD_PRODUCT 테이블은 다음과 같으며 PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE는 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 의미합니다. Column name Type Nullable PRODUCT_ID VARCHAR(10) FALSE PRODUCT_NAME VARCHAR(50) FALSE PRODUCT_CD VARCHAR(10) TRUE CATEGORY ... Read More
-
[Spring] JPA N+1 문제 분석 (+Querydsl)
소개에 앞서 Github 레포지토리에 코드가 올라가 있습니다. Querydsl 라이브러리를 사용하였고, Spring Boot 2.7.10 입니다. 오늘은 Spring Data Jpa를 다루면서 발생한 N+1 문제에 대해 적어보려한다. JPA N+1 문제란? 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(N)만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상을 얘기한다. JPA Repository로 실행하는 첫 쿼리에서 하위 엔티티까지 한번에 가져오지 않고 하위 엔티티를 사용할 때 추가로 조회하기 때문에 발생한다. Fetch Type이 EAGER(즉시로딩), LAZY... Read More
-
[Programmers] 3월에 태어난 여성 회원 목록 출력하기 (MySQL)
📌 문제 : [카테고리 별 상품 개수 구하기] 📖 문제 설명 다음은 식당 리뷰 사이트의 회원 정보를 담은 MEMBER_PROFILE 테이블입니다. MEMBER_PROFILE 테이블은 다음과 같으며 MEMBER_ID, MEMBER_NAME, TLNO, GENDER, DATE_OF_BIRTH는 회원 ID, 회원 이름, 회원 연락처, 성별, 생년월일을 의미합니다. Column name Type Nullable MEMBER_ID VARCHAR(100) FALSE MEMBER_NAME VARCHAR(50) FALSE TLNO VARCHAR(50) TRUE GENDER VA... Read More
-
[DB] Join의 종류
Join 이란? 조인(Join)이란 하나의 테이블이 아닌 두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것을 얘기한다. MySQL에서는 JOIN이라는 쿼리로, MongoDB에서는 lookup이라는 쿼리로 이를 처리한다. 참고로 RDBMS보다 DBMS가 조인연산에 대해 성능이 떨어진다고 벤치마크 테스트에서 알려져 있다. 즉, MongoDB에서는 되도록 lookup을 사용하지 말아야한다. 여러 테이블을 조인하는 작업이 많을 경우 에는 관계형 데이터베이스를 사용하는게 적합하다. Join의 종류 그림 출처 - 소찾나님 Join의 종류는 위와 같다. 가장 대표적으로 많이 사용하는 조인은 3... Read More
-
[Programmers] 카테고리 별 상품 개수 구하기 (MySQL)
📌 문제 : 카테고리 별 상품 개수 구하기 📖 문제 설명 다음은 어느 의류 쇼핑몰에서 판매중인 상품들의 정보를 담은 PRODUCT 테이블입니다. PRODUCT 테이블은 아래와 같은 구조로 되어있으며, PRODUCT_ID, PRODUCT_CODE, PRICE는 각각 상품 ID, 상품코드, 판매가를 나타냅니다. Column name Type Nullable PRODUCT_ID INTEGER FALSE PRODUCT_CODE VARCHAR(8) FALSE PRICE INTEGER FALSE 상품 별로 중복되지 않는 8자리 상품코드 값을 가지며, 앞 2자리는... Read More