[F-lab 모각코 챌린지 56일차] TIL

JeongheeKim·2023년 7월 26일

TIL

목록 보기
56/66

학습계획


  • 데이터 베이스 PK 특징
  • 토비의 스프링 1.5절까지 학습
  • mybatis #{}, ${} 차이

Today I Learned


데이터 베이스에서 PK를 row를 식별하는 값으로 PK를 설정하지 않았을때 아래와 같은 문제 발생합니다.

  • row를 식별하는 키이므로 데이터 중복이슈가 발생할 수있습니다.
  • 데이터 무결성이 깨지는 문제가 발생할 수 있습니다.
    • 개체 무결성(entity integrity)
      • 모든 테이블이 기본키를 가져야 하며, PK는 고유해야하며 null을 허용하지 않는다.
    • 참조 무결성(referential integrity)
      • 하나의 테이블의 PK는 다른 테이블에서 참조키(FK)로 사용되므로 참조관계가 깨질 수 있다.

토비의 스프링 - 오브젝트와 의존관계

1.3 DAO의 확장

  • 낮은 결합도
    • 느슨한 연결은 관계를 유지하는데 꼭 필요한 방법만 간접적인형태로 제공하고, 나머지는 서로 독립적이고 알필요도 없게 만들어주는것
    • 결합도(하나의 오브젝트가 변경이 일어날때 관계를 맺고 있는 다른 오브젝트에게 변화를 요구하는 정도)가 낮아지면 변화 속도가 높아지고, 구성이 깔끔해진다.
  • 전략패턴
    • 자신의 기능 맥락에서, 필요에 따라 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리하고, 이를 구체적인 알고리즘 클래스를 필요에 따라 바꿔서 사용하는 패턴
  • 스프링 프레임워크
    • 객체지향적 설계 원칙과 디자인 패턴에 나타난 장점을 개발자들이 활용할 수 있게 해주는 프레임워크

1.4 제어의 역전(IoC)

  • 팩토리
    • 객체의 생성 방법을 결정하고 생성된 오브젝트를 돌려주는 역할
    • 디자인패턴의 팩토리패턴, 펙토리 메서드 패턴과는 다름
  • 프레임 워크도 제어의 역전 개념이 적용된 대표적 기술. 제어의 역전 개념이 적용되어야 프레임워크라고 할 수 있다.
  • 라이브러리를 사용하는 어플리케이션 코드는 어플리케이션 흐름을 직접 제어한다. 단지 동작 중 필요한 경우만 능동적으로 라이브러리를 사용
  • 프레임워크는 반대로 프레임워크에 의해 어플리케이션 코드가 사용됨

1.5 스프링 IoC

  • bean
    • 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트
  • bean factory
    • 스프링에서 빈의 생성과 관계 설정 같은 제어를 담당하는 IoC 오브젝트
  • Application Context
    • bean factory에서 조금 더 확장한 개념으로 더 자주사용된다.

#{} (Parameter)

String selectPerson = "SELECT * FROM PERSON WHERE ID=?"
PreparedStatement ps = connection.prepareStatement(selectPerson);
ps.setInt(1, id);

PreparedStatement 문에서 파라미터를 생성하는 역할을 한다. #{}은 JDBC프로그래밍에서 “?”에 해당된다. #{}구문은 mybatis가 String으로 변경하여 문자열을 추가하게 된다.

위의 코드는 아래와 같은 동작을 하게 된다.

SELECT * FROM PERSON WHERE ID="testMember"

${}(String Substitution)

직접 값을 주입하고 싶은 경우 사용. ${}를 사용하면 마이바티스는 문자열로 변환하지 않고 주입하게 된다. 이는 컬럼명이나 테이블명을 셋팅할 때 유용하다.

@Select("select * from user where ${column} = #{value}")
User findByCoulmn(@Param("column")String column, @Param("value") String value);
ORDER BY ${columnName}

하지만 위의 방식은 SQL Injection 공격에 취약 하므로, 해당 필드에 사용자 입력을 방지하거나 자체 검사를 수행해야한다.

  • SQL Injection 공격
    • 해커가 임의의 SQL문을 주입하고 실행하여 데이터베이스 동작을 조작하는 행위

[참고]

https://mybatis.org/mybatis-3/sqlmap-xml.html#string-substitution

0개의 댓글