본문 바로가기

전체 글42

[MSA] 마이크로 서비스의 빛과 그림자 MSA 관련 포스팅 한지 1개월... 그동안 포스팅을 못한 이유는 여러 가지가 있지만, 아무래도 가장 큰 이유는 스프링에 있다. 후반부로 갈수록 마이크로 서비스 구현 코드를 이해할 수 없었고, 무시하고 계속 진행하기엔 무리가 있다고 판단되었다. 그래서 잠시 MSA는 접어두고 스프링과 JPA, QueryDSL을 학습하는 시간을 가졌고, 학습하면서 그동안 많은 부분을 잘못 알고 있었음을 깨달았다. (사실 모르는데 그냥 넘어간 게 대다수였다.) 아무튼 이제 MSA코드가 잘 읽혀나간다고 생각이 되어 다시 포스팅을 이어나가 보려고 한다. 마이크로 서비스 구축 큰 서비스에서 시작해서 작게 리팩터링 한다. 처음부터 작은 서비스로 분할하게 되면 단순한 데이터 서비스로 전락할 수 있고, 너무 빠르게 복잡함을 야기시킬 수.. 2021. 4. 5.
[QueryDSL] Page와 Slice 본격적인 포스팅에 앞서 예전에 했던 프로젝트에서 인피니티 스크롤을 어떻게 구현했었는지 찾아보았다. ※ 혐오 주의 ※ scrollsize = 10; int start = (pageNum * scrollsize); int end = start + scrollsize; List list; List plist = new ArrayList(); if (categoryId == 100) {// 전체 게시물 출력 list = postDao.getPostByTempAndCategoryIdNotAndStatusNotOrderByCategoryIdAscCreateTimeDesc(temp, 102,0); if (list.size() >= start) { int newend = list.size() - start; if (n.. 2021. 4. 4.
[Data JPA & Query DSL] Repository의 구현클래스 선정 규칙 @Autowired 의존성 주입 프로젝트 리팩토링을 하던 중, 한 가지 의문이 생겼다. @Autowired UserRepository userRepository; Controller나 Test 클래스에서 위와 같이 @Autowired 어노테이션으로 의존성을 주입받는다. 따라서 정확히 어떤 구현 클래스가 주입되는지 알 수 없다. 그렇다면, 인터페이스인 UserRepository가 Custom 인터페이스를 상속받고, Custom 인터페이스를 구현하는 클래스를 여러 개 생성하면, 어떤 클래스로 주입될까? UserRepositoryImpl클래스는 Custom인터페이스의 진짜 구현클래스고, ExampleImpl 클래스 역시 Custom인테페이스를 구현하지만 내부 구현 내용이 비어있는 깡통 클래스이다. 이 상황에서.. 2021. 4. 3.
[JMeter] 웹 앱 성능 테스트 도구 (대용량 트래픽 생성) 대용량 트래픽 여러 기업들의 채용공고를 쓰다 보면 우대사항에 이런 문구를 본 적이 있을 것이다. '대용량 트래픽 처리 경험이 있으신 분' 필자는 이런 문구를 볼 때마다 '중고 신입 찾네', '신입이 대용량 트래픽을 처리해 본 경험이 있을 리 없잖아?'라고 생각하곤 했다. 물론, 내가 대용량 트래픽에 관심이 없었던 것도 사실이다. 몇 번의 프로젝트를 하면서 성능이나 부하보다는 기능 구현에 초점을 잡고 개발했고, 그것만으로도 벅차서 밤을 새워가며 개발한 적도 많았다. 어떻게 보면 당연하다고 생각한다. 기능도 제대로 완성하지 못한 상태에서 성능이나 부하를 고려하는 사람은 많지 않을 것이다. 적어도 학부생이나 취준생이라면. 그런데, 최근 올라온 비바리퍼블리카(토스) 채용공고를 둘러보던 중, 또 다시 '그 문구'.. 2021. 3. 28.
[InteliJ] GroupId, ArtifactId 매번 당하고도 또 당해서 이렇게 포스팅을 하게되었다. SSAFY에서 STS(Spring Tool Suite)로 개발할 당시에 교수님께서 주신 코드를 Copy & Paste 해도 오류가 나는 경우가 많았는데, 높은 확률로 GroupId와 ArtifactId를 일치시키기 않아서 생기는 문제였다. 당시에는 주의해야 겠다고 생각만 하고 넘어갔는데, 오늘 그것 때문에 프로젝트를 몇 번이나 새로 만들었다. GroupId와 ArtifactId를 동일하게 설정하면 충돌이 나지 않을까?라는 생각에 조금 바꿔서 만들었는데, 한 2시간 정도 날린것 같다. (다음에 또 당하지 않으려고 이번엔 포스팅까지 한다.) InteliJ는 이번에 처음 쓰게 되었고, Community 버전으로도 좋은 기능이 많아서 계속 쓸 것 같다. 그런.. 2021. 3. 27.
[QueryDSL] Query DSL 기본문법 JPAQueryFactory 클래스이름에 Q가 붙은 이상한(?) 것을 만든 것처럼 Query DSL은 EntityManager말고도 한 가지가 더 필요하다. JPAQueryFactory jpaQueryFactory = new JPAQueryFactory(em); 위와같이 선언해서 사용한다. Test 코드에서 활용한다면, 다음과 같이 사용하면 모든 테스트 메소드에서 초기화 없이 사용할 수 있다. @Autowired EntityManager em; JPAQueryFactory queryFactory; @BeforeEach public void createQF() { queryFactory = new JPAQueryFactory(em); } 기본 Q-Type 활용 다음은 Q클래스 인스턴스를 사용하는 2가지 방.. 2021. 3. 26.
728x90