전체 글 47

Puru Board: 2.5차 배포 - 댓글 수정 시 버그 해결(기능 개선)

해결 과정을 시간 순서대로 따라가보자. 1. 댓글 수정 기능을 개발했으나, thymeleaf를 이용해서 댓글 수정 textarea에 댓글을 출력하고, 그 댓글을 바로 수정할 수 있는 방법을 못 찾았다. 내가 실현 가능한 방법은 아래의 2가지였다. th:text를 이용해서 댓글을 불러온 뒤 댓글을 수정해서 댓글의 content를 Post Mapping을 하는 updateReply Controller에 보내면 content가 null이라고 뜬다. 즉, 댓글 수정 화면은 보이지만 실제로는 수정한 댓글이 반영되지 않는다. th:field를 이용하면 댓글 수정 textarea에 댓글이 불러와지지 않았다. 이건 내가 GetMapping Controller의 Model Attribute 값과 th:each문의 변수 ..

Project/Puru Board 2022.12.30

Puru Board: 2차 배포 완료(댓글 수정·삭제 기능 추가)

1차 배포 후 알고리즘, 운영체제, 그리고 Spring MVC 강의에 집중하다보니 Puru Board 개발이 다소 정체되는 것 같아서 일단 개발이 완료된 댓글 수정, 삭제 기능을 포함하여 2차 배포를 했다. 3차 배포는 Valid를 통한 검증 기능을 구현한 뒤 시도할 예정이다. 1월 6일쯤에는 배포하고 싶다. 3차 배포 이후 기회가 된다면 회원가입, 로그인·로그아웃, 게시글 CRUD, 댓글 CRUD, 성능 개선과 관련해서 주제별로 글을 작성해보고 싶다.

Project/Puru Board 2022.12.30

Puru Board: 1차 개발 및 배포 후기

Puru Board는 게시물, 댓글, 회원 3개의 테이블로 이루어진 작은 프로젝트이다. 지난 기간동안 익힌 Java, Spring, JPA, MySQL, AWS 관련 기술로 실질적인 무언가를 만들어보고 싶어서 기획했다. 프로그램의 ERD는 다음과 같다. 초기 기능은 다음과 같다. 회원 가입, 로그인(일반·리멤버 미), 로그아웃 게시글 조회, 작성, 수정, 삭제 댓글 조회, 작성, 수정, 삭제 다음으로 각 기능의 특징을 살펴본다. 회원 회원 정보 중 비밀번호 정보는 bcrypt 방식으로 암호화를 한 뒤 데이터베이스에 저장하는 방식을 취한다. 로그인, 로그아웃 관련 기능은 스프링 시큐리티의 세션을 활용한다. AuthenticationProvider을 커스터마이징해서 구현하여 사용한다. RememberMe 기..

Project/Puru Board 2022.12.19

순환 참조 문제 - SecurityConfig에서 passwordEncoder와 filterChain의 remember-me 속성을 같이 사용할 경우

에러 메시지는 다음과 같습니다. The dependencies of some of the beans in the application context form a cycle: ┌─────┐ | securityConfig defined in file [C:\Users\username\IdeaProjects\Puru-Board\build\classes\java\main\com\puru\puruboard\config\SecurityConfig.class] ↑ ↓ | inMemoryUserDetailsManager defined in class path resource [org/springframework/boot/autoconfigure/security/servlet/UserDetailsServiceAutoCo..

Framework/Spring 2022.11.22

쿠키와 세션, 그리고 JWT

쿠키와 세션 둘 다 사용자 데이터를 저장하는 데 사용한다. 구체적인 사용처로는 로그인 유지 기능, 자동 로그인 기능, 쇼핑몰의 장바구니 기능 등이 있다. 웹 브라우저가 종료되어도 유지되는 것(웹 브라우저가 종료되어도 자동 로그인 가능, 쇼핑몰의 장바구니) -> 쿠키로 구현 웹 브라우저가 종료되면 정보가 사라지는 것(웹 브라우저 종료 전까지 로그인 유지, 쇼핑몰의 장바구니) -> 세션으로 구현 자동 로그인 기능의 경우에는 JWT의 Access Token, Refresh Token 방식으로도 구현이 가능하다. -> 쿠키에 토큰 담기 쿠키 세션 데이터 저장 장소 로컬 서버 로컬(쿠키)에서는 세션 ID만 가지고 있음 데이터 전송 매번 모든 쿠키를 서버로 전송 매번 세션 ID만 서버로 전송 생명 주기 개발자가 설..

CS/Network 2022.11.07

[IntelliJ IDEA] Current charset is UTF-8. If password has been set using other charset, consider using option 'passwordCharacterEncoding' 오류 나는 경우

인텔리제이 아이디어에서 Database 연동 시 Connection 오류가 나는 경우가 있다. 오류 전문은 다음과 같다. [28000][1045] Could not connect to address=(host 정보)(port=3306)(type=master) : (conn=3661) Access denied for user '이름'@'IP 주소' (using password: YES) Current charset is UTF-8. If password has been set using other charset, consider using option 'passwordCharacterEncoding' [28000][1045] (conn=3661) Access denied for user '이름'@'IP 주..

Util/IntelliJ IDEA 2022.08.30

최단 경로 알고리즘 정리

최단 경로 알고리즘에는 다익스트라 알고리즘, 벨만-포드 알고리즘, 플로이드 와샬 알고리즘이 있다. 다익스트라 알고리즘(Dijkstra's algorithm) 그래프의 어떤 정점 하나를 시작점으로 선택 -> 나머지 정점들로의 최단경로를 모두 구한다. 정점 개수 V, 간선 개수 E일 때 시간 복잡도: O(ElogV) weight(cost)의 값은 항상 0 이상이어야 한다. 만약 0 미만인 경우 벨만-포드 알고리즘을 사용하면 된다. 참고: https://m.blog.naver.com/kks227/220796029558 벨만-포드 알고리즘(Bellman-Ford Algorithm) 그래프의 어떤 정점 하나를 시작점으로 선택 -> 나머지 정점들로의 최단경로를 모두 구한다. 정점 개수 V, 간선 개수 E일 때 시간..

CS/PS 2022.08.28