일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- jdbc
- 정적 팩터리 메서드
- @controller
- 동시성
- Batch
- oauth2.0
- fetch join
- AWS
- @Transaction(readOnly=true)
- MySQLTransactionRollbackException
- ngrinder
- Cache
- spring-cloud-starter-aws
- mockito
- assert
- N + 1
- 성능테스트
- 이펙티브 자바
- Convention
- awspring
- Git
- Cannotacquirelockexception
- injellij
- batch insert
- OIDC
- JPA
- Hibernate
- @RequestMapping
- 데드락
- spring
- Today
- Total
목록전체 글 (17)
정리정리
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..
정적 팩터리 메서드란? 정적 팩터리 메서드란 생성자를 static 메서드로 감싸 해당 클래스의 인스턴스를 반환하는 메서드입니다. 자바의 boxed class나 collections에서도 많이 볼 수 있죠. 그렇다면 정적 팩터리 메서드에 어떤 장점이 있는지 이펙티브 자바 책을 기반으로 알아보겠습니다. 정적 팩터리 메서드 장점 1. 생성자가 이름을 가질 수 있음 클린코드 책의 초반부부터 강조하는 내용이 바로 '이름'입니다. 잘 지어진 이름을 통해 클라이언트는 원하는 동작을 기대하고 함수나 메서드를 호출을 합니다. 하지만 생성자는 그 자체만으로 어떤 특징을 가진 인스턴스를 생성하는지 알기 힘듭니다. 특히나 생성자의 파라미터가 늘어나고, 생성자의 종류가 많아질수록 언제 어떤 생성자를 사용해야 할지 알기 힘들어지..
@Transactional에는 읽기 전용인 readOnly 옵션이 있습니다. 처음에는 그저 Isolation level 설정 정도로 생각을 했었지만 그로 인해 JPA에서 성능의 차이가 발생하는 점을 알게 되어 포스팅을 하게 되었습니다. @Transactional(readOnly = true) 성능 비교 우선 성능 차이가 왜 발생하는지 알아보기 전에 정말 성능 차이가 있는지 먼저 확인해 보겠습니다. @Service @RequiredArgsConstructor public class MemberService { private final MemberRepository memberRepository; @Transactional public void getMembersWithReadOnlyFalse() { mem..
io.awspring.cloud의 spring-cloud-starter-aws 라이브러리를 이용해 s3를 연결하다가 생긴 문제점에 대해 찾아보고 정리하는 포스팅입니다. 문제 상황 및 해결 스프링 부트 3에서 작성한 s3 연결 예제가 기존의 스프링 부트 2를 사용하는 프로젝트에서 작동하지 않았습니다. 문제 원인은 제가 마음대로 작성한 properties 키 이름 때문이었습니다. #기존 문제가 발생한 키 이름 #ncp: # credentials: # accessKey: accessKey # secretKey: secretKey # s3: # bucket: bucketName # endpoint: https://kr.object.ncloudstorage.com # region: # static: kr-stan..