"User CRUD, Schedule CRUD, ์ธ์ /์ฟ ํค๋ฅผ ํ์ฉํ ์ธ์ฆ/์ธ๊ฐ" ๊ตฌํ ์ค ๋ฐ์ํ troubleshooting
๐ฅ ๋ฌธ์ 1. ์์ฑ์์ final ํ๋ ์ด๊ธฐํ๋ฅผ ํ์ง ์์
๐คฏ ๋์ ์ํฉ
User ๊ฐ์ฒด๋ฅผ ํต์งธ๋ก ๋ฐ์์ค๋ฉด ํ๋ ์ฃผ์ ์ ์ํด๋ ๋๋์ค(?)์์๋ค. (= ์๋์ผ๋ก ์ฑ์์ง๋ ์ค ์์๋ค)
๐ฅธ ๋ฌธ์ ์ํฉ
โ๏ธ ์์ฑ์์ User ๊ฐ์ฒด๋ฅผ ๋ฐ์ ๋๊ณ , ์๋ฌด ํ๋๋ ์ด๊ธฐํ ํ์ง ์์๋ค.
โ๏ธ ํ๋์ ์ด๊ธฐํ๋ฅผ ํ์ง ์์ ๊ฒฝ์ฐ userId,UserName,email ๋ชจ๋ null๋ก ๋จ๋๋ค.
โ๏ธ ๊ทธ๋ฐ๋ฐ final์ด ๋ถ์ ํ๋์ ๊ฒฝ์ฐ ์ด๊ธฐํ๊ฐ ๋์ง์์ผ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๐ฅ ๋ฌธ์ ์ฝ๋
@Getter
public class SignUpResponseDto {
private final Long userId;
private final String userName;
private final String email;
public SignUpResponseDto(User user) {
// โuser๋ฅผ ๋ฐ๊ธฐ๋ง ํ๊ณ final ํ๋๋ฅผ ์ด๊ธฐํํ์ง ์์๋ค.
}
}
๐ช ํด๊ฒฐ ๋ฐฉ๋ฒ
User๊ฐ์ฒด์์ ๊ฐ์ ๊บผ๋ด์ ๊ฐ๊ฐ ํ๋์ ์ง์ด ๋ฃ์ด์ค๋ค.
๐ง ํด๊ฒฐ ์ฝ๋
@Getter
public class SignUpResponseDto {
private final Long userId;
private final String userName;
private final String email;
public SignUpResponseDto(User user) {
// โ๏ธ final ํ๋๋ ์์ฑ์์์ ๋ฐ๋์ ์ด๊ธฐํ
this.userId = user.getUserId();
this.userName = user.getUserName();
this.email = user.getEmail();
}
}
โ๏ธ finalํ๋๋ ์์ฑ ์ ๋ฐ๋์ ํ ๋ฒ ์ด๊ธฐํ๋์ด์ผ ํ๋ฉฐ, ์์ฑ์์์ ๊ฐ์ ๋ฃ์ง ์์ผ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๐ฅ ๋ฌธ์ 2. findByEmail()์ฌ์ฉ ์ ์ ์ธํ์ง ์์ ์๊ธด ์ค๋ฅ
๐คฏ ๋์ ์ํฉ
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ด๋ฉ์ผ์ ๊ธฐ์ค์ผ๋ก User์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ถ์ด์ findById()๋ฅผ ๋ฐ๋ผ findByEmail()์ ์ฌ์ฉํ๋๋ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. findById๋ ๋๋๋ฐ.. ๊ทธ๋ ๋ค๊ณ findByEmail์ ์ด๋์ ์ ํด์ผํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค.
๐ฅธ ๋ฌธ์ ์ํฉ
โ๏ธ findById()๋ JpaRepository๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ ๋ฉ์๋๋ผ์ ์๋ฌด ์ ์ธ ์์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
โ๏ธ ํ์ง๋ง findByEmail()๊ณผ ๊ฐ์ด ๊ธฐ๋ณธ ์ ๊ณต์ด ์๋๊ณ , ์ง์ ์ ์ธํ์ง ์์ ๋ฉ์๋๋ ๋ฐ๋ก ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
โ๏ธ ์ธํฐํ์ด์ค์ ๋ฉ์๋ ์๊ทธ๋์ฒ๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ธํด์ผํ๋ค.
๐ฅ ๋ฌธ์ ์ฝ๋
// โ ์ ์ธํ์ง ์์๋๋ฐ ๋ฐ๋ก ์ฌ์ฉ
User user = userRepository.findByEmail(email)
.orElseThrow(() -> new RuntimeException("ํด๋น ์ด๋ฉ์ผ ์์"));
๐ข ์๋ฌ ๋ฉ์์ง: Cannot resolve method 'findByEmail' in 'UserRepository'
๐ช ํด๊ฒฐ ๋ฐฉ๋ฒ
JpaRepository๋ findById, findAll๊ณผ ๊ฐ์ ๋ฉ์๋๋ง ๊ธฐ๋ณธ ์ ๊ณตํ๋ฉฐ,
findByEmail, findByUserName๊ณผ ๊ฐ์ ์ปค์คํ ๋ฉ์๋๋ ์ธํฐํ์ด์ค์์ ์ ์ธํ๋ค.
๋ฉ์๋ ์ด๋ฆ์ JPA ๋ฉ์๋ ๋ค์ด๋ฐ ๊ท์น์ ๋ง์ถฐ ์์ฑํ๋ฉด ์๋์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ค๋ค.
๐ง ํด๊ฒฐ ์ฝ๋
// โ
UserRepository ์ธํฐํ์ด์ค์ ๋ฉ์๋ ์ ์ธ ์ถ๊ฐ
Optional<User> findByEmail(String email);
User user = userRepository.findByEmail(email)
.orElseThrow(() -> new RuntimeException("ํด๋น ์ด๋ฉ์ผ ์์"));
โ๏ธ findByํ๋๋ช (๋ฐ์ดํฐํ์ ํ๋๋ช ) ํ์์ผ๋ก ๋ฉ์๋ ์ด๋ฆ์ ์ง์ผ๋ฉด, JPA๊ฐ ์๋์ผ๋ก SQL์ ์์ฑํด์ค๋ค.
โ๏ธ ์ ์ธํ์ง ์๊ณ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ์๋ฌ๊ฐ ๋ฐ์ํ๋ฏ๋ก, ๊ผญ ์ธํฐํ์ด์ค์ ๋ช ์์ ์ผ๋ก ์ ์ธํ๋ค.
โ๏ธ Optional๋ก ๋ฐํํ๋ ์ด์ : User๊ฐ ์กด์ฌํ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๐ฅ ๋ฌธ์ 3. ์ธ์ ์์ ์ฌ์ฉํ ํค๋ฅผ ์ผ์น์ํค์ง ์์ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๊ฐ ๋์ง ์์
๐คฏ ๋์ ์ํฉ
๋ก๊ทธ์ธ ํ์๋ ์ธ์ ์ด ์์ฑ๋์ด์ผ ํ๋๊น session.getAttribute()๋ก ์ ์ ๋ฅผ ๊บผ๋ด์ค๋ฉด ์ ์์ ์ผ๋ก ํํฐ๋ฅผ ํต๊ณผํ ์ค ์์๋ค.
๊ทธ๋ฐ๋ฐ ๋ก๊ทธ์ธ์ด ๋ ๊ฒ ๊ฐ์๋ฐ "๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค"๋ผ๋ ์๋ฌ๊ฐ ๊ณ์ ๋ฐ์ํ๋ค.
๐ฅธ ๋ฌธ์ ์ํฉ
โ๏ธ ๋ก๊ทธ์ธ ์ฑ๊ณต ์ ์ธ์ ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ ๋ user๋ผ๋ ํค๋ก ์ ์ฅํ๋ค.
โ๏ธ ๊ทธ๋ฐ๋ฐ ํํฐ์์๋ session.getAttribute("sessionKey")๋ก ๊ฐ์ ธ์ค๊ณ ์์๋ค. (์ค์ต ์ฝ๋ ๋ฐ๋ผ ์ฐ๋๋ผ ใ ใ )
โ๏ธ ์ฆ, ํค ์ด๋ฆ์ด ๋ฌ๋ผ์ ํญ์ null์ด ๋ฐํ๋์๋ ๊ฒ์ด๋ค.
๐ฅ ๋ฌธ์ ์ฝ๋
// ๋ก๊ทธ์ธ ์
session.setAttribute("user", user);
// ํํฐ์์ ํ์ธํ ๋ (โ ํค ์ด๋ฆ ๋ค๋ฆ)
if (session == null || session.getAttribute("sessionKey") == null) {
throw new RuntimeException("๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค.");
}
๐ช ํด๊ฒฐ ๋ฐฉ๋ฒ
์ธ์ ์์ ๊ฐ์ ๊บผ๋ผ ๋ ์ฌ์ฉํ๋ ํค ์ด๋ฆ์, ์ ์ฅํ ๋ ์ฌ์ฉํ ํค ์ด๋ฆ๊ณผ ์ ํํ ์ผ์น์์ผ์ผ ํ๋ค. (๋ ๋ค user๋ก ์ผ์น์ํจ๋ค.)
๐ง ํด๊ฒฐ ์ฝ๋
// ๋ก๊ทธ์ธ ์
session.setAttribute("user", user);
// ํํฐ์์ ํ์ธํ ๋ (โ
ํค ์ด๋ฆ ์ผ์น)
if (session == null || session.getAttribute("user") == null) {
throw new RuntimeException("๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค.");
}
โ๏ธ ์ธ์ ์ ์ ์ฅํ ๋ ์ฌ์ฉํ ํค ์ด๋ฆ๊ณผ, ๊บผ๋ผ ๋ ์ฌ์ฉํ๋ ํค ์ด๋ฆ์ ๋ฐ๋์ ์ผ์นํด์ผํ๋ค.
โ๏ธ ํค๊ฐ ๋ค๋ฅด๋ฉด null์ด ๋ฐํ๋์ด, ์ธ์ฆ์ ์คํจํ๊ฒ ๋๋ค.
โ๏ธ ๋ฐฐ์ด์ ์์ฝ
- final ํ๋๋ ์์ฑ ์ ๋ฐ๋์ ๊ฐ์ ์ด๊ธฐํ ํด์ค์ผํ๋ค.
- JpaRepository์์ ํน์ ํ๋์ ๋ฐ๋ฅธ ๊ฐ์ ์ฐพ๊ณ ์ถ์๋๋ findByํ๋๋ช () ํจ์๋ฅผ ์ธํฐํ์ด์ค์ ์ ์ธํ๋ค.
- ์ธ์ ์ ํ์ฉํด ์ธ์ฆ์ฒ๋ฆฌ๋ฅผ ํ ๋ key๊ฐ์ ๋ฐ๋์ ์ผ์น์ํค๋๋ก ํ์ธํ๋ค.
'๋ด์ผ๋ฐฐ์์บ ํ > ๋ณธ์บ ํ ๊ณผ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring ์ฌํ] ์ฝ๋ ๋ฆฌํฉํ ๋ง ๊ณผ์ ํ๊ณ (4) | 2025.04.18 |
---|---|
[์ผ์ ๊ด๋ฆฌ์ฑ Develop-3] ์ผ์ ๊ด๋ฆฌ์ฑ Develop ๊ณผ์ ํ๊ณ (1) | 2025.04.04 |
[์ผ์ ๊ด๋ฆฌ์ฑ Develop-1] ERD ๋ฐ API ๋ช ์ธ์ ์์ฑ (0) | 2025.04.02 |
[์ผ์ ๊ด๋ฆฌ์ฑ ๋ง๋ค๊ธฐ-3] ์ผ์ ๊ด๋ฆฌ์ฑ ๊ณผ์ ํ๊ณ (1) | 2025.03.26 |
[์ผ์ ๊ด๋ฆฌ์ฑ ๋ง๋ค๊ธฐ-2][ํธ๋ฌ๋ธ์ํ ] DB์์ด CRUD ๋ง๋ค๊ธฐ (0) | 2025.03.24 |