로빈의 개발로그
항해99 WIL 6주차 - ORM, noSQL & SQL, MVC 본문
- ORM(Object Relation Mapping)이란?
- 객체와 DB테이블이 매핑을 이루는 것을 말한다. 즉, 객체가 테이블이 되도록 매핑을 시켜주는 것을 말하며, ORM을 사용하게 되면 SQL Query를 직접 작성하는 것이 아닌, 직관적인 코드(메서드) 형태로 데이터를 조작할 수 있다.
- 즉 객체는 객체대로 설계, RDB는 RDB대로 설계하고 중간에서 ORM이 매핑. 자바 이외에도 대중적인 언어는 대부분 ORM 기술이 존재.
- ORM의 장점은 MyBatis나 JDBC Template 같은 경우 직접 SQL쿼리를 작성하여 조작해야 했지만 (이것은 개발자인가 쿼리짜는 기계인가..) ORM의 경우 매핑된 객체가 board 라면 board.findAll()과 같은 메서드 형태로 DB에서 데이터를 가져올 수 있다. 이 때 객체간 관계를 바탕으로 ORM 내에서 SQL이 자동으로 생성된다. (그렇다고 아예 쿼리를 안짜는건 아닙니다.. )
- 따라서 ORM을 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus 등의 ORM 프레임워크를 별도로 사용해야 한다.
- noSQL & SQL?
- SQL(Structured Query Language)? 우리가 흔희 알고있는 관계형 DB에서 사용되는 쿼리로, noSQL과 같이 묶어서 쓸 때는 쿼리라는 의미보다는 관계형 DB를 통칭하는 것으로 쓰인다. SQL을 통해서 CRUD가 가능하며, 관계형 디비에는 다음과 같은 특징이 있다.
- 정해진 데이터 스키마에 따라 테이블에 저장 (스키마를 반드시 준수해야 함)
- 관계를 통해 데이터 분산
- 테이블에 정의된 구조에 따라 레코드(행) 단위로 저장
- 데이터의 중복을 피하기 위해 관계를 이용
- 관계형 모델을 사용하지 않으며 테이블간의 조인 기능 없음
- 직접 프로그래밍을 하는 등의 비SQL 인터페이스를 통한 데이터 액세스
- 대부분 여러 대의 데이터베이스 서버를 묶어서(클러스터링) 하나의 데이터베이스를 구성
- 관계형 데이터베이스에서는 지원하는 Data처리 완결성(Transaction ACID 지원) 미보장
- 데이터의 스키마와 속성들을 다양하게 수용 및 동적 정의 (Schema-less)NoSQL(Not Only SQL)기존 관계형 DB가 제공하는 것 이외의 다른 특성을 부가적으로 지원. 데이터 구조에 따라서 지원하는 방식이 다르다. 비관계형 DB는 다음과 같은 특징을 가지고 있다.
- SQL(Structured Query Language)? 우리가 흔희 알고있는 관계형 DB에서 사용되는 쿼리로, noSQL과 같이 묶어서 쓸 때는 쿼리라는 의미보다는 관계형 DB를 통칭하는 것으로 쓰인다. SQL을 통해서 CRUD가 가능하며, 관계형 디비에는 다음과 같은 특징이 있다.
- MVC?
- MVC (Model - View - Controller) 디자인 패턴
- Client → DispatcherServlet
- 가장 앞 단에서 요청을 받아 FrontController 라고도 불림
- DispatcherServlet → Controller
- API 를 처리해 줄 Controller 를 찾아 요청을 전달
- Handler mapping 에는 API path 와 Controller 함수가 매칭되어 있음
- 함수 이름을 내 마음대로 설정 가능했던 이유!!
- Controller 에서 요청하는 Request 의 정보 ('Model') 전달
- Controller → DispathcerServlet
- Controller 가 Client 으로 받은 API 요청을 처리
- 'Model' 정보와 'View' 정보를 DispatcherServlet 으로 전달
- DispatcherServlet → Client
- ViewResolver 통해 View 에 Model 을 적용
- View 를 Client 에게 응답으로 전달
- 나의 코멘트 :
이번주는 스프링 1주차로
1) 코멘트가 있는 형태의 게시판 만들기 2) 스프링 시큐리티로 로그인한 인스타 형식의 게시판 만들기
이렇게 두 가지 프로젝트를 하고 있는데, 1번의 경우는 보다 수월했다면,
2번은 시큐리티를 이해하는데 너무 많은 시간을 써서, 현재 예외처리와 로그인한 객체를 받아서 움직이는 부분에서 고전하고 있다.
무엇보다도 프로젝트를 진행하면서 가장 어려운 부분이 DB 테이블을 작성하는데 부족했던 지식때문에 일이 더 얼기설기 얽혀지는 일이 많다는 점이다. 테스트, 예외처리를 어떤식으로 진행해야할지도 곰곰히 생각해보자.. 아래에 스프링 학습 방법을 다시 보면서, 다시 다음주도 열심히 해보자.
- 스프링 학습방법 🌟🌟🌟🌟
- 작은 프로젝트 → 큰 프로젝트
- 간단 프로젝트들을 만들어 사용법 위주의 경험
- 프로젝트들에 기능을 하나씩 추가
- 사용법 → 원리
- 일단 스프링 사용법 위주로 학습해서 프로젝트를 완성
- 이후 원리를 학습
- 이해가 가는 부분까지만 학습 반복! (한 번에 완벽히 X)
- 자주 막히거나 아리송한 부분 위주로!
- 원리를 파악해야 하는 이유
- 현업 개발에서는 정확도와 신뢰도가 중요!!
- 일반적이지 않은 어려운 요구사항을 해결해야 할 때 원리가 필요!!
- 주제 별 학습
- 스프링은 모듈화가 잘 되어 있음
- 필요한 부분만 추가해서 사용 가능
- 스프링 모듈 별 중점 학습
- 예) 스프링 3계층, 시큐리티, 테스트, JPA, AOP
- 스프링은 모듈화가 잘 되어 있음
- 레퍼런스
https://catsbi.oopy.io/f52511f3-1455-4a01-b8b7-f10875895d5b (MVC)
https://velog.io/@adam2/JPA는-도데체-뭘까-orm-영속성-hibernate-spring-data-jpa(ORM)
https://www.samsungsds.com/kr/insights/1232564_4627.html (NoSQL)
기타 : 스파르타 코딩클럽 Spring 심화반 코스
'항해99' 카테고리의 다른 글
WIL(9주차) - 실전 프로젝트! (0) | 2022.03.14 |
---|---|
TIL(Day 43) - 2022.02.22 (0) | 2022.02.23 |
TIL(Day 39) - 2022.02.18 (0) | 2022.02.19 |
TIL(Day 38) - 2022.02.17 (1) | 2022.02.18 |
TIL (Day 37) - 2022.02.16 (0) | 2022.02.17 |
Comments