전체 글

TIL

Today's Dev Notes(2018-12-24)

안녕하세요, Brad입니다. 오늘도 공부한 내용 정리해볼게요. Q & A DB없으면 Service Layer가 필요없을까요? 외부 서비스의 API를 이용해서 데이터를 가져오더라도 Repository(DAO)를 사용할 수 있습니다. 왜냐하면 그것도 데이터를 가져오는 일이기 때문입니다. 또 외부 서비스를 합쳐서 Repository를 또 만드는 일이 생기기 때문에 기본적으로 Service Layer가 필요할 것입니다. API 자체도 DB로 생각할 수 있습니다. ResponsEntity로 return하는 것과 그냥 User를 return하는 것이 차이는 뭘까요? 클라이언트 입장에서 똑같습니다. 다만 ResponseEntity 는 임의적으로 담고싶은 데이터가 있을 때 사용합니다. BasicAuthIntercept..

Spring

AOP5

AOP를 공부하면서 AOP와 비슷한 기능을 하는 것처럼 보이는 다른 용어들과 많이 헷갈렸던 것 같아요. 오늘은 AOP와 비교하여 Filter, Interceptor, HandlerMethodArgumentResolver에 대해서도 간략하게 알아보도록 하겠습니다. Interceptor 먼저 Interceptor부터 살펴보도록 하겠습니다. Interceptor를 이해하기 위해선 우선 HandlerMapping에 대하여 알아야 합니다. HandlerMapping 은 DispatcherServlet 으로 하여금 요청이 왔을 때 해당 URL에 따른 메서드를 매핑하게 해줍니다. 그리고 실제 해당 메서드를 실행할 때는 HandlerAdapter 를 사용하죠. 위에서 언급한 HandlerMapping 와 같이 작동하는..

Spring

AOP4

AOP4 본 글은 천청향로님의 블로그 글을 참고하고 작성되었습니다. 지난 포스트 AOP3에서 AOP의 필요성과 용어에 대해서 알아봤었는데요. 오늘은 직접 구현해보고 그 안에 사용되는 코드에 대해 알아보도록 하겠습니다. 구현 실습 일단 실습환경은 SpringBoot + JPA + H2 Gradle 환경이구요. ApiQuestionController내 질문 생성, 업데이트폼 요청, 업데이트, 삭제 요청을 RestController를 통해 받는 상황입니다. RestController로 구성한 이유는 HttpStatus값을 이용하여 테스트하기 위함입니다. 그럼 코드를 보도록 하겠습니다. @RestController @RequestMapping("/questions") public class ApiQuestion..

Spring

AOP3

AOP3 Aspected Oriendted Programming(AOP) Introduction 지난 프로젝트(java-qna)에서 로그인한 유저인지 확인하기 위해 해당 요청에 따라 Session 을 확인했어야 했습니다. 위 부분은 저의 QuestionController 내 글 보기, 생성, 업데이트 이동, 업데이트에 관한 부분인데요. 매번 Session 을 확인하는 작업이 필요한 것을 볼 수 있습니다. 다음과 같은 구조인 것이죠. 개별 요청 하나하나만 보았을 때 중복되는 부분이 없어보입니다. 하지만 부가적인 기능의 관점에서 보면 중복이 확실하게 보이는데요. 바로 이 부분이죠. 여기서 AOP에 대한 필요성이 등장합니다. 공통된 부가기능은 따로 떼어두고 재사용하자는 것인데요. AOP(Aspect-Orien..

TIL

Today's Dev Notes(2018-12-20)

안녕하세요, Brad입니다. 오늘 배운 내용 정리해볼게요! 개인 프로젝트 포비에게 PR보내기 위한 설정 Github 설정에서 Collaborator에 javajigi 등록합니다. master 브랜치 말고 전 미션과 같이 step 만들어서 PR보냅니다. 그리고 PR보낼 때는 master로 보내면 됩니다. 또 PR주소도 같이 요청해야 합니다. Q&A private 필드에 데이터를 어떻게 넣을 수 있을까요? ReflectionTestUtils 대신 getter / setter을 이용하는 것이 좋습니다. getter / setter는 UI에 전달할 때 어쩄든 필요한 부분이므로 이것을 이용하면 되기 때문입니다. logback-access의 역할 HTTP의 요청 및 응답에 대한 데이터를 콘솔에 출력할 수 있습니다...

TIL

Today's Dev Notes(2018-12-19)

Today's Dev Notes(2018-12-19) 안녕하세요, Brad입니다. 오늘 공부한 내용을 정리해볼게요. Domain내에서 private필드에 접근하여 처리하는 메서드의 경우 테스트를 어떻게 할 수 있을까요? '테스트는 상태값을 확인하는데 초점을 맞추는 것이 아니라 행동(behavior)에 초점을 맞추어야 한다'는 글을 인터넷에서 봤는데요. 그럼 이렇게 테스트한다는 것 자체가 적절하지 않은걸까요? 왜냐하면 지금 하려는 테스트도 상태값을 확인하는 작업에 불가하거든요. 일부러 그 메서드의 매개변수로 private 필드를 받으면 해결할 수 있지만 이건 좋은 생각은 아닌 것 같아요. 만약 이렇게 만든다면 Domain내에 위치할 필요가 따로 없잖아요. 이런 private필드나 메서드에 접근하기 위해 R..

Brad Lee
Brad's blog