본문 바로가기
728x90

TIL61

[240103] 심화 주차 KPT회고 Keep (계속 이어갔으면 하는 부분) infra 활용해서 하고 싶은 것들 다 해볼 수 있었음 팀원들의 적극적인 참여, 코드 리뷰를 통해 완성도 높은 프로젝트가 나올 수 있었음 컨벤션을 설정하고 지킴으로써 통일성 있는 코드를 작성함 Issue와 PR을 적극적으로 활용함 CI/CD 환경을 구축함으로써 여러 팀원이 개발에 참여했음에도 충돌의 문제 등 불필요한 시간을 보내지 않음 팀원 모두가 Rivew를 작성함으로써 코드 개선에 도움이 됌 컨벤션을 미리 잡고 프로젝트를 시작한 점. 그리고 이를 sample 디렉토리로 프로젝트 시작때 만들어 둔 것. 단순히 문서화 이상으로 어떻게 코드를 작성해야하는지 바로 확인하며 작성할 수 있어서 아주 좋았음 스타일 가이드를 미리 적용해놓고 시작한 점. Google style.. 2024. 1. 3.
[240103] 심화 프로젝트 마무리 :: 컨벤션 지금까지 해왔던 프로젝트들 중에서 가장 알차면서도 힘들었던 심화 프로젝트를 마무리하면서 프로젝트 동안 배운 것들을 조금씩 정리해보려고 한다. 구현 기능, ERD, API 명세, 기술 스택 등은 깃허브 레포지토리의 readme에서 확인할 수 있다. 깃헙 주소: https://github.com/yejin-kingdom/value-together GitHub - yejin-kingdom/value-together: 가치 있는일을 같이 진행하자! 일정 공유 어플리케이션! 가치 있는일을 같이 진행하자! 일정 공유 어플리케이션! . Contribute to yejin-kingdom/value-together development by creating an account on GitHub. github.com 컨벤.. 2024. 1. 3.
[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.