반응형

분류 전체보기 488

[220819] 우아한테크코스 3차, 4차 데모데이 후기

레벨3가 끝이 나면서 우아한테크코스 데모데이도 4차 최종까지 끝이 나게 됐다! 원래는 3차와 4차를 따로 쓰려 했지만, 필자의 귀차니즘으로 인해 3차와 4차를 한꺼번에 묶어서 쓰게 됐다 ㅎㅎ 이와 함께 우리 프로젝트도 레벨3가 끝남과 동시에 출시가 됐다. 아직 리팩터링하고 싶은 부분, 구현하고 싶은 부분이 좀 남아있어서 메이저버전을 올리지 않은 0.4.1 버전이긴 하다. 하지만 자유롭게 모임을 생성해서 롤링페이퍼와 메시지를 쓰고 마이페이지에서 그에 대한 정보를 확인할 수 있으니 편하게 접속해서 롤링페이퍼를 이용해주면 좋을 듯하다. https://www.naepyeon.site/ 내 편 www.naepyeon.site 우리가 만든 프로젝트를 구경하려면 위 링크로 접속하면 된다 :) 모임 기반 롤링페이퍼 서..

[Spring] @SpringBootTest의 webEnvironment와 @Transactional

우리는 @SpringBootTest 어노테이션을 이용하여 손쉽게 통합테스트를 진행할 수 있다. 하지만 @SpringBootTest의 webEnvironment 설정에 따라 테스트 격리가 잘 되지 않는 현상을 발견할 수 있다. 왜 그런 것일까? @SpringBootTest의 webEnvironment @SpringBootTest를 파고 들어가면 아래와 같이 webEnvironment 세팅을 볼 수 있다. 기본값은 MOCK이다. WebApplicationContext를 로드하지만, 내장된 서블릿 컨테이너가 아닌 MOCK 서블릿을 제공한다. 실제 서블릿 환경에서 테스트를 진행해보고 싶다면 RANDOM_PORT나 DEFINED_PORT로 진행해주어야 한다. RANDOM_PORT랑 DEFINED_PORT는 위 사..

[Spring] @MockBean VS @SpyBean

Spring Boot 환경에서 여러 협력 객체들이 존재하는 통합테스트는 빈을 호출하기 위해 @SpringBootTest를 사용하는 경우가 많다. 그리고 협력 객체들이 많을 때에는 테스트를 위한 기대 행위 전처리 작업을 mockito를 이용하여 stub을 통해 test double을 만들어주는 경우들이 존재한다. @SpringBootTest와 함께 사용한다면 @Mock, @InjectMocks 대신 @MockBean을 주로 사용할 것이다. 그런데 테스트 코드를 작성하는 방법에 대해 공부하던 도중 @SpyBean이라는 어노테이션을 알게 됐다. 이 어노테이션은 뭐하는 애일까? 그리고 어떻게 사용하는게 좋을까? @MockBean 개인적으로 나는 웬만해선 @MockBean 대신 실제 객체를 사용하는 방식을 사용하..

[Spring] log4j2를 활용한 로깅 전략을 다룬 yml 파일을 생성하자

배포 환경에서, 그리고 개발하면서 api를 맞춰보면서 특정 문제가 발생했을 때 그에 대한 기록을 남겨두면 이후에 그 기록을 바탕으로 대처를 할 수 있다. Spring에서는 다양한 logging configurations들을 제공한다. log4j, logback, log4j2들이 대표적이다. 이번 포스팅에선 log4j2를 선택한 이유와, 개발 및 배포환경에서 각각 다른 log4j2 yml을 어떻게 만들었는지 작성해보도록 하겠다. logback vs log4j2 log4j는 2015년에 서비스가 종료됐고, 오래된 로그 프레임워크이기 때문에 제외하도록 하겠다. logback log4j 개발팀이 제작하여 기본적으로 log4j와 비슷하지만 성능이 향상됨. spring-boot-starter-web의 기본 로깅 프..

[Sonarqube][Error] Process exited with exit value [es]: 1 에러 해결

sonarqube(소나큐브)를 스프링부트 프로젝트와 연동해서 띄우려는데 아래 에러가 발생했다. Process exited with exit value [es]: 1 Process[es] is stopped SonarQube is stopped 해당 에러가 발생하는 이유는 여러가지가 있는 듯하다. 내가 겪고 이 에러를 해결할 수 있었던 방법을 모두 써보겠다. 아쉬운 점은 이 에러의 정확한 발생 경위 및 원인은 잘 모르겠다는 것이고, 해결 방법만 적어보려 한다. 1. 소나큐브와 JDK (Java) 버전 호환성 문제 소나큐브 9.6 버전 기준, JDK 8과 JDK 17은 호환되지 않는다. 공식문서에서 자신의 자바 버전이 소나큐브와 호환되는지 확인해보자. (공식문서 링크: https://docs.sonarqub..

Infra/CI | CD 2022.08.20

[CI] Github Actions로 빌드 및 테스트를 자동화해보자

CI(Continuous Integration)는 지속적인 통합을 의미하며, 개발자가 구현한 코드를 병합하여 자동으로 빌드 및 테스트를 진행한 후 문제가 없으면 배포를 진행하는 것을 의미한다. CI 툴 없이 Git Conflicts 만으로는 안전한 병합을 기대하기 어렵다. 그 이유는 아래 글을 참고하자. https://kth990303.tistory.com/363 [Git] git no conflict를 너무 믿지 말자 부제: CI/CD 툴 Jenkins, github actions의 중요성 부제 2: 작업 브랜치에 아무리 충돌날만한 게 없다고 생각되더라도 항상 최신 base branch를 반영해주자 너무나도 당연한 걸 간과해서 오늘 또 삽질을 했다 kth990303.tistory.com 이번 포스팅에선..

Infra/CI | CD 2022.08.19

[Sonarqube][Error] Process exited with exit value [es]: 137 해결

sonarqube(소나큐브)를 연동하여 띄우려 하던 도중 아래 에러가 발생했다. 2022.08.12 10:05:27 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /app/sonarqube/sonarqube-7.6/temp 2022.08.12 10:05:27 INFO app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001 2022.08.12 10:05:27 INFO app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [/app/sona..

Infra/CI | CD 2022.08.19

[Sonarqube][Error] You're not authorized to run analysis. Please contact the project administrator. 해결

sonarqube를 프로젝트와 연동하여 PR이 올라올 때마다 build 결과를 sonarqube에게 전송해주려 했다. 그런데 빌드가 실패하면서 아래와 같은 에러를 마주하게 됐다. You're not authorized to run analysis. Please contact the project administrator. SECRET_HOST_URL, SECRET_TOKEN 값도 제대로 들어오고 있었고, Sonarqube의 Server Base Url에도 올바른 값을 지정해주고 있었다. 근데 왜 에러가 발생하는걸까? 해결 방법 나의 경우는 원래 아래와 같이 properties를 build.gradle에 모두 명시해주고 있었다. 중요한 환경변수는 github의 Secret Configuration을 이용해..

Infra/CI | CD 2022.08.18

[Sonarqube][Error] Process exited with exit value [es]: 78 _ max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 에러 해결

정적 코드 분석 툴인 sonarqube(소나큐브)를 띄우려 하던 도중, 아래와 같은 에러가 발생했다. ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] Process exited with exit value [es]: 78 Process[es] is stopped SonarQube is stopped 소나큐브 EC2 db를 h2에서 postgreDB로 마이그레이션했더니 vm.max_map_count이 부족하다는 에러가 떴다. ec2 인스턴스의 vm.max_map_count를 늘려줘야겠다. 세팅 방법 1. 아래 명령어를 s..

Infra/CI | CD 2022.08.18

[Git] git no conflict를 너무 믿지 말자

부제: CI/CD 툴 Jenkins, github actions의 중요성 부제 2: 작업 브랜치에 아무리 충돌날만한 게 없다고 생각되더라도 항상 최신 base branch를 반영해주자 너무나도 당연한 걸 간과해서 오늘 또 삽질을 했다. 일기장처럼 오늘 삽질한 내용에 대해 적어보려 한다. (지나가던 애기가 깔깔깔 배를 잡으면서 웃을만한 정도로 부끄럽고 바보같은 트러블 슈팅이다.) base branch (develop)에 PR을 하나 머지한 후에, 겹치는 부분이 없다고 생각해서 별도로 작업 브랜치 (feature)에는 pull (fetch merge)해주지 않고 이어서 작업한 후에 PR을 날렸다. 좋아, 테스트도 잘 되고, 실행도 잘 되는 걸 확인했다! Build Successful도 확인했다! base 브..

Infra/Git 2022.08.17
반응형