반응형

분류 전체보기 469

[Spring] gc overhead limit exceeded 원인 찾기

서버에서 gc overhead limit exceeded 라는 에러를 내뿜었다. 검색해보니 우선 해당 에러는 CPU 사용량중 98%이상이 GC가 작동되는 경우 gc overhead limit exceeded 가 발생이 된다고 한다. 이런 상황은 처음이라서 굉장히 당황했고 나 혼자 서비스 개발을 하니 주변 사람에게 물어볼 수도 없었다. 우선 그래서 ec2 인스턴스에 접속해서 힙덤프를 떴고 MAT 이란 memory analyzer 를 이용해서 확인을 해 보았다. hibernate 의 SessionFactoryImpl 이라는 오브젝트가 무려 589MB 나 했다. 도큐먼트에 나와있는 SessionFactoryImpl 에 대한 설명이다. Concrete implementation of the SessionFact..

개발/Spring 2020.10.12

클래스 명에 상위 패키지 명이 들어가야 될까

클래스 명에 상위 패키지 명이 들어가야 할까? 에 대한 얘기를 해보려고 한다. - com.hojak.test - service - recommend - RecommendBookService.class 내가 진행하고 있는 프로젝트에 패키지 구조가 이렇게 돼 있다고 해보자. recommend 패키지 내에 `RecommendBookService` 클래스가 존재한다. 회사 시니어 개발자분께서 굳이 `RecommendBookService` 클래스 이름에 `Recommend` 라는 단어를 붙일 필요가 있는가? 라는 이야기를 해 주셨다. 이미 패키지에서 `recommend` 라고 표현하고 있는데 굳이 클래스에서 또 `recommend` 라는 단어를 사용할 필요가 있냐는 이야기신 것 같다. 그래서 생각해보니 굳이,,?..

레이어 분리 (deprecated)

지금 보니 좀 문제가 있어 보인다. DTO 로 convert 하는 식으로 하면 JPA 를 사용하는 이유가 없어진다. 애초에 서로 도메인의 경계를 잘 나누면 된다. 그래도 옛날의 나의 생각이었기에 글은 냅두도록 한다. 개발을 하다 보면 레이어 분리를 어떻게 해야 잘 하는지에 대한 고민을 하게 된다. 모놀리틱에서 개발을 한다고 했을 때 보통 나는 다음과 같은 레이어로 분리를 하여 개발을 하게 된다. - serivce - repository - domain - controller 일반적인 jpa + spring 사용 시에 나오는 패키지 구조이다. presentation, business, persistence 레이어로 분리했다고 볼 수도 있을 것 같다. service 클래스에서는 repository 나 다른 ..

[Spring] Slice Test

나는 테스트에 대해서 공부할 때 통합 테스트, 단위 테스트라는 단어를 많이 들었다. 그래서 내가 필요하다고 생각할 때 단위 테스트를 작성하고 좀 큰 기능인 것 같으면 통합 테스트를 이용해서 전체적인 흐름을 테스트를 하고 있다. Slice Test 최근에 Mockito 라이브러리를 이용한 mock 을 주입해서 테스트를 하던 중, 슬라이스 테스트라는 용어를 알게 되었다. Test slicing is about segmenting the ApplicationContext that is created for your test spring.io 에 따르면 위와 같이 소개를 하고 있다. https://spring.io/blog/2016/08/30/custom-test-slice-with-spring-boot-1-4..

개발/Spring 2020.08.12

2020-06 속초 낚시 여행 - 3

2020. 06. 21. 우선 숙소로 아침, 점심도 안 먹고 계속 낚시를 하다보니 너무 힘들어서 우선 숙소로 갔다. 사진처럼 바다가 잘 보이는 곳이었고 방은 좁지만 3명이 자기엔 충분했다. 가격도 저렴했다. 손에 갯지렁이가 너무 많이 묻어 있고 땀도 많이 나서 우선 샤워를 먼저 하고 배가 고파서 저녁을 좀 일찍 먹기로 했다. 근처 가게에서 우선 홍게라면이랑 아바이 순대, 오징어순대? 이런 걸 주문했다. 홍게라면은 15,000원인데 매우 비싸다고 느꼈고, 저기 순대 세트도 굉장히 비쌌다. 그래도 우선 맛있게 먹긴 했으나 매우 양이 적게 느껴졌다. 2020. 06. 21 다시 낚시 밥도 먹었겠다 배가 부르니 다시 낚시를 하러 갔다. 우리의 목표는 남은 친구 한 명이 물고기를 낚는 것과 더 많이 낚아서 세꼬시..

etc/여행 2020.06.22

2020-06 속초 낚시여행 - 2

2020. 06. 21. 속초 도착.. 2시간 30분 정도를 달려 무사히 속초에 도착했다. 도착하니 다른 친구들이 똥을 눈다고 해서 기다리는 중에 사진을 찍었다. 날이 매우 더웠는데 밖에서 15분은 기다린 듯하다. 은근히 바닷바람이 좀 차서 조금 당황했다. 하지만 진짜 남자는 추위를 느끼지 않는다. 노래도 추천한다. https://www.youtube.com/watch?v=3M_5oYU-IsU mans not hot 어쨌든 바다에 왔으니 바다에 들어갔다. 챙겨간 옷이 없어서 우선 벗고 놀았는데 한 친구가 몇 달 운동했다고 자신감 좀 얻은 듯 했다. 물론 봐줄 정도도 아니었다. 사진은 아무도 안 찍어서 내가 찍었다. 근데 동해라서 그런지 깊어서 별로 나가지도 않았는데 발이 닿지 않아서 매우 놀랐다. 그리고..

etc/여행 2020.06.22

2020-06 속초 낚시여행 - 1

2020. 06. 20 속초 낚시 여행을 가보쟈 갑자기 6월 21일~22일로 해서 낚시 여행을 가자는 이야기가 나왔다. 또 흐지부지 될 거란 생각으로 우선 가자고 얘기를 했는데 진짜 가게 되었다. 속초로 결정한 이유는 없다. 그냥 고속버스 앱을 켜니 가장 먼저 있었다. 그리고 낚시 용품은 그냥 대여하기로 했다. 어쨌든 3명이 가게 되었다. 혹시 황정민, 조승우분들의 유명 낚시 짤을 모두 알 것이다. 우리의 낚시여행 컨셉은 다음의 낚시 컨셉을 잡도록 했다. 매우 아방가르드한 느낌이다. 어쨌든 동묘에 가서 옷을 사긴 했다. 서로 옷을 골라줬는데 아주 주옥같은 옷들만 해서 구매했다. 옷도 그렇지만 와꾸가 봐줄만 하지 못하다. 2020.06.21 속초로.. 사진으로 표현할 수 없는 엽기적인 외모를 가지고 있다...

etc/여행 2020.06.22

jwt 사용 시 refresh token 은 어떻게 관리해야 할까

개인적으로 진행하는 프로젝트에 로그인 보안에 jwt 을 이용하려고 하고 있다. 이 때 jwt 사용 시 refresh token 은 어디서 관리해야 할까에 대해서 굉장히 많은 고민을 했다. refresh token 은 어디서 관리해야 할까? 우선 토큰 사용의 목적은 stateless 하게 가져가기 위함이다. 세션을 사용한다면 매 요청마다 redis 든 DB 든 어디선가 세션 정보를 저장하고 있고, 이 세션이 올바른지 체크를 하게 된다. 이 때 토큰을 사용 시 토큰이 유효한가? 에 대해서만 체크하면 되는데 이 때 access token 과 refresh token 으로 관리를 하게 된다면 access token 으로 유효성 검증 후 access token 내에 만료 시간 데이터를 넣어서 매 요청마다 단순히 ..

[querydsl] querydsl ne 사용 시 eq 로 동작

github.com/querydsl/querydsl/issues/2589 When using ne(), but working eq() · Issue #2589 · querydsl/querydsl I'm using querydsl-jpa:4.1.3 I made JPAExpressions. here is used booleanBuilder and ne() to compare the results. but, the implementation of ne() was the same as eq(). so, predicate was: I want ... github.com querydsl-jpa:4.1.3 사용 중에 서브 쿼리를 이용하기 위해 아래와 같은 코드를 사용했다. 그리고 아래 사진처러 ne() 메소드를 통해..

개발/Spring 2020.05.23

[Spring] querydsl 에서 List<String> 타입 변수에 조건 넣기

새벽 3시30분인데 지금 매우 화난다. 졸리니까 우선 간단히 쓰겠다. 코틀린을 기반으로 개발하고 있다. DB 테이블에서는 json 타입의 필드에 단순히 [123, 321, 133] 와 같은 값을 넣고있다. 그리고 entity 에서는 해당 필드를 Set 으로 타입을 정의해놓았다. 그리고 converter 를 직접 만들어서 json 을 잘 변환하도록 entity 클래스에 해당 필드에다가 converter 를 지정해주었다. 해당 필드의 이름이 numbers 라고 했을 때 querydsl 을 이용해 조건을 다음과 같이 걸어주었다. numbers.contains("311") 근데 자꾸 hql 을 보니 해당 numbers 필드를 가지고 조인을 해버린다. 어이가 없다. 해당 필드는 조인할 수 없는데 hql 에서 as..

개발/Spring 2020.05.15
반응형