전체 글

전체 글

    스프링부트 로그 찍는 법, 로그 파일 만드는 방법

    스프링부트는 Logback을 기본으로 쓰며 log.debug()로 개발자가 직접 로그를 찍을 때는 @Slf4j 추상 라이브러리를 사용한다. Logback을 쓰든 Log4j를 쓰든 공통적으로 로그를 찍는 라이브러리는 콘솔 출력 형태 커스터마이징 할 수 있고 콘솔 출력 내용을 파일로 내려받을 수 있다. @Slf4j Slf4j는 로깅의 추상화된 로그 라이브러리다. 이 말은 추후에 로그 라이브러리(스프링부트면 Logback에서 Log4j2로)를 다른 것으로 대체하더라도 기능의 문제가 없다는 장점이 존재한다. @Slf4j에서 log.debug()와 같은 기능을 이용하기 위해서는 아래와 같이 사용할 수 있다. @Slf4j는 Lombok의 기능이지만 Lombok을 이용하지 않는다면 아래와 같이 사용한다. public..

    Netty 아키텍처 기초 소개 및 사용법

    소개 Netty는 Java를 통해 소켓 통신 + 비동기 프로그래밍을 고성능으로 단순하게 구현할 수 있는 기반이 튼튼한 프레임워크다. 국내에서도 거래가 여러번 일어나는 프로젝트 뿐 아니라 WebFlux 기반의 고성능 서버를 구축할 때도 많이 사용 중이다. 기존에는 HTTP 통신을 위해서 HttpURLConnection를 사용하고 TCP 소켓 통신을 위해서는 java.net의 ServerSocket를 이용했다. 다만 해당 방식은 동기 전송 방식만 지원했는데 해당 방식을 Blocking IO, 즉 OIO(Old Input Output)라고 불렀다. 그리고 2002년인 자바 4 버전부터 None Blocking IO 패키지가 포함된 java.nio인 NIO(New Input Output)가 출시되었다. 다만, ..

    UUID vs Auto Increment 중 PK 선택하기

    우리의 경험에 따르면 95%의 경우 PK 선택은 항상 Auto Increment Integer 여야 합니다.가독성은 단순함을 이끕니다. 숫자는 쓰기 쉽고, 기억하기 쉽고, 의사소통하기 쉽습니다.  사건의 발단 프로젝트 진행 과정에서 Auto Increment로 PK 사용으로 발생될 수 있는 문제점이 있었다Increment PK는 정수형으로 보통 1, 2, 3, 4 순서로 순차적 채번이 된다는 특징이 있다.만약 A라는 사용자가 게시물(PK는 1)을 올린다고 가정하고 B라는 악의적인 사용자가 본인의 글을 수정을 할 때 API에 요청 데이터 중 PK ID만 1로 바꾸면 1번 글이 수정된다는 취약점이 존재한다.그래서 비즈니스 로직에서 해당 게시물을 쓴 소유자와 현재 수정하려는 사용자가 일치한 지를 파악하는 로직..

    @Component와 Static 메소드 중 Utility Class는 어디에 만들까?

    @Bean과 @Component는 기본적으로 다른 클래스에 종속성이 있을 때 사용한다는 공통점이 존재한다. 그 중에 @Bean은 메소드 단위에 쓰이며 외부 라이브러리에 종속성이 있을 때 사용한다. @Component는 클래스 단위에 쓰이며 내부에 종속성 있을때, 즉, 내가 만든 클래스를 사용하고 싶을 때 쓸 수 있다. 하지만 여기서 얘기하고 싶은건 Util 함수에 관한 이야기인데, @Component로도 Utility 클래스를 만들 수 있고 Static 클래스로도 만들 수 있기에 어떠한 차이가 있는지 알아보았다. Static Static 메소드는 인자가 동일할 경우 항상 동일한 결과를 리턴해야 한다. 이 규칙을 지킬 수 없으면 Bean으로 만들어야 한다. 이것이 이뤄지려면 함수 안에서는 외부 자원에 대한..