전체 글
-
우아콘 2025 후기회고록 2025. 10. 30. 08:54
우아콘 신청을 우아한테크코스에서 받았다. 듣고 싶은 세션과 가야하는 이유를 간략하게 적어서 지원자를 받았다. 처음 우아콘 세션을 보았을 때, 솔직하게 크게 눈길이 간건 "Server-Sent Events로 실시간 알림 구현하기" 였다. 프로젝트를 하면서 우리 서비스에서도 실시간 서비스를 구현하기 위해 SSE를 사용하였다. 하지만 부하테스트를 하고 서버를 확장하려고 하니, 애플리케이션 메인 서비스와 커넥션 상태를 가지는 SSE 서버가 함께 있으니 서버 확장하기 어려웠다. 그에 따라 SSE 서버를 분리하려고 하였고, 어떤 아키텍처를 선택해야할지 고민이였다. 현재는 Redis Pub/Sub을 사용하여 SSE 서버를 분리하였다. 과연 "Server-Sent Events로 실시간 알림 구현하기" 세션에서는 어떤 ..
-
우리 서비스는 거북이.. 조회 속도 올리기트러블슈팅 및 프로젝트 2025. 9. 28. 11:49
🔨 요구사항이번 백엔드 요구사항은 조회 속도 개선하기였다. 요구사항의 일부를 가져왔다.요구사항 문서를 보다가 “거북이”라는 표현에서 한참 웃었다. 더 웃긴 건 그 거북이가 바로 우리 서비스였다는 사실이다... ㅋㅋ쿠ㅜ우리 서비스는 조회 기능이 정말 많다. 개인 보따리 목록, 보따리 템플릿, 팀 보따리 목록 등 대부분의 화면이 읽기 흐름으로 시작한다. 그동안은 기능 구현에 집중하느라 더미 데이터를 조금만 넣고 개발했는데, 이게 성능에 대한 감각을 흐리게 했다. 요구사항에 맞춰 각 도메인에 데이터를 100만 건씩 넣고 실제 조회를 돌려 보니, 예상대로 병목이 드러났다. 일부 요청은 1초를 가뿐히 넘겼고, 어떤 건 더 오래 걸렸다. 모든 쿼리가 그런 건 아니었지만, 인덱스가 없는 컬럼으로 조건을 거는 경우엔..
-
Lovable은 신인가?? Lovable을 통해 서비스 발전시키기트러블슈팅 및 프로젝트 2025. 9. 26. 18:37
🤔 Lovable이란?Lovable은 아이디어를 입력하면 자동으로 프로토타입 웹앱을 생성해주는 AI 기반 툴이다. 하지만 아쉬운 점은 유료라는 점이다. 하루에 무료로 주어지는 토큰을 잘 활용해야한다. LovableBuild software products, using only a chat interfacelovable.dev레벨 3을 진행하면서 Lovable을 통해 프로토 타입을 만들어서 적극적으로 활용했다. 크게 프로젝트 주제를 정할 때와, 우리 서비스의 UT(User Test)에서 사용되었다. 정확히 어떻게 활용 되었는지 회고글을 작성하려고 한다 ㅎㅎ.📖 프로젝트 주제 정하기우아한테크코스 레벨3가 시작되면서 프로젝트를 시작하게 되었다. 프로젝트 팀을 정하기 전에 미션을 받았다. 팀 프로젝트 주제를..
-
우리 서비스 모니터링은 쓰레기.. 모니터링 시스템 재구축트러블슈팅 및 프로젝트 2025. 9. 26. 15:41
🔥 문제 상황우테코 5차 요구사항의 골자는 데이터베이스에 최소 100만 건 이상을 실제로 적재해 둔 상태에서 조회 쿼리의 소요 시간을 측정하고, 병목을 찾아 개선하는 것이다. 우리 서비스의 “보따리 템플릿 조회” 기능은 초기 운영 단계에 데이터가 많지 않을 것이라는 가정하에 설계되어 있어, 페이징 없이 JPA의 findAll()로 전량을 한 번에 읽어오는 방식이었다. 초반에는 큰 문제가 없어 보였지만, 이 전제는 데이터가 급격히 늘어나는 상황을 고려하지 못했다. 실험을 위해 개발 DB에 100만 건을 넣고 서버 설정을 그대로 둔 채 운용하던 중, 안드로이드 클라이언트가 해당 조회 API를 호출했고 이 시점부터 서버가 급격히 느려지더니 결국 장애로 이어졌다. 원인 파악을 위해 최근 6시간 분량의 Clou..
-
WireShark로 톰캣 살펴보기트러블슈팅 및 프로젝트 2025. 9. 14. 12:36
GitHub - jaehyeon2650/java-httpContribute to jaehyeon2650/java-http development by creating an account on GitHub.github.com 이번 우테코 미션은 톰켓 구현하기다. 톰켓은 많이 들어본적이 있다. 스프링 부트에는 내부에 Tomcat이 있어서 별도의 복잡한 서버 설정 없이도 쉽게 애플리케이션을 실행할 수 있다는 말을 많이 들어봤다. 스프링 부트가 등장하기 전에는 톰캣을 직접 설치하고 설정해야 했기 때문에 서버를 띄우는 과정이 꽤 번거로웠다고도 많이 들어봤다. 그렇다면 톰캣이란 도대체 무엇이고, 왜 서버를 띄울 때 필수적일까?톰캣간단히 말하면 톰캣은 브라우저 요청을 받아 처리하고, 자바 프로그램이 동적으로 실행될 수..
-
쓰레드 풀이란?자바 2025. 9. 11. 22:01
🔥 문제 상황 GitHub - woowacourse/java-httpContribute to woowacourse/java-http development by creating an account on GitHub.github.com이번 미션은 톰켓을 직접 구현하는 것이다. 기본적인 다음과 같은 뼈대 코드가 있었다.public class Connector implements Runnable { // 생략 public void start() { var thread = new Thread(this); thread.setDaemon(true); thread.start(); stopped = false; log.info("Web Appli..
-
자바 I/O자바 2025. 9. 7. 01:19
이번 우아한테크코스 레벨4 첫 미션은 톰캣을 직접 만드는 것이였다. 톰캣을 만들기 전에 학습테스트로 자바의 I/O 스트림에 대해 주어졌다. OuputStream, InputStream, File, Files 등 다양한 내용이 있었다. 이를 정리를 해보고자 한다.🤔 스트림(Stream)Stream은 영어로 흐름, 개울 등 다양한 뜻이 있다. 동사적 의미로 봤을 때 흐르다는 의미를 가지고 있다. 자바에서 스트림은 무엇일까?스트림을 쉽게 한 줄로 요약하면 데이터를 연속적으로 읽거나 쓰는 통로이다. 즉, 데이터들이 물이 흐르듯이 어떤 통로를 통해 흐르는 것이다.자바의 스트림의 특징으로는 크게 2가지가 있다. 첫번째는 단방향 통로이다. 스트림의 흐름은 방향이 한쪽이다. OutputStream은 밖으로 나가는 흐..
-
[우아한 테크코스] 운영 서버 구축하기트러블슈팅 및 프로젝트 2025. 9. 3. 21:33
프로젝트를 하면서 우아한 테크코스에서 나눠준 AWS 계정으로 AWS 서비스와 리소스를 사용하였다. AWS 운영 규칙에 사용해야하는 VPC, 특정 EC2의 서브넷 등 설정해야하는 값이 고정이 되어 있었다. 운영 규칙을 적용하면서 우리 서비스의 특징에 맞게 운영 서버 인프라를 구축하니 다음과 같았다.우리의 서비스 로직이 담긴 서버와 RDS는 Private Subnet에 배치하여 외부에서 직접 접근이 불가능하게 막았다. 또한 Nginx를 띄운 Bastion Host 역할을 하는 EC2를 Public Subnet에 위치시켰다. 하지만 Route Table, NAT Gateway는 기본적으로 우아한 테크코스에서 제공된 것을 운영 규칙에 맡게 사용하였다. 이 서비스들이 무엇이고 VPC, 서브넷 개념이 무엇인지 정리..