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을 사용하면 단순히 가상의 테이블을 하나 더 만들어서 명령어대로 보여주게 된다.
외래키를 설정해주면 다른 테이블의 행을 식별하게 해준다.
그리고 부모-자식으로 연결 되기 때문에 데이터를 CRUD할 때 서로 영향이 미치게 된다.
여기서 떠오르는 질문: 그냥 JOIN으로 모든 걸 해결하면 안되는 것인가? 왜 외래키를 사용해야할까?
읽을만한 답변: Foreign Keys vs Joins