Skip to content

2024년 7월 22일 TIL

TL;DR

  • 과제 진행

한줄평

오전에는 과제 진행하는데 시간을 썻고 밥 먹고 난 뒤에는 카카오에서 AI 세이프티 담당자분 강연이 학교에서 이루어져서 들었다. 개발이 좀 더 시급했는데 퀴즈 맞춰서 텀블러랑 인형 받아서 럭키비키!

과제 진행

하이버네이트 console sql문이 한줄로 출력되는 것 해결함.

한줄로 출력되서 가독성에 문제가 있다고 판단 구글링해서 해결함

스프링 프로퍼티 파일에서 spring.jpa.properties.hibernate.format_sql= true 켜주면 이쁘게 포멧해줘서 출력해줌.

아주 간단한 DB 설계 및 엔티티 생성함.

UUID와 자동증감

Supabase 사용할 땐 UUID를 남발했던 적이 있었는데 찾아보니 UUID는 추후 DB 데이터가 많아지면 성능이슈가 생긴다는 걸 알아내서 UUID가 아닌 자동 증감 정수를 사용하기로 하였음.

UUID도 뭐 여러개 버전이 있고 ULID? 이라는 날짜까지 포함되는 종류도 있다는 걸 파악함. 일단 사용할 건 아니니 이 정도만 알기로함.

엔티티

DB와 매핑되는 엔티티를 생성해봄.

데이터에 딱 정해진 값들 (EX. 음식타입: 한식 양식 중식)이 있어서 이걸 어떻게 인풋 바운더리를 제한해볼까하다가 ENUM 클래스를 생성해서 제한해보기로 했었음. 근데 ENUM에 있는 이름은 안들어가고 INDEX 숫자가 들어가서 뭐가 문제인가 했는데 엔티티 어노테이션 중에

java
@Enumerated(EnumType.STRING)

라는 어노테이션이 있다는 걸 확인함 엔티티 매핑에서 이넘 타입을 사용할 때 쓰는 어노테이션인데 디폴트는 인덱스 넘버를 넣어버리기 때문에 EnumType.STRING로 인자를 넣어줘야 ENUM에 있는 이름을 넣는다는 걸 알게됨. 이후 엔티티에 반영 후 해보니 기존에 매핑 된 엔티티 이넘의 타입 값(INT) 때문에 에러가 나자 spring.jpa.hibernate.ddl-autocreate로 바꿔서 재반영 후 다시 update로 변경하여 해결함

레포지토리 생성함.

레포지토리가 약간 매핑 된 엔티티를 사용해서 접근, 생성 등 실질적으로 엔티티를 사용하는거 라는 걸 학습함.

java
interface DoctorRepository : CrudRepository<Doctor, Long>

근데 스프링 프레임워크에서 이미 CrudRepository라는 놈을 만들어줘서 작성할 게 없었음. 몰랐으면 일일히 다 작성했었을탠데 역시 스프링은 미리 구현해준게 정말 많아서 많이 써보는게 중요 할 것 같음...

DTO 생성함.

API를 요청 할 때 받는 DTO와 반환 할 때 주는 DTO를 만들었음.

Response DTO 만들면서 POST API라서 200은 어떻게 보내줘야하는건가 했는데 스프링이 알아서 보내주는것이였음.

서비스 생성함.

컨트롤러에서 요청을 받아 실질적인 비즈니스 로직을 실행하는 서비스 클래스를 생성함. 데이터를 생성하고 이를 데이터베이스에 반영 후 반영 된 데이터를 Response DTO에 담아 리턴함

컨트롤러 생성함.

/???의 POST 요청을 받아와 BODY로 파라미터 값을 받아온 뒤 그 값으로 서비스를 실행 시키고 서비스에서 반환 된 저장 된 데이터를 사용자에게 반환하게함.