Back End
-
[Spring] 트랜잭션에 대한 실험과 고찰 (Self-invocation, 프록시가 메서드를 실행하기까지의 과정)Back End/Spring Framework 2024. 12. 1. 21:36
[Spring] 예외 발생시 Spring DB 트랜잭션 롤백 안되는 경우배경지식Checked Exception 은 개발자가 인지한 예외라 약속한다.Unchecked Exception 은 개발자가 인지하지 못한 예외라 약속한다.try-catch 문에서 catch 된 Exception 은 개발자가 인지한 예외라 약속한다.스프developer-ping9.tistory.com Spring DB 트랜잭션의 롤백 유무에 대해 정리하다가 프록시 객체가 언제 생성되는지, 어떤 원리로 만들어지는지 고찰을 하기 위해 여러 실험을 진행해보았다. 다른 블로그 글을 읽어도 이해가 잘안되고, 블로그마다 말이 좀 다른게 있어 쉽게 믿을 수가 없었다. 무엇보다 제일 궁금했던 점은 프록시가 나의 서비스클래스를 상속받아서 만들어지는지,..
-
[Spring] 예외 발생시 Spring DB 트랜잭션 롤백 안되는 경우Back End/Spring Framework 2024. 11. 27. 18:44
배경지식Checked Exception 은 개발자가 인지한 예외라 약속한다.Unchecked Exception 은 개발자가 인지하지 못한 예외라 약속한다.try-catch 문에서 catch 된 Exception 은 개발자가 인지한 예외라 약속한다.스프링은 개발자가 인지한 예외에 대해서는 기본적으로 롤백을 진행하지 않는다.예외가 발생한 메서드의 Propagation 레벨이 Required(default) 가 아니면 부모트랜잭션은 롤백되지 않는다.프록시가 Self invocation 을 시도할 경우 경우에 따라 트랜잭션이 롤백되지 않을 수 있다. [Spring] 트랜잭션에 대한 실험과 고찰 (Self-invocation, 프록시가 메서드를 실행하기까지의 과정)[Spring] 예외 발생시 Spring DB 트..
-
[테스트코드] 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...