본문 바로가기
반응형

전체글587

Hibernate Fetch Join시 메모리에서 페이징 처리 사전 차단하기 Hibernate (Spring Data JPA) 를 사용하다보면 종종 HHH000104: firstResult/maxResults specified with collection fetch; applying in memory! 의 WARN (경고) 로그 메세지를 만난다. 해당 로그는 페이징 처리할때 여러 엔티티를 Fetch Join 을 하면 발생한다. Fetch Join은 N+1 문제를 해결하는 가장 자주 사용되던 방식이다. 하지만, 경고 메시지에서 언급했듯이 페이징 처리시에 사용할 경우 페이징이 전혀 적용되지 않고, 조건에 해당하는 모든 데이터를 가져와 메모리에 올려두고 사용한다. 조건에 해당 하는 데이터 전체를 가져오기 때문에 당연히 성능 상 이슈가 되며, 이를 메모리에 올려두고 페이징을 처리하니 이.. 2023. 10. 2.
2023 인프콘 회고 올해 2월부터 준비한 인프콘이 2023.08.15 에 성황리에 마무리 되었다. 인프콘의 모든 발표는 인프런에 무료로 공유되어 있다. 회고 써야지 써야지 하다가, 이제야 쓴다. 인프콘 컨퍼런스 운영에 대해서는 관여를 하지 않았다. TF 멤버분들이 100% 진행해주셔서 감사할 따름이다. 그래서 인프콘을 어떻게 준비했는지 그 과정이 궁금하신 분들은 아래 회고들을 참고해보면 좋다. 인프콘 2023 현장 스케치 인프콘 TF 회고 인프콘 TF 리드 - 앨리스의 회고 이번 후기는 인프콘 사이트 개발과 개인 발표자로서의 회고이다. 인프콘 사이트 준비 작년 인프콘 준비 기간 동안 개발 리소스가 거의 없어서, 공식 사이트 개발을 DevOps와 디자이너 두명이서 워드프레스로 테마 골라서 만들자로 결론내고 진행했었다. 그리고.. 2023. 9. 17.
소설에 몰입하기 고민 상담을 하다보면 자존감에 대한 고민을 많이 듣는다. 타인과의 비교 타인의 비난, 시기, 질투 내가 어쩔 수 없는 상황에 대한 불안감 등등 부정적인 감정을 만나게 될 때가 많다. 이런 부정적인 감정, 태도, 상황에서 어떻게 자존감을 지킬 수 있냐는 고민과 함께 나는 그 감정과 그 상황을 어떻게 잘 넘기는지에 대한 질문이 이어졌다. 부정적인 기분을 잘 처리하는 사람인가? 하는 생각이 드는 것과 별개로 남들이 보기에 그랬다면 어떻게 그랬을까? 곰곰히 생각해봤다. 그러다가 도둑맞은 집중력의 내용을 보고 답을 찾을 수 있었다. 우리는 소설을 읽을 때 다른 사람의 머릿속에 있는 경험에 푹 빠져든다. 사회적 상황을 그려보고, 깊고 복잡하게 타인과 그들의 경험을 상상한다. … 키스 오틀리 교수는 소설을 많이 읽으.. 2023. 9. 10.
좋은 예외(Exception) 처리 좋은 예외 처리는 견고한 프로그램을 만들고, 좋은 사용자 경험을 줄 수 있다. 예외 처리를 통해 애플리케이션이 예기치 않게 종료되는 것을 방지하고, 갑작스런 종료 대신 사용자는 무엇이 잘못되었는지, 그리고 가능하다면 어떻게 바로잡을 수 있는지에 대한 의미 있는 오류 메시지를 받을 수 있다. 뿐만 아니라 좋은 예외처리는 개발자가 문제를 진단하는 데 큰 도움이 되어 이로 인해 문제 해결 시간이 단축된다. 특히, 복잡한 시스템에서 여러 단계의 프로세스가 있는 경우 예외는 프로세스의 위치에 따라 다르게 처리되어 적절한 예외 처리는 이러한 프로그램의 프로세스를 관리하는 데 유연성을 제공한다. 반면, 이를 위해 과도하게 사용하면 메인 비즈니스 로직이 무엇인지 파악하기 힘들 정도로 너무 많은 오류 처리를 가지고 있는.. 2023. 9. 5.
미국가서 중국어 공부하지 않기 빅테크 회사분들의 시니어분들과 사석에서 만날때와 스타트업으로 이직하신 시니어분들을 만날때 서로 대화의 주제가 다름을 체감한다. 예를 들면, 우리팀의 주니어가 평균 레이턴시 1초인 API를 0.1초로 개선했다 를 이야기한다고 하면 여전히 빅테크에 계신 분들은 그 주니어가 기술적으로 뛰어난 사람임을 이야기하고, 어떻게 개선했는지가 주력이라고 한다면, 스타트업으로 이직하신 시니어분들은 "1초인데 왜 개선하지…?" 라는 이야기를 한다는 것이다. 두 그룹의 시니어분들 다 몇년 전까지는 비슷한 규모의 회사를 다녔음에도 말이다. 하루 수백만 ~ 수천만건의 호출이 발생하는 API이기 때문에 이를 0.1초로 개선한 것은 서비스 전체적인 개선이니 당연히 그 시기의 개발팀에 있어서는 정말 중요한 작업이다. 그리고 2년전까지.. 2023. 8. 17.
테스트 메소드 (함수) 이름은 비즈니스 내용을 사용하기 테스트 메소드 (함수) 이름은 비즈니스 내용을 담아야한다. 이는 테스트의 의도를 명시적으로 표현하기 때문에 중요한데, 테스트 코드를 작성하는 것에 집중한 나머지 이름에 대해서는 크게 신경쓰지 않고 넘어가는 경우가 많다. 예를 들어 다음과 같은 기존의 테스트 코드가 있다고 가정해보자. // bad describe('ArticleService', () => { it('create article pending status', async () => { const limitOverUserId = await createLimitOverUser(); const article = await sut.create(limitOverUserId, '테스트글'); expect(article.status).toBe(Article.. 2023. 8. 5.

728x90
반응형