본문 바로가기

Spring13

[Spring] @TransactionalEventListener 자신이 작성한 오브젝트(피드, 댓글)에 다른 유저가 상호작용(좋아요, 댓글, 대댓글)을 하면 알림주는 기능을 구현했습니다. 알림은 오브젝트들과 강한 결합을 만들기는 적절하지 않다고 생각해서 EventListener를 사용하면 어떨까? 생각했습니다. EventListener를 이용해서 특정 시점(좋아요 저장, 댓글 저장, 대댓글 저장)에 알림을 저장하는 이벤트를 실행시켰습니다. 이때 신경썼던 포인트는 다음과 같습니다. 상호작용(좋아요, 댓글, 대댓글)을 저장할때 알림이 저장에 실패한다고 상호작용도 함께 롤백되서는 안됩니다.(알림은 저장에 실패해도 상호작용은 정상적으로 저장되야함) 상호작용 저장에 실패하면 알림도 저장되어선 안됩니다. 위 두가지 요구사항을 충족하기 위해 사용한 EventListener는 @T.. 2021. 8. 25.
[Spring] @ModelAttribute @RequestParam @RequestBody 차이 스프링의 @RequestMapping Handler Method 중 요청값을 받아올 때 자주 사용되는 것으로 다음 3가지가 있습니다. @ModelAttribute @RequestParam @RequestBody 특히 @ModelAttribute 와 @RequestParam 은 사용하는 방법이 비슷하여 "둘 다 똑같은거 아니야?" 라고 쉽게 착각 할 수 있습니다. (저 혼자만의 착각 일 수 있습니다.) 그럼 @ModelAttribute 와 @RequestParam의 차이를 알아보면서 추가로 @RequestBody는 또 어떤 기능이 있는지 알아보겠습니다. @ModelAttribute 메서드 인자에 @ModelAttribute 애노테이션을 사용하여 model에 있는 attribute에 접근할 수 있습니다. (.. 2021. 4. 15.
SpringBoot build.gradle 설정 Gradle 프로젝트를 처음 만들면 build.gradle의 초기 상태는 아래와 같습니다. plugins { id 'java' } group 'com.example.park' version '1.0-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' } 위의 코드들은 자바 개발에 가장 기초적인 설정만 되어있는 상태입니다. 아래는 스프링 부트에 필요한 설정을 추가한 전체 코드입니다. buildScript { ext { springBootVersion = '2.1.7.RELEASE' } repositories.. 2021. 1. 26.
스프링 트랜잭션에서 RuntimeException이 발생하면 롤백이 발생하는 이유 (참고 : woowabros.github.io/experience/2019/01/29/exception-in-transaction.html) CheckedException : 예외 발생 시트랜잭션을 롤백하지 않고 예외를 던져줍니다. UncheckedException : 예외 발생 시 트랜잭션을 roll-back 합니다. roll-back이 되는 범위가 달라지기 때문에 개발자가 이를 인지하지 못하면 실행 결과가 맞지않거나 예상치 못한 예외가 발생할 수 있습니다. 스프링의 선언적 트랜잭션 (@Transactional) 안에서 RuntimeException 이 발생하면 롤백이 발생하여 롤백 예외가 발생합니다. (try-catch 문을 이용해서 RuntimeException을 잡더라도 롤백이 발생합니다!) 위의.. 2021. 1. 17.
세션 저장소를 사용하는 3가지 방법 보통 애플리케이션을 만들면 서버를 재시작 했을 때 세션도 초기화 됩니다. 이것은 세션이 내장 톰캣의 메모리에 저장되기 때문에 서버가 재시작될때 초기화가 되는것입니다. 즉, 배포할 때마다 톰캣이 재시작되어 세션이 초기화 되어버리는것입니다. 그리고 만약 2대 이상의 서버를 사용한다면 톰캣마다 세션동기화를 시켜줘야만 합니다. 그래서 실제 협업에서는 다음 3가지중 한가지를 선택합니다. 1. 톰캣 세션을 사용한다. - 일반적으로 별다른 설정을 하지 않을 때 기본적으로 선택되는 방식입니다. - 이렇게 될 경우 톰캣(WAS) 에 세션이 저장되기 때문에 2대 이상의 WAS가 구동되는 환경에서는 톰캣들 간에 세션 공유를 위한 추가 설정이 필요합니다. 2. MySQL 과 같은 데이터베이스를 세션 저장소로 사용한다. - 여.. 2020. 7. 25.