TIL 2021.05.04 [DB/기초] [Java/Log]

Kyu·2021년 5월 4일
0

TIL

목록 보기
114/322

slf4j

slf4j : The Simple Logging Facade for Java

자바에는 여러가지 로깅 프레임워크이가 있는데 예를 들어 log4j나 logback 같은게 있는데 각 프레임워크마다 로깅하는 방식이 다르다. 다른 로깅 라이브러리로 변경하려면 코드를 변경해야하는데 이런 문제를 해결해주는 대표적인 예가 slf4j이다.
그리고 jvm에 의해 유효성이 체크되며 바인딩된 로깅 프레임워크가 없으면 아무런 동작을 하지 않는다.

사용법

스프링부트를 사용하고 starter-web을 디펜던시에 등록하면 stater-logging이 자동으로 라이브러리에 기본적으로 log4j나 logback가 추가되고 slf4j가 연결하는 라이브러리도 추가된다.

    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");

그리고 위 코드처럼 작성해주면 콘솔에서 로그를 볼 수 있다.

질문1: System.out.println으로 로그를 확인하면 안된다는데 Why?
질문2: debug, warn, info, warn 어떤 때에 구분해서 사용해야하나?

관계형 데이터베이스

왜 행과 행에 관계를 지어주나? 걍 쓰면 안되나?
그렇게 써도 된다. 그러나 문제점이 있음!

무슨 문제점?

관계형 데이터베이스는 1970년대에 나왔다.
그렇게 옛날에 나왔을 정도로 이미 그 문제점이 많이 언급되었을 것이다.

예를 들어서 아래와 같은 게시물 데이터들을 관리하는 테이블이 있다고 생각하자.

그리고 Kyu 라는 사람이 1000개의 글을 썼다고 생각해보자.

이때 어마어마한 중복데이터가 생긴다.
게다가 그 중복데이터를 수정하려면 모든 1000개의 글들의 행을 일일이 수정해줘야한다.
이게 바로 문제점이다.

어떻게 해결?

그럼 어떻게 해결해야하나?
테이블을 하나 더 만들어서 관리하면 된다.

그리고 원래 있던 테이블은 이름과 프로필 대신에 작성자_id 라는 컬럼을 추가해준다.

이렇게 테이블을 두개로 나누었다.
그러면 Kyu가 게시물을 1000개 작성하고 프로필을 수정하더라도 1000개의 행을 일일이 수정하는 일은 없을 것이다.

테이블 행들을 JOIN

이 때, JOIN을 사용하면 테이블을 하나로 합친 것 처럼 사용할 수 있다

관계형 데이터베이스를 왜 쓰나? 그 결론

장점

  • 중복의 제거로 유지보수가 좋아짐

단점

  • 기존껀 하나의 표에 다 들어있기때문에 직관적이었지만..
  • 테이블을 쪼개야하고 데이터에 해당되는 참조값을 비교하면서 봐야함

단점 해결

  • JOIN이 나와서 그 단점이 해결 됨

이어지는 개념 외래키Foreign Key

JOIN을 사용하면 단순히 가상의 테이블을 하나 더 만들어서 명령어대로 보여주게 된다.
외래키를 설정해주면 다른 테이블의 행을 식별하게 해준다.
그리고 부모-자식으로 연결 되기 때문에 데이터를 CRUD할 때 서로 영향이 미치게 된다.

여기서 떠오르는 질문: 그냥 JOIN으로 모든 걸 해결하면 안되는 것인가? 왜 외래키를 사용해야할까?
읽을만한 답변: Foreign Keys vs Joins

profile
TIL 남기는 공간입니다

0개의 댓글