Back End
-
[테스트코드] Test Fixture 로 *.sql 파일을 사용해도 될까?Back End/테스트코드 2023. 10. 2. 17:12
Test Fixture 세팅 회사에서 레거시 SSR 프로젝트를 FE/BE 가 각각 작업할 수 있도록 분리한적이 있었다. 해야할 일이 너무나도 많았다. View 에서 필요한 API 들의 목록을 정리 및 새롭게 작성 언어를 Java 에서 Kotlin 으로 변경 Spring Framework 5 에서 Spring Boot 2.7.3 으로 변경 JPA, Security 환경 세팅 모든 API 에 대한 독립 인수테스트 작성 코드 리팩토링 대충 위와 같은데, Kotlin 을 처음 다뤄보던 시기라 환경설정부터 Java 와 다르게 동작하는 경우가 잦았다. 시간의 압박때문에 타협을 본 것 중 하나가 Test Fixture 를 *.sql 파일을 이용하여 작성하였다는 것이다. @Sql( value = [ "classpath..
-
Dynamic DTO 만들기Back End/유지보수 2023. 5. 8. 18:04
우리는 가끔 마주한다. Third-Party API 의 응답값이 동적으로 오는 경우를 말이다. 무시무시한 API 우리는 이러한 응답을 받고, API 제공자에게 `event=true` 이면 가격은 0원이라는 어마어마한 비지니스 로직을 전달받는다. ...그래... 그럴 수 있지... 이럴 때 Response DTO 를 작성하는 법을 기록한다. (더 좋은 방법이 있다면 업데이트 하겠습니다.) Dynamic DTO 만들기 data class ProductApiResponse( val name: String, @JsonProperty("price", required = false) val price: Int?, @JsonProperty("event", required = false) val event: Boole..
-
[Spring] Filter 단에서 발생하는 예외처리하기Back End/Spring Boot 2023. 5. 8. 17:34
AccessDeniedHandler, AuthenticationEntryPoint 등 뭔가 제한적인 예외처리가 아닌 전역적인 예외처리를 하고 싶었다. 프레임워크에서 제공해주는 예외처리법이 있지 않을까 싶어 최대한 예외처리 필터를 끼워넣는 일은 지양하고 싶었지만 시간에 쫒겨 타협을 해버렸다. 근데 막상 작성해보니까 괜찮은 것 같다. 존재하는지는 모르겠지만 러닝커브가 있는 프레임워크가 제공해주는 예외처리법을 학습하지 않아도 필터 동작에 대한 개념만 있다면 누구든 아래의 코드를 이해할 수 있을테니까 말이다. 더불어 하나의 필터에서 스프링 컨텍스트 외부의 예외를 처리할테니 유지보수 비용도 크지 않아보인다. 예외처리 필터 CommonException 을 상속 받은 모든 Exception 은 모두 예쁘게 예외처리 ..
-
[AWS] Setting up Cloudfront signed cookies for multiple paths in Java, KotlinBack End/AWS 2023. 5. 1. 18:29
What we need to do 1. Find AWS SDK Library 2. Assgin openssl rsa public key to Cloudfront 3. Set SignedCookie to Response in Application Code Example Kotlin Code fun getBookContentResponse( req: HttpServletRequest, res: HttpServletResponse, bookContentId: String ): BookContentResponse { val expireCalendar = Calendar.getInstance() expireCalendar.add(Calendar.MINUTE, 60) val resourcePath = "$bookC..
-
[AWS] CloudFront SignedCookie 특정경로 하위 모두 적용하기 (Java, Kotlin)Back End/AWS 2023. 5. 1. 18:10
서론 Node.js 에 대한 레퍼런스는 넘치는데에 비해 Java 에 대한 레퍼런스가 거의 없었다. GPT 에게 물어봐도 JS 레퍼런스 코드를 Java 형식으로 변환해놓은 듯한 괴랄한 코드를 주었다... (이게 편항된 학습인 것인가...) CookiesSigner 같은 생성자는 없었단 말이다.. 구글링해서 나온 JS 예제코드가 GPT 가 만들어준 Java 코드와 미칠듯이 흡사하다. Signed Cookie 목적 URI 에 대한 접근권한을 제어하고 싶을 때 사용한다. 보통 S3 를 Cloudfront 로 배포하여 서빙하게 되는데, CloudFront(S3)의 특정 URL 에 대해 Signed Cookie 를 획득한 사용자만 접근가능하도록 할 수 있다. 작업 목록 1. AWS SDK 라이브러리를 찾는다. 2...
-
Redis 전체 키 조회, 삭제 등 명령어 모음Back End/etc 2023. 4. 28. 19:07
단순 기록용 포스팅입니다. 와... 안쓴지 얼마됬다고 기억이 안나는건지... 역시 기록을 해야 빠르게 찾을 수 라도 있나 봐요... Redis 명령어 redis:6379> keys * // 전체 키 조회 redis:6379> flushall // 전체 키 삭제 redis:6379> hgetall {keyName} // 해당 키에 매핑된 모든 필드 조회 redis:6379> del {keyName} // 해당 키 삭제 redis:6379> hget {keyName} {fieldName} // 해당 키에 매핑된 특정 필드 조회 redis:6379> hdel {keyName} {fieldName} // 해당 키에 매핑된 특정 필드 삭제
-
클라이언트 IP 알아내는 법Back End/etc 2023. 4. 25. 19:16
개인 기록용 포스팅입니다. Reference [Java] 1. 클라이언트 실제 접속 IP 가져오기 클라이언트 실제 접속 IP 가져오기 linked2ev.github.io 서론 어떠한 리소스에 대한 접근이 가능한 Token, URL, Cookie 등을 생성할 때, 해당 리소스가 공유되지 않도록 하고 싶을 때가 있다. 유저 ID 로 식별하면 되나, 유저 ID 로 식별이 불가능한 경우 IP 로 접근제한을 걸 수도 있다. (Netflix 처럼..) 클라이언트 IP 를 가져오는 법 X-Forwarded-For 헤더(중개서버마다 다름)에 담긴 값을 가져오면 된다. 해당 헤더에는 여러개의 IP 값이 존재할 수 있기 때문에 필요한 IP 를 뽑아서 쓰면된다. X-Forwarded-For 헤더 기준 보통 1번째 값이 원 ..
-
CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (2) - 가상의 브라우저에 대한 CSRF 공격, 서버의 책임과 브라우저의 책임Back End/보안 2023. 4. 23. 21:22
목차 1. CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (1) - CSRF 공격이란 무엇인가 2. CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (2) - 가상의 브라우저에 대한 CSRF 공격, 서버의 책임과 브라우저의 책임 3. CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (3) - CSRF 공격을 직접 시도해보자 (Safari 브라우저) 4. CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (4) - SOP, CORS, Browser, Third-Party Cookie, SameSite) 5. CSRF(Cross-Site Request Forgery)..