분류 전체보기
-
Spring REST Docs 세팅기🚀카테고리 없음 2022. 8. 7. 18:22
0. intro 저희는 기존엔 API 명세를 notion을 통해 작성했습니다. 하지만 실제 코드와 연동되지 않는 점이 불편했고, API별 테스트를 통한 검증을 하고 싶었습니다. 이에 신뢰성있는 API 문서를 프론트엔드에 공유할 수 있는 REST Docs를 사용하기로 했습니다. 다음은 REST Docs 를 세팅하고 문서화 한 과정입니다. 1. build.gradle plugins { id 'org.springframework.boot' version '2.7.1' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id "org.asciidoctor.jvm.convert" version "3.3.2" } group = 'com.w..
-
Jenkins의 Mulitbranch Pipeline을 통한 CI/CD카테고리 없음 2022. 8. 6. 17:37
우아한테크코스 Level3 팀 프로젝트의 스프린트 2에서 개발 환경에 CI/CD를 적용했습니다. 스프린트 3에서는 팀원들과 1.0을 배포하기로 결정했고 운영 환경에도 CI/CD 환경을 구축하기로 했습니다. 기존의 Pipeline 기존에는 dev 환경에서만 CI/CD가 이루어져있었습니다. 따라서, Jenkins의 item중 pipeline을 사용했었습니다. 아래가 Github Repository에 push가 일어났을 때 실행되었던 script입니다. node { stage('Ready'){ sh "echo 'Ready'" git branch: 'dev', credentialsId: 'sokdak_hook', url: 'https://github.com/woowacourse-teams/2022-sokdak'..
-
HTTPS 적용기카테고리 없음 2022. 8. 6. 15:24
HTTPS 적용기 우아한테크코스 Level3 팀 프로젝트의 스프린트 3의 요구 사항 중에, HTTPS를 적용해야 하는 기능이 있었습니다. HTTPS를 적용한 방법에 대해 알아보겠습니다. Nginx 여러 방법 중, Nginx를 통해 Https를 구현한 이유 먼저, Nginx를 통해서 Https를 구현했는데요. 아래와 같은 이유때문에 Nginx를 선택했습니다. Nginx가 SSL 설정이 간단하다. 추후에, Nginx가 Load Balancing, html css등의 정적 리소스 서빙 등의 역할을 해줄 수 있다. 사실, Nginx를 위한 EC2를 따로 구축하지 않아서 당장 로드밸런싱의 효과를 볼 수 없지만, 추후에 Nginx를 통해서 Load Balancing을 진행할 예정이니, Nginx을 써보자. 레퍼런스..
-
@Transactional 왜 안됨..?카테고리 없음 2022. 8. 6. 15:04
우아한 테크코스 Level3 팀 프로젝트 서비스에서 smtp를 통한 email 인증 기능이 있었습니다. public void sendCodeToValidUser(EmailRequest emailRequest) { String serialNumber = encryptor.encrypt(emailRequest.getEmail()); authService.validateSignUpMember(serialNumber); String authCode = saveAuthCode(serialNumber); sendEmail(emailRequest, authCode); } @Transactional protected String saveAuthCode(String serialNumber) { authCodeReposi..
-
우당탕탕 테스트 격리 트러블 슈팅기카테고리 없음 2022. 8. 1. 13:14
0. 문제 상황 HashtagServiceTest(서비스의 테스트) 코드를 짜던 도중이었습니다. 전체 테스트들을 실행할 시, HashtagServiceTest가 랜덤 확률로 통과하거나 실패하는 상황이 반복되었습니다. 대략 5번 테스트를 실행할 시 1번 꼴로 테스트가 실패했습니다. 막상 HashtagServiceTest만 돌렸을 땐 테스트가 문제없이 통과했습니다. 1. 문제 해결 랜덤한 확률로 테스트가 실패할 때 고려해야 할 부분은 다음과 같습니다. 테스트 메소드의 로직이 잘못되어 순서에 따라 다른 테스트 코드가 영향을 받고 있을 수 있다 테스트 환경이 잘못되어 온전한 초기화가 이뤄지지 않고 있다 둘다 결국 테스트 격리의 문제입니다. 이중 저는 2번, 테스트 환경의 문제라고 판단했습니다. 먼저 실행되는 인..
-
연관관계 편의메서드를 사용해야 하는 이유카테고리 없음 2022. 7. 31. 23:40
문제 상황: 특정 post의 누적신고가 몇개인지 확인하는 서비스 테스트 PostReport와 Post는 다대일 양방향 관계 Post와 PostReport 5개를 생성 후 jpa를 통해 save jpaRepository에서 post를 findById를 통해 조회하면 Post 내부의 List 필드에 PostReport가 자동으로 채워질거라 기대 하지만 post.getPostReport.size()가 0이 나옴 기대와 결과가 다른 이유 테스트코드라 하나의 @Transactional로 묶임 따라서 jpa에서 findById가 실행됬을때 1차캐시에서 조회함 post와 postReport가 편의메서드를 통해 맵핑되지 않아 캐시에서 List에 아무것도 없는 Post가 조회됨 해결방법 편의메서드를 통해 객체 사이의 관..
-
스프링 STMP 도입하기카테고리 없음 2022. 7. 17. 17:12
사용법 구글 이메일을 이용해서 메일을 보내자. 5월 30일부터 기존의 보안 단계로는 연결이 되지 않는다. 2022 년 5월 30일부터 적용된 구글 보안 정책 위에서 앱 비밀번호를 누르면 16자리 비밀번호를 생성해준다. 그걸 따로 저장해두면 된다. 참고 블로그 spring.mail.host=smtp.gmail.com spring.mail.port=587 spring.mail.username= spring.mail.password= spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true MailSender 인터페이스를 JavaMailSender가 상속 받는다. 구현체는 JavaMailSend..
-
JPA에서 엔티티 저장 시간을 자동 생성하는 방법카테고리 없음 2022. 7. 10. 15:17
속닥속닥 서비스의 게시물 등록 기능 개발 중, 게시물 등록 시간을 저장해야 하는 요구 사항이 있었습니다. 팀원들과 이런 저런 방법을 적용해보고 최종으로 결정한 방법에 대해 소개해보겠습니다. 핵심만 알고 싶으신 분은, 아래의 동작하는 코드와 글의 최하단에 요약만 보셔도 이해를 하실 수 있습니다. 먼저 동작하는 코드입니다. @Entity @Getter EntityListeners(AuditingEntityListener.class) // 3, 4 public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "post_id") private Long id; @CreatedDate // 1 private Loc..