1. 들어가며 Go는 정적 타입 프로그래밍 언어입니다. 개인적으로 동적 프로그래밍 언어에 대해서 python과 Javascript로 프로젝트를 진행해본 경험으로는 규모가 커질수록 유지 보수가 까다로워진다는 인상을 받았습니다. 그런 점에서 Go의 정적 타입이 반가웠던 기억이 있습니다. 그리고 Go에도 인터페이스가 있습니다. 개인적으로 몹시 좋아하는 기능인만큼 반가웠는데, 그 생김새는 사뭇 다릅니다. 그리고 상속이 없습니다. 그 대신 인터페이스, 타입 임베딩 등을 제공하고 있습니다. 그럼 Go의 타입 시스템, 인터페이스, 타입 임베딩은 어떠한지 파헤쳐보도록 하겠습니다. 2. 사용자 정의 타입 Go는 정적 타입 프로그래밍 언어인만큼 컴파일러가 프로그램의 모든 값에 대한 타입을 알고자 합니다. 따라서 타입 오류..
1. 들어가며 Go에는 크게 세 가지 데이터 구조체가 있습니다. array, slice, map이 그것입니다. Java에 익숙하다면 Array와 Map은 많이 보았겠지만 slice는 낯설 것이라 생각합니다 :) 또한 이러한 자료형들은 구체적으로 어떻게 구현되어 있는지 살펴볼 일이 많지 않습니다. 오늘은 구체적인 구현과 주의해야할 사항까지 자세히 정리해보도록 하겠습니다 :) 2. Arrays (배열) 배열: 동일한 유형의 요소의 연속 블록을 포함하는 고정 길이 데이터 유형입니다. 이는 정수, 문자열, 구조체 모두가 가능합니다. Go의 배열은 여타 언어처럼 메모리가 순차적으로 할당되기 때문에 캐시에 유리하며 빠른 반복을 수행할 수 있습니다. 또한 각 요소는 동일한 유형으로 순차적으로 따라가기 때문에 일관..
1. 들어가며 Go에 대해서 반년 전에 간단하게 문법을 포스팅한 적이 있었는데요. 이번에 사이드 프로젝트로 채팅 서버를 golang으로 구현하기로 했고, 그 김에 Go를 조금 더 깊게, 공부하고자 합니다.제가 선택한 책은 Go in Action입니다. Kotlin in Action이 읽고 좋았던 기억이 있고, 학교 도서관에서 온라인 도서를 이용할 수 있게 제공해주었기 때문입니다 :) 영어 원서만 있다는 점도 블로그 글로 포스팅하면 다른 분들께 도움이 될 것 같다는 것이 한몫했습니다.Go in Action을 기반으로 궁금했던 점을 더 조사해나가면서 하나씩 정리해보겠습니다. 2. Go란?Go는 2009년 11월에 처음 발표되고 2012년 3월에 정식 발표된 프로그래밍 언어입니다! Java가 1995년 처음 ..
1. 들어가며 앞서 저희는 로그 추적기라는 부가 기능을 기존 프로젝트에 추가하면서 생길 수 있는 문제점과, 그에 대한 해결책에 대해 알아보았습니다. 간단하게 그 과정을 복습해볼까요? 프로젝트 전반의 코드에 모두 적용되어야 하지만, 핵심적인 비즈니스 로직이 아닌 '부가 기능'이다.그래서 기존 코드에 영향을 주지 않고 적용될 수 있으면 좋겠다.그래서 템플릿 메서드 패턴 -> 전략 패턴 -> 프록시 패턴 -> 동적 프록시 및 CGLIB 적용라는 과정을 통해서 기존 코드를 바꾸지 않고, 프록시 클래스도 자동생성을 맡기면서 코드 양도 훨씬 줄일 수 있었습니다.저희가 구현한 기능들은 사실 Spring에서 구현해서 제공하고 있습니다. 그것이 AOP이고, 오늘은 Spring에서 AOP를 어떤 방식으로 제공하고 있는지 ..
1. 문제 상황프로젝트에서 에러 로깅을 어떻게 할 지 고민하는 상황이었습니다. 제 프로젝트는 RestControllerAdvice를 통해 예외 처리를 하고 있습니다. @RestControllerAdvice("생략")public class AttendeeExceptionAdvice { @ExceptionHandler(ActivatedSessionExistsException.class) public ResponseEntity activatedSessionExistsHandler() { return RESPONSE_CONFLICT; } @ExceptionHandler(CourseNotFoundException.class) public ResponseEntity cours..
1. 들어가며 지금까지 RabbitMQ와 Kafka에 대해 자세히 알아봤습니다. 여러 메시지 큐가 있겠지만 그 둘만 다뤘던 이유는, 그 둘이 가장 널리 쓰이기도 하지만 여러 성능 테스트 결과 상반된 경향이 있었기 때문입니다. 오늘은 실제로 그 둘을 테스트 해보고 어떤 차이점이 있는지, 그리고 그 이유가 무엇인지 살펴보도록 하겠습니다.각각 결과를 살펴보면 각 Message Queue가 어디에 적합할 지 결론에 다다를 수 있을 것이라 생각합니다 :) 2. RabbitMQ vs Kafka 오늘 글은 다음 논문, 글들을 참조하여 쓰여졌습니다! 그래프는 모두 R로 작성되었습니다. Dobbelaere, Philippe & Sheykh Esmaili, Kyumars. (2017). Kafka versus Rabbit..