팀 회의 중 각 담당 업무 이슈에 관련 이야기를 나누다가 어떤 서버의 프록시 서버 설정에 문제가 있다는 이야기를 나누고 있었다. 그런데 팀장님이 갑잡스러운 질문을 하셨다. 팀장님 : 포워드 프록시랑 리버스 프록시 차이점을 알아??? 나 : 어...음... 포워드 프록시는 서버에서 들어오는 쪽이고, 리버스 프록시는 서버에서 나가는 쪽을 관리를 하는 것으로 알고 있습니다. 틀린 말은 아니였지만, 대답을 하고 나서도 정확히 어떠한 역할을 하고 무슨 차이가 있는지는 명확하게 떠오르지 않았다. 그렇기에, 이번 글에서 위 2가지에 대해 정리해보고자 한다. 1. Proxy(프록시) 란? - Proxy(프록시) 서버는 클라이언트(Client)가 자신을 토해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴..
개발을 진행하다보면 sync, async, blocking, non-blocking 를 고려해서 개발을 해야할 때가 발생하고, 적절하게 사용해야만 한다. 위 개념들을 살펴보면 비슷한 내용인 것 같아 같아보이지만 관점에 따라 다른 기능을 제공한다. 단지 이 개념들을 서로 조합해서 사용되는 것 뿐이다. 동기(sync)와 비동기(async)는 프로세스의 수행 순서 보장에 대한 매커니즘이며, 블록킹(blocking)과 논블록킹(non-blocking)은 프로세스의 유휴 상태에 대한 개념이다. 이번 글에서는 위 개념들을 정리하고 비교해보고자 한다. 1. Sync VS Async 1-1. Sync(동기, Synchronous) - Sync(동기)는 동시에 일어난다는 의미를 가진다. - 요청과 결과가 동시에 일어난다..
참고!!! 해당 블로그에서는 티스토리 스킨으로 인해 기존 Markdown 형식처럼은 나오지 않습니다... 실제 비교는 깃허브 Readme.md 를 참고해주시기 바랍니다. 1. Headers(헤더) ~ 까지 가능하다.# This is a h1 tag ## This is a h2 tag ##### This is a h5 tag This is a h1 tag This is a h2 tag This is a h5 tag 2. Horizontal Rule(수평선) 아래 코드들 모두 사용 가능하다.--- *** ___ ****** 3. Line Breaks(줄바꿈) (띄어쓰기 두번) 4. Emphasis(강조) 사용하고자 하는 부분에 붙여서 사용한다._Italic(이탤릭)_ or *Italic(이텔릭)* **굵은 ..
개인적인 스터디 진행 시 개인 Github 로 진행이 아닌 모임에서의 다른 사람의 Repository 를 공유하여 진행할 때가 있다. 이러한 경우 Github 의 Organizations 기능을 활용하여 Repository 를 관리가 가능하다. 그러나, Organizations 되어진 Repository 를 Intelli J(인텔리제이)에 Clone 을 진행하려면 아래와 같은 에러가 발생한다. 정확한 내용은 모르겠지만, 구글링 해보았을 때 에러 내용은 보안 문제로 인해 해당 Github 주소를 불러올 수 없다는 것이었다. 인텔리제이로 Git Clone 시 계정인증을 요청하는데, 이때 2가지 방법이 있다. Log In via GitHub - Github 계정 연동 허용을 통해 로그인 log in with ..
회사에서 서버간 간단한 데이터 전달로는 RabbitMQ를 사용하고 있었습니다. 최근 많은 회사에서 다양한 AMQP의 MQ 들을 사용하는데, 이번 글에서는 RabbitMQ 에 대해 정리해보고자 합니다. 1. RabbitMQ 란? - 서버간 메세지(데이터)를 전달해주는 오픈소스 메세지 브로커입니다. - 1:1 또는 1:N 등 메세지를 특정 사용자에게 전달하려고 할 때, RabbitMQ 가 메세지를 받아 알맞게 전달하는 역할을 합니다. - AMQP 프로토콜을 구현한 메세지 브로커입니다. Message Broker(메시지브로커) 및 Message Queue(메시지큐) 정리 이직을 한 지 6개월이 돼가면서, 새로운 경험도 하고 있고 기존에 아는 내용에 대해서도 조금 더 확실하게 이해할 수 있는 기간이었다고 생각한..
개발 도중 API 의 Request, Response 처리를 할 때나 다른 계층으로 데이터를 넘길 때 별도의 DTO 를 생성해야 하는 고민을 하기도 한다. 또한, 개발자마다 개발하는 과정에서 혹은 기존 소스에서 확인해보면 DTO 와 VO 는 다른 개념이지만 종종 같은 개념으로 사용하기도 합니다. 또한, Entity 와 DTO 도 한 클래스로 사용하기도 한다. 이것이 무조건? 틀렸다라곤 할 수는 없겠지만, 각각의 역할이 다르기 때문에 분리하여 각 역할에 맞게 사용하여야 하고 이것이 좋은 코드로 이어질 것이라고 생각한다. 이번 글에서는 각 Entity, DTO, VO 에 대해 정리를 해보고자 한다. 1. Entity - 실제 DB 테이블과 매핑되는 핵심 클래스로, 데이터베이스의 테이블에 존재하는 컬럼들을 필..
이직을 한 지 6개월이 돼가면서, 새로운 경험도 하고 있고 기존에 아는 내용에 대해서도 조금 더 확실하게 이해할 수 있는 기간이었다고 생각한다. 그러면서 대부분 주말을 통해 공부를 (조금)하고 블로그를 작성하였는데, 7,8월에는 열심히 글을 쓰긴 했는데, 최근에는 연휴도 있으면서(= 노느라) 글을 많이 못 썼던 것 같다. 투덜 되는 게 길었고, 이번 글에서는 최근 들어 각 회사에서 사용되는 Message Broker, Message Queue 에 대해 정리해보고자 한다. 1. MOM(Message Oriented Middleware) - Message Broker 와 Message Queue 를 알아보기 전에, MOM(메시지 지향 미들웨어)를 간단하게 알아보겠습니다. - MOM 은 어플리케이션들의 메시지..
1. SonarLint 란? - 코드를 작성할 때 품질 문제(버그, 취약점 및 Code Smells)를 정적으로 탐지하여 알려주는 무료 IDE 확장 플러그인 입니다. - 맞춤법 검사기처럼 코드에 문제가 있다면 강조 표시를 하고 커밋되기 전에 코드를 정리하는데 도움이 되는 빠른 수정 또는 명확한 수정 지침을 제공합니다. 코드정적 분석? 실제 프로그램을 실행하지 않고 코드의 형태에 대한 분석. 위험성이 있는 코드, 미리 정의된 규칙이나 코딩 표준에 준수하는지에 대한 분석을 제공. - JetBrains(Intelli J, PyCharm), Eclipse, VS Code, Visual Studio 에서 사용가능합니다. 2. SonarLint의 순기능(Get the power to write better code..
프로젝트를 혼자 개발하는 경우에는 파일의 모든 변경사항에 대해서 알 수 있습니다. 그러나 팀으로 작업하는 경우 모든 파일에 대해 수정 사항을 알기 힘듭니다. 또한, Intelli J에서 연결한 DB의 테이블 정보(코멘트 추가)한 것을 확인하고자 하는 경우가 있습니다. 이런 경우에 타임스탬프를 활성화 하여 확인할 수 있습니다. 타임스탬프를 활성화 하면 인텔리제이에서 파일 기록을 조사하지 않고 파일이 마지막으로 수정된 시간을 확인하실 수 있습니다. 추가로 각 파일의 크기도 표시합니다. 1. 타임스탬프 활성화 - 타임스탬프 활성화하는 방법은 아래와 같습니다. 참고!!! 정확한 Intelli J 버전은 모르겠지만, 2017년의 버전에서는 해당 기능을 찾지 못하였습니다. 아마도 2019년 버전 이후의 인텔리제이에..
인텔리제이에서 종종 개발중에 갑자기 class 파일들을 못 읽어오는 경우가 있었다. 빌드를 다시 해도, .idea 파일을 지워보고 재실행 시켜봐도 동일했다. 구글링을 통해 프로젝트 클린을 통해서 해당 에러를 잡을 수 있었다. 1. File -> Invalidate Caches / Restart ... 클릭 2. Invalidate and Restart 클릭