μμμ± μ΄λ? (JPA Persistence) JPA μμμ μμμ±μ Entityλ₯Ό μꡬμ μΌλ‘ μ μ₯ν΄μ£Όλ νκ²½μ μλ―Έ μμμ± μ μ΄(cascade) λ? μ¬μ μ μ μ : 'μμ νν¬', 'νν¬μ²λΌ νλ₯Έλ€' λΌλ λ» μν
ν° μνλ₯Ό λ³κ²½ν λ, ν΄λΉ μν°ν°μ μ°κ΄λ μν°ν°μ μν λ³νλ₯Ό μ νμν€λ μ΅μ
μ΄λ, λΆλͺ¨λ Oneμ ν΄λΉνκ³ μμμ Manyμ ν΄λΉ EX ) Order μν°ν°κ° μμ λμμ λ ν΄λΉ μν°ν°μ μ°κ΄λμ΄ μλ OrderItem μν°ν°κ° ν¨κ» μμ λκ±°λ, Order μν°ν°λ₯Ό μ μ₯ ν λ Order μν°ν°μ λ΄κ²¨μλ OrderItem μν°ν°λ₯Ό νκΊΌλ²μ μ μ₯ κ°λ₯ πβοΈ μνκ° μ νλλ λͺ¨μ΅μ νν¬κ° νλ₯΄λ λͺ¨μ΅μΌλ‘ μμ CASCADE μ’
λ₯ μ€λͺ
PERSIST λΆλͺ¨ μν°ν°κ° μμνλ λ, μμ..
μ€νλ§
μ°κ΄ κ΄κ³ 맀ν μ’
λ₯ μΌλμΌ(1:1) → @OneToOne μΌλλ€(1:N) → @OneToMany λ€λμΌ(N:1) → @ManyToOne λ€λλ€(N:N) → @ManyToMany μ°κ΄ κ΄κ³ 맀ν λ°©ν₯ DB μ€μ¬ μ€κ³ ν
μ΄λΈμμ κ΄κ³λ νμ μλ°©ν₯ JPA κ°μ²΄ μ§ν₯ μ€μ¬ μ€κ³μμλ λ¨λ°©ν₯, μλ°©ν₯ μ‘΄μ¬ μΌλμΌ λ¨λ°©ν₯ 맀ννκΈ° Cart → Member μ₯λ°κ΅¬λ-νμ 맀ν ν
μ€νΈ @Autowired CartRepository cartRepository; @Autowired MemberRepository memberRepository; @Autowired MemberController memberController; @PersistenceContext EntityManager entityManager; priv..
ADMIN κ³μ λ§ μ κ·Όν μ μλλ‘ μ€μ π μν λ±λ‘, μμ , μμ νμ΄μ§ λ±λ± CustomAuththenticationEntryPoint public class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint { @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized"..
μν μν°ν° @Entity @Getter@Setter public class Item { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "item_id") private Long id; private String itemName; private int price; private String itemDetail; private String type; @Enumerated(EnumType.STRING) private ItemSellStatus itemSellStatus; }ItemSellStatus νμ /ν맀 μνλ₯Ό λνλ΄λ Enum Class μν μ΄λ―Έμ§ application.properties μ€μ # νμΌ ν κ°λΉ μ΅λ μ¬μ΄μ¦ s..
νμ κ°μ
νλ©΄μΌλ‘ λΆν° λμ΄μ€λ κ°μ
μ 보λ₯Ό λ΄μ DTO κ°μ²΄ @Setter @NoArgsConstructor public class MemberFormDto { @NotBlank(message = "μ΄λ¦μ νμ μ
λ ₯ κ°μ
λλ€.") private String name; @NotEmpty(message = "μμ΄λλ νμ μ
λ ₯ κ°μ
λλ€.") private String memberId; @NotEmpty(message = "λΉλ°λ²νΈλ νμ μ
λ ₯ κ°μ
λλ€.") @Length(min = 8, max = 16, message = "λΉλ°λ²νΈλ 8μ μ΄μ, 16μ μ΄νλ‘ μ
λ ₯ν΄μ£ΌμΈμ.") private String password; @NotEmpty(message = "μ£Όμλ νμ μ
λ ₯ κ°μ
λλ€.") private ..
Builder ν¨ν΄μ΄λ? λ³΅ν© κ°μ²΄μ μμ± κ³Όμ κ³Ό νν λ°©λ²μ λΆλ¦¬νμ¬ λμΌν μμ± μ μ°¨μμ μλ‘ λ€λ₯Έ νν κ²°κ³Όλ₯Ό λ§λ€ μ μκ² νλ ν¨ν΄ μμ±μ μΈμλ‘ λ무 λ§μ μΈμκ° λ겨μ§λ κ²½μ° μ΄λ ν μΈμκ° μ΄λ ν κ°μ λνλ΄λμ§ νμΈνκΈ° νλ¬ λ, μ΄λ ν κ²½μ°μλ νΉμ μΈμλ§ μμ±ν΄μΌνλ κ²½μ°κ° λ°μν¨ νΉμ μΈμμ ν΄λΉ κ°μ nullλ‘ μ λ¬ν΄μ€μΌ νλλ°, μ΄λ κ°λ
μ± μΈ‘λ©΄μμ λ§€μ° μ’μ§ μμ π μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μ λΉλν¨ν΄μ μ¬μ©ν μ μμ μ₯μ νμν λ°μ΄ν°λ§ μ€μ κ°λ₯ μ μ°μ± ν보 κ°λ₯ κ°λ
μ± μμΉ λΆλ³μ± ν보 κ°λ₯
π μ°Έκ³ ν μ±
μμλ WebSecurityConfigureAdapterλ₯Ό ν΅ν΄ security configλ₯Ό override νμ§λ§, μ¬μ©νκ³ μλ λ²μ μμλ μ€λ₯ λ°μ!! UserDetailService λ°μ΄ν°λ² μ΄μ€μμ νμ μ 보λ₯Ό κ°μ Έμ€λ μΈν°νμ΄μ€ loadUserByUsername() λ©μλκ° μ‘΄μ¬νλ©°, νμ μ 보λ₯Ό μ‘°ννμ¬ μ¬μ©μμ μ 보μ κΆνμ κ°λ UserDetail μΈν°νμ΄μ€ λ°ν UserDetail μ€νλ§ μν리ν°μμ νμμ μ 보λ₯Ό λ΄κΈ° μν΄μ μ¬μ©νλ μΈν°νμ΄μ€ MemberService @RequiredArgsConstructor @Service @Transactional public class MemberService implements UserDetailsService { /** μλ΅ ..