본문 바로가기
728x90

전체 글247

[231228] service 테스트에서의 MultipartFile 프로필 수정 API를 구현한 뒤 서비스단의 테스트 코드를 작성하는 과정에서 매개변수로 MultipartFile 타입을 받아야 했다. MultipartFile 타입의 매개변수를 가지고 테스트 코드를 작성하는 것이 처음이었기 때문에 이번 기회에 정리해두려고 한다. 테스트 대상: Service의 updateProfile() @Override public UserUpdateProfileRes updateProfile(UserUpdateProfileReq req, MultipartFile multipartFile) { UserValidator.validate(req); User savedUser = getUser(req.getUserId()); String imageUrl = savedUser.getProfile.. 2023. 12. 28.
[231227] 이메일 인증 구현 (링크 방식) 이번 팀 과제에서는 회원가입, 프로필, 댓글 기능을 담당하게 되었다. 지금까지 과제에서 회원가입 시 이메일 인증 기능을 구현해본 적이 없었기 때문에 이번 기회에 공부해보고자 하였다. 처음에는 네이버 SMTP를 이용하였다가 application.yml에 계정 비밀번호가 노출되는 문제가 있어 앱 비밀번호를 사용하는 Gmail SMTP로 변경하였다. 이메일 인증 과정 이메일 인증에는 대표적으로 사용자가 입력한 이메일 주소로 인증 코드를 전송하여 해당 코드를 입력받는 방식과 이메일의 링크를 클릭하면 이메일 인증이 완료되는 방식이 있다. 이번에는 링크 방식으로 구현해보았다. 인증 과정는 다음과 같다. sendEmail API에 email을 담아서 요청을 보낸다. 사용자가 입력한 주소로 이메일을 전송한다. 이때 이.. 2023. 12. 27.
[231221] update 시 Timestamp 값으로 null이 반환 문제 상황 게시글을 수정하는 API를 구현하는 과정에서 기존의 방식과 달리 repository.save() 매서드를 사용하여 update한 내용을 반영하고자 하였다. 이때 createdAt과 modifiedAt 필드의 값이 null로 반환되었다. PostServiceImpl 기존 코드 :: updatePost() @Override @Transactional public PostUpdateRes updatePost(Long postId, PostUpdateReq req, User user) { Post post = postReadService.getPostEntity(postId); PostValidator.checkPostAuthor(post, user); Post savedPost = postRepos.. 2023. 12. 21.
[231219] QueryDSL, JPQL Spring 3.X 버전 연동 설정 dependencies { .... // 9. QueryDSL 적용을 위한 의존성 (SpringBoot3.0 부터는 jakarta 사용해야함) implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persisten.. 2023. 12. 19.
[231218] 이진트리, 힙 이진 트리 (Binary Tree) 이진 트리의 종류에 대해서 확실히 모른다는 생각이 들어서 정리해보았다. 트리(tree): 노드와 엣지로 이루어진 비선형 계층적 자료구조 이진 트리의 종류 1. 이진 트리: 모든 노드들이 두 개 이하의 자식을 가진 트리 2. 이진 탐색 트리 (Binary Search Tree, BST): 왼쪽 자식은 부모보다 작고 오른쪽 자식은 부모보다 큰 이진 트리 삽입, 삭제, 탐색의 시간복잡도: 평균 O(logN), 최악 O(N) 순회 종류 전위 순회: root -> left child -> right child 중위 순회: left child -> root -> right child 후위 순회: left child -> right child -> root 3. 정 이진 트리 (f.. 2023. 12. 18.
[231213] MySQL 공부 동명 동물 수 찾기 https://school.programmers.co.kr/learn/courses/30/lessons/59041 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 동물의 중복되는 이름과 그 개수를찾는 문제이다. 중복되는 이름의 개수를 어떻게 세면 좋을지 몰라 처음에 어렵게 느껴졌다. Order by로 이름으로 그룹화해서 각 그룸 내에서 count를 이용해줌으로써 해결할 수 있다. 코드 SELECT NAME, COUNT(NAME) AS COUNT FROM ANIMAL_INS GROUP BY NAME HAVING COUNT(NAME) > 1.. 2023. 12. 13.