목록photocard backend server 개발일기 (41)
개발일기

테스트코드에 관심이 많다보니, 자연스럽게 성능테스트에도 눈길이 갔습니다. 그래서 지금까지 성능 테스트를 Jmeter 사용하여 로컬에서 진행했습니다. 그러다가 문득 든 의문은 로컬에 있는 스펙과 서버에있는 스펙이 다른데 서버에서 성능 테스트를 더 좋다는 결론이 나왔습니다. 기존처럼 Jmeter로 진행할까도 고민했지만, k6 javascript 사용하여 손쉽게 성능 테스트를 할 수 있다는 장점이 있어 빠르게 습득할 수 있겠다는 생각이 들어 k6로 진행하겠습니다. services: influxdb: image: influxdb:1.8 ports: - "8086:8086" environment: - INFLUXDB_DB=k6 networks: - monito..

SonarQube 관련 글을 읽고 오시면 조금 더 이해하기 좋습니다. https://seounggyun.tistory.com/302 정적 코드 분석 AWS EC2 SonarQube 사용하여 Github Action CI 하기🤗 정적 코드 분석 vs 동적 코드 분석정적 코드 분석은 코드가 실행 되기 전 소스 코드 또는 바이너리 코드를 분석해 코드를 직접 실행하지 않고 코드의 구조, 문법, 스타일, 잠재적인 버그, 코seounggyun.tistory.com해당 글은 JaCoCo 테스트 커버리지에 대한 내용이기에 SonarQube는 제외하고 글을 작성하겠습니다. 해당 글을 작성한 계기는 SonarQube에서 단위 테스트 코드를 작성했음에도 불구하고, 테스트 커버리지를 인식하지 못하여 찾아보던 중, JaC..

저는 이전에 Security 코드를 짤 때 느낀점은 Mockito가 없다면 절대로 테스트하기가 힘들다는 점이다. 이마저도 Security 테스트 라이브러리를 그래들에 import하여 검증하였다. 하지만, 이번에는 Service 코드만 단순하게 테스트 검증한다면, 작동하게끔 코드를 작성해보려고 한다. 누군가는 왜 Session 방식으로 하지 않고, Jwt 방식으로 진행하는지에 대한 여부를 물어볼 수 있습니다. 저는 Session방식으로 하지 않은 이유는 일단 RestAPI 원칙은 stateless 하지 않습니다. 궁극적으로 저희 프로젝트에는 추후, 결제 시스템을 붙일 예정이며, 해당 부분은 서버를 분리하여 MSA형식으로 진행할 것이기에 적당하지 않다고 판단하여, Jwt방식으로 Elastic Cache 즉..
포토카드 프로젝트에서 V1 패키지 파일을 전부 그대로 유지한채 작업을 해야 했다. 해당방식은 그래서 똑같은 클래스 파일에 빈을 등록해버리면 빈등록 에러가 나버리기에 클래스 파일 이름을 변경해주었다. 그대로 기능이 v1은 유지를 해주어야하기 때문이다. 그러던 와중 QueryDSL No property 'xxxxx' found for type 'xxxxx' 타입 에러가 나왔다.해당 에러는 똑같은 필드 값과 JPA에서 매핑해주는 메소드가 다르다면 오류가 발생한다고 한다. 하지만 나의 경우는 queryDSL이여서 문제될게 없었다. 매우 당황스러운와중에 QueryDSL로 작업중 클래스 이름은 V1을 뒤에 붙여줬던것이 생각났고 MemberRepositoryImplV1이라고 되어있어서 MemberRepositro..
도메인 모델링을 진행해주는 이유는 모델링 및 기능 사항을 정의해주고, 진행하면 어떤 것을 테스트 코드로 작성할 지, 조금 더 손쉽게 작성 가능 하였고, 같이 진행하는 프로젝트 팀원들도 내 코드를 조금 더 이해하기 쉽게 해준다. 이는 엄청난 효과다. 왜냐면 유지보수 하기 좋은 코드가 될 수 있기 때문이다.또한 이런식으로 진행하면 테스트 코드 작성하면서, 예외 처리를 어디가 미흡했는지, 어떤 코드를 추가해야하는지도 더 잘 파악할 수 있다는 장점도 있다. 모델링 방식은 유비쿼터스언어, 바운디드 컨텍스트를 활용하여 진행하였다. 아직 유비쿼터스 언어, 바운디드 컨텍스트가 무엇인지 모른다면 아래 관련 글을 읽어 보는 것도 좋다. https://seounggyun.tistory.com/326 유비쿼터스 언어(보편..
@ApiResponses을 커스텀 어노테이션을 사용하기로 결심한 이유1. responseCode, description 을 수작업으로 반복적으로 모든 클래스에서 적용해야 한다.2. @ApiResponse의 코드가 길다 보니 중요 코드가 눈에 확 들어오지 않는다. 예시 코드) @RestController@RequestMapping("/api/v1/auth")@Tag(name = "인증", description = "인증 관련 API")public class AuthMailController { @Operation(summary = "이메일 인증 코드 전송", description = "사용자의 이메일로 인증 코드를 전송합니다.") @ApiResponses({ @ApiRespons..

소나 큐브 공식홈페이지에서 설치하면 된다. https://www.sonarsource.com/products/sonarqube/deployment/ Code Deployment Tools & Software | SonarQubeNew SonarQube versions are delivered both as zip files and Docker images. And STIG-hardened images are available from the Iron Bank.www.sonarsource.com 저의 경우 Community버전을 사용하였습니다. 도커 소나 큐브 설치 docker pull sonarqube:10.1.0-community docker를 실행 시켜주었다. docker run -d --name ..

우선적으로 Jmeter를 사용하여 Redis, DB로 사용하였을 때, 각각 부하테스트를 진행해보았다. 기존에 /v1 을 /v2로 변경중이다. Controller 코드이다. package com.realworld.web.auth.mail.controller;import com.realworld.application.auth.mail.service.AuthMailService;import com.realworld.v1.global.code.SuccessCode;import com.realworld.v1.global.response.ApiResponse;import com.realworld.web.auth.mail.payload.request.AuthMailRequest;import lombok.Requir..