UserDTO에 @Valid 사용 build.gradle implementation 'org.springframework.boot:spring-boot-starter-validatio import import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Pattern; @NotBlank @Pattern @Getter @Setter @AllArgsConstructor @NoArgsConstructor @Builder public class UserDTO { private Long id; @JsonProperty("userId") @NotBlank(message = "아이디는 필수 입력 값입니다.") privat..
아이디 입력 필드 옆에 아이디 중복 확인 버튼을 구현했었는데 회원가입 버튼을 누를 시 다시 한번 확인하고 resoponse 해주는 부분을 구현했습니다. ResDTO 먼저 모든 API의 Response에 대해 공통으로 감싸줄 수 있는 ResDTO를 새롭게 만들어 주었습니다. 🧐 그렇다면 ResDTO를 만드는 이유는 무엇일까요? Response에서 요청된 응답 값만 전달해주는게 아니라 결과에 대한 코드, 내용, 에러메세지 등을 같은 포맷으로 전달해주어 프론트에서 더 효율적으로 사용하게 하기 위한 목적입니다! 또한, 객체 지향적인 설계를 촉진합니다. ResDTO 객체를 사용함으로써 응답 데이터를 하나의 객체로 추상화하고, 응답 생성 및 전달에 관련된 로직을 한 곳에서 관리할 수 있게 됩니다. 서버 사이드 렌더..
WebSecurityConfig.java PasswordEncoder를 빈으로 등록합니다. @Bean public PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } PasswordEncoder는 주로 사용자의 비밀번호를 해싱(hashing)하여 저장하고, 로그인 시에 비밀번호를 검증하는 데 사용됩니다. 여기서 BCryptPasswordEncoder는 PasswordEncoder의 구현체 중 하나로, BCrypt 해싱 알고리즘을 사용하여 비밀번호를 안전하게 해싱합니다. UserService.java package com.example.demo.service; import com.example.demo.dto.ResDTO; im..
툴 변경 이유? 지난 글에서 계속 java.lang.ClassNotFoundException: Cannot find implementation for com.example.demo.mapper.UserMapper 오류가 난다고 했었는데요. 구글링 하며 온갖 방법을 다 써봐도 (의존성 설정 순서도 중요하다고 해서 다 해봤는데도....ㅠㅠ) 해결이 되지 않았습니다. 이클립스의 문제라고 하는 글들도 있어서 결국 선택한 해결 방법이 Tool을 바꾸는 것이었습니다. ( 해결이라고 해도 되나 싶네요. ) 그렇게 다들 인텔리제이 인텔리제이 할 때 학생용 이메일을 잊어버렸고, 유료로 쓰자니 취준생에겐 꽤 부담이 되어서 그간 흐린 눈 했었는데요. 이번에 방통대 편입을 하면서 새로운 학생용 메일이 생겼습니다! 👍 http..
Entity와 DTO Entity 엔티티는 데이터베이스 테이블에 매핑되는 객체입니다. 주로 데이터베이스의 상태를 나타내고 비즈니스 로직을 포함할 수 있습니다. 보통 JPA(Java Persistence API)와 함께 사용되어 데이터베이스와 상호 작용합니다. 데이터베이스의 구조를 반영하고, 데이터베이스 연산(CRUD)을 수행하는 데 사용됩니다. DTO DTO는 데이터를 전송하기 위한 객체입니다. 주로 클라이언트와 서버 간의 통신에서 사용됩니다. 클라이언트로부터 받은 요청이나 서버에서 보내는 응답에 사용됩니다. 엔티티와는 달리 비즈니스 로직을 포함하지 않으며, 주로 데이터 전송을 위한 필드를 갖습니다. MapStruct 자바 언어용 객체-객체 매핑 라이브러리입니다. 자동으로 매핑 코드를 생성하여 반복적이고..
공부를 안한 게 아니고요... 날마다 일어나는 새로운 오류에 정신을 못차리고 있습니다. 이제 회원관리 구현하는데 이게 무슨...ㅠㅠ 아무튼 며칠 시달리다가 겨우 해결한 오류를 기록해보겠습니다. 일단 회원가입 기능을 구현하는데 react에서 axios를 사용해 POST 메서드로 요청을 보내면 계속 PropertyValueException 오류가 났습니다. 에러 메세지 org.hibernate.PropertyValueException: not-null property references a null or transient value : com.example.demo.entity.UserEntity.email 디버깅을 해보면 값이 안들어오고 죄다 null인 모습을 볼 수 있습니다.. 그 와중에 password..
에러 메세지 회원가입 로직을 테스트하는 중에 해당 문제가 발생했습니다. 클라이언트에서 POST 방식으로 요청을 보낼 수 있는 API를 만들어서 전달했는데, 요청 시 아래와 같은 Exception이 발생하는 이슈입니다. Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content-Type 'application/x-www-form-urlencoded;charset=UTF-8' is not supported] 원인 해당 코드에서는 객체를 JSON 형식으로 전송하려고 시도하고 있는 반면, 요청의 콘텐츠 타입이 'application/x-www-form-urlencoded'로 설정되어 있는 것이 원인입니다. RestAPI의 경우 보통..
ERD 최종_진짜최종_진짜진짜최종.jpg 같은 느낌.... 이렇게 간단한 ERD를 5번이나 수정하고 있습니다..! 오늘은 도대체 어떤 문제 때문에 ERD를 또 수정했는지 기록해보도록 할게요. 1️⃣ 문제 스프링부트에 MySQL을 연결해 회원가입 기능을 테스트 하던 도중 다음과 같은 에러가 발생했습니다. 2️⃣ 오류메세지 java.sql.SQLSyntaxErrorException: Unknown column 'ue1_0.user_id' in 'where clause' DB에 컬럼이 없어서 SQL 명령어 실행이 실패 했다는 내용입니다. 3️⃣ 원인 아무리 DB를 보고 Entity를 봐도 분명 해당 컬럼들이 다 작성되어 있는데 도대체 왜 컬럼이 없다는 거지? 하고 한참을 헤매었습니다. 원인은 간단했는데요! 바..
API 서비스 (아이디 중복 확인 구현) 개발 후 테스트를 진행하던 중에 계속해서 403 오류가 났습니다. 이에 대한 해결 과정을 잊어버리기 전에 기록해봅니다. ⭕ build.gradle에서 Springboot version 3.2.1로 업그레이드 3.2.0의 고질적인 문제라고 하여 아래의 두 가지를 수정해주었습니다. build.gradle 파일에서 Springboot 버전 3.2.1 로 업그레이드 plugins { id 'java' // java 프로젝트로 설정 id 'org.springframework.boot' version '3.2.1' // 3.2.1 버전의 스프링 부트로 설정 id 'io.spring.dependency-management' version '1.1.4' // 스프링 부트의 의존..
Register.js 전체 코드 더보기 import React from "react"; import '../css/Register.css'; import Nav from "../components/Nav"; import { useState } from "react"; import axios from "axios"; let Register = () => { let [user,setUser] = useState({ userId : "", password : "", name : "", birth : "", email : "", phone : "", addr1 : "", addr2 : "" }); let dupIdCheck = () => { axios.post('http://localhost:8082/api/v..