전체 글 57

Test Code 작성을 고민하는 여러분에게

포스팅을 작성하기 앞서, 이번 글은 필자의 경험과 주관이 많이 반영되어 있는 글로 구구절절하고, 잘못된 내용이 포함되어 있을 수 있습니다. 또한 테스트 코드 작성 방법에 대해 다루지 않고 있습니다.참고하여 읽어주신다면 너무 감사하고, 잘못된 내용을 바로잡아주신다면 미리 정말 정말로 감사합니다. Test Code는 왜 중요할까Toy Project, Team Project에서 테스트 코드를 작성한 경험이 있으나 근본적으로 작성해야 하는 이유를 알고 작성했는지 물어본다면 절대 아니다. '테스트 코드를 잘 이해하고, 작성할 줄 아는 것이 개발자가 가질 수 있는 최고의 무기 중 하나'라는 말에 이력서에 "Test Code 저도 할 줄 알아요!"를 말하고 싶었다.무엇보다 기능 구현을 위한 코드 작성 시간보다 더 많..

카테고리 없음 2024.09.13

2024-07-09 [nGrinder 성능테스트 결과 분석 등등 ..(Feat. Little's Law)]

이전 nGrinder 성능테스트 관련하여 글을 포스팅하였는데요! 이전 글에서는 왜 성능테스트가 필요한지, 간단한 테스트 작성법 등을 다루어보았다면 이번 포스팅은 결과 분석 관련하여 다루어보려 합니다.(이전 작성글은 아래의 링크로 첨부하도록 하겠습니다!)2024.07.06 - [분류 전체보기] - 2024-07-06 [nGrinder 성능 테스트] 2024-07-06 [nGrinder 성능 테스트]성능테스트의 필요성대부분 해당 포스트를 읽는 분들은 성능 테스트의 필요성을 인지하고 있을 것이라 생각하지만... 그래도 필요성을 간략하게 설명하면애플리케이션이나 웹사이트에는 사용hongjinkwon.tistory.com 이번 프로젝트 중, 검색을 통해 관련 Post를 찾는 Method (SearchPost)에 C..

카테고리 없음 2024.07.09

2024-07-06 [nGrinder 성능 테스트]

성능테스트의 필요성대부분 해당 포스트를 읽는 분들은 성능 테스트의 필요성을 인지하고 있을 것이라 생각하지만... 그래도 필요성을 간략하게 설명하면애플리케이션이나 웹사이트에는 사용자가 존재합니다. 그리고 사용자는 요청의 응답이 늦어질수록 해당 서비스에서 이탈할 확률이 높아집니다.2017년 구글에서 제시한 지표에서 모바일 환경에서 페이지의 로드 타임이 1초에서 3초 가까이 되면 서비스 사용자 이탈률이 32%까지 증가한다는 것을 확인할 수 있습니다. 사용자의 이탈을 방지하기 위해서는 서버의 성능이 중요하다는 것을 인지할 수 있습니다. 추가적으로 반드시 고려해야 할 부분은 사용자가 증가할수록 동시 접속자는 증가할 것이고, 서버의 자원은 한정적이지만 사용자는 매우 가변적이기 때문에 한정적 자원에 몰아 붙여지는 과..

카테고리 없음 2024.07.06

2024-07-04 [Kotlin+Spring In-memory Cache(@Cacheable)]

Cache를 왜 사용하는 걸까?이번 팀 프로젝트의 주제는 "Cache를 이용한 성능 개선 프로젝트"입니다.사실 Cache Project를 진행하기 이전부터 튜터님의 피드백이나 세션 때 애플리케이션 성능 개선에 대한 많은 언급들이 있었기 때문에 중요한 것은 잘 알고 있었으나, 몸소 체감되지는 않았습니다. 체감되지 않는 이유를 생각해 보면,1. 현재까지 규모가 크지 않은, 비교적 단순한 프로젝트를 진행하다 보니 성능 개선에 대한 필요성을 느낄 수 없었고,2. 현실적인 나의 현 단계에서는 성능보다 문제 해결, 즉 목표하고자 하는 기능을 구현하는 것이 중요했습니다.그런데 이제는 아주 조금은 알 것 같습니다. 성능을 개선하는 것이 개발자의 지속적인 고민거리이자 과제이며, 곧 문제 해결 능력이라는 것을요 .. 정리..

카테고리 없음 2024.07.04

2024-07-03 [Spring Boot Scheduler]

들어가기 앞서현재 진행 중인 팀 프로젝트에서는 검색어를 입력할 시 해당 검색어를 저장해 주고 Keyword Entity에 저장된 검색어들을 Count하여 1위부터 10위까지 인기 순위를 조회해 볼 수 있는 API가 있습니다.여기서 발생할 수 있는 문제점은 검색어 모두 저장해 주다 보면, 너무 많은 양의 검색어가 데이터베이스에 쌓인다는 것인데요,3일이라는 기간을 정해 놓고, 저장된 지 3일이 지난 검색어들은 매일 자정에 자동으로 삭제될 수 있도록 설정하기 위해 Scheduler 기능을 활용하게 되었습니다. 1. Scheduler 구현하기(1-1) Scheduler 활성화하기 Scheduler는 기본적으로 Spring Boot에 포함되어 있어, Gradle에 의존성 설정 추가할 필요는 없고, Appli..

카테고리 없음 2024.07.03

2024-07-01 [KotlinSpring RepositoryTest (Feat.@DataJpaTest)]

이번 개인 과제를 진행하며 작성한 TestCode 관련 회고 내용입니다. @DataJpaTest?@DataJpaTest는 Spring Boot에서 제공하는 Test Annotation 중 하나로, JPA 관련 Component들만 로드하여 테스트 환경을 구성할 때 사용됩니다.이 어노테이션을 사용하면 Repository와 관련된 Bean만 로드하고, 전체 Application Context 를 로드하지 않아 테스트를 더 빠르고 간단하게 수행할 수 있습니다.그래서 DataJpaTest는 Repository Layer에 대한 격리된 테스트 환경을 설정하는데 유용합니다! @DataJpaTest의 특징을 정리하면 아래와 같습니다.1. JPA 관련 Bean만을 로드@DataJpaTest는 Repository La..

카테고리 없음 2024.07.01

2024-06-20 [DTO를 이용한 QueryDSL Projection]

하단에 첨부한, 이전에 작성한 글을 확인해 보면 제가 겪었던 문제를 확인해 볼 수 있습니다. 2024.06.07 - [분류 전체보기] - 2024-06-07 [JPQL 보다 QueryDSL?] 2024-06-07 [JPQL 보다 QueryDSL?]전주 팀 프로젝트 진행했을 당시 Post 를 전체 조회 시 Post  별 Like 의 수도 함께 조회할 수 있도록 설정하는 부분에서 JPQL 을 시도해 봤었는데, 결국에는 실패하고, 코드 상으로 해당 기능을 구현hongjinkwon.tistory.com겪었던 문제를 요약하여 설명드리면, Repository 내 JPQL Query를 작성했을 때, 반환 값을 Dto로 설정하면서 해당 Method가 사용된 API 에 지속적으로 오류가 발생했습니다.첫 번째로 JPQL..

카테고리 없음 2024.06.20

2024-06-07 [JPQL 보다 QueryDSL?]

전주 팀 프로젝트 진행했을 당시 Post 를 전체 조회 시 Post  별 Like 의 수도 함께 조회할 수 있도록 설정하는 부분에서 JPQL 을 시도해 봤었는데, 결국에는 실패하고, 코드 상으로 해당 기능을 구현했던 것이 생각난다.해당 기능을 구현하지 못한 데에는 여러 가지 이유가 있었는데 우선 그 때 작성한 Query 를 아래에 공유드립니다.@Query( nativeQuery = true, value = "SELECT p.id, p.title, p.content, p.user, p.createdAt, COUNT(l.id) AS likeCount FROM Post p LEFT JOIN PostLike l ON p.id = l.post.id GROUP BY p.id, p.title, p.con..

카테고리 없음 2024.06.07

2024-06-05 [Spring Security doFilterInternal() method 토큰 검증 과정]

JWT(JSON Web Token) 을 확인하고 검증하는 Spring Security Filter 를 구현하기 전, 흐름을 살펴보려 합니다.  1. JWT 를 클라이언트 요청에 담기클라이언트가 매 요청 시 JWT 를 보낼 때 해당 JWT 를 검증해야 하는데 클라이언트는 어떤 식으로 JWT 를 요청에 담을 수 있을까요? 일반적으로 JWT 는 아래와 같이 헤더의 Authorization Header 를 통해 전달합니다.{ "Authorization": Bearer {JWT}}Bearer 인증 type 의 JWT 을 활용, Request 의 Header 에서 Bearer 를 제외하고 JWT 를 추출하고, 해당 JWT를 검증하여 검증에 성공할 시 Authentication 객체에 인증이 되었다는 것을 표기하고..

카테고리 없음 2024.06.05

2024-06-04 [Spring JWT (JSON Web Token)]

전날 프로젝트를 끝마치고 Kotlin + Spring 심화 과정으로 들어오면서 인증 인가 관련하여 보다 자세히 다루고 실습을 진행하기 때문에 기본기를 다시 한번 복습해보고 완벽하게 이해하고 넘어가고자 이번 포스팅은 다음과 같은 주제로 글을 작성하게 되었습니다.  JWT(Json Web Token)JWT(*JSON Web Token) 는 유저를 인증하고 식별하기 위한 토큰(Token) 기반 인증입니다.토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함됩니다.RESTful 과 같은 Stateless 인 환경에서 사용자 데이터를 주고받을 수 있게 됩니다.Session 을 사용하게 될 경우 쿠키 등을 통해 사용자를 식별하고 서버에 세션을 저장했지만, 토큰을 클라이언트에 저장하고 요청시 HTTP..

카테고리 없음 2024.06.04