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\_URLDB\_PASSWORDDB\_USERNAME환경 변수 사용
728x90
'💠프로젝트 및 경험 > 프로젝트' 카테고리의 다른 글
| [메모장 프로젝트] GitHub Actions 로 자동 배포 (AWS 3) (0) | 2025.07.18 |
|---|---|
| [메모장 프로젝트] RDS PostgreSQL 생성, EC2 에 Redis 설치 (AWS 2) (0) | 2025.07.18 |
| [메모장 프로젝트] EC2 생성, 보안 그룹 설정 + 자동화 쉘 스크립트 (AWS 1) (0) | 2025.07.18 |
| [모플 프로젝트] Vector Loki Grafana로 로그 수집 파이프라인 구축하기 !! (1) | 2025.06.14 |
| [메모장 프로젝트] JWT 기반 일반/소셜 로그인 구현하기 (1) | 2025.05.27 |