프로젝트 기록

    [회고록] 서비스 오픈 회고

    [회고록] 서비스 오픈 회고

    프로젝트 시작 개인 프로젝트는 많이 했는데, 디자인이 타 플랫폼에 비해 매력적이지 않은 것 같아 팀원을 구하기로 결정했다. 운좋게 디자인, 퍼블, 프론트까지 다 할 수 있는 능력자분을 만나 2명이서 프로젝트를 진행하게 되었다. 요구 분석과 설득의 과정 사람들이 의견을 공유하고 투표할 수 있는 사이트를 만들기로 결정하고 구글 드라이브에 그림을 그려가며 기능 및 요구 분석을 하였다. 보여주는 데이터나 화면의 동작 방식에 대해서 쉽게 결정이 난 것도 있지만, 의견 차이가 좁혀지지 않아 2시간을 넘게 얘기한 적도 있었다. 개인 프로젝트에만 익숙한 나에게 이렇게 누군가를 설득을 하고 설득을 당하는 과정이 힘이 드는 과정이었지만, 좋은 서비스를 오픈하기 위한 하나의 필수 과정이라는 생각이 들었다. 기능의 컨셉이나 ..

    [TDD] TDD 회고

    TDD를 해야하는 이유 문서화의 역할을 할 수 있다. 코드에 결함을 발견할 수 있다. 리팩토링 시 안정성을 확보할 수 있다. (심리적 안정감을 가질 수 있다.) 테스트 하기 쉬운 코드를 작성하려는 노력이 더 낮을 결합도를 가진 설계를 이끌어낸다. TDD 실습 문서화 역할 다음과 같이 @DisplayName에 테스트의 목적을 적음으로써 문서화의 역할을 할 수 있다. @DisplayName("비밀번호가 최소 8자 이상, 12자 이하면 예외가 발생하지 않는다.") 코드의 결합 발견과 안정성 확보 다음과 같이 password.length를 리팩토링 했을 때 바로 테스트 할 수 있기 때문에 안정감을 가질 수 있으며 코드에 문제가 있을 경우 재빨리 찾을 수 있다. //리팩토링 이전 // if(password.len..

    [리팩토링] 일급 컬렉션

    [리팩토링] 일급 컬렉션

    코드의 개선점 다음과 같은 코드에서의 문제는 Course의 getter 메소드를 호출해서 이를 계산하고 값을 할당하고 있다는 것이다. 만약 여기서 getGradeToNumber()가 아닌 다른 메소드를 호출해야 한다거나, +1을 해야 한다는 조건이 붙게 되면 같은 문장을 쓰고 있는 모든 메소드에서 수정을 해주어야 한다. 이를 해결하기 위해 Course에 메소드를 만들고 호출하는 형태를 가져갈 수 있다. calculateGrade()의 메소드를 보면 for문 또는 스트림을 사용하여 값을 계산하고 있는데 이런 경우 List의 계산을 담당하는 일급 컬렉션을 이용할 수 있다. 일급 컬렉션을 통한 리팩토링 일급 컬렉션이란 내부에 Collection을 하나만 가지고 있는 클래스를 말한다. 다음은 List cours..

    [Debug] MyBatis IndexOutBoundsException

    [Debug] MyBatis IndexOutBoundsException

    에러 코드 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.IndexOutOfBoundsException: Index 4 out of bounds for length 4 ### The error may exist in com/example/demo2/mapper/SiteUserMapper.java (best guess) ### The error may involve com.example.demo2.mapper.SiteUserMapper.getAllUser ### The ..