본문 바로가기

Spring에서 Logback을 이용해서 필터없이 별도의 디렉토리에 로그를 남기는 방법 (Logback MDC 사용법, 동적 로그 남기기) 로그를 분류해야하는 경우 스프링에서 로그를 남길 때 대부분 Logback을 사용한다. 보통 한 파일에 모든 로그를 남기기보다는 기능, 모듈별로 로그를 남기거나 어떠한 기준(로그 레벨등...)에 의해 로그를 여러 파일 혹은 여러 디렉토리에 남긴다. 그렇게 구현하려면 logback 설정 파일(logback-spring.xml 같은 파일)에서 property로 여러 로그 경로를 등록해놓고 logger의 패키지를 나눠서 지정하는 것이 일반적인 방법일 것이다. 그러나 위의 방법은 어느정도 패키지 분류가 되어있는 상태여야하고 분류할 기준의 개수가 제한적이어야 한다. 어느정도는 Logback의 filter를 이용한 방법으로 쉽게 처리할 수도 있겠지만, 여전히 같은 패키지, 같은 클래스의 로그에 대해서는 분류하기 어려..
값 타입(JPA에서 @Entity 내부에 값들을 객체로 다루는 방법, @Embedded, @Embeddable) 위의 그림은 JPA에서 사용하는 타입을 정리한 것이다. JPA를 배울 때 다짜고짜 Entity라는 개념을 배우고 그 객체안에 String 타입의 name, int 타입의 age등의 속성들을 정의하여 사용했다. 그런데 Entity는 객체로 잘 다뤘으면서 내부의 변수(속성)는 객체로 다루지 않고 나열식으로 사용했었다. 그래서 그 것들이 Entity는 아니지만 엔티티 객체 내부에서 값이지만 객체로 사용되게 하는 방법으로 값 타입이 있다. 그것에 대해 알아본다. JPA에서 사용하는 타입은 엔티티 타입(@Entity), 값 타입(int, String, Integer)으로 나뉜다. 값 타입은 다시 3개의 타입으로 나뉜다. 기본 값 타입(int, Integer, String) 임베디드 타입(새로 정의한 복합 타입) ..
JPA 프록시와 연관 관계 정리, 영속성 전이, 언제 사용하는 것이 좋고 어떻게 사용할까? (지연로딩 vs 즉시로딩) "도서 (자바 ORM 표준 JPA 프로그래밍 - 김영한 지음)"를 공부하고 정리한 내용임을 사전에 알려드립니다. 프록시와 연관관계 정리 - 프록시 JPA는 객체지향언어와 관계형 데이터베이스의 패러다임 불일치를 해결하는 기술이다. 프록시가 이 문제에 도움을 주는데 어떤 부분에서 도움을 주는지 정리한다. 객체는 team1.getMembers().get(0); 이런식으로 연관된 객체들을 탐색할 수 있는 반면 RDB의 경우 참조하는 외래키를 이용해서 테이블간의 조인 쿼리를 작성해서 탐색해야한다. 그러다보니 연관된 객체를 쓰일지 안 쓰일지도 모르는 체 전부다 가져와야하는 문제가 있다. 이 문제를 프록시라는 기술로 해결한다. 프록시는 실제 연관된 객체를 즉시 join을 통해 DB로부터 가져오는 것이 아니라 앞서 프..
나의 Git Flow 적응기(겉핥기로 10분만에 익히고 써먹어보자, 백각이불여일행!) 나의 Git Flow 적응기 git flow는 절대 어려운 것이 아니다. 모두가 알지만 익숙하지 않아서 적용하지 못하는 것일 뿐이다. (예를 들면 TDD 같은...) 쉽게 생각하자. git flow는 형상 관리 전략일 뿐이다. 일반적인 경우에 적절하고 효율적인 전략말이다. 모두가 쉽게 이해할 수 있도록 'MVC 패턴'을 예로 생각해보자. Model, View, Controller로 구성하지 않고 Controller에서 다 해도 되지만 MVC 패턴 같은 전략이 일반적인 경우에 효율적이고 변화에 유연하게 대처할 수 있게 하는 것과 같은 것을 생각해보면 이해하기 쉽다. (서버 프로그램 구성에 대한 전략) 이와 유사하게 git flow를 생각해보면, 그냥 하나의 프로젝트에 소스코드를 하나로 관리하고 개발자마다 ..
@ControllerAdvice, @ExceptionHandler를 이용한 예외처리 분리, 통합하기(Spring에서 예외 관리하는 방법, 실무에서는 어떻게?) 예외 처리 과정 프로그래밍에서 예외 처리는 아주 중요하면서도 아주 어렵다. 과하다할 만큼 상세하고 다양하게 예외를 잡아 처리해준다면, 클라이언트도 그렇고 서버도 그렇고 더 안정적인 프로그램이 될 수 있게 도와준다. 예외 처리를 하는 경우와 방법은 다양하다. 메서드 내에서 예외 상황을 예측해서 처리하는 try-catch문을 이용하는 방법 요구사항에 의한 예외 처리 (ex. validation > 특정 값이 0~255범위가 아니면 유효하지 않은 값으로 판단하고 예외 처리) 스프링 시큐리티에서 인터셉터로 잡아서 UnauthorizedException 같은 예외 처리 기타 여러 예외 처리들을 적용하다보면 코드가 엄청나게 복잡해진다. if문으로 잡든 try-catch로 잡든 상위 메서드로 예외처리를 위임하든 코드..
자바하다가 코틀린 공부하기 #1 변수, 자료형, 연산자 (프로그래밍 언어는 도구에 불과할까?) 사설 -> 프로그래밍 언어는 도구에 불과해! 어떤 언어든 변수 만들고 조건문, 반복문, ... 공식 문서 보면서 코딩하면 금방해! 어느정도 개발을 해온 사람들 중에 어떤 사람들은 간혹 위와 같은 말을 한다. 필자는 프로그래밍 언어를 공부하는데 있어서 그렇게 생각하지 않는다. 스프링 개발할 때 공부안하고 무턱대고 문서만 보면서 개발하면 빠르고 정확하게 개발할 수 있을까? 자바 문법만 익히면 자바로된 프로그램을 다 짤 수 있는건가? 경험상 그렇지 않은게 대부분이다. 프로그래밍 언어를 정확하게 배우는 것은 큰 의미가 있다. 반대로 아래와 같은 말들도 들어봤다. -> C#하는게 나아요? 자바하는게 나아요? 코틀린은 안드로이드에서 주로 쓴다는데? 자바스크립트 유망한가요? 프로그래밍 언어를 학습하는데에 엄청나게 큰..
Protocol Buffers Language Guide (휘리릭 읽는 프로토콜 버퍼 문법 및 작성 시 유의 사항, 이것만 알면 .proto 파일을 이해할 수 있다?) Protocol Buffer를 사용한다면, .proto 파일에 쓰이는 문법을 알고 있어야 한다. 그래야 시행착오를 덜 겪고, 원하는 포맷으로 적절하게 이용할 수 있을 것이다. * 이 포스트는 protocol buffer 공식 문서에 나오는 "Language Guide(proto3)"를 보고 정리한 내용이다. (참고로 번역한 것이 아니라 공부하면서 주의해야할 것들만 정리한 것이라 모든 내용을 포함하고 있지 않는다. 추가적으로 이 포스트의 목적은 "휘리릭"이다. 빨리 필요한 것들만 읽고 사용하는데 목적이 있다.) Protocol buffer(proto3) 문법 및 작성시 유의 사항 - 어떤 문법(proto2, Proto3)을 사용할 지는 proto파일의 첫 줄에 있어야하고 비어있으면 안된다. 주석 또한 있으..
gRPC 사용법, gRPC 예제 코드 실행해보기, 원리는 몰라도 gRPC 입문은 가능하다 (grpc java example) 이 포스트는 springcamp2017에서 grpc발표를 하신 오명운님의 발표 자료 및 github소스를 참고해서 작성한 것입니다. gRPC의 장점 service 정의가 단순하다 여러 프로그래밍 언어나 플랫폼에서 사용이 가능하다 양방향 스트리밍 데이터 처리가 가능하다 rpc의 장점으로 빠르다 grpc는 rpc프레임워크를 구글이 쉽게 사용할 수 있도록 만든 것이다. rpc는 remote procedure call로 말 그대로 원격에 정의된 프로시져를 호출하는 것이다. 원격의 프로시져를 호출하는 클라이언트 입장에서는 그 방법이 내부의 메서드를 호출하는 것과 다르지 않아서 사용이 간편하다. 이번 포스트의 핵심은 예제 소스를 돌려보면서 grpc의 기능들을 맛보는 것이 핵심이다. 따라서 gRPC의 장점이나 내부에..