본문 바로가기

분류 전체보기170

GC TIME exceeded threshold 25/1/24 퇴근 후 설연휴 시작!밥먹고 씻고 신나게 게임을 키고 있는데 문자 메세지가 울리기 시작한다.GC TIME exceeded threshold 이거는 회사 모니터링 시스템에서 보내주는 문자 메세지인데 대충 가비지 콜렉터가 과로중이라서 cpu를 다잡아먹고 서비스가 느려지기 시작했다는 의미이다.이 문자가 오고 조금 지나면 메신저로 느려요! 이런 연락들이 오기 시작한다.단순히 느린 것을 넘어 타임아웃이 쌓이고 이러면서 큰 문제로 번질 여지도 있다.그래서 이 문자 메세지가 오면 빨리 확인을 해보는 게 좋다.  게임을 끄고 시스템 모니터링 툴에 접속했다...서버 하나가 빨갛게 차오르고 있는 것이 보인다. 이 시스템에서 GC 이벤트를 발생시키는 화면이 하나 있다.그건 바로 대용량 데이터를 엑셀로 내려받을.. 2025. 1. 24.
DevFest 송도 2024 후기 우연한 계기로 dev fest 티켓 표를 얻게 되어서 방문하게 되었다.gdg면 내 학창시절 동아리 gdsc 와 연관이 있어서 친근감이 있기도 하고 친구가 공짜표가 생겼다고 주는데 오랜만에 친구도보고 강의도 들으려고 가게 되었다.이제 학생도 아니고 하니 각 세션에 대해 요약노트를 쓰려는 건 아니고...세션을 들으면서 떠올랐던 나의 경험을 일기처럼 써보려고 한다.시니어 개발자 노하우 세션대략적으로 시키는대로 무조건 하지 말고 문제정의와 상황파악이 중요하다는 내용이었는데 대부분 공감이 가는 내용이었다.가끔씩 현업이 이거저거 해주세요. 라고 요청할때가 있는데, 그 요청이 우리 테이블구조를 갈아엎어야되거나 그 서비스에 물린 다른 기능에 영향이 가는 요건인 경우도 있다. 현실적이지도 않고, 현업이 요구하는 기간에 .. 2024. 12. 21.
[일상]VO를 쓰자 큰 시스템을 운영개발하다 보면 어지간하면 상황에 맞게 갖다쓸 VO가 있다. 아님 명백하게 VO를 만들어야만 하는 상황이 대부분이다.근데 올해 3월에 타시스템에 제공할 api를 만드는데, 서비스단 로직에서 딱 몇 번 쓰고 버릴 VO를 만들 일이 생겼다.그래서 그냥List > rslt=어쩌고Dao.select저쩌고(params);이런식으로 처리해버림.mybatis였고....내가 혼자 테스트할 당시에는 아무 문제도 없어보였다.(QA같은건 우리회사에 존재하지않음. 그냥 개발관련 잘못되면 전부내탓ㅎ)시간이 흘러...타시스템B가 내 api를 가지고 개발을 시작하면서 특정 요청값에 오류가 난다고 알려줌.왜 그런가 하니, DB에서 조회값이 없는 경우 List > rslt 형태로 만들질 못하는거였다......이 이슈 자.. 2024. 10. 28.
git cherry-pick 과 관련된 일상 학부때는 git 운영 전략을 세워봐도 브랜치 이름이 기껏해야- feature/홍길동- feature/login이런식이었다. 회사들어와서 보니 브랜치이름이- feauture/824329023- feauture/824325926이런식이다.실제 형식을 가져온 건 아닌데 비유하자면 이런 느낌임.. 아무튼 헷갈리게 생겼다보니 featureA에 커밋해야 할 거를 실수로 featureB에 커밋해버렸다.그나마 다행인건 push 전에 발견했고, 둘다 내가 작업하는 feature 브랜치 였다.아무튼 featureB 커밋취소하고 코드들을 다시 featureA로 옮길생각에...한숨이 나왔는데찾아보니 cherry-pick 명령어로 커밋만 그대로 다른 브랜치에 옮길 수 있었다. 옮겨야 하는 브랜치:  feature/New잘못 커.. 2024. 10. 16.
08 Spring Data JPA 활용 JPQL JPQL은 jpa query language의 줄임말로 sql과 거의 비슷하게 생겼으나, 테이블 대신 엔티티 이름이 들어간다. (그야 jpa는 엔티티 이름을 기반으로 테이블을 생성하니... 개인적으론 거의 sql과 똑같이 느껴진다.) SELECT p FROM Product p WHERE p.number=1; 이런식으로 되어있는게 JPQL이다. 쿼리 메서드 살펴보기 이런 JPQL을 어떻게 작성할 수 있느냐...하면, 일단 리포지토리는 JpaRepository를 상속받는 것만으로도 다양한 CRUD 메서드를 제공한다. findById 같은... 그리고 이 기본 메서드를 호출하면 jpql이 알아서 생성돼서 쿼리문을 수행한다. public interface ProductRepository extends .. 2024. 1. 6.
07 테스트 코드 작성하기(3) JUnit을 활용한 테스트 코드 작성 리포지토리 객체의 테스트 리포지토리는 JpaRepository를 상속받아 기본적인 쿼리 메소드를 사용할 수 있다. findById 같은 리포지토리의 기본 메서드는 이미 테스트 검증을 마치고 제공되었으므로 기본 메서드에 대한 테스트는 큰 의미가 없다. db에 테스트용 데이터가 쌓이면 곤란하다. 그러므로 테스트용 db를 쓰거나 아예 db 연동 없이 테스트 하는 편이 나을 수도 있다. 테스트 폴더 내에 ProductRepositoryTest 를 만들자. @DataJpaTest @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) class ProductRepositoryTest { @Aut.. 2023. 12. 31.
반응형