프로젝트 트러블 슈팅

최규호·2025년 10월 6일

매퍼에서 mybatis를 이용하여 회원가입에 사용 할 중복검사 기능을 구현하려고 했는데

이전에는 중복검사 메소드의 매개변수를 (String type , String data) 로 받아서
sql문을 String sql = "select * from member where "+type+" = ? "; 이런식으로 적어서
여러 가지 type 을 입력하면 동적으로 검사가 되게 했으나 ,

위의 방식으로는 안되는것 같고, 그렇다고 현재 프로젝트 아키텍쳐에서 이 메소드 때문에 dao를 추가하는 것은 과하다고 느낌을 받았고, 좀 더 생각해보니 DB에서 users테이블의 컬럼에 unique를 사용한 컬럼이 이메일과 전화번호 밖에 되지 않아서 그냥 2개를 나눠서 각각
@Select("select from users where email = #{email}")
@Select("select
from users where phone = #{phone}") 으로 sql을 적고 각각 다른 메소드로 나눠서 해결함.

//

리액트에서 자동저장 끈 상태에서 수정을 했더니 반응이 없어서 연결이 안된줄 알았으나, 자동 저장을 킨 후 화면에 바로 반영.

//

Dto에서 유효성 검증을 해주는 validation 라이브러리를 처음 사용해봤는데 @Email, @Pattern, @NotBlank 등등, 이런 어노테이션을 dto내 변수에만 넣어주면 되는줄 알고 넣어준 상태로 프론트엔드 작업까지 마친 후 테스트를 해보는데 유효성이 하나도 안맞아서 다시 검색을 통해 확인 결과, 컨트롤러 매개변수에 따라 사용법이 다르단 것을 알게 되었다. DTO일 경우 @Valid 어노테이션을 매개변수에 추가해야하고, 파라미터에 경우는 dto내 변수에 넣었던 @Email, @Pattern, @NotBlank 같은 어노테이션을 파라미터마다 넣어줘야 작동이 가능했다.
++
위에 내용에 추가로 dto내 @NotBlank를 이용하면 삭제메소드를 한다거나 로그인 메소드를 사용할때, 로그인으로 예시를 들면 로그인에 필요할 필드는 이메일,비밀번호인데 연락처 필드에 NotBlank에 걸려서 오류가 발생하게 된다. 그래서 기존 dto 말고 필요한 필드만 존재하는 dto를 새로 만들어서 백엔드 로직에도 매개변수를 새로운 dto를 넣어줘서 해결.

매퍼 내 메소드 수정 중 sql문법 오류로 인해 메소드 오류 및 해당 페이지 렌더링 문제 발생 -> sql 수정 후 해결완료

//

비밀번호를 단순하게 패턴, 정규표현식 없이 사용하다가 Bcyrpt를 도입하였는데, 비밀번호를 사용하는 메소드들이 작동을 안했고, 그 이유가 Bcyrpt로 암호화하거나 평문과 암호문을 비교하는 로직이 없기 때문이였고, 기존에 설계를 DB에서 필드 조건부터 (해시값을 db로 넣기위해서) varchar(50)->varchar(100)로 바꾸고 기존에 만들어놨던 비밀번호를 사용하는 메소드들 전부를 (회원가입, 로그인, 비밀번호 찾기 메소드 , 비밀번호 변경) Bcyrpt를 적용시켜서 해결하였다.

//

소셜 로그인 버튼을 누르면 로그인이 바로 되지 않고 2번 눌러야 로그인이 작동되는 상황 -> 백엔드 콘솔, 프론트 콘솔 둘 다 오류가 표시되지 않아서 무엇이 원인인지 몰랐으나, 프론트에는 < a/ > 마크업으로 버튼에 링크만 걸어서 복잡한 로직이 없다고 판단해서 프론트에는 오류가 없을 거라고 생각했고, 백엔드 콘솔에는 로그인 정보가 잘 들어와서 정상 작동이였으나 로직이 복잡해서 꼬인 것이라고 생각해서 백엔드만 계속해서 수정해서 체크했으나, 실제로는 리액트에 문제가 있었고, 로그인 상태정보를 콘솔에 표시해서 실제로 로그인 버튼을 누르면 true false로 실제 로그인 여부를 확인하였으나 버튼을 한번 누른 상태에서 화면만 로그인이 안된 것이였고 실제로는 로그인이 된 상태였다. 그래서 프론트에서 로그인이 되어 있으면 다른 화면으로 넘어가는 로직을 추가해서 해결하였다.

profile
코딩입문자 2025.05.26~ing

0개의 댓글