Spring Web MVC의 Dispatcher Servlet 파헤치기
·
Springboot
서론보통 Spring으로 백엔드를 개발하다보면, Controller를 통해 URL를 정의해주고 요청을 받아 처리한다. 하지만 이때 그래서 "Client의 요청이 들어오면 어떤식으로 처리가 되는 것일까" 하고 생각을 해보면 대부분 잘 모른다. 때문에, 이번에는 실제로 요청이 들어오면 어떤식으로 처리가 되어 Client 요청을 처리하는지에 대해 정리해보았다. 본론Dispatcher Servlet이란?Dispatcher 서블릿은 Front Controller 패턴을 구현한 Spring MVC의 중앙 집중식 컨트롤러로 요청 URL을 분석해 적절한 핸들러를 결정해 호출하고 실행결과를 반환하는 역할입니다. 그림을 통해 좀 더 쉽게 알아볼 수 있다.  예시로,Spring에 Controller가 다음과 같이 정의되어 ..
Spring Boot: 테스트 코드 작성법
·
Springboot
오늘은 최근 진행했던 프로젝트에서 테스트 코드를 작성한 방식과 그 결과에 대해 얘기하고자 한다. 참고로 당시 테스트 커버리지 수치가 아래와 같이 꽤 좋은 결과를 보였었다. 특히 Class에서는 100%, Method에서는 96% 등을 보이며 상당히 괜찮은 결과를 보였었다. 깃주소는 아래 참고https://github.com/Curate-Me/claco-client GitHub - Curate-Me/claco-client: 큐시즘 밋업데이 E조 큘미 Claco Client큐시즘 밋업데이 E조 큘미 Claco Client. Contribute to Curate-Me/claco-client development by creating an account on GitHub.github.com일단 Spring의 계..
SpringBoot: TDD(Test-Driven-Development)란?
·
Springboot
얼마전 프로젝트를 진행하면서 처음으로 TDD방식으로 개발을 해보자는 이야기가 나왔었다. 한번도 테스트 코드를 제대로 작성해본적이 없었기에 귀찮고 어려운 작업이 될 것 같았지만 이번 기회에 제대로 하자는 생각이 들어서 진행하게되었다. 때문에 이번에는 TDD의 개념에 대해 설명하고, 실제 테스트 코드 작성 법과 커버리지 수치는 어떻게 측정하고 결과가 나왔는지에 대해 설명하겠다. TDD란?TDD(Test-Driven-Development)의 약자로, 개발을 하면서 테스트 코드 작성을 우선으로 하여 통과시키는 것에 중점을 둔 개발 방법론이다. 좀 더 쉽게 말하자면, 개발자가 코드를 작성하기 전 테스트를 작성하고 그 테스트를 통과하기 위해 필요한 코드를 작성하는 과정을 뜻한다. TDD 개발주기 TDD 개발주기는 ..
Spring Batch 활용
·
Springboot
다양한 프로젝트를 진행하다 보면, 대용량 데이터 처리를 주기적으로 해야하는 경우가 생긴다. 그럴 경우 흔히 서비스가 돌아가는 메인 서버에서 실행을 하게 되면 서버에 과부하가 걸리지 않을까 하는 생각이 들게 된다. 때문에 이런 경우 Spring Batch 서버를 통해 부하를 분산시켜줄 수 있는데 오늘은 이 Spring Batch가 어떤 것인지와 실제 사용 방식과 예시를 들어서 설명해보겠다. Spring Batch란 무엇인가?Spring Batch는 대용량 데이터 처리 및 배치 작업을 자동화하는 Spring Framework의 모듈왜 필요한가데이터 마이그레이션, 정산 처리, 데이터 분석 같은 대규모 배치 작업을 수행하기 위한 안정적이고 확장 가능한 도구.병렬 처리, 트랜잭션 관리, 재시도 및 장애 복구 등 ..
Spring boot: DDD(Domain Driven Design)란?
·
Springboot
오늘은 DDD 구조에 대해 설명해보고자 한다. 처음에 DDD구조를 도입하게 된것은 다름이 아닌,, 회사 기업 프로젝트의 요구사항이었기 때문에 어쩔수 없이 사용하게 되었다ㅠ처음에는 왜 이런 DDD구조 방식으로 하는지 이해가 가질 않았다. 기존 폴더구조보다 복잡하기만 할뿐 알아보기도 너무 어려웠기에 대체 왜 사용하는지 이해가 가지 않았다. 그래서 DDD의 장점과 단점에 대해 명확하게 이해해보고자 쓰게 되었다.1. DDD란?DDD란 Domain-Driven Design의 약자로, 소프트웨어 설계와 개발 방법론 중 하나로 주로 복잡한 비즈니스 도메인을 효과적으로 반영하기 위해 도메인 전문가(비즈니스 이해자)와 개발자가 협력하여 소프트웨어의 구조를 설계하는 방식이다. 그렇다면 도메인 (Domain)이란 무엇일까문..
Spring boot 쿼리 최적화 문제와 Spring Cloud Openfeign
·
Springboot
오늘은 내가 프로젝트의 전반적인 기능이 완성되고 성능을 개선시킨 부분에 대해 말해보고자 한다.일단 어느정도 개발이 완료 되고난후, 직접 Grafana로 각 API 요청시 발생하는 CPU 사용량이나 Memory 사용량에 대해 추적해보았다. 그러던중... 다음과 같은 이슈를 마주했다. 이슈👉 현재 작업하던 Post Service의 CPU 및 Memory 사용량이 다른 MSA 환경의 Service들보다 매우 높다는 것을 **[Grafana monitoring]**을 통해 확인이 되었다.문제👉 실제로 Jmeter로 서버 성능을 측정을 해보고 프론트에서도 요청을 보냈을때 시간이 매우 오래걸리는 것으로 보아 백엔드 비즈니스 로직자체가 무겁고 어딘가 불필요하게 시간이 소요된다는 것을 알 수 있었다. 해결👉 최대..
Spring Boot 순환 참조 오류(Error creating bean with name)
·
Springboot
오늘은 내가 프로젝트를 진행하면서 마주했던 문제 중 가장 흔한 '순환참조' 문제에 대해 설명해 보겠다.처음 마주했던 이슈는 다음과 같다.이슈👉 Local 환경에서 Spring boot를 실행시켰을때는 분명 멀쩡했는데, Git action으로 CICD를 진행하는 과정에서 다음과 같은 오류가 떴다.Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'commentService' defined in file [/home/runner/work/post-service/post-service/build/classes/java/main/com/justdo/plug/post/do..
SpringBoot Builder 패턴의 이해
·
Springboot
Java 프로그래밍으로 객체를 생성하는 경우 생성자를 통해 만드는 경우가 대부분이다. 생성자를 생성할 때 매개변수가 적다면(2~3개) 생성을 하는 것이 어렵지는 않지만, 만약 매개변수가 많아진다면 코드리뷰를 하는 사람도, 코드를 작성한 본인도 추후 코드를 고칠때 가독성이 매우 떨어진다. 예를 들어, 아래와 같이 요청에서 받아야하는 매개변수가 대충 눈으로만 보아도 족히 10개는 되어 보인다. @Data public class PostRequestDto { private String title; private String content; private int like_count; private boolean temporary_state; private boolean state; private long mem..