본문 바로가기

항해99

항해 99 - 2023.03.06 TIL

주특기 주가 끝나고, 클론 코딩 프로젝트 주가 시작 되었다.

 

이번 프로젝트의 주제는 웹 상의 사이트를 그대로 본따 만든 클론 프로젝트를 완성해내는 것이다.

 

이전 프로젝트의 경험을 바탕으로 스코프를 정하게 되었는데, 아무래도 프론트 쪽이 시간이 많이 쫒기게 되어서 최대한 작게 스코프를 잡되, 리팩토링을 최대한 해보며 완성도를 높이자는 방향으로 진행하게 되었다.

 

우리가 참고하게 된 사이트는 코딩애플 이라는 프로그래밍 교육 서비스를 제공하는 사이트 였다.

https://codingapple.com/

 

코딩애플 온라인 강좌 - 개발자도 단기완성!

단연 NO1 강사님의 NO.1 강의 역시나 명강입니다. IT 업계의 대치동 NO1. 강사같은 엄청난 강의력. 코딩애플님의 강의는, 엄청나게 기초적인 것부터 가르치는 듯 보이지만, 실제로 다루는 깊이는 절

codingapple.com

 

백엔드 쪽은 지난 주와 스코프가 비슷했기 때문에 기능 구현까지 금방 하게 되었다.

 

팀 By 팀이지만, 내가 생각한 기본적인 백엔드 작업 순서는 다음과 같다.

 

1. 와이어프레임 작성 (프론트와 협업)

2. Entity 설계 (ERD 작성)

3. API 명세 작성

4. 파트 분배 및 Git 생성

5. 기능 구현

 

 

지난 주와 동일하게 위의 과정에 따라 작업을 진행했고, 어느 정도 숙달할 수 있었던 것 같다.

 

기능을 구현하고 테스트 해보면서 몇가지 문제가 있었는데, 그 중에서 해결된 문제에 대해서 회고해보고자 한다.

 

 

Boolean 타입 변수가 변경되지 않는 현상

강의 신청 기능을 구현하기 위해서, 해당 강의를 유저가 신청했는지 여부를 판별하기 위한 isEnrolled 라는 필드를 만들었다. 강의 신청 버튼을 누르면, 해당 필드를 True로 바꾸도록 코드를 짰는데 작동하지 않았다.

 

확인해보니 Lombok 사용 시 Boolean타입 변수명 지정 시에 is로 시작하는 변수를 지정하면, @Getter 어노테이션에서 Boolean 타입을 다룰 때 롬복이 is~ 로 시작하는 변수명을 사용하기 때문에 문제가 발생하는 거였다.

 

변수명을 변경해주니 정상적으로 값이 바뀌는 것을 확인할 수 있었다.

 

 

JPA DirtyChecking이 동작하지 않는 현상

회원정보를 수정하는 기능이 있었는데, 이전 정보와 새로운 정보를 입력하고, Debug를 돌렸을 때 값이 잘 전달되는게 확인 되었음에도 수정된 정보로 Update 되지 않았다.

 

값을 변경할 때, 해당 엔티티의 값을 변경되면 JPA가 그것을 감지하여 자동으로 Update 해주는 더티체킹을 이용했는데 동작하지 않는 듯 했다.

코드를 확인해보니, 더티체킹이 동작하기 위해서 1차 캐시에 데이터가 들어있어야 하는데 아무것도 들어가있지 않은 상태였다.

 

    @Transactional
    public ResponseDto<String> update(UserRequestDto requestDto, User user) {
        String newPw = passwordEncoder.encode(requestDto.getNewPw());

        // user = userRepository.findByUsername(user.getUsername()).orElseThrow();
		// 1차 캐시에 데이터를 넣기 위하여 조회
        
        //기존 패스워드와 가져온 패스워드 비교
        if(!passwordEncoder.matches(requestDto.getPassword(), user.getPassword())){
            throw new CustomException(ErrorCode.NotMatchPassword);
        }

        if (passwordEncoder.matches(requestDto.getNewPw(), user.getPassword())) {
            throw new CustomException(ErrorCode.NotAllowSamePassword);
        }

        user.setPassword(newPw);

        return ResponseDto.success("회원정보 수정 완료");
    }

 

변경할 User 엔티티에 대한 데이터를 1차캐시에 담아주니, Update 쿼리가 정상적으로 날아가는 것을 확인할 수 있었다.

 

 

 

느낀 점

저번 주와 비교했을 때, 백엔드에서는 따로 기능을 추가한 것이 없어서 아쉬운 상태이다.

 

백엔드 파트에서는 새로운 기능을 시도해보고자 하는 욕구가 있는데, 프론트 파트에서는 매 주 새로운 페이지를 디자인 부터 기능 구현까지 모두 해야하기 때문에 부담이 큰 것 같다.

 

시간이 많이 남는 상태이기 때문에 부족하다 생각하는 Git과 지난 번에 오류를 잡지못해 실패했던 CI/CD에 시간을 쏟아볼 예정이다.

'항해99' 카테고리의 다른 글

항해 99 - 2023.03.28 TIL  (0) 2023.03.28
항해 99 - 2023.03.09 TIL  (0) 2023.03.09
항해 99 - 2023.03.01 TIL  (0) 2023.03.01
항해 99 - 2023.02.25 TIL  (0) 2023.02.25
항해 99 - 2023.02.23 TIL  (0) 2023.02.23