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-auto를 create로 바꿔서 재반영 후 다시 update로 변경하여 해결함

레포지토리 생성함. ​

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

java
interface DoctorRepository : CrudRepository<Doctor, Long>

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

DTO 생성함. ​

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

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

서비스 생성함. ​

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

컨트롤러 생성함. ​

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