CODE_GARAGE
Preview Image

[Infra] SPOF 극복하기

초보 개발자에겐 서버 인프라를 만들어서 배포하는 것도 매우 힘든 일이다. 하지만 EC2에 서버를 올리고, DB에 연결하기만 하면 서비스를 위한 준비는 끝일까? 우리의 서버는 가끔, 위험한 상황을 마주한다. 그것이 악의적인 트래픽 공격일 수도 있고, 단순히 프로그래밍 실수로 인한 서버 자원 과부하일 수도 있다. 상황은 여러가지다. 하지만 유저가 겪는...

Preview Image

[DB] 쿼리 분리를 통한 조회 성능 99.9% 향상시키기

0. 쿼리를 개선해야 하는 이유 기능을 개발했다고 끝난 것은 아니다. 당장은 유저가 없고, 데이터가 적어서 조회 속도가 빠르겠지만, 데이터가 100만, 1000만이 되면 우리의 DB가 멀쩡할까? 우리가 평소에 사용하는 서비스들을 생각해보자. 로딩이 0.n초라도 느리면, 우리는 바로 새로고침을 누르거나 페이지를 나가버린다. 이만큼 속도 문제는 치명적...

Preview Image

[Architecture] API는 어떻게 설계해야 할까

0. 서론 팀 프로젝트를 하면서 다음과 같은 상황을 마주했다. 나의 모멘트(게시글) 페이지를 불러올 때, 해당 모멘트에 알림이 달렸는지 여부도 함께 불러와야 했다. 처음엔 기존 특정 유저의 모멘트들을 불러오는 API가 이미 존재하니, 이걸 건드리지 않고 특정 유저의 알림 정보를 불러와서 프론트에서 조합하게 만든다면 깔끔하게 해결된다고 생각했다. ...

Preview Image

[Refactoring] 메서드 하나에 너무 많은 책임이 있다면? Facade와 Event Listener로 리팩토링하기

이 글에서는 점점 비대해지는 메서드를 어떻게 분리하고, 유지보수하기 좋은 코드로 만들 수 있는지에 대한 리팩토링 과정을 공유하려 한다. 특정 기능 하나를 실행했을 뿐인데, 그 안에서 너무 많은 일이 벌어지고 있다. Facade 패턴과 Spring Event Listener를 활용해 해결한 과정을 공유한다. 대상 독자 하나의 메서드가 너무 많은...

Preview Image

[SpringBoot] 실시간 알림을 위한 SSE, 트러블 슈팅

서론 우아한 테크코스 Level3 과정을 진행하면서 처음으로 팀 프로젝트에 참여하고 있다. 프로젝트 도중 우리 사용자에게 실시간 알림을 보내야 할 필요성이 생겼고, 내가 이 알림 기능을 맡게 됐다. 약 3~4일 동안 구현하면서 정리한 지식과 트러블 슈팅을 기록하고자 한다. HTTP 통신이 실시간 알림에 부적합한 이유 먼저 생각한 것은 기존 H...

Preview Image

[Java] 람다식에서 final 변수만 사용해야 하는 이유

람다 표현식에서 변수를 사용하다보면, 어느순간 만나게 되는 경고 문구가 있다. 왜 람다식에서는 이런 제약이 있는 걸까? 이것을 알기 위해선 자바에서의 메모리 개념과, 람다식이 어떻게 자유변수를 사용하는지 알아야 한다. 1. Stack 메모리, Heap 메모리 자바에 존재하는 메모리 중 두 개의 메모리 작동 방식을 알아야 한다. 1.1 Sta...

Preview Image

[우아한 테크코스] Level1 회고

4월 4일 금요일로 우아한 테크코스 7기 Level1 과정이 끝났다. 프로그래밍을 제대로 배운 것은 처음이었고, 할 일도 엄청나게 많았지만 다시 돌아보니 매우 재미있었다. 크루들과 만나고, 프로그래밍을 하는 과정이 너무 즐거워서 잠실 캠퍼스에 등교하는 것이 기다려졌을 정도다. 이번 글에서 레벨1이 어떻게 지나갔는지 짧게 회고해본다. 1. 소프트스킬 ...