1. 들어가며 앞서 저희는 로그 추적기라는 부가 기능을 기존 프로젝트에 추가하면서 생길 수 있는 문제점과, 그에 대한 해결책에 대해 알아보았습니다. 간단하게 그 과정을 복습해볼까요? 프로젝트 전반의 코드에 모두 적용되어야 하지만, 핵심적인 비즈니스 로직이 아닌 '부가 기능'이다.그래서 기존 코드에 영향을 주지 않고 적용될 수 있으면 좋겠다.그래서 템플릿 메서드 패턴 -> 전략 패턴 -> 프록시 패턴 -> 동적 프록시 및 CGLIB 적용라는 과정을 통해서 기존 코드를 바꾸지 않고, 프록시 클래스도 자동생성을 맡기면서 코드 양도 훨씬 줄일 수 있었습니다.저희가 구현한 기능들은 사실 Spring에서 구현해서 제공하고 있습니다. 그것이 AOP이고, 오늘은 Spring에서 AOP를 어떤 방식으로 제공하고 있는지 ..
1. 문제 상황프로젝트에서 에러 로깅을 어떻게 할 지 고민하는 상황이었습니다. 제 프로젝트는 RestControllerAdvice를 통해 예외 처리를 하고 있습니다. @RestControllerAdvice("생략")public class AttendeeExceptionAdvice { @ExceptionHandler(ActivatedSessionExistsException.class) public ResponseEntity activatedSessionExistsHandler() { return RESPONSE_CONFLICT; } @ExceptionHandler(CourseNotFoundException.class) public ResponseEntity cours..
1. 들어가며 김영한님의 강의에서 가장 실전적인 파트를 맡고 있는 강의인 "실전! 스프링 부트와 JPA 활용 1, 2편을 듣고"를 요약하고자 합니다. 1편의 경우 Spring 프로젝트 경험이 있다면, 그리고 성공적으로 수행해냈다면 생략해도 될 것 같습니다. 저도 요약에 있어서 굳이 둘을 나눌 필요는 없을 것 같아 하나로 합쳐서 정리하고자 합니다 :) 2. 엔티티 클래스 개발 Entity는 Database의 Model에 해당되는 부분입니다. 하지만 저희는 JPA를 활용하여 '객체지향적'으로 데이터베이스를 활용하고자 합니다. 따라서 data structure처럼 Table을 Entity로 정의하고 Getter와 Setter를 모두 정의하여 사용하기보단 별도의 메서드를 정의하여 객체처럼 다루는 것이 이상적입니..
1. 들어가며 Spring의 진입 장벽에는 여러가지가 있을 것 같습니다. AOP, JPA 등 다른 프레임워크보다 어렵게 느껴질 것들이 많습니다. 다른 언어와 비교해도 Python Django의 ORM이 처음 접하고 CRUD를 다루기까지 시간이 얼마 걸리지 않는 것에 비해 Spring은 처음부터 알 수 없는 에러들과 싸움을 하는 경우가 많습니다. 물론 Django도 DRF와 여러 복잡한 쿼리를 사용한다면 복잡도가 더 올라가겠지만요! 하지만 익숙해진다면 그만큼 강력한 프레임워크라고 생각합니다. 그리고 무엇보다 Spring에는 가장 큰 메리트가 있는데, 김영한님의 강의가 있다는 점이라고 생각합니다. 주변 지인들과 프레임워크 얘기를 할 때 난 Django가 더 어려웠어~ 라고 해서 당황한 적이 있는데, 그분 말..
1. 들어가며 들은지 한 학기가 지나서 정리하는 김영한 스프링 MVC 1편 강의입니다. 오랜만에 정리하려고 살펴보면서 전체적으로 모두 복습도 해야했고 그 김에 2회독을 한 셈이 되었으니 오히려 좋다고 할 수 있을 것 같습니다..지금까지 세 개의 강의를 정리했는데 사실 강의 내용을 그대로 쓰는 것은 지양하고 있습니다. 강의 내용을 그대로 옮긴다면 김영한님께 죄송한 일이라 생각이 들고, 무엇보다 "직접 강의 듣기"라는 가장 좋은 방법을 두고 블로그 글을 볼 필요는 없다고 생각합니다. 이 글에서 다루고 있는 것은 강의에서 어떤 것을 가르쳐 주는지를 통해 들을 지에 대한 판단과, 추후 복습을 위해 정리한 것입니다! 2. 강의 내용 2.1 웹 어플리케이션이란? 한때 면접 단골 질문으로 알려졌던 것 중 하나가 웹 ..
1. 들어가며 저번에 하나의 글로 정리한 입문 강의에 이어 스프링 핵심 원리 - 기본편 강의를 정리해보고자 한다. 이번 강의는 하나의 글로 정리하기엔 내용이 많아 중요한 주제의 경우 추가로 자료 조사를 해서 글을 따로 쓸 예정이다. 본 글에서는 강의의 핵심만 추려서 나중에 보기 편하게 정리하는 것이 목표이다. 2. 강의 내용 2.1 스프링이란? 스프링은 JAVA의 가장 큰 특징인 "객체 지향 언어"의 맛을 잘 살리는데 집중한 언어이다. 그렇다면 객체 지향 언어의 묘미는 무엇일까? 추상화, 캡슐화, 상속, 다형성 등 다양한 성질이 있고 모두 실제 코드에서 쓰일 수 있지만 스프링에서의 핵심은 바로 다형성이다. 각각의 컴포넌트가 유연하게 변경되면서 개발할 수 있는 것. 이를 위해 스프링은 역할과 구현을 분리한..