작성
·
606
2
안녕하세요 정수원님 우선 좋은 강의 만들어주셔서 감사합니다.
강의와는 조금 다른 질문이지만 듣다보니 궁금한점이 생겨서 질문드립니다.
예를 들어 Spring Security를 처음 학습하신다고 하면 어떤식으로 학습하시고, 내부구조를 디버깅해보시는지 궁금합니다.
강좌에서보면 특정 클래스들에 break point를 걸고 디버깅하시는 모습을 보여주십니다.
하지만 처음 Spring Security를 학습한다고 가정하면 어떤 클래스들이 핵심 역할을 하는지 파악하기 힘들것 같다고 느껴졌습니다.
개인적인 생각으로는 2가지 방법을 생각해 보았습니다.
Spring Security Docs를 보고 주요 클래스들을 파악해본다
WebMvcAutoConfiguration, SecurityAutoConfiguration등 클래스 하위로 파악해나간다
이에 대해 수원님은 어떤 방식으로 접근하시는지 궁금해서 질문 드립니다
답변 1
8
네
먼저 junuuu 님이 말씀하신 2가지 학습방법도 다 해당 됩니다.
사실 스프링의 특정 프레임워크를 소스 레벨에서 분석하고 파악한다는 것이 그렇게 쉬운 과정은 아닐 것입니다.
저도 마찬가지입니다.
무작정 소스레벨을 펼쳐 놓고 구조 및 흐름을 파악하는 식의 방법은 시간도 많이 걸릴 뿐더러 그렇게 효율적인 접근방식은 아닙니다.
일단 해당 프레임워크가 어떤 일을 하는지 대략적인 개념을 이해하고 아주 간단한 예제들을 훓어 봄으로서 전체 적인 윤곽이 잡힐 때까지 기초 및 기본을 다져 나가는 과정이 필요합니다.
어느 정도 기본적인(일부라 할지라도) 개념이 잡혀 있다면 프레임워크의 가장 고수준의 기능을 중심으로 하나씩 살펴 봅니다.
가령 예를 들면 시큐리티의 폼 로그인 기능을 코드로 작성한 뒤 실행해 보면서 실행 전후로 브레이크 포인트를 잡고 해당 메서드가 어디로 부터 호출되고 어디로 호출하는지의 전후 사정과 맥락을 이해합니다. 이 과정에서 폼 로그인과 연관되어 있는 여러 클래스들을 나열해 보고 이 클래스들의 상관관계를 객체지향적인 관점에서 해석해 나갑니다. (클래스,추상클래스,인터페이스, 상속관계, 다형성 등..)
그리고 폼 로그인 기능이 동작하기 위한 초기화 과정이 어떻게 되는지를 위에서 설명한 호출 체인을 통해 알아내고 초기화 과정에서 어떤 클래스들이 생성되고 각 클래스들의 역할과 책임 그리고 실행 결과 등을 파악해서 정리해 나갑니다.
폼 로그인 뿐 아니라 다른 API 도 위와 같은 방식으로 접근해 나갑니다. 그러다 보면 각 API 를 제어하고 관리하는 설정 클래스, 공통 클래스, 이벤트 클래스 등의 공통화 클래스 구조를 파악하게 되고 더 나아가서 해당 프레임워크의 초기화 시점에서 실행 시점을 거쳐 종료시점 까지 이르는 전체 흐름을 브레이크 포인트를 잡아 계속 반복적으로 파악해 나갑니다. 이 과정에서 좀 더 깊은 레벨까지 해당 API 의 실행 과정과 원리를 아키텍처 관점에서 분석해 보면서 필요하다면 도식을 그려가며 체계를 정리해 나갑니다.
사실 어떤 기능에 대한 원리를 이해하기 위해 접근하는 방법은 각 사람마다 다를 것이고 저마다의 효율적인 방식으로 다가가는게 맞다고 생각합니다.
한가지 분명한 것은 다른 사람이 작성한 코드를 잘 이해하고 분석하기 위해서는 나 자신이 그 코드를 분석하고 이해할 수 있는 기초와 기본이 얼마만큼 탄탄하게 다져 있는지가 중요하다는 사실입니다.
다른 사람이 만든 방정식을 잘 이해하기 위해서는 우선적으로 사칙연산을 확실하게 정립해야 가능한 것처럼 말입니다.
바빠서 오랜만에 오느라 답변이 늦었네요ㅠㅠ
친절한 답변 정말 감사드립니다 ㅎㅎ