6년 간의 대학생활의 마무리를 맺게 되었습니다. 올해 초까지만 해도 맘처럼 안되는게 대부분이었습니다. 누구의 탓은 아니고, 단지 제 역량의 문제였겠지요. 나보다 먼저 앞서 가는 친구들을 보며 부럽기도 하고, 화도 나기도 하고, 포기해야하나, 방향이 잘못됐나, 재능이 없나 오만 생각이 머리에 차서 잠을 설친 날들이 많았습니다. 그런 의미에서 은행을 지원했다는 건, 어찌보면 그러한 제 마음을 대변해주는 행위였습니다. 저라는 사람을 단순히 개발 실력만이 아니라, 소통, 도메인, 개인적인 부분들을 복합적으로 평가해준다고 느꼈던 곳입니다. 은행은 실패로 점철된 지난 2년 간의 삶에서, 성공의 경험과 새로운 인연들을 만들어 준 고마운 곳이었습니다. (결국 새로운 도전을 하게 됐지만) 개화하지 못해 절망하고 있..

전체 글
이전 블로그 https://velog.io/@go_high/posts1. RabbitMQ란 정의: RabbitMQ는 AMQP(Advanced Message Queuing Protocol)를 구현한 오픈소스 메시지 브로커(Message Broker).특징:경량 설계로 적은 메모리 사용량.다양한 프로그래밍 언어와 클라이언트 지원.플러그인 기반 확장 가능 (관리 UI, Federation 등).소비 후, ACK되면 메시지 제거 (기본 AMPQ에서 복구 불가능) 2. RabbitMQ 핵심 개념 AMQP 기반 (Advanced Message Queuing Protocol) AMQP는 3개 + 1개의 구성 요소가 존재합니다. 주요 구성 요소: Exchange, Queue, Binding (+ Message). 2-1) Exchange = 메시지를 받아 Queue로 라우팅. e..
(중요한 파트라고 생각하는 부분만 정리 작성) 1. 인덱스1-1. 디스크 읽기 측면 (HDD, SSD) - SSD는 HDD의 인터페이스를 동일하게 구현하면서, 저장용 플래터를 제거한 데이터 저장소 (원판 회전 없어서 빠름)- 랜덤 IO, 순차 IO -> 그럼 SSD는 원판 안돌려도 되니 둘이 동일한가? = 아니더라 (랜덤이 조금 더 안좋기는 함) 파일에 쓰기를 실행하면 반드시 동기화가 필요하다. 순차 IO인 경우에도 파일 동기화 작업이 빈번히 발생하면 랜덤 IO와 같이 비효율적으로 처리되는 경우가 많다. 이게 무슨 말일까 했는데, 아무래도 순차 IO 역시 이상적으로 저장되는 환경이 아니라면 랜덤 IO와 유사하게 동작할 수 있다는 뜻인듯하다. 결과적으로 엔지니어로서 그냥 파일 I/O 자체를 줄이는 ..
처음으로 블로그에 책에 대한 정리한 내용을 남긴다. 내용은 책을 통해 알게된 부분, 앞으로 내 서비스에 적용할 수 있는 내용에 대해 서술해보겠다. 1. 테스트는 왜 필요한가?테스팅을 돌릴 환경에 대한 비용, 테스트를 작성할 시간에 대한 비용 보통 테스트의 중요성에선 이런 그래프가 우선되어 나온다. 초반 개발의 병목이 되는 테스트가 후반에는 든든한 아군이 되어 많은 문제들을 사전에 예방해준다는 뜻. 결론적으로, 테스트 코드의 품질은 제품의 품질과 동치한다.(하지만 쓰고 더 개발하지 않을 제품, 단순한 제품에는 굳이 테스트에 자원을 투자할 필요가 없음) 2. 단위테스트의 목표소프트웨어 프로젝트의 지속 가능한 성장을 가능하게 하는 것 단위테스트는 중요한 비지니스 로직에 대한 테스트 위주그리고 단위테스..
대규모 실시간 채팅의 병목 현상, 메시지 배치 전송으로 해결하기이번 글에서는 대규모 트래픽이 발생하는 실시간 채팅 서비스의 성능을 개선한 경험을 공유하고자 합니다. 가상 사용자가 늘어남에 따라 테스트 결과 병목 현상을 겪었고, 이를 해결하기 위해 메시지 전송 구조를 1:1 방식에서 서버 단위 배치(Batch) 방식으로 리팩토링한 과정을 서술합니다. 문제 직면: 채팅방 유저가 많아질 수록 리소스 소모가 지수적으로 증가 문제는 동시 접속자 수가 늘어나면서 발생했습니다. 초기 아키텍처에서는 특정 채팅방에 250명의 사용자가 접속한 상태에서 하나의 메시지가 전송되면, 백엔드에서는 250번의 convertAndSendToUser가 개별적으로 호출되었습니다. 이로 인해 다음과 같은 성능 저하가 발생했습니다.메시지 ..
졸업 프로젝트를 하며 참 많은 생각이 들었다.내가 개발자로서 대체되기 어려운 사람일까? 여러 논문들과 이에 기반한 화려한 용어들로 이해가 안되는 AI나 비전(특히 AI)들 사이에서 내가 임팩트를 어떻게 낼까. 혹은 AI를 하는 팀원들도 내가 하는 일에 어려움을 느낄까 하는 생각이 많았던 것 같다. 실제로 교수님 역시 AI 같은 논문에 기반한 연구에 더 높은 점수를 주실 것이 분명했기에, 백엔드 개발자를 희망하는 내가 Computer Scientist 라고 하려면 무엇을 해야할지 고민을 했다. 팀이 선정되고 주제 자체가 연구에 가까운 MRI 파일 기반 알츠하이머 진단 AI 서비스를 메인 피쳐로 들고 갔기에 할 수 있는 것이 많지는 않았다.그래도 그 주제에 연결점을 찾아서 기존에 해보고 싶었던 실시간 채팅을..
데브옵스도 아닌 제가 이런 글을 작성해도 될지? 싶기도 하고, 아직 이해하지 못한 부분도 많지만ECS를 통한 알파 환경을 구축해보며 트러블 슈팅한 내용들을 정리해 보겠습니다,사실 포기도 몇번하려 했는데, 끝끝내 스웨거 화면을 보긴 했네요. 삽질 경험을 남겨 놓는다면 이후에 조금 더 편하게 인프라를 설계할 수 있을 것 같아 글을 남깁니다.처음 도전해볼 누군가에게 이 글이 도움이 되면 더욱 좋겠네요/ 1. VPC 설정 매번 AWS 계정 생성 시 자동으로 생성되는 VPC만 사용했었는데, 이번엔 아예 10.128.0.0/16로 새롭게 생성했습니다.매번 AWS에서 제공해 주는대로 사용하다, 실질적으로 내부망을 설계 해볼 수 있었습니다. VPC는 말 그대로 논리적인 가상 개념이고, 그 아래서 실질적으로 동작하는..
진행하는 프로젝트에서 KeyCloak을 SSO로 이용하기로 결정했습니다. 외부 API와의 통신프론트에서 OAuth와 관련된 처리를 위임한 후 SSO에서 받은 AccessToken을 전달합니다.따라서 저희 백엔드에선 외부 SSO에 AccessToken을 가지고 SSO가 가진 유저 정보를 받아와야 하는 로직이 존재했습니다.@Service@Transactional(readOnly = true)class AuthService( private val keycloakFeignClient: KeycloakFeignClient,){ fun getUserInfoFromSSO(token: String): KeyCloakUserInfo { return keycloakFeignClient.getUse..