분류 전체보기 215

Spring boot 파이널 프로젝트 트러블 슈팅 (암호화)

@PostMapping("/findPwd") @ResponseBody public ResponseEntity findPwd(String userName, String userId, String userMail) throws MessagingException { boolean checkUser = userService.findUserPwd(userName, userId, userMail); if (!checkUser) { return ResponseEntity.ok("사용자 정보를 찾을 수 없습니다."); } String tempPassword = emailAuthService.generateTemporaryPassword(); emailAuthService.sendTemporaryPassword(user..

카테고리 없음 2024.11.15

Spring boot resultType 종류 정리

resultMapresultMap은 복잡한 매핑을 처리할 때 사용한다. 예를 들어, 여러 테이블을 조인하거나 SQL 컬럼명이 Java 객체의 필드명과 다를 때 유용하다. 이 방법을 사용하면 SQL 결과를 더 세밀하게 매핑할 수 있다. resultMap을 정의할 때는 태그 내에서 컬럼과 객체의 필드를 매핑하는 방식이다.resultTyperesultType은 비교적 간단한 매핑에 사용된다. SQL 결과를 바로 Java 객체에 매핑할 때 사용하고, 객체가 아닌 기본 타입도 매핑할 수 있다. 쿼리가 간단할 때 이 방법을 많이 쓴다.constructor (생성자 매핑)constructor는 SQL 결과를 객체의 생성자에 매핑할 때 사용한다. 객체 생성 시 매핑이 필요한 경우에 유용하다.parameterMappa..

카테고리 없음 2024.11.14

KH 파이널 프로젝트 로그인 기능 구현하기 트러블 슈팅 하기

@GetMapping("/loginPage") public String userLoginPage(HttpSession session){ return "users/loginOrSignup"; } 먼저 로그인 버튼을 클릭하면 요청을 받을 controller이다 해당 요청을 통해서 users폴더안에 있는 loginSignup.html 페이지로 이동을한다.   @PostMapping("/enrollform") public String userLogin(Users user, HttpSession session,  RedirectAttributes redirectAttributes){ => Spring  MVC에서 리다이렉트 후에 일시적인 데이터를 전달할 때 유용한 인터페이스이다   RedirectAttribute..

카테고리 없음 2024.11.13

KH 파이널 메뉴 조건부 검색 기능 프로젝트 트러블 슈팅하기

나는 페이지가 리로드가 되지 않는 비동기 방식으로 사용자가 카테고리를 누르면 즉각적으로 반응하여 메뉴를 보여지는 기능을 구현하고 싶었다. 이러한 방식은 $.ajax를 통해서 구현을 하면 된다.   const checkboxes = document.getElementsByClassName('select-menu-list');   let suggestStatus = null;   const menuList = []; input태그들은 모두 checkbox 속성을 주었다.   for (let checkbox of checkboxes) {                 if (checkbox.checked) { 체크박스가 체크된 상태이면 true이므로 해당 조건문이 실행이 된다                    ..

카테고리 없음 2024.11.12

DOMContentLoaded와 onload

웹 페이지 로드 시점에 따라 DOMContentLoaded와 onload 이벤트는 다른 시점에 실행된다.둘 다 페이지가 로드된 후 특정 코드를 실행하게 해주는 이벤트지만,실행되는 방식과 시점에는 큰 차이가 있다. DOMContentLoaded 는 HTML 문서의 구조가 완전히 로드되고 DOM이 생성된 시점에 발생한다. HTML, JavaScript, CSS 등 주요 DOM 요소만 준비되면 바로 실행된다.예를 들면 페이지에 포함된 이미지, 비디오, CSS 같은 외부 리소스가 다 로드될 때까지 기다릴 필요가 없다.DOM 구조만 준비되면 바로 실행되기 때문에 빠르게 실행된다는 점이 장점이다.  onload 이벤트는 페이지의 모든 요소가 로드된 후에 발생한다.DOM 구조뿐만 아니라 이미지, 스타일시트, 스크립트..

카테고리 없음 2024.11.11

ResponseBody vs ResponseEntity

@ResponseBody  - 메서드가 반환하는 값을 HTTP 응답의 본문(body)으로 직접 전송을한다.반환된 데이터는 HTTP 응답의 본문에 직렬화 되어 클라이언트로 전송이 된다. 상태 코드나 HTTP 헤더를 따로 설정할 수 없다. Spring이 자동으로 기본 상태 코드(200 OK)를 설정해준다.  주로 JSON,XML 같은 데이터를 반환하는 REST API응답에서 사용이된다.  비유 - 전달하고 싶은 종이에 바로 적어 편지 봉투 없이 우체통에 넣는 법을 비유한다.@ResponseBody는 결국 편지 안 내용만을 전달하게 된다.     ResponseEntity :HTTP 응답의 본문(body), 상태 코드(status), 그리고 헤더(headers)를 모두 설정하여 반환할 수 있다메서드에서 Res..

카테고리 없음 2024.11.10

spring boot Model, Session, RedirectAttributes 비교

Model 객체를 사용하는 경우 : Model은 주로 현재 요청에서만 사용할 데이터를 전달할 때 적합하다. 로그인 오류와 같은 일회성 메세지를 전달하는 경우, Model에 데이터를 추가하는 것이일반적이다 Model은 해당 요청과 함께 메세지를 전달하고, 뷰가 렌더링되면 메세지가 사라진다.  Session을 사용하는 이유 Session은 여러 요청에 걸쳐 데이터가 유지될 필요가 있을 때 사용한다. 예를 들어 로그인 상태나 사용자 정보처럼 여러 요청에서 참조해야할 데이터를 저장할 떄 적합하다. (예시: 로그인 성공)이때 오류 메세지를 세션에 넣으면 이후 다른 페이지에서도 해당 메세지가 남을 수 있다.   리디렉트를 사용하면서도 메시지를 전달해야 하는 상황에서는  RedirectAttributes 을 사용하면..

카테고리 없음 2024.11.09

spring boot 이메일 중복 체크

@GetMapping("/checkEmail") public boolean emailCheck(String email){ Users emailCheck = userService.emailCheck(email); if(emailCheck != null) { return true;  } return false; } 나는 boolean 타입으로 ajax응답을 처리를 하려고 했다. 하지만 조회해본 결과   서 java.lang.IllegalArgumentException: Unknown return value type: java.lang.Boolean라는 오류가 발생했다.  그 이유는 Spring MVC는 기본적으로 boolean 반환타입을 HTTP 응답으로 처리를 할 수 없다고 한다.  기존 컨트롤러  @Ge..

카테고리 없음 2024.11.08

html 비밀번호 체크 및 spring 아이디 중복체크

script> document.querySelector('form').addEventListener('submit', function(event) { const password = document.getElementById('userPwd').value; const checkPassword = document.getElementById('checkPwd').value;  if (password !== checkPassword) { alert('비밀번호가 일치하지 않습니다.'); event.preventDefault(); // 폼 제출 방지 } });script>event.preventDefault(); 를 사용하는 이유 폼 제출 시 새로고침을 방지한다. 링크 클릭 시 기본 이동을 방지한다. 실습 예제 :..

카테고리 없음 2024.11.07

BCryptPasswordEncoder 암호화 처리

Controller에 BCryptPasswordEncoder  객체를 생성한다.  생성자 주입 방식으로 DI를 주기 위해서  private final BCryptPasswordEncoder bCrypt;으로 설정한다.  /login 로그인 요청 시  @RequestMapping("/login") public String loginMember(Member m , Model model , HttpSession session) { System.out.println("id --> " + m.getUserId()); System.out.println("pwd --> " + m.getUserPwd()); Member loginUser = mService.loginMember(m); if (loginUser != n..

카테고리 없음 2024.11.06