Language & Framework/삽질기록 Language & Framework/삽질기록 2024. 7. 11. embedded redis를 사용하고 싶은데 m1 맥북이라 안 되는 불쌍한 사람들은 이 글을 보십시오 취업 전에 프로젝트를 진행하던 시절 embedded redis로 로컬 환경에서 테스트를 진행하려고 했었는데당시에도 이미 개발이 중단된 라이브러리라 m1 맥북에서는 정상 구동이 안 돼서 슬펐던 경험이 있었다 직접 바이너리 파일 받아서 resources에 박으면 되긴 하는데 맘에 안 들잖아요?그래서 이후로 전 직장에서는 TestContainer를 도입해서 사용했었는데.. 이직했더니 embedded redis로 테스트가 구축이 되어 있는 것이다.. (아마 테스트 컨테이너가 느려서 사용하지 않는 것으로 추측)근데 다들 잘 된다고 한다.. 근데 나만 안 된다.. 다들 m시리즈 맥북이고 os 버전도 같은데.. 왜 나만 안 돼..분명 뭔가 세팅하신 게 틀림 없는데 다들 근무한지 오래된 분들이라 기억을 못하시는 것 .. Language & Framework/삽질기록 2024. 4. 29. Nest.js 설치 시 Failed to execute command: npm install --silent 에러 결론은 제일 밑에 있으니 급한 사람은 밑에 보세요..이건 제 일기장입니다.. 오랜만에 킹받아서 써봄. 간만에 자스로 뭔가 해볼 일이 생겨서 nest.js로 프로젝트를 생성하려고 하는데 아래와 같은 에러가 발생했다. 🙏🙏 이모티콘이 너무 킹받는다.습관적으로 그대로 긁어서 구글에 검색했더니 KT 회선 문제라고.. 미러 서버 통해서 설치하면 된다고 한다. 스포 : 안 됨 에러 안 뜬다고 좋아했는데 15분이 지나도록 여기서 진행되질 않는다.뭔가 잘못됐다.그래서 레지스트리 세팅은 원상복구해놓고 스택오버플로우를 뒤져봤다. https://stackoverflow.com/questions/57115017/nestjs-failed-to-execute-command-npm-install-silent .. Language & Framework/삽질기록 2024. 3. 28. UnExpectedRollbackException과 예외를 잡아내지 못한 거짓 음성 테스트 센트리에 생전 처음 보는 에러가 나타났다.이게 대체 무엇이냐? 이게 뭔지는 이미 다른 훌륭한 개발자 분들이 아주 상세하게 정리해주셨다.온라인 쓰레기를 생산하지 않기 위해 자세한 설명은 생략한다. 아래 링크 보셈. https://techblog.woowahan.com/2606/ 응? 이게 왜 롤백되는거지? | 우아한형제들 기술블로그{{item.name}} 이 글은 얼마 전 에러로그 하나에 대한 호기심과 의문으로 시작해서 스프링의 트랜잭션 내에서 예외가 어떻게 처리되는지를 이해하기 위해 삽질을 해본 경험을 토대로 쓰여졌습니다.techblog.woowahan.com 요약하자면 아래와 같다.1. try catch로 감싼다고 롤백 안되는 거 아니다.2. 예외가 자식 트랜잭션의 경계를 넘었다면 해당 트랜잭션의 r.. Language & Framework/삽질기록 2023. 2. 2. 삽질기록(23) Redis SortedSet으로 랭킹 기능 구현하기 이전 프로젝트였던 모락모락에서는 DB로 회원 랭킹을 관리했었는데, 해당 프로젝트는 조인해야할 테이블이 너무 많아서 쿼리 최적화로 상당히 애를 먹었던 기억이 있다. 물론 그건 내 쿼리 능력이 부족했기 때문이지만.. 아무튼 이번에는 Redis의 Collection 중 SortedSets을 이용해서 랭킹 기능을 구현하려고 한다. Redis를 사용해보는 것 자체는 처음이 아니지만 SortedSets은 처음 사용해본다. 레퍼런스를 빠르게 대충 훑어봤는데 내가 원하는 정도의 기능은 별 거 없이 단순하게 작동하는 것 같다. 스프링에서 제공하는 메서드가 뭐가 있는지는 몰라서 나도 지금 실시간으로 소스코드 보면서 해볼 생각이다. 혹시나 보고 따라할 사람 있으면 일단 아래의 RedisConfig를 먼저 작성하도록 하자. .. Language & Framework/삽질기록 2023. 1. 25. 삽질기록 (21) 비동기 이벤트 테스트하기 모임의 주최자가 예약을 승인하거나 거절하면 예약 참여를 신청한 회원에게 이메일을 전송한다. 이 때 메일은 외부 서비스이기 때문에 만약 해당 서비스까지 Transaction이 이어진다면 불필요하게 처리 시간이 길어진다는 문제가 있다. 또한 메일 전송은 주요 관심사가 아님에도 메일 전송이 실패하면 요청에 대한 수락/거절도 불가능해진다. 메일 전송이 실패하든 성공하든 그게 모임에 대한 수락/거절의 결과에 영향을 끼치면 안되는 거 아닐까? 또한 어차피 무조건 모임에 대한 수락/거절만 성공했을 때 이메일의 결과는 "내 알 바?"라면 굳이 해당 처리가 끝날 때까지 유저가 기다려야할 이유도 없다. 그래서 해당 부분을 비동기 이벤트로 구현했고, 위와 같은 형태로 실행된다. 파라미터로 flag를 사용한 게 마음에 걸리기.. Language & Framework/삽질기록 2023. 1. 23. 삽질 기록(20) Extract Function 기법으로 결제 요청 코드 리팩터링하기 사실 이번엔 삽질 기록은 아니고, 가장 기본적이면서도 내가 제일 좋아하는 리팩터링 기법인 Extract Function에 대해 다루고자 한다. 사실상 IDE가 대부분의 일을 해주고 몇가지만 수동으로 해주면 되기 때문에 가장 손쉬운 리팩터링 기법이다. 오늘 리팩터링할 친구는 토스에 최종 결제 요청을 보내는 PaymentRequestService라는 클래스의 requestPayment()다. 현재 requestPayment()의 흐름은 다음과 같다. 1. Base64 인코더로 SecretKey를 인코딩하여 authKey를 생성한다. 2. RestTemplate 인스턴스를 생성한다. 3. HttpHeaers 인스턴스를 생성한다. 4. HttpHeaers의 인스턴스에 필요한 값들을 세팅한다. 5. Request.. Language & Framework/삽질기록 2023. 1. 10. 삽질 기록(19) DTO에서 멤버 객체 유효성 검사하기 지난 프로젝트에서는 모든 요청을 날것(?)으로 받았었는데, 이번 프로젝트는 도메인이 예약이라 그런지 단순 커뮤니티 때보다 요청사항이 복잡해서 객체 형태로 연관된 데이터끼리 모아서 받고 있다. 이런 형태로 말이다. 근데 테스트 코드를 작성하던 도중 문제가 발생했다. DTO 객체 내부의 값은 유효성 검사가 진행되지 않는다. "아.. 이거 커스텀 어노테이션 만들어야하나..?" 라는 고민을 하다가 Baeldung에서 새로운 정보를 알게 되었다. https://www.baeldung.com/javax-validation-method-constraints(출처) 리턴 메서드에 어노테이션을 붙임으로서 값을 검증할 수 있다고 한다. 어노테이션 만들어서 해도 크게 어려울 건 없지만, 그래도 신문물 적용해보는 게 더 재미.. Language & Framework/삽질기록 2022. 12. 28. 삽질 기록 (18) 또 너냐 Jackson.. JsonMappingException 해결하기 이번에도 여느때와 다름 없이 열심히 테스트 코드를 작성하고 있었다. 근데 터졌다. Caused by: java.lang.NullPointerException: null at com.example.momobe.user.domain.Role.getRoles(Role.java:31) ~[main/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.refl.. 이전 1 2 3 다음