240529 게임 뉴스피드 프로젝트 - 디테일을 고민하기

노재원·2024년 5월 29일
0

내일배움캠프

목록 보기
49/90

DB Column 최적화 고민해보기

사실 과제든 이번 프로젝트든 진짜 쓰는 프로젝트라는 체감이 안들어서 나쁜 버릇이 들었다. DB 데이터를 최적화 안하고 대충 타입 정의하고 쓰기로 한 것이다.

특히 지금 백엔드 과정에서 DB에 대해 구체적으로 교육받은 건 없어서 그냥 학교에서 하듯이 평범하게 했는데 ERD 수정을 하면서 줄일 부분은 줄이고 나중에 합의보고 더 줄일 부분도 고려해보기로 했다.

우선은 TEXT를 필요한 부분만 사용하기로 했다. 기본적으로 3바이트를 먹는 한글이 들어가는 곳은 정적 사이즈를 쓰면 더 위험해질 수도 있기 때문에 유효성/불변성 정책으로 길이를 체크하고 타입은 TEXT를 써서 65535 Bytes까지 커버할 수 있게 했다. 이메일, 닉네임 한줄 소개같은 부분은 가장 많이 쓰는 VARCHAR(255)로 제한했고 이것도 짧게 정책을 걸 생각이다.

Enum도 살짝 고민했는데 Enum을 쓰면 데이터의 무결성은 보증되겠지만 생각보다 데이터 사이즈가 크다길래 지금부터 smallint를 써서 1, 2, 3처럼 백엔드에서 다루고 프론트로 내보낼 때는 enum을 쓰는게 최적화가 되는 것 같아 해볼까 하다가 굳이 싶어서 언젠가 효율을 따져야할 때 합의보고 하기로 했다. AWS 쓰면 써볼 일이 생길 수도 있지 않을까?

최적화라고 해봤자 아직은 이정도고 흔히 가장 많은 메모리를 차지하는 텍스트 부분만 고려했다. 고려했다고도 하기 뭐한게 VARCHAR(255)로 휘갈겨 쓴 것밖에 없지만 나중에는 세부적인 정책과 구체적인 사이즈를 결정하지 않을까 싶다.

JPA에 대한 맵핑은 @Column 에 length = 255를 부여하거나 columnDefinition = "text"를 사용했는데 이는 RDBMS 시스템에 따라 의도한 대로 작동하지 않을 수 있으니 제일 좋은 방법은 수동으로 DDL을 작성해서 테이블을 만들어주는게 좋을 것 같다.

Jwt Claim에 저장되는 실제 타입은 다르다

Long으로 된 Id를 저장하고 있었기 때문에 문제 없을줄 알았는데 배포된 브랜치에서 제대로 userId를 불러오지 못했다. 마침 재수없게도 빌드가 안되는 일도 벌어져서 테스트 해보기 전에 빠르게 살펴봤는데 뭐가 문제일지 바로 예상하진 못했다.

겨우겨우 성공한 빌드에서 추적해보니 문제는 명확했다. Payload를 Long으로 캐스팅하지 못했다.

Payload에서 불러올 때는 Any지만 내가 Long으로 저장한 userId는 Int로 인식된다. Long으로 캐스팅이 한번에 되지 않았다. 제대로 Casting이 안되니 as 사용을 지양하고 toLong을 써서 해결했는데 참 생각지도 못한 부분에서 사고가 났다.

Jwt 개발 당시엔 빌드하기 힘든 개발 초기라서 최대한 경험으로 살린건데 테스트가 빈약해서 난 문제라 반성하기로 했다.

Spring security 기본 인증 form login 끄기

내가 이전 과제의 테스트를 상당히 엉망으로 진행하긴 했는지 처음보는 친구를 마주하게 됐다. Swagger를 보려고 했는데 웬 로그인 화면이 나왔다.

찾아보니 기본 id로 user를 입력하고 어플리케이션 콘솔에 뜬 패스워드를 입력하면 인증이 되긴 하는데 local에서 굳이 싶은 인증이 추가된거라 일단 끄고 보기로 했다.

패스워드 암호화에 사용한 Security에 Bean을 등록해서 제거했는데 HTTPSecurity의 authorizeHttpRequests, csrf, formLogin을 모두 꺼주기로 했다.

Spring security에 대한 심화 학습을 진행하면 이런 것도 확실히 할 수 있고 지금의 반쪽짜리 Access token도 Refresh token까지 구현해 어플리케이션 전반적인 응용이 될 것 같다.


그 외에도 오늘은 이전에 쓴 불변성 / 유효성 검증 방식을 그대로 채용해서 겹치는 부분은 ValidatableDto나 Dto -> Entity의 변환 책임을 Entity에 집중시키고 이번엔 빼먹지 않고 변경에 대한 불변성 검증도 추가로 진행했다.

아직 정책도 제대로 정한게 없어서 사실 내용물은 텅텅 비었지만 과정이 생긴게 중요한 것 같다.

매니저님이 들렀다 가시면서 가장 Issue와 PR을 잘 활용하는 것 같다는 말도 들었고 튜터님께도 기본적인 설정은 잘 한 것 같다는 이야기도 들어서 그래도 만족스럽긴 하다.

1개의 댓글

comment-user-thumbnail
2024년 5월 29일

역시 최적화까지 가시다니 대단하십니다

답글 달기