Week_3

아야하면우유·2025년 4월 6일

HSL

목록 보기
2/6

Database

 데이터베이스는 데이터들의 저장소라고 보면 편하다. 그렇지만 왜 HDD, SDD 이런 식이 아니라 '데이터베이스'라고 따로 명명하여 부르는걸까?

  데이터베이스는 여러 사용자들이 동시에 데이터를 확인할 수 있으며, DBA라고 부르는 Database Administarator가 데이터를 확인하려는 유저들에게 권한을 부여하여, 데이터의 보안을 지킬 수 있다. 또한, 데이터에 대한 수정이 이루어지면 즉각적으로 반영되어 바로 사용자들에게 수정된 데이터를 보여주기도 하며, 데이터의 중복이 생기면 자동적으로 제거하여 데이터의 무결성을 유지하기도 한다. 이렇듯 데이터에 대해서 아주 전문적으로 관리하는 체계를 지니고 있어, 요즈음 정보사회에서 매우 중요한 데이터를 저장하는 저장소로 사용하는 것이다.

  흔히들 데이터베이스라고 부르지만, 사실은 우리가 부르는 DB의 정확한 명칭은 'DBMS'이다. Data Base Management System이라고 부르는 이것은 데이터베이스의 형태, 예를 들면 관계형이라던지, NoSQL 등을 명시하고, SQL(Structured Query Language) 표준을 따르며 유저들이 쉽게 데이터를 관리할 수 있게 해준다.


DDL(Data Definition Lang)

  • 데이터 정의어이며, CREATE / DROP / ALTER 등의 테이블, 스키마 설정에 관한 정보를 다룬다

    create table (   TABLE SCHEMA   )
    drop table [  CASCADE  ] // CASCADE는 참조중인 테이블이 있더라도 삭제한다.
    alter table [  TABLE NAME  ] ADD / RENAME / MODIFY ...

DML(Data Manipulate Lang)

  • 데이터 조작어이며, CRUD 관련하여 데이터를 다룬다. DDL이 테이블 관련 명령어라고 하면 DML은 레코드(튜플) 관련인 셈

    select [  TABLE NAME  ] from [  FIELD  ]
    update TABLE NAME set FIELD = DATA where 조건
    insert into TABLE NAME(  FIELD1, FIELD2, ...  ) values (  DATA1, DATA2, ...  )
    delete from TABLE NAME where 조건

DCL(Data Control Lang)

  • 데이터 제어어이다. 주로 사용자의 권한을 부여 및 회수하며, 트랜잭션을 반영하거나, 취소할 때 사용한다. 추후 데이터베이스를 직접 설계하여 배포할 상황이 아니라면, 그렇게 많이 쓰지 않는다.

Spring Bean

 Spring Bean으로 등록한다는 것은 스프링 컨테이너에서 객체를 생성하고 생명주기를 관리하는 기능을 사용하겠다는 뜻이다. 우리는 AppConfig같은 파일들에 MemberService, OrderService등의 인터페이스를 적용한 impl 클래스에 MemberRepository같은 의존성을 주입해주어 생성하게끔 명시해둔다. 이렇게 한다면, getBean같은 메소드를 호출하여, Spring Container가 만들어준 객체를 사용하기 때문에, 한번의 프로세스에 주소가 같은 객체를 사용할 수 있다. 하지만 문제도 있다. 같은 주소를 사용하기 때문에, Queue같이 먼저 들어온 요청을 손상 없이 처리하고 다음 요청을 처리해야 하는데, 요청을 전부 처리하지 못했는데 다음 요청으로 인해 객체가 손상될 수 있다.
 또한, Bean이 생성되지 않아도 동작해야 할 수 있다. 그럴 땐, 여러가지 방법이 있는데 주로 사용되는 방법은 Optional<> Bean으로 주입해주는 것.
 생성자 주입해주는 이유 = 컴파일 단계에서 오류를 발생시켜, 배포 전에 안전한지 체크할 수 있기 때문.
 우리가 스프링 빈을 생성하고, 그 객체에 대해 Setter 메소드를 호출 할 수 있다. 예를 들어 네트워크 객체를 만든 후, Setter로 url을 지정하는 방식으로 말이다. 그렇다면, 객체이므로 생성될 때가 있고, 소멸될 때가 있지 않을까? 그것을 지정해줄 수 있는 Annotation이 있다!

@PostConstruct
public void init() { } // 의존관계 주입 후 객체 생성 시점을 콜백해준다.
@PreDestroy
public void close() { } // 객체가 소멸하는 시점을 콜백해준다.

  자바 표준이므로, 어느 정도까지는 굉장히 자유롭지만, 외부 라이브러리에는 적용하지 못한다는 단점이 있다.

profile
우유가 넘어지면 아야

0개의 댓글