728x90
나만의 메모장 프로젝트 - 트러블슈팅
로그인 vs 게스트 세션 관리
문제
- 로그인한 사용자와 로그인하지 않은 사용자를 모두 지원해야 하는 게 목표였는데,
- 세션에서 사용자 정보를 꺼내는 방식을 고민하게 되었다.
해결
- 로그인 시:
session.setAttribute("loginMemberId", loginMember.getId());
- 게스트 진입 시:
session.setAttribute("guestId", UUID.randomUUID().toString());
- 메모 저장 시: 두 값 중 존재하는 값을 기준으로
writerId
식별 후 저장
유효성 검사 메시지 미출력
문제
@NotBlank
등 유효성 검사가 동작했지만, 타임리프에서 메시지가 보이지 않았다.
해결
@GetMapping
에서도@ModelAttribute
를 사용해 폼 객체를 명시적으로 초기화th:object
,th:field
,th:errors
의 매핑이 올바른지 확인
@GetMapping
public String loginForm(@ModelAttribute LoginForm form) {
return "login/login";
}
로그인 실패 메시지 출력 안 됨
문제
- 로그인 실패 시 사용자에게 피드백이 없어 사용자가 로그인에 실패했는지 결과를 알 수 없었다.
해결
bindingResult.reject()
를 사용해 글로벌 에러 메시지를 추가
if (loginMember == null) {
bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다.");
return "login/login";
}
- 뷰에서는
th:if="${#fields.hasGlobalErrors()}"
,th:errors="\*{global}"
로 출력
메모 소유자 식별 문제
문제
- 로그인 사용자와 게스트 사용자의 메모가 섞여 표시되어 모든 `memo` 가 불러와졌다.
해결
Memo
객체에String writerId
필드 추가 (loginId
또는guestId
저장)- 세션에서
writerId
를 가져와 저장 및 조회 시 필터링
회원가입 시 중복 아이디 허용됨
문제
- 동일한
loginId
로 여러 계정이 가입 가능하여 문제가 발생했다.
해결
- 저장 전
loginId
중복 체크
if (memberRepository.findByLoginId(form.getLoginId()).isPresent()) {
bindingResult.rejectValue("loginId", "duplicate", "이미 존재하는 아이디입니다.");
}
유효성 검사 실패 시 목록 유지 안 됨
문제
- 메모 저장 중 유효성 검사 실패 시 기존 메모 목록이 사라지는 현상이 발생했다.
해결
bindingResult.hasErrors()
시 목록 재조회 후 모델에 추가
if (bindingResult.hasErrors()) {
model.addAttribute("memos", memoRepository.getAll());
return "memo/memo";
}
세션 키 통합 고민
문제
loginMemberId
,guestId
를 각각 관리하자니 처리 코드가 복잡해졌다.
해결
writerId
는 문자열이므로UUID
또는loginId
를 저장할 수 있음
String writerId = (loginMemberId != null) ? String.valueOf(loginMemberId) : guestId;
Spring Boot 프로파일 적용 문제
문제
@ActiveProfile("test")
설정이 작동하지 않음
해결
@ActiveProfile
은 테스트에서만 작동, 로컬/운영 환경은spring.profiles.active
사용한다는 것을 알게 됨application-{profile}.properties
파일 생성 및 적용- 예:
spring.profiles.active=local
/application-local.properties
,spring.profiles.active=prod
/application- prod .properties
H2 → PostgreSQL 변경 이슈
문제
H2
에서PostgreSQL
로 전환 시 JDBC 오류 발생
해결
PostgreSQL JDBC URL
형식 확인
jdbc:postgresql://localhost:5432/local_db
PostgreSQL
드라이버 명시
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
배포 환경 vs 로컬 환경 설정 분리
문제
- 배포는 환경 변수로 설정, 로컬은 직접 설정 필요
해결
- 로컬은
.env
또는`application-local.properties` - 배포는
DATABASE\_URL
DB\_PASSWORD
DB\_USERNAME
환경 변수 사용
728x90
'💠프로젝트 및 경험 > 프로젝트' 카테고리의 다른 글
[모플 프로젝트] Vector Loki Grafana로 로그 수집 파이프라인 구축하기 !! (1) | 2025.06.14 |
---|---|
[메모장 프로젝트] JWT 기반 일반/소셜 로그인 구현하기 (1) | 2025.05.27 |