Spring Security는 API 요청 URL 중 ;나 //가 포함되어 있으면 RequestRejectedException을 내뱉는다. 로깅을 할 때 해당 예외는 Security 필터 단에서 터지는 예외이므로 ControllerAdvice가 핸들을 하지 못해서 이렇게 지저분하게 로그가 남게 된다. 이를 처리하지 않게 하기 위해서는 다음과 같이 설정해 주면 된다. @Bean fun setDefaultFirewall(): StrictHttpFirewall { val firewall = StrictHttpFirewall() firewall.setAllowSemicolon(true) firewall.setAllowUrlEncodedDoubleSlash(true) return firewall } 자세한 건 공..
11번가 백엔드 개발자를 지원하면서 치렀던 코딩테스트에 대한 후기이다. 서류를 접수하고 2일뒤에 메일로 연락이 왔었다. 서류 합격여부는 없었고 대뜸 codility 코테로 초대하는 메일이었다. (영어로 되어있어서 순간 스팸메일인 줄 알았다..) 코테는 100분 동안 3문제를 푸는 것으로, 3일 이내 아무 시간 때나 링크로 접속해서 풀면 됐었다. 여하튼 코테를 치러야 하는데 플랫폼은 codility라는 처음 보는 해외 플랫폼이었다. 문제도 영어로 나온다고 했다!! (다행히 구글링이 가능해서 구글번역의 도움을 엄청나게 받았다.) 나는 처음 보는 플랫폼이어서 일단 demo 기능으로 테스트를 모의로 볼 수 있는 기능이 있어서 해봤는데 프로그래머스랑 비슷한 것 같아서 메일을 받은 당일 밤에 바로 코테를 봤다. 나..
이번글은 AWS EC2로 서비스를 배포해서 운영하면서 지속적으로 EC2 인스턴스가 죽어버리는 이슈를 트러블슈팅한 내용을다룬다. 해당 글의 연장선이다. https://mopil.tistory.com/128 지속적인 EC2 의문사 오류를 찾기 위한 조사 과정에 대한 회고 이상하게 DDD 동아리 프로젝트 서버가 종종 죽는 상황이 발견되었다. 꽤 오래전부터 식별되었던 문제였는데, 초반에는 그냥 죽을 때마다 재부팅하는 식으로 해결하다가 원천 해결을 해야겠다고 mopil.tistory.com # 장애 원인 핵심 원인 : DB 커넥션 부족으로 인한 EC2 CPU 사용량 99% 초과, EC2 상태검사에 통과하지 못 해서 서버 중단 우선 원인은 이거였는데 무엇때문에 이게 발생하는지 알 수 없었다. (초기에는 위의 글 처..
SSL 인증서가 AWS CloudFront로 설정되어있다면 EC2로 유입되는 트래픽을 제한하는 걸 아주 쉽게 할 수 있다. # CloudFront 설정 # 테스트 https://tools.pingdom.com/ Pingdom Tools Full Page Test Analysis tools.pingdom.com 다음 사이트에서 해외 IP로 트래픽을 전송해 볼 수 있다. tes from을 아무대로 선택하고 start test를 누른다. 403이 뜬다면 해외 IP 차단에 성공한 것이다.
https://hackathon.sparcs.org/ SPARCS 2023 StartUp Hackathon 우리의 생각이 한계까지 함께하는 곳, SPARCS 2023 StartUp Hackathon hackathon.sparcs.org KAIST에서 주관하는 해커톤에 참여하게 되었다. 개인, 팀 단위로 지원할 수 있었는데, 우리는 기획(1), 디자인(1), 개발(3)로 팀을 사전에 구성하여 지원하였고 총 96명, 20팀이 해커톤에 참여했다. 나의 첫 해커톤이였고, SPARCS 측도 첫 번째 해커톤 주최였다. 그래서 많은 것들을 느낄 수 있었는데, 이를 정리하고 기록하고자 한다. # 해커톤 기본 정보 장소 : 영등포 올댓마인드 2층 기간 : 2박 3일 (01/27~01/29) 50시간 숙박 : 제공, 토요..
QueryDSL을 사용해서 검색 쿼리를 작성하는 방법에 대해서 공유하고자 한다. # 요구사항 예시 "모집 글(Recruit)"이라는 엔티티를 10개씩 검색해서 페이징 처리해서 내려줘야 한다. Recruit은 보통 게시물이라고 생각하면 편할 것이다. # QueryDSL 리포지토리 구조 본인은 QueryDSL로 리포지토리를 구성할 때 위와 같은 구조를 가장 많이 채택한다. 사용해 보니 이 구조가 가장 깔끔한 것 같다. RecruitRepositoryCustom에 검색을 위한 search 메소드를 구현할 것이다. # RecruitController @GetMapping("/recruit") public ApiResponse searchRecruit( @PageableDefault(sort = "id", dir..
Vuetify의 v-text-field와 v-time-picker, v-dialog를 활용하여 text field를 클릭하면 time picker를 띄우고, 사용자가 시간을 입력하면 텍스트 인풋에 그 값이 들어가도록 하는 커스텀 컴포넌트를 만들어본다. # TimePicker.vue Cancel OK allowed-minutes는 특정 함수를 전달해주면 time picker의 시간 단위를 제한할 수 있다. (위 처럼 적용하면 5분 단위만 선택 가능) 해당 컴포넌트에서 받은 time 상태를 emit을 통해 상위 컴포넌트로 넘겨주면 다른곳에서 text field 값을 사용할 수 있다.
이번에는 FCM (Firebase Cloud Message)라는 무료 메시징 서비스를 통해서 앱,웹으로 푸시 알림을 보내는 API 예제를 작성하는 방법에 대해 알아본다. # Firebase, Spring Boot 설정 다음 일련의 과정을 따라한다. 스프링 부트에 넣을 json 키를 생성해야 한다. 생성된 json 파일을 잘 모셔둔다. 그리고 스프링 부트 resources 디렉토리 밑에 그대로 넣어준다. 그리고 Gradle에 다음 의존성들을 추가한다. implementation("com.google.firebase:firebase-admin:6.8.1") implementation("com.squareup.okhttp3:okhttp:4.9.1") okhttp는 파이어베이스에 토큰값을 요청할 때 사용할 예정..