본문 바로가기
카테고리 없음

230206 TIL

by hbIncoding 2023. 2. 6.

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

 

[SPRING] Controller, Service, Repository

어떤 것이든 개념을 알기 전에 왜? 부터 생각하는 것이 나중에 더 좋다는 걸 알았다. ❓Survlet 으로도 구현이 가능한데 왜 Controller를 쓸까? => 컨트롤러의 장점 : API 마다 파일을 만들 필요가 없음.

wearegolden.tistory.com

 2)https://velog.io/@jybin96/Controller-Service-Repository-%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

 

Controller, Service, Repository 가 무엇일까?

찾아본 결과 Controller가 무엇인지 알기 전에 MVC 패턴에 대하여 먼저 아는 것이 중요합니다!MVC패턴은 Model-View-Controller의 약자로서 개발을 할 때 3가지 형태로 역학을 나누어 개발하는 방법론입니

velog.io

 3)https://whitepro.tistory.com/265

 

스프링 부트 : 기본 개념 1) Entity, Repository 개념

개인적인 정리와 기록을 위한 글이다. 혹시라도 참고해주시는 분들께서는 정확하지 않은 내용이 많으니 유의해주시길 바란다. 자바 진영의 백엔드 개발을 아무런 지식없이 시작하게 되었다. 현

whitepro.tistory.com

 4)https://ckddn9496.tistory.com/96

 

MongoDB와 MySQL 비교

MongoDB 홈페이지에 소개하는 MongoDB와 MySQL 비교에 대하여 정리한 내용입니다. MongoDB vs. MySQL 주요 차이점 MySQL은 Oracle 사가 갖고 있는 대표적인 관계형 데이터베이스(RDBMS) 입니다. 다른 관계형 데이

ckddn9496.tistory.com

5)스키마(Schema) 개념 및 특징

https://iingang.github.io/posts/DB-schema/

 

[DB 데이터베이스] 스키마(Schema)의 개념 및 특징

Contents

iingang.github.io

6)ORM이란 

https://gmlwjd9405.github.io/2019/02/01/orm.html

 

[DB] ORM이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io