프로젝트 (35) 썸네일형 리스트형 추가로 해보고 싶은 것 1. 암호화 방식 SHA-2 & salt 로 변경하여 단방향 암호화 처리 해보기 -> 완료 2. 이력 테이블 복합키로 생성 3. 코드 리팩토링 페이지네이션 js 코드 재사용할 수 있게 만들어본 페이지네이션 코드이다. 부트스트랩을 적용해서 동적으로 페이지네이션을 생성할 때 사용할 수 있다. 1페이지에 5개의 항목을 기준으로 페이지네이션을 진행하고 있다. 서버에서 int totalCount, List list 를 응답값으로 전달한다. 응답값을 js파일에서 그려주면서 아래의 createPagination()을 실행해주면 된다. /** * 페이지네이션을 그려주는 함수 * @param totalCount 총 결과수 * @param currentPage 현재 페이지 * @param keyword 검색어 */ function createPagination(totalCount, currentPage, keyword){ /** * 현재 페이지 몇인지 받아오기 * totalCount .. 개인프로젝트에 @CreatedBy 적용하기 인프런 김영한님의 실전! SPRING DATA JPA 강의를 듣다가 Auditing을 이용하면 자동으로 작성자 정보를 DB에 저장할 수 있다는 것을 알게 되었습니다. 실제로 개인프로젝트를 진행하면서 적용해보았는데요, @CreatedDate 어노테이션과 달리 추가 설정 정보가 더 필요했기에, 기록해보고자 합니다. 적용할 프로젝트 정보 : JDK17, Spring Boot v3.2.0 Spring Data JPA Spring Security 여기서는 Member엔티티와 Article엔티티를 가지고 기록해두겠습니다. BaseTimeEntity와 BaseEntity를 만들어줍니다. @EntityListeners(AuditingEntityListener.class) @MappedSuperclass @Getter .. 개인프로젝트에 Redis 적용 회고 이번 개인 프로젝트를 진행하면서, JWT도 같이 적용했었는데, 이때 accessToken은 클라이언트의 localStorage에 들어가도록 구현하고, refreshToken은 Redis에 저장하도록 구현해보았습니다. 이에 대한 회고를 진행해보겠습니다. 좋았던 점 NoSQL에 대해서 들어만 봤어서 어렵진 않을까 생각했는데, 실제로 사용해보니 일단 생각보다 도입이 쉬웠습니다. 레디스는 다양한 데이터 타입을 지원하는데, 이번엔 Set 형태로 활용했습니다. Redis 효과가 좋다던데 과연 어떨까? 더보기 t2.micro 기준 Redis 도입전 EC2 CPU utilization : 1.8% 도입 후 EC2 CPU utilization : 1.77% 세션 1개 기준 별 차이없는 것 같다...? Response T.. 트러블 슈팅 : 구글 로그인 인증(Google Auth) 승인 오류 403 오류( access_denied) 프로그램을 AWS에 배포하고 나서 구글클라우드 콘솔의 Oauth2 로그인 설정화면에서 도메인을 실제 배포된 도메인으로 변경하였습니다. 그리고 배포된 애플리케이션 내에서 Oauth2 로그인을 실행하니 아래와 같은 결과창이 표시됩니다. 오류를 구글에 검색해봤는데, 테스트 멤버를 추가하는 방식 나와있었습니다. API를 외부로 설정했는데 왜 이럴까? 싶어서 구글 클라우드 콘솔에 접속했습니다. 그렇습니다. 게시상태에 잘 나와있듯이, 게시상태를 테스트에서 프로덕션 단계로 변경해야 테스트 멤버 말고 다른 멤버도 로그인이 가능한데, 그러려면 HTTPS URL이 필요합니다. 배포를 HTTPS에서 해야하는 것입니다... 저는 HTTPS를 구축할 계획은 없었어서 여기서 마무리 하는 것으로...^^ 트러블 슈팅 : JPA leftjoin N+1 문제 원래 Article 조회 시 모든 join을 fetchjoin으로 하고 있었어서 문제가 없었는데 Article의 Hashtag가 없는 경우 fetchjoin으로 조회할 수 없어서 쿼리를 아래와 같이 변경했다. @Query("select a from Article a " + "join fetch a.category c " + "join fetch a.member m " + "left join a.articleHashtags ah " + "left join ah.hashtag h " + "where a.id =:id") Article findArticleByArticleId(@Param("id") long id); 이랬더니 N+1문제가 발생했다. 해시태그가 만약 2개가 있는경우 조회쿼리1번, ah조회쿼리 1.. 대댓글 JPA로 구현하기 Comment라는 엔티티를 부모와 자식 상속관계로 구현한다. commentResponseDto.getCommentId() = 1 commentResponseDto.getContent() = 댓글1 commentResponseDto.getParentId() = null child.getContent() = 답글1 commentResponseDto.getCommentId() = 2 commentResponseDto.getContent() = 답글1 commentResponseDto.getParentId() = 1 child.getContent() = 답글1의 답글1 commentResponseDto.getCommentId() = 3 commentResponseDto.getContent() = 답글1의 답글1.. spring security에서 로그인 한 사용자의 권한 체크용 간단한 코드 @RestController @RequiredArgsConstructor public class MemberController { @GetMapping("/test/1") // 권환 확인용 public Collection 이전 1 2 3 4 5 다음