구조
- jmeter - 성능 관련된 분석
로그
-
기본적으로 구조에 있어서 분석하는 내용들은 콘솔의 로그를 참고하면된다.
-
기본 설정은 INFO - Info, warning , fatal 부분만 나오게됨.
- https://myblog.opendocs.co.kr/archives/950 [logging level info 설정 관련]
-
기본 설정 수정은 log 설정파일에가서 로깅하는 옵션을 INFO level이 아니라 다른 레벨로 변경
- 순서
-
http://localhost:8080/owners/find를 방문했다고 가정했을때
- spring에 있는 DispatcherServlet 으로 방문
- o.s.web.servlet.DispatcherServlet : GET "/owners/find", parameters={}
- DispatcherServlet이 Controller에 있는 owners의 find를 호출한다.
- 여기서 @GetMapping Annotation을 보고 get방식이 작동한다.
- DispatcherServlet이 Controller에 있는 owners의 find를 호출한다.
- ownners의 new라고 가정할때 Owner 객체를 생성한다.
- 이후 생성된 owner를 model이라는 객체에 넣어준다.
- 이후 VIEWS_OWNER_CREATE_OR_UPDATE_FORM를 리턴한다.
- 미리 생성되있던 String 값을 따라 움직인다.
- resources > owners > createOrUpdateOwnerFrom.html을 호출하여 보여준다.
-
http://localhost:8080/owners/new 에서
POST
요청으로 값이 발생한다 했을떄-
createOrUpdateOwnerForm.html 에서
<form>
tag의method="post"
를 확인하고 POST 방식으로 값을 전달해준다.이후 저장된 방식들이 버튼을 클릭하며 submit type으로 값을 전달해준다.
-
에서 보면 OwnerController에 processCreationForm로 이동한다.
-
여기서 미리 설정된 OwnerRepository owners를 이용하여
owners에 값을 받아온 owner를 저장한다.
-
이후 owner의 ID값을 포함하여
redirect를 이용하여 url에서 보면
http://localhost:8080/owners/11
owners/11 의 11이 getID를 의미하며 그 값을 포함하여 return 시킨다.
-
이후 owners의 getID를 포함하여 Mapping을 받는 메서드로 이동한다.
-
owners/ownerDetails경로의 ModelAndView를 생성한다.
-
OwnerRepository owners 에서 findById를 이용하여 ownerId를 가져와서 ModelAndView에 넣어준다.
-
이후 mav를 리턴시킨다.
-
리턴된 mav값을 따라가보면
resources > owners > ownerDetails.html을 보여준다.
-
-
- 디버그
- 디버깅 할 위치를 클릭하여 break point를 설정한다.
- IntelliJ를 기준으로 아래와 같은 Variables를 확인하면 현재 멈춰있는 break point의 내용을 확인할 수 있다.
F8
을 이용하여 다음 줄로 이동이 가능하다.F7
을 이용하여 관련 객체 안으로나 메서드 안으로 이동이 가능한다.
위와 같이 break point를 확인하면 우측 마우스 클릭을 했을때 조건을 줄 수 있다. 위의Condition
에 특정 조건이 성립할때 의 내용을 설정해준다
ex ) productId == 2L
이와 같이 설정해준 다음에 해당 조건에 있어서 성립할때 해당 break point가 발생한다.
디버깅 버튼
위 내용을 통해 break를 걸게 되면, 아래처럼 여러 버튼을 사용할 수 있다.
(break가 된 상태에서만 사용 가능하다)
resume
- 단축키 :
option+command+r
- 기능 : 다음 break point로 이동
첫번째 break point에서
다음 break point로 이동한다.
이클립스의 resume(F8
)과 동일한 기능이다.
step 버튼들은 왼쪽에서 오른쪽 순으로 하겠다.
step over
- 단축키 :
F8
- 기능 : 현재 break 된 파일에서 다음 라인 이동
break 걸린 라인을 전부 실행 후, 다음라인으로 이동한다.
이 기능을 몰라서 라인 하나하나에 전부 break를 걸었다면, F8
을 사용하자.
step into
- 단축키 :
F7
- 기능 : 현재 break 된 라인에서 실행하고 있는 라인으로 이동한다.
break 걸린 라인에서 다음 실행될 코드는 PurchaseOrder.createOrder
다.
이때 F7
을 누르면
이렇게 createOrder
로 이동한다.
Force step into
- 단축키 :
option+shift+F7
- 기능 : 다음 실행되는 라인으로 이동하나,
step into
와 달리Stepping
을 무시하고 진행한다.
예를 들어, command+shift+a
-> stepping
으로 설정창을 오픈후,
아래처럼 skip simple getters
를 체크 하자.
이렇게 한 뒤, getter
메소드를 호출하는 곳에 break point를 지정한 후,
번갈아가며 step into와 force step into를 입력해보자.
step into(F7
)
이렇게 메소드 invoke 영역으로 바로 이동한다.
반면에
force step into(option+shift+F7
)
설정과 무관하게 getter
메소드까지 이동한다.
굳이 확인이 불필요한 getter
, 생성자
등에 skip 옵션을 설정한 뒤, skip이 필요할때는 step into로, 전부 확인이 필요하다면 force step into로 이동하면서 디버깅 하면 된다.
Step out
- 단축키 :
shift+F8
- 기능 : 현재 break 된 라인에서 호출한 곳으로 이동한다.
step into 로 createOrder
메소드로 이동 후,
step out의 단축키인 shift+F8
을 입력하면,
메소드를 빠져나오게 된다.
보통은 step into
로 파고들어간 라인을 빠져나오려할때 많이 사용한다.
Drop Frame
- 단축키 : 없음
- 기능 : call stack을 거슬러 올라간다.
이것만 보면 step out과 별차이 없어 보이는데, 큰 차이점은 step out은 해당 라인이 실행된 후 돌아가지만, drop frame은 해당 라인이 실행되기 전에 돌아간다.
Run to Cursor
- 단축키 :
option+F9
- 기능 : 포커스 되어있는 라인으로 이동
위 처럼 break된 상태에서 다음에 실행될 코드 중, ApplicationTests
의 assert
에 포커스를 두고,
(51라인에 포커스를 두었다.)
여기서 option+F9
를 누르면
이렇게 포커스가 지정된 51라인으로 break가 이동한다.
보통 break point로 지정하지 않고, 단발성으로 break를 걸고 싶을때 사용한다.
참고
백기선 개발자님의 예제로 배우는 스프링 프레임워크 입문
'Web > Spring' 카테고리의 다른 글
Spring Security와 Spring Security의 Filter를 알아보자! (0) | 2021.05.03 |
---|---|
Framework 와 라이브러리의 차이는 무엇일까? (0) | 2021.05.02 |
SOLID (SRP, OCP, LSP, ISP, DIP) (0) | 2021.03.16 |
Spring의 구조와 역할 (0) | 2021.03.16 |