본문 바로가기
Memo/BootCamp : TIL

[Pre Project] Day 12 : 개발 완료일

by 달의 조각 2022. 11. 4.

기여한 내용

 

질문과 답변으로 긴 글을 담을 수 있도록 DB 컬럼 타입 변경

 


 

새롭게 배운 내용

 

🧸 Spring Boot에서 JPA를 통해 데이터베이스(MySQL)를 관리할 때 데이터 타입 지정하기

// 컬럼에 들어갈 수 있는 최대 값보다 넣으려고 하는 데이터가 더 클 때 발생하는 오류
com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'body' at row 1

@Entity가 붙은 클래스는 JPA가 관리하며, 클래스와 테이블을 매핑시킨다. 이때 클래스 안에 String 타입의 필드가 존재할 때 아무런 설정도 하지 않으면 기본적으로 varchar(255) 타입의 컬럼이 된다.

@Column(columnDefinition = "TEXT")
private String body;

긴 글을 작성하려면 더 큰 타입이 필요해서 위와 같이 columnDefinition를 이용하여 직접 컬럼 정보를 정의했다.

  • varchar(n): 가변 최대 n문자 크기
  • TEXT: 65535자의 고정된 최대 크기

(varchar는 가변 크기를 가지니 TEXT를 사용하는 것보다 varchar의 크기를 늘리는 것이 더 좋은 방법이었을지 모르겠다.)

이미 Column 설정을 하기 이전에 테이블이 기본 크기로 생성되어서 사용되고 있었기에 테이블을 삭제하고 재정의하는 과정이 필요했다. 그래서 이미 DB에 쌓인 데이터를 정리할 겸 yml 파일의 ddl-auto 설정을 create로 하여 기존 테이블을 삭제한 후 다시 생성하게 했다. 데이터 타입이 TEXT로 바뀐 것을 확인하고 설정을 update로 변경했다.

jpa:
  hibernate:
    ddl-auto: update
  show-sql: true
  properties:
    hibernate:
      format_sql: true

 

📚 Reference

 

보강할 내용

 

@Pattern(regexp = "^.{15,}")

요청으로 글자수 15자 제한을 두고 싶어서 Dto에 적용한 정규식인데, 왜 엔터와 마크다운까지 포함할 수 없게 될까?

 

회고

 

  오늘로 Stack Overflow를 Clone 하는 Pre-Project의 개발 단계가 끝이 났다. 프로젝트 초반에 사용자 요구사항 정의서와 테이블 명세서를 작성하면서도 '이게 맞나?' 싶던 적이 많았다. 개발을 하다 보니 기본 CRUD 게시판의 구성으로 board, answer, users 세 개의 테이블이 충분했다는 걸 알았지만, 초반에는 테이블이 6-7개라는 다른 팀들과 비교해서 초반 설계를 잘 하고 있는 건지 의구심이 들었었다.

프로젝트 경험이 있던 백앤드 팀원이 없었기 때문에 정말 하나하나 부딪혀 보며 완성시켰다. ERD 설계를 할 때 도출한 세 개의 리소스를 하나씩 맡아서 Spring MVC 패턴을 적용했고, 이후 작업들을 하나하나 정리해서 역할 분담을 했다. 나는 지금까지 학습해 오면서 보안 파트에서 가장 큰 어려움을 느꼈기에 이번 기회에 JWT를 이용한 회원가입과 로그인 구현을 맡기로 했다. 프로젝트에서 보안 영역의 중요도가 크다고 생각했기에 부담감도 있었지만 그 부담감에 휩쓸려서 흐름을 놓치지 않도록 노력했다. 이렇게 각자 역할을 나누어서 구현을 했지만 전체적인 프로젝트 진행도를 파악하고 다른 팀원들이 놓친 부분이 있거나 어려움을 겪을 땐 적극적으로 도왔다. 

2주가 안 되는 짧은 프로젝트 기간을 되돌아 보며 가장 아쉬운 것은 OAuth 2.0 로그인 구현을 하지 못한 것이다. 구현을 해낼 것이라 생각하고 중요도 '상'에 자리해 뒀었는데 JWT와 OAuth를 같이 구현하는 프로세스를 생각하는 것에서 막혔다. 검색엔진 또한 구현하고 싶었는데 해내지 못해서 아쉽다.

사실 초반에 개발 속도를 높여서 프로젝드 기간의 후반으로 갈수록 여유가 있었는데, 자잘하게 새롭게 생기는 수정 사항들을 구현하는 사이에 새로운 구현으로 인해 기본 CRUD의 핵심 기능을 완벽하게 구현하지 못하게 될까 봐 소극적인 자세가 나오기도 했다. 좀 더 과감하게 여러 시도를 해 볼 걸 싶다.

아쉬운 부분도 있지만 Spring boot에 MVC 패턴을 적용하여 웹 애플리케이션을 구성하는 프로세스를 온전히 이해했고, Spring Security로 JWT 로그인 구현이 익숙해졌다. CORS 에러를 처음 겪었는데, 이번 기회에 CORS가 무엇인지 정리할 수 있었고 CORS 에러 메시지가 무엇을 의미하는지 해석할 수 있게 됐다. 그리고 공부하다가 쉽게 넘겨버린 부분은 반드시 되돌아온다는 것을 깨달았다... ^^ (TIL도 그날그날 작성하자.)

이번 Pre-Project를 진행하면서 깨달은 부분들을 Main-Project와 이후에 진행하게 될 프로젝트에서 잘 적용하여 매순간 성장해 나가고 싶다.

 

★★★★★

 

댓글