# WIL: 2022년 8월 1주차

wisdom·2022년 8월 7일
0

Weekly I learned

목록 보기
5/18

이번 주 한 일

  • 블로그 프로젝트 개발을 지난주에 이어서 진행했다.
    • JWT 적용
    • Spring Security 적용
    • 댓글 CRUD 개발
    • S3 이미지 저장
    • 공통 리스폰스 바디 개발
  • 자바 ORM 표준 JPA 프로그래밍 - 기본편으로 JPA 공부
  • leetcode

새롭게 배운 것 혹은 알게 된 것

ORM

  • Object Relational Mapping
  • 객체-관계 매핑의 줄임말
  • 객체-관계의 매핑이 뭘까?
    • OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relational Database) 에서 쓰이는 데이터인 테이블을 자동으로 매핑(연결)하는 것을 의미한다. 그런데 클래스와 테이블은 호환되지 않기 때문에 불일치가 발생한다. 이 불일치를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다. ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게된다.

ORM 단점

  • ORM으로 모든 걸 해결할 수 없음. 결국 SQL문을 써야 한다. -> JPQL
  • 클래스-테이블 간의 불일치를 완벽하게 해결하지 못함
    • 그 이유는?
      • 크게 세분성, 상속성, 일치, 연관성, 탐색이라는 이유가 있다.
        • 세분성: 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있음
        • 상속성: RDBMS는 OOP 특징인 상속개념이 없다.
        • 일치: RDBMS는 pk를 이용하여 동일성을 정의하지만, 자바는 a==b 그리고 a.equals(b) 로 정의함
        • 연관성: 자바는 객체의 참조를 사용하여 연관성을 나타내지만 RDBMS는 방향성이 없는 fk를 이용해서 나타낸다.
        • 탐색: 자바는 그래프 형태로 객체를 접근하고 RDBMS는 JOIN 을 통해 접근한다.

ORM 프레임워크

  • JPA/Hibernate
    • JPA
      • 자바의 ORM 기술 표준
      • 인터페이스 모음
    • Hibernate
      • JPA 표준 명세를 구현한 구현체
  • Sequelize
  • Django ORM

SQL

  • Structured Query Language
  • 구조화된 질의 언어
  • 필요한 데이터에 대해서 구조화된 언어로 작성해서 실행하면 데이터베이스에서 데이터를 보여준다.
  • SQL을 통해 데이터베이스에 있는 데이터를 추출할 수 있음

JPQL

  • Java Persistence Query Language
  • SQL과 비슷한 문법을 가진 객체지향 쿼리
  • JPQL은 왜 생겼을까?
    • JPA에서 제공하는 메서드 호출만으로는 섬세한 쿼리 작성이 어렵기 때문

MVC

  • Model, View, Controller의 합성어로 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴
    • 디자인 패턴?
      • 소프트웨어의 개발 방법을 공식화 한 것
  • Model
    • 백그라운드에서 동작하는 로직을 처리
  • View
    • 사용자가 보게 될 결과 화면을 출력
  • Controller
    • 사용자의 입력 처리와 흐름을 제어
    • 사용자가 접근한 URL에 따라 사용자의 요청사항을 파악한 후, 그 요청에 맞는 데이터를 Model에 의뢰한다. 그리고 데이터를 View에 반영해서 사용자에게 알려준다.
  • MVC 패턴에는 모델1 방식과 모델2 방식이 있다.
  • MVC 모델1
    • JSP 안에 view + controller 가 공존함
  • MVC 모델2
    • 철저하게 분리된 시스템을 기본으로 함
    • 대부분의 웹은 모델2를 따르고 스프링 mvc 또한 모델2를 기반으로 함

어려움을 겪은 일

  • 지금까지 구현한 건 간단한 CRUD 기능이라 JPA를 잘 몰라도 지금까지 큰 문제가 없었지만 내부적으로 어떻게 동작하는지 이해하고 쓴 게 아니어서 예상하지 못한 에러가 발생할 때마다 이 부분이 좀 힘들기도 했다. 특히 JPA 코드를 작성하는데 확신이 없는 경우가 많았다.

회고

  • 다음주는 JPA를 초집중적으로 공부해야겠다.✊
profile
문제를 정의하고, 문제를 해결하는

0개의 댓글