일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- Cannotacquirelockexception
- fetch join
- intellij
- 프로젝트 이름 변경
- AWS
- Batch
- 정적 팩터리 메서드
- @controller
- JPA
- oauth2.0
- assert
- 이펙티브 자바
- convertAndSendToUser
- Git
- naturalid
- N + 1
- 성능테스트
- batch insert
- mockito
- injellij
- OIDC
- ngrinder
- spring
- @RequestMapping
- spring-cloud-starter-aws
- awspring
- websocket
- @Transaction(readOnly=true)
- Hibernate
- MySQLTransactionRollbackException
- Today
- Total
목록전체 글 (20)
정리정리

소켓 통신을 구현하면서 비즈니스 로직 예외 처리를 구현하다가 겪은 삽질들을 기록하려고 합니다.목표는 크게 두 가지였습니다.전역적인 비즈니스 예외 처리subscribe 과정에서 예외가 발생할 경우, 구독에 실패하며 예외 처리우선 동작하는 최종 코드입니다.@Configuration@RequiredArgsConstructor@EnableWebSocketMessageBrokerpublic class WebSocketConfig implements WebSocketMessageBrokerConfigurer { private final AuthChannelInterceptor authChannelInterceptor; private final StompExceptionHandler stompExcepti..

@NaturalId@NaturalId는 NaturalId(자연 키) 임을 명시해 주고, 캐싱과 같은 추가적인 기능을 제공하는 하이버네이트의 어노테이션입니다.자연 키로 사용하고 싶은 필드 위에 붙여주는 방식으로 사용할 수 있습니다.이 어노테이션은 JPA의 어노테이션이 아니기 때문에 캐싱을 사용하려면 하이버네이트의 API를 사용해야 합니다.import org.hibernate.annotations.NaturalId;@Entity@Getter@NoArgsConstructorpublic class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NaturalId private Strin..

demo 프로젝트를 생성하고 프로젝트 이름을 변경해 보도록 하겠습니다.settings.gradle에 있는 rootProject.name을 변경하려는 프로젝트 이름으로 변경하고 gradle refresh를 해줍니다.올바르게 변경이 되었다면 새로 변경된 프로젝트 이름이 위와 같이 변경됩니다.사실 저 부분은 Intellij에서 인식하는 프로젝트 이름입니다.Intellij의 프로젝트 설정(command + ;)에 들어가서 프로젝트 이름을 변경해도 위와 같이 보이게 되지만 settings.gradle의 값을 변경해 줘도 Intellij에서 자동으로 프로젝트 이름을 변경해 주기 때문에 따로 설정할 필요는 없습니다.마찬가지로 .idea/.name 파일도 Intellij를 종료 후 다시 프로젝트를 불러오면 현재 프로젝..

Assert란assert 조건식; //기본 형식assert 조건식 : 에러 메시지; //메시지 포함 형식assert age >= 0;assert age >= 0 : "나이는 음수일 수 없습니다";assert는 jdk 1.4에서 추가된 키워드로, 코드가 논리적으로 올바르게 작동하는지 확인하는 데 사용합니다. Assert, Exception 차이1. assert의 쓰임새어떻게 보면 if - exception의 간결한 표현이라고 생각할 수 있지만 둘의 쓰임새는 많이 다릅니다.마틴 파울러의 리팩토링 책에서도 assert의 사용법에 대해 다음처럼 언급합니다.• 코드에서 기본적으로 가정하고 있는 조건들을 주석이 아닌 Assertion을 사용해서 보다 명시적으로 나타낼 수 있다.• Assertion은 '반드시 ..

최근에 인프런의 스프링 강의 예제를 스프링 부트 3.1로 따라 치다가 겪은 문제점과 알게 된 점이 있어 정리해 보고자 글을 작성합니다. 문제 상황 우선 문제를 겪은 예제 코드는 다음과 같았습니다. @RequestMapping @ResponseBody public interface OrderControllerV1 { @GetMapping("/v1/request") String request(@RequestParam("itemId") String itemId); } public class OrderControllerV1Impl implements OrderControllerV1 { @Override public String request(String itemId) { return "ok"; } } AOP를 ..

사이드 프로젝트로 간단한 sns를 만들면서, 게시글에 좋아요를 누르는 기능을 만드는 과정에서 생긴 여러 문제점과 개선하는 과정을 기록해보려고 합니다. 기본적인 좋아요 기능 구현 우선 게시글(Post)과 좋아요(Like)가 일대다 연관관계에 있는 상태로 구현을 했습니다. @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Post extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private int likeCount; public void increaseLikeCount() { this.li..

최근에 nGrinder를 이용해서 사이드 프로젝트 성능 테스트를 하다가 다음과 같은 로그가 발생하면서 TPS 그래프가 정상적으로 그려지지 않았던 일이 있었습니다. [WARNING] The test is finished but has no TPS라는 문구가 뜨면서 제대로 처리가 되지 않는 경우였습니다. 스크립트를 작성하면서 여러 실수를 해보는 과정에서 몇 번 겪은 일이기 때문에 여느때처럼 예외를 보기 위해 로그 파일을 받아 열어봤습니다. 그런데 기대와는 달리 테스트가 끝났다는 received a stop message 로그를 띄운 후, communication shut down 로그만 달랑 내버려둔 채 로그 파일이 끝났습니다. 스크립트 문젠가 싶었지만 테스트한 스크립트는 테스트 서버 주소를 로컬에서 네이버..

nGrinder란? 우선 nGrinder란 네이버에서 제공하는 오픈소스 성능 테스트 툴입니다. 이를 통해 부하 테스트나 스트레스 테스트 등을 할 수 있고, 실제 환경과 최대한 비슷한 환경을 만들어 현재 서버가 얼마만큼의 동시 접속자 수를 견딜 수 있는지, 예상치를 넘는 사용자가 들어왔을 때 서버가 어떤 상태가 되는지 등을 미리 테스트할 수 있습니다. https://github.com/naver/ngrinder GitHub - naver/ngrinder: enterprise level performance testing solution enterprise level performance testing solution. Contribute to naver/ngrinder development by creat..