원인 확인 저번에 Github Actions을 사용해서 CI를 구축하는 블로그를 썼었다. 유용하게 사용하고 있을 때, intellij에서는 테스트가 통과되지만 빌드에서는 막히는 상황이 발생하였다. intellij에서 테스트 돌렸을 때 inteliij 터미널로 테스트를 했을 때 물론 ./gradlew build도 잘 먹힌다. 하지만 Github Actions이 돌리는 빌드에서는 오류가 뜬다. 위 사진을 봤을 때, 이상한 점이 있다. 바로 10개의 테스트가 돌아갔지만 실패한 테스트는 2개라는 것이다. 그래서 위 사진에서 실패한 테스트들의 공통점을 찾아보았다. 바로 테스트가 돌아갈 때 DB를 사용한다는 것이다. @DisplayName("이미 존재하는 이메일로 회원가입할 시 예외 발생") @Test void c..
MapStruct는 매핑 코드를 자동으로 해주는 라이브러리이다. 예를 들어 Controller DTO에서 Service DTO로 변환할 때, 또는 ServiceDTO에서 Entity 객체로 변환할 때 매핑 작업을 해준다. 하지만 이렇게 일일이 작업을 하게 되면 오류가 발생할 위험이 있고, 또 무엇보다 귀찮다. MapStruct는 이러한 작업을 자동화 시켜준다. 하지만 잘못 사용하게 되면 아까운 시간을 날릴 수 있다. 문제 상황 아래는 User 엔티티를 UserInfo(ResponseDTO라고 봐도 무방하다.)로 변환하는 로직을 MapStruct를 써서 간단하게 구현한 코드이다. 만약 데이터가 다르다면 아래와 같이 Mapping으로 명시해주어야 한다. @Mapper( componentModel = "spr..
어제 배포를 위해서 ssh를 만지다가 잠이 들었다. 아침에 일어나서 하던 작업을 이어가려고 ssh에 접속하려 했더니 아래 문구가 떴다. ssh: connect to host 탄력적 IP port 22: Operation timed out ssh에 접속하지 못하고 타임아웃이 떴는데, 인바운드 규칙에서 내 IP 주소를 추가해주지 않아서 발생한 것이다. 그럼 추가해주자. 보안그룹에 들어가서 생성을 한다. 이름과 설명은 막 지어도 상관없다. (물론 연습이니까 그렇다. 실무에서 막 지으면 안될 수 도 있다) 그리고 인바운드 편집에서 아래와 같이 추가해주자. 그리고 보안그룹을 생성한다. 이제 자신이 만든 ec2에 보안 그룹을 추가하기만 하면 된다. 자신이 만든 인스턴스를 체크한 후 작업 -> 보안에 보안 그룹 변경..
어느날 깃에 푸시를 하는데 403 에러가 떴다. 권한문제라는 것은 알았지만 깃에서 403이 뜨는 경우가 있나 ? 싶어 구글링을 하며 고치려고 했다. 하지만 Organization에서 내 권한을 오너로 해주지 않은 문제였고, 오너로 변경하기만 하면 간단하게 끝나는 문제였는데 너무 성급하게 고치려고 하다보니 많이 꼬였다. 결국 토큰 생성 방식으로 푸시가 안되는 문제는 해결되었지만, 대신 푸시할 때마다 Username, Password을 물어보았다. 그래서 이번 포스팅에서는 물어보는 과정을 생략해보도록 하겠다. 푸시를 할 때 Username, Password 질문에 대해서 입력하고 푸시가 되면 아래 명령어를 입력한다. git config --global credential.helper store 캐싱으로 Us..
수동배포를 할 때 아래 명령어를 입력하고 프로젝트를 테스트하는 도중 실패가 떴다. ./gradlew test 아래는 실패했을 때의 에러문구다. 한번 번역해보니 버전에러인 듯 했다. 일단 버전문제 라는 것은 알았으니 좀 더 자세하게 봐보자. 윗부분에 자세하게 무엇이 잘못되어있는지도 나와있었다. What went wrong: Execution failed for task ':compileQuerydsl'. 에러문구를 번역한 것과 위 문구를 합쳐서 추측해보면, Querydsl을 컴파일을 하는데 버전이 너무 낮아서 생긴 문제다. 현제 EC2 자바 버전은 8버전인데, 내 프로젝트 버전은 11버전이기 때문이다. 그래서 EC2 자바 버전을 올려주기만 하면 해결 될 것같다. 다음과 같은 명령어를 입력한다. sudo y..
API 서버를 실행하려고 인텔리제이를 돌려봤더니 아래와 같은 오류가 나타났다. alter table board drop foreign key FKsds8ox89wwf6aihinar49rmfy 2022-08-11 09:48:53.222 WARN 89952 --- [ main] o.h.t.s.i.ExceptionHandlerLoggedImpl : GenerationTarget encountered exception accepting command : Error executing DDL " alter table board drop foreign key FKsds8ox89wwf6aihinar49rmfy" via JDBC Statement org.hibernate.tool.schema.spi.CommandAcce..
오류 요청에서 Header에 토큰을 넣었는데도 서버에서 Header에 있는 토큰을 가져오지 못하는 상황이 발생했다. 헤더 키 값을 다르게 했더니 나타나는 반응이 다른것을 보니까 키값을 읽어들이는 건 제대로 작동되는 것 같다. 키값 다르게 했을 때 더이상 콘솔이 찍히지 않음 키값을 같게 했을 때 밑에 콘솔이 뭐가 더 찍힌다. 하지만 토큰값은 가져오질 않는다.. 해결 1. getHeader("여기") 에 직접 적어주는 것이 아니고 명시적으로 필드에 작성했다. 2. 로그를 찍을 때는 메세지 이후에 쉼표가 아닌 플러스로 해야 콘솔에 값이 뜬다. 첫줄은 값이 뜨지만 두번째 줄은 값이 뜨지 않는다. + 와 ,의 차이는 띄어쓰기밖에 없는것 같았지만 아니었다. ,로 찍기 위해선 "헤더에서 받아온 토큰 값 = {}", ..
오류 Spring Security를 구현하고 있을 때 회원가입을 시도했을때의 오류다. 이 예외는 내가 UserDetailsService를 커스텀한 UserDetailsService에서 로그인요청할 때 입력한 아이디가 DB에 존재하지 않을 때 터트리는 예외였다. 분명 회원가입을 하는데 로그인을 할 때 실행되어야 할 클래스가 왜 터질까 ? 해결 문제는 내가 회원가입 요청할때 Header에 자꾸 토큰을 넣고 요청했기 때문이다. 이건 내 추측인데, 헤더에 토큰을 넣고 요청을 보낼 때 JwtAuthenticationFilter에서 헤더에 토큰이 있는 것을 보고 처리한 것이다. 즉, 사용자가 요청을 보내면 JwtAuthenticationFilter -> UsernamePasswordAuthenticationFIlt..
1. 문제점 처음에 페이징은 Page를 반환하여 사용하였고, 검색처리는 List로 구현하였다. 이러고 보니까 페이징은 되는데 검색처리가 안되고, 검색처리가 되니까 페이징이 안되는 현상이 발생하였다. 페이징 O, 검색처리 X일때 터지는 Exception ClassCastException 검색처리 O, 페이징 X일때 터지는 Exception TemplateInputException 결국엔 검색로직을 반환할때 Page Object로 반환하기만 하면 되는 문제였는데, 반환하는 법을 몰라 2시간동안 삽질하였다. 2. 해결 믿고보는 스택오버플로우 글들.. 간단하다. List로 불러온 것을 new PageImpl()로 감싸주기만 하면 된다.
- Total
- Today
- Yesterday