데브코스 12일차 TIL

Heesu Song·2025년 3월 19일

데브코스 - 백엔드

목록 보기
8/32
post-thumbnail

오늘 배운 내용은 SQLD 공부할 때 한번씩 봤던 내용이라 쉽게 들을 수 있었다. SQLD 공부할 때는 이거 배워서 얻다 쓰나 괴로워 하는 내 모습에 현타가 왔었는데, 역시.. 배워놔서 도움 안되는건 없다^^ (그래도 힘들어..)

그리고 오늘 강사님이 교육생들의 실력차이에 대해 얘기해주셨는데 자세히 다 기억은 안나지만..🥹
강사님 말씀을 듣고나서 힘이 되기도 했고 나 자신을 좀 돌아보게 되었다. 나는 내가 남들보다 못하면 그걸 드러내고 싶지 않아서 자꾸 나를 꾸며내고, 그러는 과정에서 자존감도 많이 낮아졌는데 거기에 초점을 맞추지 말고 내가 얼마나 배우고 성장할 수 있는지를 가장 중요하게 생각해야 될 것 같다. 물론 그런 부분에 매우 약한 내가 변하는데에는 시간이 걸리겠지만
화이팅!

그리고 tmi인데 오늘 아침에 일어나보니 왼쪽 눈이 깜빡이기도 힘들정도로 통증이 심했다. 그래서 어쩔 수 없이 외출을 쓰고 병원을 갔다 왔다. 나는 별문제 없을줄 알았는데 생각보다 심각한 문제가 있었다.. 눈에 상처가 나서 꾸준히 치료를 해주지 않으면 대학병원에 가야될 수도 있다고 하셨다ㅜㅜ 열심히 치료받으면 나아지겠지만 요즘같이 힘든 시기에 아프기까지 하니까 좀 서럽기도 하다.

DataBase

Schema

  • 데이터 베이스의 전반적인 구조를 알 수 있음
  • MySQL → DataBase = Oracle → Schema

SQL

  • 계정 생성 후 권한부여

    grant all privileges on *.* to dev@localhost;
  • ‘%’ → 모든 IP에서 접근 가능

  • 데이터 추가 방법

insert into article SET title='제목', body='내용';
-- insert into article ( title, body ) values ( '제목', '내용' );
  • 테이블 구조 수정(첫번째로 오게)
ALTER TABLE article add column `id` int(10);
-- 보일때 10번째 자리수까지 보임
  • 내장 함수 실행 → select *now*();

✏️개인적으로 공부한 내용

데이터 접근 기술 - 트랜젝션, ORM, DAO 등

  • 트랜젝션 - 더 이상 쪼갤 수 없는 최소 작업 단위

    • 트랜잭션의 특징 4가지 → 원자성 - DB에 모두 반영되던지, 모두 반영되지 않아야 한다. 하나라도 실패한다면 앞서 성공한 것들을원상 복구  → 일관성 - 작업의 시작과 끝이 일관적 → 독립성 - 어떤 트랜젝션도 다른 트랜젝션의 작업에 끼어들 수 없다. → 지속성 - 트랙잭션이 완료되면, 결과는 영구적으로 반영되어야 한다.
    • 트랜잭션의 원자성 보장(rollback, commit) → 모든 로직이 성공적으로 수행 되었을 때, 모든 결과를 DB에 일괄적으로 commit → 하나라도 실패하면 모든 작업을 원상 복구 rollback
      public void sendMoney(Long senderId, Long receiverId, Long value) {
      		Connection connection = dataSource.getConnection();
      		connection.setAutoCommit(false);
      
      		try {
              // 한번에 처리되어야 하는 로직
      				connection.commit();	
      		} catch(SQLException e) {
      				connection.rollback();
      				throw new RemittanceException();
      		}
      }
      → 그러나 이렇게 되면 개발자는 핵심 비즈니스 로직에 집중할 수 없고, 여러 곳에 try ~ catch 를 반복적으로 작성해 줘야함 → AOP를 이용해 트랜젝션 분리
    • Spring에서 사용하는 @Transactional 어노테이션은 AOP의 개념이 적용된 것  → 비즈니스 로직에 집중된 코드를 짤 수 있고, 중복된 트랜젝션 처리 코드를 제거할 수 있음
  • DBMS, RDBMS(→ DBMS의 한 유형)

    • DBMS는 DataBase Management System의 약자로 데이터베이스를 관리하는 시스템이다.
    • 사용자와 DB사이에서 사용자의 요구에 따라 데이터를 생성해주고, DB를 관리해주는 소프트웨어이다.
    • RDBMS의 테이블은 서로 연관되어 있어 일반 DBMS보다 효율적으로 데이터를 저장, 구성 및 관리할 수 있다.
    • MSSQL, MySQL, Oracle이 RDBMS의 몇 가지 예이다.
    • postgreSQL은 ORDBMS
  • ORM

    • 객체와 RDB사이의 패러다임 불일치를 해소하고 일관성과 가독성을 높혀준다.

    • ORM이 객체와 관계 사이에서 SQL을 자동으로 생성해줌.

    • 메소드로 DB데이터 조작 = 객체지향> OOP의 언어를 그대로 쓰면서 객체와 RDBMS의 데이터를 매핑(OOP를 OOP답게)

    • ex) JPA, Hibernate

      (내가 이해한 것)

      그럼 결국 내가 spring repository에서 작성한 코드는 ORM(jpa)를 이용해 RDBMS(mysql)에 접근할 수 있도록 해주는 것?

  • DAO(access), DTO(transfer)

    • DAO(Data Access Object) - 실제로 DB에 접근하는 계층(DB에 data를 CRUD하는 계층) → repository package
    • DTO(Data Transfer Object) - 계층간 데이터 교환을 위한 객체(Java Beans), 로직을 갖고 있지 않는 순수한 데이터 객체이며, getter/setter 메서드만을 가짐 → dto package
profile
Abong_log

0개의 댓글