전체 글 68

[TIL] ORM은 뭔데 Spring은 왜 JPA를 사용할까

수업일 : 26.09.04 ORM이란 무엇이고 JPA를 다들 사용하는 걸까ORM은 Object-Relational-Mapping으로, 객체와 릴레이션을 자동으로 매핑해 주는 도구의 한 형식이다. 이 도구를 이용해서 Java 객체로 매핑해서 사용할 수 있는 것이 바로 JPA(Java Persistence API)이다. 이번 글에서는 이 원리에 대해서 기본적인 것을 알아보겠다. ORM은 왜 나왔는가강사님이 그랬는데, 진짜 일 잘하는? 천재적인? 그런 개발자는 모든 걸 귀찮아하는 성격에서부터 나온다는 말을 해주셨던 것처럼, DB와 연결해서 커넥션을 가져와서 값을 넣고 다시 객체로 매핑하는 이 단계가 사실 DB 접근이 있는 곳이라면 모든 코드 영역에서 반복되는 보일러플레이트 코드였을 것이고, DB의 "관계형 모..

[TIL] JDBC와 Transaction 처리 - 스프링이 구현하는 방식

JDBC를 사용하여 Transaction을 구현해보자선언적 @Transactional을 사용하면 다른 구현없이 바로 트랜잭션을 사용할 수 있다. 하지만 귀찮은것을 해봐야 선언적 Transaction이 얼마나 고마운지 알것이기 때문에 구현과 설명을 해보려고한다. 기본적인 트랜잭션 개념은 아래 이전 포스트에서 확인가능하다. [TIL] DB 트랜잭션 개념트랜젝션에 대한 기본적인 원리에 대해서만 설명하고 JAVA와 관련된 기법들(전파, 예외처리 등등)은 JDBC를 진행할 때 정리트랜잭션이란하나의 논리적인 작업단위를 의미해서 이 단위 내의 작업soly-log.tistory.com JDBC를 통해 트랜잭션을 구현하는 점진적 방식유즈케이스 : 사용자를 생성하면 사용자를 환영하는 메시지를 함께 생성한다.Service..

[TIL] 반복되는 JDBC, JdbcTemplate으로 줄이기

스프링은 JDBC를 어떻게 추상화했는가. JdbcTemplate 정의JDBC API 사용 시 ① 접속 → ② 쿼리 → ③ 결과 처리라는 반복되는 패턴이 존재한다. 스프링은 이 반복 작업(커넥션 획득/해제, 예외 처리 등)을 대신 처리해 주는 JdbcTemplate 클래스를 제공한다.왜 스프링에서 이런 기능을 제공할까? 위에서 서술한 반복 패턴은 애플리케이션이 DB와 소통할 때마다 매번 발생하는 보일러플레이트다. 스프링은 개발자가 이 반복 작업에서 벗어나 SQL과 비즈니스 로직 작성에만 집중할 수 있도록 JdbcTemplate을 제공한다. 아래와 같이 전과 후 코드를 비교해 보자// Before public User findById(int userId) throws SQLException { ..

[TIL] JDBC API로 DB 연결하고 쿼리 결과 다루기

JDBC API와 JDBC Driver에 대해 정의JDBC API : 자바 애플리케이션에서 데이터베이스 사용을 위한 표준 인터페이스JDBC Driver : DBMS 벤더가 제공하는 Driver(구현체)JDBC는 인터페이스만 표준으로 정의하고 있기 때문에 실제 DB와의 통신 로직은 각 DBMS 벤더가 제공하는 Driver(구현체)가 담당한다. 덕분에 애플리케이션 코드는 Connection, Statement, ResultSet 같은 JDBC 표준 API만 사용하면 되고, DB를 postgreSQL→ MySQL로 바꾸더라도 Driver 의존성만 교체하면 되는 구조가 된다. JDBC가 제공하는 인터페이스Connection : 쿼리 수행을 위해 데이터베이스에 접속 (Driver - Connection 구현체)..

[TIL] 데이터베이스 설계 순차적 정리

데이터베이스 설계 필요성과 절차 흐름엄청 큰 다리를 건설한다고 했을 때 설계도 없이 다리를 건설할 수 있을까? 이와 같이 복잡한 현실세계를 데이터로서 단순화하고 목적에 부합하며 정확한 내용으로 표현할 수 있어야 한다 그렇다면 이를 참고하여 다리 건설뿐 아니라 여러 방면에서도 도움을 받을 수 있을 것이다 이와 같이 프로그램을 이루고 있는 데이터에 대한 설계를 통해, 데이터의 구조와 관계를 명확히 정의하고 불필요한 중복이나 오류 없이 시스템을 구축할 수 있게 된다. 이것이 바로 데이터베이스 설계이다. 데이터베이스 설계 프로세스 데이터 관점 : 요구사항 분석 → 개념적 모델링 → 논리적 모델링 → 물리적 모델링 → DB 구축 → DB 튜닝데이터베이스 설계는 단순히 테이블을 만드는 작업이 아니다. 현실 세계의 ..

[TIL] 물리적 모델링

물리적 모델링 정의 논리 모델을 실제 DBMS에 맞게 구현DB 성능고려한 테이블, 인덱스, 파티션, 스키마 정의 등을 진행한다.산출물 : 실제 물리 DB 물리적 모델링 - 기본테이블 설계논리 모델을 바탕으로 실제 데이터베이스에서 동작할 수 있는 구체적인 테이블 구조를 설계한다.PostgreSQL, MySQL과 같은 DBMS의 특성을 고려해서 테이블 명명, 데이터 타입, 제약조건등을 설계하는 것이 핵심테이블 설계 흐름테이블 명명 규칙에 따른 테이블 생성(DBMS 권장 사항 체크, 팀 컨벤션체크)컬럼 데이터 타입 선정기본값과 제약조건 설정 (기본키 구현전략, 외래키 제약조건 구현 전략, 고유키 제약조건 구현 전략)참조 무결성 규칙 설정 : (DB의 두 테이블 간의 관계가 항상 일관성을 유지하도록 보장하는 제..

[TIL] 논리적 모델링

논리적 모델링 정의 (Logical Modeling)목표 : 컬럼과 데이터 타입을 정의하고, 정규화를 수행한다.논리적 모델링은 개념 모델을 바탕으로 속성, 식별자, 관계 구조를 상세화하는 과정으로, 실제 테이블 구조에 가까운 형태로 데이터를 정제하고 구조화하는 작업속성 정의에서는 기본, 복합, 파생 속성뿐만 아니라 널 허용 여부, 도메인 제약조건까지 명확히 해야 하며, 식별자 설계에서는 후보키 중 하나를 기본키로 선정하고, 나머지는 대체키로 관리함으로써 유일성과 무결성을 보장한다.정규화 과정은 데이터 중복과 이상 현상을 제거하기 위한 핵심 기법으로, 1NF에서 시작해 3NF, BCNF까지 점진적으로 적용하며, 필요 시 성능을 고려해 역정규화를 판단해야 한다.논리적 모델링의 결과물은 이후 물리 모델 구현의..

[TIL] 개념적 모델링 ERD

개념적 모델링 정의현실 세계의 개체(Entity)와 관계(Relationship)를 모델로 표현한 단계 목표 : 무엇이 존재하고 서로 어떻게 연결되는지를 시각화한다.ERD(Entity-Relationship Diagram) 산출 ERD (Entity-Relationship Diagram) 개체(Entity) 간의 관계를 도식화한 다이어그램개념적 모델링 단계에서는 각 개체의 내부 속성(컬럼)은 정의하지 않고, 개체 간의 관계만 표현한다관계 표시 시 다중성(Cardinality)을 표기한다: 1(단수) 대 N(복수) 관계인지 명확히 한다 (예: 회원 1명 : 주문 여러 건)관계가 필수(Mandatory)인지 선택(Optional)인지도 함께 표기한다 (예: 주문은 반드시 회원이 있어야 하는가?)

[TIL] DB 트랜잭션 개념

트랜젝션에 대한 기본적인 원리에 대해서만 설명하고 JAVA와 관련된 기법들(전파, 예외처리 등등)은 JDBC를 진행할 때 정리트랜잭션이란하나의 논리적인 작업단위를 의미해서 이 단위 내의 작업이 모두 성공 하거나 모두 실패해야하는 작업의 집합전통적으로 관계형 데이터베이스의 핵심 특징이며, 최근에는 일부 NoSQL도 제한적으로 트랜잭션을 지원한다 트랜잭션의을 제어하기 위한 조건 (자세한건 이전 포스팅 확인)트랜잭션이 논리적 작업 단위로서 안전하게 수행되려면 ACID(원자성, 일관성, 격리성, 지속성)를 만족해야 한다. 이 중 격리성(Isolation)은 여러 트랜잭션이 동시에 실행돼도 서로 간섭받지 않아야 한다는 원칙이며, 이를 얼마나 엄격하게 지킬지는 Isolation Level(L0~L3)로 설정한다. ..

[TIL] 데이터베이스 트랜잭션 격리레벨(Isolation Lavel)

트랜잭션 내에서 사용되는 격리레벨 4가지Pessimistic Lock을 통해 동시성을 처리할 때 모든 쿼리에 트랜잭션 Lock을 걸어버리면 일관성은 매우 훌륭하지만 대기 시간이 길어져 불편할 수 있다. 이때 상황에 따라 격리 수준을 조절할 수 있게 해주는 것이 Isolation Level이며, 이번 글에서 이를 알아본다.용어 정리Commit : 변경된 데이터를 디스크에 저장하여 데이터베이스에 확정 적용하는 것Rollback : 트랜잭션 중 발생한 변경사항을 취소하고, 이전 상태로 되돌리는 것 Isolation Lavel 4가지L0 : Read Uncommitted 가장 느슨한 격리 레벨로, 읽기 성능이 데이터 정확성보다 중요할 때 사용한다.커밋되지 않은(아직 확정 안 된) 데이터까지 읽을 수 있어서 Di..

반응형