댓글 기능 생성 중 무한참조에 대해 고민하게 되었습니다. DB구조상 Board를 Select하면 Reply도 함께 Eager전략으로 불러오는데, Reply에서 다시 Board를 불러오는 구조로 형성되어 있었습니다. public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(nullable = false, length = 100) private String title; @Lob private String content; private int count; @ManyToOne(fetch = FetchType.EAGER) // board (N) : user (1) @JoinColumn(nam..
분류 전체보기
detail.html 댓글 등록 폼을 생성해줍니다. 등록 board.js btn-reply-save 버튼을 클릭 했을 때 동작할 코드를 작성해줍니다. reply-content id를 가진 태그의 값을 가져와 content에 저장하고 HttpBody에 Json형식으로 담아 /api/board/${boardId}/reply 주소로 POST 요청을 보냅니다. replySave: function () { let data = { content: $("#reply-content").val() } $.ajax({ type: "POST", url: `/api/board/${boardId}/reply`, data: JSON.stringify(data), contentType: "application/json; chars..
블로그 프로젝트의 카카오 로그인 기능은 사용자가 처음 카카오 로그인을 진행하면 자동으로 회원가입이 진행됩니다. 이때 개발자가 정해놓은 정적인 유니크 키에 의해 비밀번호가 저장되는데, 이런 로직은 서비스 상 문제가 발생할 수 있습니다. 유니크 키 유출 문제 유니크 키가 유출될 경우, 카카오 로그인을 사용하는 모든 사용자의 계정이 위험해집니다. 유니크 키가 유출된다면, 해당 키를 알고 있는 사용자는 모든 카카오 로그인 사용자의 계정에 로그인할 수 있습니다. 비밀번호 변경 문제 카카오 로그인 사용자가 비밀번호를 수정한 이후에 다시 로그인하면, 블로그 프로젝트 로직상으로는 정상적인 스프링 시큐리티 로그인이 불가능합니다. 이 문제를 해결하려면, 카카오 로그인(OAuth를 이용한 로그인) 사용자가 비밀번호를 변경할..
카카오 로그인 시 DB에 정보가 없으면 회원가입 진행 후 로그인을 진행하는 서비스를 생성하였다. 하지만 회원가입 진행 후 DB에는 정상적으로 데이터가 입력되나 로그인이 정상적으로 작동하지 않는 상황이 발생하였다. String kakaoUsername = kakaoProfile.getKakao_account().getEmail() + "_" + kakaoProfile.getId(); String kakaoEmail = kakaoProfile.getKakao_account().getEmail(); String kakaoPassword = cosKey; User kakaoUser = User.builder() .username(kakaoUsername) .password(kakaoPassword) .email..
회원정보 수정 기능은 사용자의 입력 값으로 DB의 정보를 최신화 시킨 다음 최신화된 DB정보를 바탕으로 스프링 시큐리티의 로그인 로직을 내부적으로 실행시켜 세션의 로그인 정보를 최신화 하는 방법으로 구현되었습니다. /user/updateForm.html 외부 자바스크립트 코드를 통하여 Ajax 통신을 진행할 것이기 때문에 button을 form태그 밖에서 작성합니다. input 태그의 id 값을 통해 입력값과 외부 자바스크립트 변수를 매핑해 줄 것 입니다. UserName: Password: Email: Email: 회원정보 수정 user.js /user 로 HttpBody에 json 형식으로 데이터를 담아 PUT 요청을 보냅니다. update: function (){ let data = { id: up..
스프링시큐리티 환경에서 회원 정보 수정 기능을 구현하던 중 회원 정보 수정을 완료하고 DB에 최신 데이터가 반영되었음에도 회원 정보페이지에 다시 접속하면 수정하기 전의 정보가 출력되는 현상이 발생하였습니다. 변경할 회원 정보를 입력하고 회원정보 수정 버튼을 클릭 시 정상 알림창이 출력되고 DB에도 정상적으로 수정된 정보가 반영된 것을 확인할 수 있습니다. 하지만,, 변경 후 다시 회원 정보를 요청하면 수정하기 전의 정보가 출력되는데 첫 번째 해결 방법 ❌ 이는 현재의 코드가 아래 예시 처럼 스프링 시큐리티 세션의 정보를 #authentication.principal로 가져와 사용자에게 출력하는 구조이기 때문에 일어나는 현상이었습니다. UserName: Password: Email: DB의 데이터가 정상적..
게시글 수정 기능 board/detail.html에서 수정 버튼과 버튼의 동작을 추가해야 합니다. 수정 버튼 클릭 시 /board/{id}/updateForm URI로 요청을 보냅니다. BoardController.java에서 해당 URI에 대한 응답을 매핑해줍니다. 수정하기 위한 view는 board/updateForm.html에서 생성합니다. 해당 view에서는 수정 완료 버튼 클릭 시 수행할 통신에 대한 자바스크립트 코드를 추가합니다. 요청에 대한 응답은 BoardApiController.java에서 매핑해줍니다. 마지막으로 게시글 수정에 대한 비즈니스 로직을 추가해줍니다. 아래에서 해당 순서를 바탕으로 코드의 추가를 진행하겠습니다. board/detail.html 게시글 상세보기 - 수정 버튼의 ..
게시글 삭제기능은 Data JPA 사용 시 매우 간단하게 구현할 수 있습니다. Detail.html 게시글에 저장되어 있는 게시글 작성 유저네임과 시프링 시큐리티 세션에 저장되어 있는 유저네임이 같다면 수정과 삭제 버튼이 보이도록 생성해줍니다. 수정 삭제 Board.js ajax 통신을 하기 위한 js 코드를 작성해줍니다. “/api/board/{boardId}" 로 DELETE 요청을 보내겠습니다. deleteById: function () { $.ajax({ type: "DELETE", url: "/api/board/" + boardId, dataType: "json", }).done(function (response) { // 요청 결과가 정상인 경우 const status = response.st..