본문 바로가기

@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소스를 참고해서 작성한 것입니다. gPRC의 장점 service 정의가 단순하다 여러 프로그래밍 언어나 플랫폼에서 사용이 가능하다 양방향 스트리밍 데이터 처리가 가능하다 rpc의 장점으로 빠르다 grpc는 rpc프레임워크를 구글이 쉽게 사용할 수 있도록 만든 것이다. rpc는 remote procedure call로 말 그대로 원격에 정의된 프로시져를 호출하는 것이다. 원격의 프로시져를 호출하는 클라이언트 입장에서는 그 방법이 내부의 메서드를 호출하는 것과 다르지 않아서 사용이 간편하다. 이번 포스트의 핵심은 예제 소스를 돌려보면서 grpc의 기능들을 맛보는 것이 핵심이다. 따라서 gRPC의 장점이나 내부에..
자바 Enum 실무에 적용 경험 공유하기 (properties에서 enum mapping, default value 사용하기) 우아한 형제들 기술블로그의 enum과 관련된 글을 예전에 읽었는데 이번에 적용할 수 있는 기회가 생겨서 적용해봤습니다. (상세한 활용은 링크를 통해서 학습하면 좋을 것 같습니다.) Enum 어디에 적용했는가? 평소에는 static final 대신 상수로 적용해야할 값들이 있을 때 주로 사용했었다. 그런데 이번에는 똑같이 상수지만, 조금 특별하게 사용했다. 상황을 설명하면, 어떤 PUBSUB의 메세지 처리 플랫폼(ex. kafka)을 이용해야하는데, 거기에 publish할 때 쓰는 메세지의 타입이 3가지가 있고, 그 3가지중에 하나를 설정 파일에서 정의하면, 그 설정 기준으로 publish하기 전에 방식을 적용해야하는 상황이다. (결론 -> 설정 파일에 쓰인 값 적용하기) pubsub: messageTyp..
Protocol Buffer 원리로 배우는 고성능 직렬화, 역직렬화 전략! Protocol Buffer 예제 테스트(구글이 쓰는 이유가 있었네) 프로토콜 버퍼가 무엇인가 프로토콜 버퍼(Protocol Buffer = protobuf)란 직렬화 데이터 구조다. (XML, JSON과 유사) 직렬화 데이터 구조를 알려면 직렬화(Serialization)가 뭔지 알아야한다. 꽤 긴데 천천히 설명해보겠다. 우선, 컴퓨터가 데이터를 저장할 때 결국은 0과 1을 나타내는 비트(bit)로 표현해야 한다는 것을 알아야한다. 데이터를 파일에 쓰든 네트워크에 쓰든 결국에는 0과 1인 비트로 표현해야 한다. 요약하면 "데이터 표현(저장) = 바이트(1Byte = 8bit)"다. UTF-8 문자열 인코딩을 생각해보자. 만약 "hello"라는 문자 데이터를 다른 서버에 보낼 때 어떻게 될까? h,e,l,l,o 각각에 대한 인코딩을 통해 16진수로 표현하면 68(h) 65..
객체 지향의 사실과 오해 리뷰 및 정리(이론은 넣어둬. 좁은 시야가 아닌 넓은 시야로 보는 객체 지향) 어디 가서 객체 지향 아는 척하지 말아야지 "객체 지향의 사실과 오해"라는 책을 읽고 쓰는 독후감 같은 포스트다. 객체 지향에 대해서는 많이들 알고 있고, 필자 역시도 충분히 무엇인가에 대해 알고 있다고 생각했다. 심지어 신입 사원 면접에서도 너무나 기본적으로 묻는 질문이라고 여겨 면접 관련 포스트도 썼었다. 그런데 이 책을 읽고 객체 지향에 대해서 다시 한번 잘 못하고 있던 것에 대한 반성을 했고, 한 편으로는 약간 더 시야가 넓어지는 느낌, 깨달음도 얻었다. 이 포스트를 읽고 책을 읽으면 좋을 듯하다(?) 객체 지향적으로 접근하기 객체 지향이라고 하면 위 그림과 같은 것들이 떠오를 것이다. 이론적인 것들 말이다. ex) 객체 지향 = 클래스 이론이 필요할 때도 있겠지만 실무에서는 실제로 객체 지향적인..
ScheduledThreadPoolExecutor에서 주의할 점. (ThreadPool의 배신, 동작 방법을 알지 못하고 쓴 사람의 삽질) ThreadPool을 조심해라? 이 글을 쓰게 된 이유는 나의 안일함 때문이었다. 주기적으로 장비의 데이터를 수집하고 메세지를 만들어서 상위 시스템으로 데이터를 전송해야 하는 업무를 하고 있어서 ScheduledThreadPoolExecutor를 사용하게 되었다. 이미 13개월전에 Timer를 비롯해서 정확한 주기로 작업을 실행해주는 것이라며 자랑스럽게(?) 올린 포스트가 있다. 그런데 ThreadPool 단어에 낚여 오해한 채 사용하고 있었다. 그래서 그 문제를 주의하고 정리하는 차원에서 글을 작성한다. ThreadPool하면 떠오는 것 자주 보이는 것 중 생각나는 것은 DBCP나 WAS의 ThreadPool이 떠오른다. 간단하게 설명하면, 각각의 Request에 대해서 각각의 쓰레드를 생성해서 수행하..