프로젝트 리펙토링 (3) - Github API 호출 성능 개선하기 (비동기 처리)
·
Backend/Spring Boot
비동기 처리(Asynchronous)비동기 처리 작업이란 멀티스레드를 사용하여 작업을 분리하고, 작업이 끝날 때까지 대기하지 않고 다른 작업을 처리하는 것을 말한다. Spring Boot에서 비동기 처리는 멀티스레딩 환경에서 비동기적으로 실행되는 작업을 처리하는 것으로, 동기적인 방식과 비교해 처리 속도와 성능을 개선할 수 있다.   사용하는 이유높은 응답성 : 동기적인 방식으로 작업을 처리할 때, 작업이 끝날 때까지 다른 요청을 처리할 수 없다. 예를 들어 외부 서비스와 통신할 때 I/O 작업이 많은 경우 작업이 끝날 때까지 기다리는 대신 다른 요청을 처리하며 시간을 절약할 수 있다.자원의 효율성 : 동기적인 방식으로 작업을 처리할 때는 스레드를 많이 생성하므로 시스템 자원을 많이 사용한다. 비동기처리..
Spring Boot 의 동작 방식
·
Backend/Spring Boot
이번 시간에는 스프링과 스프링 부트가 무엇이며, 스프링 부트는 어떻게 동작하는 지에 대한 공부를 해보겠습니다.스프링 부트의 기본 의존성 중 하나인 spring-boot-starter-web 모듈을 사용하면, 기본적으로 내장 톰캣을 사용하는 스프링 MVC 구조를 기반으로 동작합니다. 클라이언트의 요청이 들어오면 서블릿이 이를 처리해야 하는데, 서블릿은 서블릿 컨테이너에서 관리하고, 톰캣이 서블릿 컨테이너의 역할과 WAS 역할을 담당합니다. 서블릿(Servlet)클라이언트의 요청을 처리하고, 결과를 반환하는 자바의 웹 프로그래밍 기술입니다. 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리합니다. 서블릿 객체는 싱글톤 패턴으로 관리되며, 멀티 스레딩을 지원합니다.   DispatcherServl..
프로젝트 리펙토링 (2) - 인덱스(index) 사용으로 조회 API 성능 개선
·
Backend/Spring Boot
JMeter 사용 방법Apache JMeter 5.6.3 : Source - zip 파일 다운로드테스트 전 유의사항테스트하는 웹 어플리케이션 서버와 테스트를 진행하는 서버는 서로 달라야 한다.같은 서버를 사용하면 같은 메모리를 점유하기 때문에 정확한 값을 측정할 수 없다.JMeter 실행util\\apache-jmeter-5.6.3\\apache-jmeter-5.6.3\\bin> ./jmeter JMeter 구성요소Thread Group : 테스트에 사용될 스레드 개수, 스레드 1개당 사용자 1명Sampler : 사용자의 액션 (예: 사용자 로그인, 게시물 작성, 게시글 조회 등)Listener : 응답을 받아 리포팅, 검증, 그래프 등 다양한 처리Configuration Elements: Sampler..
프로젝트 리펙토링 (1) - Facade Pattern 도입
·
Backend/Spring Boot
퍼사드 패턴을 도입하게 된 배경디자이너, 프론트엔드, 백엔드 총 5명으로 구성된 우리 팀은 올해 초부터 쉴 틈 없이 달려왔다. 매주 팀 회의, 파트별 회의, 프론트/백엔드 회의를 각각 1회씩 진행하며, 기획부터 설계, 개발까지 모두 경험했다. 배포 전에는 통합 테스트를 거쳐 최종적으로 이슈를 해결하고 도메인 등록과 배포를 통해 프로젝트를 성공적으로 마무리하였다. 프로젝트가 종료된 후 일부 팀원은 각자의 삶으로 돌아갔다. 어쩌면 당연한 일이지만, 시작이 있으면 끝이 있다는 게 시원섭섭하다. 알면서도 어쩔 수 없는 감정인 듯하다.배포된 서비스를 사용해보고 프로젝트 코드를 살펴보니 일정에 맞추느라 신경 쓰지 못했던 부분, 아쉬웠던 부분, 개선해 보면 좋을 것 같은 부분들이 보였다. 그중에서도 눈에 띈 부분은 ..
Ngrinder를 활용한 성능 테스트 (localCache)
·
Backend/Spring Boot
캐시(Cache)캐싱은 어디에 적용할 수 있을까?변화가 많지 않은 데이터를 매번 DB에서 데이터를 조회해서 보여주는 것이 비효율적인 경우자주 조회되는 데이터캐시를 사용하면 얻는 점은?읽기(조회) 성능을 향상할 수 있다.RDB의 경우, Disk에 접근해야 하기 때문에 상대적으로 연산 수행이 오래 걸린다. 반면 Redis와 같은 캐시는 메모리에서 동작하기 때문에 상대적으로 빠르게 연산을 수행할 수 있다.무작정 캐시를 적용하면 좋을까?아무데서나 다 사용한다고 좋은 것은 아니다. 데이터가 업데이트될 때 마다 캐시도 함께 업데이트 해주어야 하기 때문이다. 캐시에 데이터가 과하게 쌓일 경우, side effect가 발생할 수 있다.  Ngrinder 설치 및 환경 설정설치 : https://github.com/na..
Query did not return a unique result: 2 results were returned 에러 해결하기
·
Backend/Spring Boot
테스트 코드를 작성하다가 문뜩 이런 에러를 마주하였다. Query did not return a unique result: 2 results were returned 엥?.. 왜 2개의 결과값이 들어오지 ? 살펴보니 Repository에서 값을 받아오면서 생긴 문제였다. Optional findByIdentifer (string identifier); 해결 방법은 Optional이 아닌 List로 데이터를 받자! 쉽죠잉? Optional findByIdentifer (string identifier); // 변경 전 List findByIdentifer (string identifier); // 변경 후
Content type 'application/octet-stream' not supported 에러
·
Backend/Spring Boot
controller에서 multipartFile 타입의 이미지와 json 타입의 dto를 같이 받기 위해 requestpart를 사용하면서 만난 오류이다. dto는 requestbody를 통한 전달이 아닌 form-data로 전달을 해주어야 했고, 그 상황에서 json 타입의 데이터를 보내는 방식에서 문제가 생겼다. form-data 타입의 key-value 값으로 json을 보내줄 때는 content-type을 application/json으로 직접 명시해주자 !! 문제 해결 :)
DTO vs VO
·
Backend/Spring Boot
DTO : 데이터 전달용 = Data Transfer Object = 데이터를 전달하기 위해 사용하는 객체 = 데이터를 담아서 전달하는 바구니 - 오직 getter/setter 메서드만을 갖는다. setter를 사용하지 않고 생성자 메서드를 사용한다면 불변 객체로 만들어 중간에 데이터 위변조를 막을 수 있다. - 다른 로직을 갖지 않는다. - DTO class와 Entity class를 분리하라. VO : 값 표현 = Value Object = 값 그 자체를 표현하는 객체 - VO의 경우 값 그 자체를 나타내는 객체로써, 핵심은 필드 값이 같다면 두 객체를 같은 객체로 본다는 것이다. 이때 당연하게도 주소값을 비교하는 경우의 문제점을 위해서 hashcode()와 equals()를 재정의하여 필드 값이 같..
prepareKotlinBuildScriptModel Task fails in a Java project 오류 해결
·
Backend/Spring Boot
tasks.register("prepareKotlinBuildScriptModel"){ } build.gradle에 추가해주기 ! 해결 완!
spring에 swagger 적용하면서 겪은 3가지 에러 해결하기
·
Backend/Spring Boot
스프링 2.X.X 특정 버전 이후로 Swagger2:2.X.X 버전 실행 에러 발생 해결 -> build.gradle파일의 springfox ~ 버전들을 모두 3.0.0 으로 바꿔준다. // Swagger Lib implementation 'io.springfox:springfox-swagger2:3.0.0' implementation 'io.springfox:springfox-swagger-ui:3.0.0' implementation 'io.springfox:springfox-boot-starter:3.0.0' org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrap..
mvnrepository 사용법
·
Backend/Spring Boot
1. https://mvnrepository.com/ 접속 2. 필요한 API 또는 라이브러리 검색 3. 사용할 버전 선택 4. Maven에 있는 코드 복사 후 스프링 프로젝트의 pom.xml에 추가 5. 끝 ! 간단합니다.
무료 API들
·
Backend/Spring Boot
발할때 유용하게 써먹을만한 무료 API들입니다. 토이 프로젝트 할때 요긴히 사용 할 수 있을 것 같습니다. JSON Placeholder (https://jsonplaceholder.typicode.com/) : 테스트용 가짜 데이터를 제공하는 API. Google Translate (https://cloud.google.com/translate/docs/) : 한달에 50만 요청까지 무료로 사용 가능한 번역 API. Open Weather Map(https://openweathermap.org/api) : 날씨 정보를 제공하는 API. REST Countries ((https://restcountries.com/) : 나라 정보를 제공하는 API. 나라 이름, 수도, 인구, 통화, 언어 등등. IP A..