분류 전체보기
-
ofCORS 포트폴리오 2주차 주간회고회고 2022. 12. 26. 22:15
벌써 스프린트 1주차가 마무리되었다! 포트폴리오 개발을 시작한 주간이었는데, 감기가 유행하면서 나를 비롯한 동기분들이 모두 다 컨디션이 매우 저조해서 슬픈 주간이었다 ㅠㅠ 이번 주는 모두 건강한 컨디션으로 작업에 집중할 수 있기를 바라며 1주차 스프린트를 돌아보자. 이번 주의 목표는 질문을 확인하고 검색하고 정렬하는 것이었다. 회원가입 기능부터 시작을 했는데, 이미 만들어 본 기능이고, 복잡하지는 않아서 스토리 포인트를 3으로 예상을 했는데, 프로젝트 세팅부터 진행을 하고, 살짝 늘어지기도 하면서 거의 3배의 스토리 포인트가 쓰였다. 그 외에 다른 부분들은 대부분 비슷한 기능들이 반복되어 예상했던 스토리포인트보다 진행하면서 점점 실제로 사용된 스토리 포인트가 줄었다! 이번 주는 워밍업을 하기 위해 약간 ..
-
20221225 TIL 외부 API 걸음마 떼기 (feat. github 소셜 로그인)TIL 2022. 12. 25. 21:30
로그인과 회원 가입이 포트폴리오를 만드는데 킬링 포인트가 아닌 것은 알고 있다! 로그인과 회원 가입이 없는 서비스는 잘 없지만, 당연히 있을 법한 기능이지만, 프로젝트의 핵심 기능은 아니다. 그래서 팀에 따라서는 핵심 기능을 먼저 만들고, 로그인과 회원가입을 나중에 만드는 경우도 있다고 들었다. 그런데 나는 기획을 하느라 살짝 잃었던 프로그래밍 감을 되찾기 위해 로그인과 회원가입 기능을 먼저 구현을 했고, 다행히 처음에는 많이 낯설었지만 기능을 구현하면서 감을 되찾았고, 스프린트 1주차 동안 질문 목록 보여주기, 질문 추천 수 기준 정렬, 상태 기준 정렬 등등까지 완료할 수 있었다! 이번 주에 원래 목표로 했던 분량을 완료해서, 원래는 하려고 했지만 생각보다 막막해서 우선순위를 미뤄두고 생각 날 때마다 ..
-
20221224 TIL enum으로 리팩토링!TIL 2022. 12. 24. 22:56
며칠 전 짝꿍님께서 올려주신 TIL에서 enum을 이용해서 리팩토링을 진행했다는 글을 보고, 나도 enum을 적용할 수 있는 부분이 있는 것 같아서 적용을 해보았다! 그렇지 않아도 작은 오타로 문제가 발생할 수 있을 것 같아서 리팩토링을 하는 게 좋지 않을까 생각해보고 있었는데, 짝꿍님의 도전으로 나도 용기를 내어 리팩토링을 시도해보았다. enum은 인스턴스의 개수가 정해져있는 경우에 사용하게 된다. 대표적으로 상태 값을 사용할 때 유용한 것 같다. 내가 만든 VO 중에 질문 상태에 대한 VO가 있었고, 이 부분을 enum을 이용해서 리팩토링해보았다. 기존에는 아래와 같은 상태였다. 값 객체이기에 equals와 hashCode를 오버라이딩 해주었다. // models/QuestionStatus.java ..
-
20221223 TIL 게시글 인기순으로 정렬하기TIL 2022. 12. 23. 17:59
JPQL을 이용해서 게시글을 인기순으로 정렬하여 가져오는 방식으로 코드를 작성해 두었었는데, 검색 조건이 여러가지 붙게 되면서 JPA Specification을 이용해서 리팩토링을 하게 되었다. 그래서 JPQL이 아닌 다른 방식으로 게시글을 인기순으로 정렬해야 하는 상황을 마주하게 되었다. 쉽사리 어떻게 해결을 해야할지 감이 잘 잡히지 않았었는데, 가장 먼저 떠오른 생각은 Specification 중 하나로 추가하는 것이었다. 그래서 뭔가 이상하지만 일단 TDD의 Green단계를 진행하고 있다는 생각으로 어떻게든 돌아가게끔 작성을 해보았다. // specifications/QuestionSpecification.java public static Specification sortBy(String sort)..
-
20221222 TIL JPA에서 @Query를 이용한 사용자 정의 쿼리 날리기!TIL 2022. 12. 22. 14:24
JpaRepository는 기본적인 메서드만을 제공해준다. 하지만 개발을 하다보면 JpaRepository가 기본적으로 제공하는 메서드보다 복잡한 쿼리를 날리고 싶은 경우가 생긴다. 예를 들면 특정 컬럼 값을 기준으로 조회하거나 정렬을 하는 등의 경우가 있을 수 있다. 이럴 때는 사용자 정의 쿼리를 사용해야 하는데, 사용자 정의 쿼리를 사용하는 방식에는 크게 쿼리 메서드 방식과 @Query 어노테이션을 사용하는 방법이 있다. 쿼리 메서드 방식은 메서드 이름을 정해진 컨벤션에 따라 작성하면 메서드 이름을 기반으로 적절한 쿼리가 수행되는 방식이다. https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-keywo..
-
20221221 TIL 핸들링 해야하는 예외가 여러 개일 때 어떻게 하면 좋을까?TIL 2022. 12. 21. 18:33
오늘은 회원가입 처리를 값객체를 이용해서 진행을 했다. 기존에는 @Valid 어노테이션을 이용해서 값의 유효성 검사를 했다면, 유효성 검사는 값 객체를 이용하는 가장 큰 장점 중 하나이기 때문에 값 객체에서 진행했다. public Password(String value) { Pattern pattern = Pattern.compile("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$"); Matcher matcher = pattern.matcher(value); if (!matcher.find()) { throw new InvalidPassword(); } this.value = value; } 따라서 위처럼 만약 유효하지 않..
-
20221220 TIL @ElementCollectionTIL 2022. 12. 20. 17:02
관계형 DB에서는 숫자 타입, 문자열 타입, 날짜와 시간 타입의 값을 저장할 수 있다. 즉, 묶음 형태의 값은 함께 저장하지 못하고, 다른 테이블을 생성해서 저장해야 한다. 예를 들면 어떤 게시글에 태그들이 붙어있을 때, 게시글 테이블에 태그들까지 저장할 수 없다. 왜냐하면 하나의 게시글 테이블에 여러 개의 태그의 묶음이 관계형 DB에서는 들어가지 못하기 때문이다. 그렇다면 spring에서 어떤 엔티티에 묶음 형태의 필드를 넣으려면 어떻게 해야할까? 만약 엔티티로 이뤄진 콜렉션이라면 @OneToMany 어노테이션을 활용하면 되고, String등의 primitive type이나 @Embeddable 어노테이션이 붙은 클래스로 이뤄진 콜렉션이라면 @ElementCollection 어노테이션을 활용하면 된다...
-
ofCORS 포트폴리오 1주차 주간회고회고 2022. 12. 19. 20:00
이번 한 주 동안은 포트폴리오 기획을 하였다. 내가 만들 서비스의 목적을 정의하고, 사용자 스토리를 작성하고 인수테스트를 설계하고, 화면 플로우를 설계하였다. 그리고 F/E URL과 REST API를 설계하였고, 깃헙 프로젝트를 이용해서 프로젝트를 관리하기 위해 백로그를 작성하였다. 그리고 오늘부터 1주일 단위로 스프린트 진행을 위해 스프린트 계획을 세웠다. 인수테스트를 대략 저번주 금요일에 마감지었지만, 작업에 쉽게 들어가지 못하고 막막하게만 느껴지고 있었는데, 이 부분에 대해 같이 공부하고 있는 분들이 모두 공감을 하고 있었다. 그리고 그 이유는 처음부터 너무 잘하려고 하는 것이었고, 인지 부하가 오게 되어 오히려 아무것도 진행하지 못하는 상황에 이르렀다. 이에 대한 해답은 간단했다. 지금보다 더 나..