Spring 입문 주차 3일차
0. 용어 정리 복습
1)MVC 패턴과 스프링에서 Controller, Service, Repository
ㄱ. 개발할 때 3가지 형태로 역할을 나누어 개발하는 방법론
- Model : 어플리케이션이 무엇을 할지 정의하는 부분
- view : 사용자에게 시각적으로 보여지는 부분(UI)
- Controller : Model이 데이터를 어떻게 처리할지 알려주는 역할. 사용자에 의해 클라이언트가 보낸 데이터가 있으면 모델을 호출하기 전에 적절히 가공하고 모델 호출, 그다음 모델이 수행 완료하면 그 결과를 가지고 View에게 전달
ㄴ. Controller
- 사용하는 이유 : 대규모 서비스 중 A,B,C 등이 있을 때 한 클래스에 다 담는 것이 아닌 Controller라는 중간 제어자를 만들어서 각 서비스에 Controller를 설계하여 유지보수비용과 개발 비용을 대폭 줄인다.
- @Controller : 주로 View 반환을 위해 사용, 하지만 @ResponseBody와 같이 사용하면 RestController와 똑같은 기능 수행 가능
- @RestController(Spring Restful Controller) Permalink : 주로 JSON/XML 형태로 객체 데이터 반환이 목적
ㄷ. Service
- Controller에게 넘어온 요청을 처리하기 위해 Service는 호출되고 알맞은 정보를 가공하여 Controller에게 넘긴다. 비즈니스 로직을 수행하고, DB에 접근하는 DAO를 이용해서 결과값을 받아온다.
- DAO : MySQL서버에 접근하여 SQL문을 실행할 수 있는 객체
- JPA와 DAO : JPA는 매우 적은 코드로 DAO를 구현시켜준다. 하지만 복잡해질수록 JPA는 사용이 어렵다.
ㄹ. Repository
- Entity에 의해 생성된 DB에 접근하는 메서드들을 사용하기 위한 인터페이스
- DB 관리(연결, 해제, 자원관리)와 DB CRUD 작업 처리
ㅁ. Entity
- DB 테이블에서 열은 Column이며 행은 엔티티 객체가 된다. 즉 테이블 전체가 Entity이며 각 cell들이 엔티티 객체
- 필드는 엔티티의 각 Column을 의미한다.
2)@어노테이션 정리
- @Entity : 클래스 위에 선언하여 이 클래스가 엔티티임을 알려준다. JPA에서 정의된 필드들을 바탕으로 DB에 테이블을 만들어 준다.
- @Builder : 해당 클래스에 해당하는 엔티티 객체를 만들 때 빌더 패턴을 이용해서 만들 수 있게 해주ㅡㄴ다.
- @AllArgsConstructor : 선언된 모든 필드를 파라미터로 갖는 생성자를 자동으로 만들어 준다.
- @NoArgsConstructor : 파라미터가 아예 없는 기본생성자를 자동으로 만들어 준다.
- @Getter : 각 필드값을 조회할 수 있는 getter를 자동으로 생성 > getName() 처럼 메서드를 만들지 않아도 쓸수있다.
- @ToString : 해당 클래스에 선언된 필드들을 모두 출력할 수 있는 toString메서드를 자동으로 생성해 준다.
- @ID : 해당 엔티티의 Primary Key가 될 값을 지정해 준다.
- @GeneratedValue : PK가 자동으로 1씩 증가하는 형태로 생설될지 등을 결정해준다.
- @ManyToOne,@OneToMany 등등 : 해당 엔티티와 다른 엔티티를 관계짓고 싶을 때 사용
3)MongoDB와 MySQL 주요 차이점
- MongoDB vs MySQL
- NoSQL vs RDBMS
- JSON과 닮은 document로 저장 vs 테이블에 데이터 저장
- 규정된 스키마가 없어 각 필드는 항상 달라질 수 있다 vs 스키마가 먼저 정의되어 각 필드들에 대한 규칙을 규정
- 스키마 : DB의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합
4)ORM(Object Relational Mapping)
- 객체와 RDBMS의 데이터를 자동으로 매핑해 주는 것
- 객체 지향 프로그래밍은 클래스를 사용하고, RDBMS는 테이블을 사용
- 객체모델과 관계모델 간의 불일치가 존재하지만 ORM을 통해 SQL을 자동으로 생성하여 불일치를 해결
- 장점
- 객체지향적인 코드로 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 해준다
- 재사용 및 유지보수 편리성 증가
- DBMS에 대한 종속이 줄어든다
- 단점
- 완박현 ORM으로만 서비스 구현이 어려움
- 프로시저(Procedure)가 많은 시스템에선 ORM의 객체 지향적인 장점 활용이 어려움
2. 참고 자료
1)https://wearegolden.tistory.com/entry/SPRING-Controller-Service-Repository
3)https://whitepro.tistory.com/265
4)https://ckddn9496.tistory.com/96
5)스키마(Schema) 개념 및 특징
https://iingang.github.io/posts/DB-schema/
6)ORM이란
https://gmlwjd9405.github.io/2019/02/01/orm.html