전체 글

고등학생 개발자의 성장 과정을 담은 기술 블로그
Server & Infra

[JMeter] Apache JMeter를 이용한 간단한 성능 테스트

기존에 서비스하던 코드들을 리팩토링 하면서 문득 코드 리팩토링 후 과연 성능 차이가 있을까? 궁금해졌다. 많은 성능 테스트 Tool들이 있었는데 JMeter, nGrinder, k6.. 그 중 오랜기간 릴리즈 하고 있고, 다양한 기능과 플러그인, 자료도 풍부한 Apache JMeter를 선택하였다. 선행 지식 성능 테스트시 꼭 알고 가야하는 개념이 있는데, 바로 응답시간과 TPS다. 이 둘은 성능 테스트의 중요한 지표이다. 응답시간(Response Time) 클라이언트가 서버에 요청을 하고 그 요청에 대한 응답을 받을 때까지 걸린 시간을 의미한다. 응답 시간은 아래의 두가지로 분류 가능하다. 처리 시간(Processing Time) : 실제 서버가 요청을 처리하는데 걸린 시간 대기 시간(Latency T..

Spring

[Spring] 비동기 처리(Controller) With @Callable

스프링에는 비동기 구현체가 여러가지 있는데 Controller 단에서 간단하게 비동기 요청을 처리할 수 있는 @Callable을 알아보고자 합니다. @Callable ? Spring MVC 3.2부터 추가된 Servlet 3을 기반으로한 비동기 요청 프로세스 - 요청 프로세스 답게 내부(Service단)를 비동기화 시켜주진 않습니다. Callable의 특징 Thread가 Spring MVC 내에서 관리된다.(내부 TaskExecutor) Controller의 RequestMapping method에서 Callable 객체를 감싸서 리턴한다. Callable의 동작 방식 컨트롤러에 요청이 들어오면 값을 반환하는 대신 Callable 을 먼저 반환한다. Spring MVC는 내부 TaskExecutor에게 ..

ComputerScience

[OS] 블럭/논블럭 (feat. 동기/비동기)

블럭과 논블럭? 주로 동기와 비동기 와 함께 많이 소개 되는데요,, 이번에 WebClient 를 공부하면서 처음 들어보았습니다. 저는 처음 개념을 접했을 때 동기-블럭, 비동기-논블럭 으로 이해했는데 오산이었습니다. 이번 정리를 통해 앞으로 혼용하는 일을 방지하고자 합니다. 블럭과 논블럭의 차이를 정확히 이해하려면 동기와 비동기를 알고 있어야 합니다. 이 포스팅은 동기와 비동기의 차이를 알고 있다는 전제하여 작성합니다. 블럭 & 논블럭 / 동기 & 비동기 블럭과 논블럭을 구분하는 가장 중요한 핵심은 함수 제어권의 위치 입니다. 예를 들어 함수 실행 순서가 A→B 인 로직이 있습니다. 블럭은 A함수를 호출하고 모든 행위를 마칠 때까지 기다렸다 종료되면 B함수를 호출합니다. 논블럭은 A함수를 호출하고 A함수..

Spring

[Spring] Multipartfile, Json 동시에 전송하는 방법 2가지

프로젝트를 진행하며 이미지 파일을 다룰 일들이 있었는데요 이번 포스팅에서는 많은 시행착오를 통해 제가 알게된 이미지 파일과 Json Data를 함께 전송하는 방법 2가지를 정리해보겠습니다. 1. 모든 값 Form-Data로 전송 제가 처음 시도해본 방법입니다. 위의 말 그대로 모든 값을 Form-Data로 전송하는 것입니다. Postman을 이용하여 보여드리겠습니다. 이때 이미지 파일을 보내는 Key값은 Text가 아닌 File로 변경해주셔야 합니다. 이제 Controller를 구현해보겠습니다. @PostMapping("/upload") public void post(@ModelAttribute PostRequestDto postRequestDto){ postService.post(postRequestD..

Spring

[Spring] Junit4, Junit5 Test코드의 차이(Trouble Shooting)

강의를 보며 Test코드를 작성하다가 에러가 떴다. 강사님은 개발 환경이 Junit4 사용중 이었고, 반면 나는 Junit5 이었다. (Spring Boot 2.2.x 부터는 Junit5이 기본설정) 그렇기에 test파일을 만들때 Junit4을 선택하고 gradle 설정을 Junit4에 맞춰 fix하였다. (Intellij fix 자동 기능 사용) (이 시점부터 문제가 시작된거 같다..) 문제를 해결하는 과정을 하나의 글로 정리해보았다. 1. Junit4, Junit5는 모듈이 다르기 때문에 import문이 다르다. @Test 어노테이션을 적고 import할때 두 개의 import문이 떴다. (Junit4 라이브러리도 갖고 있었기 때문) -> Junit4 import문 선택 (강의를 보고 코드를 작성하였..

Spring

[Spring] Spring Boot 기본 MVC Pattern

MVC란? (Model View Controller) Model : 실제 정보의 흐름 - 데이터 처리 View : 정보를 View에 담아 사용자에게 html형태로 제공한다. - 페이지 생성 Controller : 요청을 받아 Model의 상태를 바꾸고 이를 View에 전달한다. - 요청받기 간단한 MVC Pattern을 작성해보자 1. Controller 작성 이전 포스팅에서 생성해 놓았던 TestController에 localhost:(포트번호)/name 을 호출하면 model에 key : name, value : "엄준식" 을 저장하는 코드 return 에는 name.html 파일을 생성할 것이니 name을 적어준다. 2. html 파일 작성 경로 : main/resources/templates 위의..

Spring

[Spring] @RestController 사용해보기

1. @RestController 이란? 한마디로 정리하자면 @Controller + @ResponseBody 결합된 어노테이션이다. 따라서 주용도는 객체 데이터를 반환하는 것이다. 2. @RestController을 이용하여 객체 전송하기 Member class를 생성하고, Getter, Setter 를 생성해준다. ExRestController class 위에 @RestController 어노테이션을 적어준다. 이제 파라미터 데이터 전달 방식으로 값을 받아 오겠다. 확인결과 json파일 방식으로 객체가 잘 반환된 것을 볼 수있다 !! 2-1. @RestController를 이용하여 Map 전송하기 Map 객체를 생성해주고 값을 넣어준다. 잘 전송되었다 !!

Spring

[Spring] Controller 요청방식 정리(@RequestMapping/@GetMapping/@PostMapping)

API를 만들기에 있어 2가지 요청 방식이있다. 1. 기존 방식인 @RequsetMapping을 사용하는 방식과 2. @GetMapping, @PostMapping, @PutMapping, @DeleteMapping을 사용하는 방식 (스프링 4.3부터 등장) 1. @RequsetMapping 방식 @RequestMapping(value="경로" ,method=RequestMethod.GET) >> GET방식 @RequestMapping(value="경로" ,method=RequestMethod.GET) >> POST방식 2. @GetMapping, @PostMapping @GetMapping("경로") >> GET방식 @PostMapping("경로") >> POST방식 근데 여기서 우리는 의문을 가질 수..

leeggmin
지민의 성장일지