실습 두 번째 메인 프로젝트 제작 - 1
실습 두 번째 메인 프로젝트 제작 - 1
첫 프로젝트를 너무 못만들어서 완전히 새로운 걸 하기 보다는,
기능들을 추가해서 업그레이드하는 개념으로 만들어볼 것이다.
기존 프로젝트를 그대로 사용하진 않고, 새로 만들 것이다.
뭐 각 기능들로 엄청 특별한 무언가를 하지는 않고, 그냥 한 번 다뤄볼 것이다.
사용할 것으로 예상되는 기능?방식?들을 한번 나열해보겠다.
1. 느슨한 결합
기존의 프로젝트에서는 인터페이스를 사용하지 않고,
클래스끼리 연결되어서 결합도가 너무 높았다.
이러면 나중에 연결될 객체가 변경되면 그에 따라 바뀌는 코드가 너무 많아진다.
서비스, 리포지토리, DAO 등등 인터페이스를 만들고,
해당 인터페이스를 구현하는 클래스를 만들어서
연결 관계 사이에 인터페이스를 사용하여 결합도를 낮춰서 유지보수가 편하게 만들 것이다.
2. 필터와 인터셉터
어떤 로직이 실행되기 전, 후에 필요한 작업들을 해야 하는 경우가 있는데,
이 때 주로 필터, 인터셉터, AOP 3가지가 이용된다.
우선은 필터, 인터셉터만 사용하고 AOP는 나중에 따로 추가할 예정이다.
아 참고로 필터는 서블릿이 지원하는 것이고, 인터셉터는 스프링 MVC가 지원하는 것이다.
2 - 1. 필터
필터는 주로 스프링이랑 상관없이 전역적으로 처리해야 하는 작업에 사용된다.
필터를 이용해서 요청에 대한 로그를 작성할 것이다.
2 - 2. 인터셉터
인증, 권한 검사, 로깅, 트랜잭션 관리 등 다양한 작업에 사용되지만
일단은 인증에 대해서만 사용할 예정이다.
3. ORM
기존 프로젝트에서는 ORM 대신 sql mapper인 mybatis만을 사용했다.
만약 마리아DB를 사용 중인데, 나중에 오라클로 변경해야 된다면
수십, 수백의 쿼리문을 전부 직접 변경해줘야 한다.
ORM의 구현체(아마 하이버네이트 쓸 듯?)를 사용해서
특정 DB에 종속적이지 않게 만들 것이다.
복잡한 통계 쿼리를 쓸 일이 있을 진 모르겠지만
그럴 때 QueryDSL을 쓸지 mybatis를 갖다 붙힐지는 일단 나중에 생각해봐야겠다.
4. 캐시, Redis
만들게 될 것이 쇼핑몰일지 영화관일지 모르겠지만,
고객에게 보여줘야 되는 진열품?들은 변경사항이 잘 없을 것이다.
이런 것들은 메인DB가 아니라 Redis에 넣어놓고 Redis에서 가져올 것이다.
5. 정리
뭐 일단 크게 보면 저런 것들이 있는데,
스웨거를 통한 문서화, 프로퍼티 암호화, 테스트 코드 작성, valid를 사용한 매개변수 유효성 검사 등
자잘한 부분들은 만들면서 계속 글 쓰면서 소개하겠다.