우리는 본격적으로 시작했고 패키지를 짜는 과정에서 우리는
- resource 에는 MyBatis 에 연결하는 mapper.xml 파일을 생성하고 xml 파일과 연결되는 mapper.java 파일또한 만들어 주었다
- mapper.xml : 물론 MyBatis Mapper XML File로써 실행할 SQL 문을 정의해놓은 파일이다. SQL 문을 실행하기 위해 Parameter Object 를 받아오거나 SQL문 실행 결과를 Result Object에 자동 바인딩 한다.
- mapper.java : 해당 파일은 인터페이스로써 만들어진다. 우리가 XML 에 적어놓은 쿼리문과 바인딩되어 실제 SQL문이 처리가 되는 클래스를 자동으로 생성한다.
- Entity 와 DTO 의 역할분리
- Entity : DB에 직접적으로 맡닿아있는 객체로써 우리가 요청(Request), 응답(Response)값을 전달하는 클래스로 사용하는것은 매우 좋지 않은 선택이다. 또한 Setter 도 사용을 지양한다. 객체의 일관성, 안전성을 보장하기 힘들어지기 때문이다. 그래서 우리는 builder 를 사용하여 필요한 값만 넣어서 사용하고 어떤 값을 어떤 필드에 넣는지 코드를 통해 확인할 수 있다.
- DTO : 데이터 교환을 할때 사용하는 JSON 객체로 변환하는 직렬화에도 사용된다. 우리는 데이터를 가공하고 주고 받는 역할에 이러한 DTO를 사용해서 데이터를 변환시켜준다.DTO는 setter 가 존재하고 해당 DTO에는 왠만해서는 다른 비지니스 로직은 들어가지 않는다.
- Service 와 Service를 구현하는 ServiceImpl을 따로 두었다
여기서 Service 는 인터페이스로써 Impl이라는 이름을 달고 있는 service가 구현체이다
왜 굳이 이런식으로 똑같은 이름을 두개로 나누냐면 추상화를 통한 구현 방식이기 때문이다. 이는 객체지향의 다섯가지 원칙 중 하나인 OCP(Open Close Principle)원칙을 가장 잘 실현해주는 설계 방식이라고 할 수 있다
※ OPC : 개방, 폐쇄 원칙이라고 부르며 소프트웨어 개체는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야한다 는 원칙이다
이러한 프로젝트 설계는 만약 우리가 만든 기능을 새 정의하는데 구현체만 바꾸면 되는 아주 간단한 방법을 사용하기 때문에 사용해서 인터페이스와 구현체를 분리하여 독립적으로 보다 자유로운 확장을 보장하게 된다.
- ApiResponse 의 자체 제작
우리가 평소에 REST 방식으로 데이터를 주고 받게 되면 컨트롤러는 응답을 할때 ResponseEntity를 사용하게 된다. 이는 팀 프로젝트 간의 혼동을 오게 만들수 있다, 때문에 팀 프로젝트를 진행할때 팀원끼리의 약속된 응답형식과 코드를 통해 사용을 한다. 이렇게 되면 각자가 작업을 할때 List 와 객체 전달 방식, 성공과 실패를 전달할때 어떤 메소드를 사용하고자 정하게 되고 이는 코드를 한결 더 깔끔하게 만들어 주었다.
- CORS 정책 관리
프론트와 협업을 하는 과정에 빼놓을수 없는 CORS 오류이다. 서로 포트번호가 다르기 때문에 CORS 오류가 발생하게 된다. 때문에 우리는 서버에 허락한다는 정책을 넣어주어야 한다. 우리는 WebConfig를 생성하여 WebConfigurer를 implements 해서 오버라이드 했다
● addMapping - CORS를 적용할 URL 패턴을 정의한다.
● allowedOrigins - 자원 공유를 허락할 Origin 을 지정할 수 있다.
● allowedMethod - HTTP Method 를 지정해서 원하는 Method 만을 사용할수 있게 만들수 있다
● allowedHeader - 클라이언트에서 보내는 헤더에서 사용 가능한 것을 정할수 있다. "*" 을 쓰면 다된다
● allowedCredentials - 쿠키 요청을 허용한다는 뜻, 다른 도메인 서버에 인증하는 경우에만 사용한
● maxAge - 원하는 시간만큼 캐싱한다.
우선 이정도로 정리하고 후에 추가적인 내용은 또 적도록하자
'프로젝트 > 팀 프로젝트' 카테고리의 다른 글
babpool 5. SecurityFilterChain 설정 (0) | 2023.07.11 |
---|---|
babpool 6 . JWT Filter 만들기 전에 부품만들기 (0) | 2023.07.11 |
BabPool 4 . 회원가입 (0) | 2023.07.11 |
BabPool 2. 사용한 도구들 (0) | 2023.07.11 |
Babpool 1. 아이디어 회의와 ERD 생성 (0) | 2023.07.11 |