문제 해결: S3 이미지 렌더링 속도 개선 843ms → 298ms
·
Tech Note/Trouble Shooting
서론안녕하세요 팀 원코의 백엔드 개발을 맡고 있는 박준선입니다. 🙇‍♂️원코 프로젝트는 S3 이미지 저장 방식을 사용하고 있었는데요.S3 객체 URL을 그대로 DB 저장하고, 클라이언트 서버에게 S3 객체 URL를 서빙하는 구조였습니다.이번 포스팅은 기존 S3 방식에서"왜 CloudFront를 도입하게 되었고, 그 과정에서 발생한 문제와 그 해결 과정"을 정리해보고자 합니다.측정은 Chrome DevTools → Network에서 이미지 요청의 Duration과 Timing(Content Download)을 기준으로 했습니다."정확한 비교를 위해 Disable cache 옵션도 켜서 측정했습니다."본론기존 구조: S3 URL을 DB에 저장하던 방식원코 프로젝트 초반에는 구조가 단순했습니다.이미지는 AW..
[ONECO] 개발 일기 1편 - 단일 EC2에서 운영하기: 컨테이너 분리와 SSH→SSM 전환
·
Tech Note/Architecture
서론원코 프로젝트는 TAVE 16기 후반기 연합 팀 프로젝트입니다. 듀오링고, 말해보카와 같은 학습 플랫폼에서 "경제"라는 주제로"AI가 알려주는 하루 10분 매일 경제 공부 플랫폼", "One Day Economy" 원코 서비스를 기획했습니다. 그러나,"그래서 사람들이 왜 우리 서비스를 사용해야 하지?"라는 질문에 답을 하지 못했었습니다. 그래서 새롭게 기획하게 된 "부모-자녀 페어링 기반 경제·금융 키워드 교육 서비스" 원코는 부모와 자녀가 함께 학습을 계획하고, 자녀에게 보상이라는 학습 동기를 부여하는 경제 금융 서비스입니다.본론새로운 기술과 근사한 아키텍처를 프로젝트에 도입하고 싶은 마음은 개발자라면 모두 공감하실 것 같습니다.저도 이때 당시 새로운 Tech Stack, Architecture 등..
[ONECO] 부모-자녀 페어링 기반 경제·금융 키워드 교육 서비스 개발 일기 1편
·
Tech Note/Architecture
보호되어 있는 글입니다.
[백준 1377] 버블 소트(G2)
·
Algorithm
문제 바로가기 간단한 정렬문제인데, 왜 G2 문제지? 라고 생각하며 접근했다가 틀린 문제이다. 문제 요구사항을 요약하자면, 버블정렬 알고리즘은 2중 for문으로 돌아간다. 아래 예시로 예를들어보면N=5,배열 A는 10, 1, 5, 2, 3 이렇게 배열이 있을 때를 i가 1일 때, j가 1부터 N-i 번 반복하게 된다. i = 1 일 때,[j=1] 1, 10, 5, 2, 3[j=2] 1, 5, 10, 2, 3 [j=3] 1, 5, 2, 10, 3[j=4] 1, 5, 2, 3, 10 i = 2 일 때,[j=1] 1, 5, 2, 3, 10[j=2] 1, 2, 5, 3, 10[j=3] 1, 2, 3, 5, 10 i = 3 일 때,[j=1] 1, 2, 3, 5, 10[j=2] 1, 2, 3, 5, 10 i=2..
[백준 11286] 절댓값 힙(S1) — 우선순위 큐 재정의
·
Algorithm
[S1] 11286 절댓값 힙 문제 바로 가기 이 문제는 1927 최소 힙 문제와 유사하게 자료구조 우선순위 큐를 사용하면 쉽게 해결할 수 있었다. 우선 순위 큐 자료구조를 아느냐 모르냐를 묻는 문제인데, 아래 문제가 더 쉬운 문제이다. S2 1927 최소 힙 바로가기 문제 풀이는 간단하다. x = 0 일때,큐가 비어 있으면 0을 출력한다.비어 있지 않을 때는 절댓값이 최소인 값을 출력한다.만약 절댓값이 같다면 음수를 우선하여 출력한다. x != 0 일 때,add로 큐에 새로운 값을 추가하고 우선순위 큐 정렬 기준으로 자동 정렬한다. 슈도코드를 작성해보자N(연산의 개수) 입력우선순위 큐 선언- 절댓값 기준으로 정렬되도록 설정- 단, 절댓값이 같으면 음수 우선 정렬for(N만큼 반복){ if(x = 0..
[ONECO] AI를 활용한 PR 문서 작성 자동화 파이프라인 구축기
·
Tech Note
서론 PR 작성이 숙제처럼 느껴질 때ONECO 팀에서 개발하면서 매번 반복되는 '루틴'이 하나 있었습니다. 바로 PR(Pull Request) 문서를 쓰는 일이었죠."자, 이번에 내가 뭘 바꿨더라?" 기억을 더듬는다.수정된 파일들을 하나하나 다시 훑어본다.커밋 로그를 복사해서 팀원들이 읽기 좋게 다듬는다.마지막으로 AI에게 "이거 문장 자연스러워? 논리적으로 이상한 건 없어?"라고 물어본다.처음엔 이게 참 좋은 습관이라고 생각했어요.문서를 꼼꼼히 쓸수록 코드 리뷰 속도도 빨라지고, 협업 퀄리티도 올라가니까요. 하지만 프로젝트 덩치가 커지고 작업량이 많아지니,어느샌가 이 과정이 기분 좋은 마무리가 아니라 피곤한 숙제처럼 느껴지기 시작했습니다."어차피 AI가 봐줄 거라면, 처음부터 맡기면 안 돼?"어느 날 ..
IT 연합 동아리 TAVE 전반기 - 공유하고 함께 성장하는 문화
·
Retrospective
TAVE | 테이브다양한 분야가 함께 성장하는 IT 연합 동아리입니다.www.tave-wave.com TAVE란?다양한 분야의 IT 직무를 희망하는 대학생들이 모여 함께 성장하는 동아리입니다.AI, 데이터 분석, 백엔드, 프론트엔드(웹/앱), 디자인으로 총 5개의 파트로 나누어져 있습니다. 저는 2025년 9월부터 TAVE 16기 YB(신입)로 활동했어요.✌🏻🤔 왜 TAVE였나저는 학부 2학년을 마치고, 겨울 방학 때부터 본격적으로 개발을 시작했어요.구름톤 유니브 활동을 하면서 다양한 사람들과 스터디, 프로젝트를 진행했습니다.이때부터 저는 "함께 성장하는 것"의 즐거움을 깨닫게 되었습니다. 저는 TAVE가 다양한 직무의 사람들이 함께 성장하는 "성장형 커뮤니티"라는 점에 끌렸습니다. 전반기: 멀티스..
[백준 11720] 숫자의 합(V4) - 문제를 분석하는 습관
·
Algorithm
[V4] 11720 숫자의 합 문제 바로 가기 문제N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오. 문제첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. 출력입력으로 주어진 숫자 N개의 합을 출력한다. V4의 아주 간단해 보이는 문제입니다.이 문제를 예로 우리가 코딩테스트에서 알고리즘 문제를 분석하는 습관과 중요성을 강조하기 위해서 이 글을 작성합니다. "코딩테스트에서 문제를 분석하는 습관을 가져야 하는 이유"처음 이 문제를 읽고나서 어떤 풀이를 떠올렸나요?저는 어제 나누기와 모듈러 연산과 관련된 문제를 풀었더니 아래와 같은 풀이를 맨처음 떠올렸습니다. 사고 과정54321을 입력받고 15를 출력.5 + 4..
[백준 1074] Z(G5) — 재귀로 방문 순서 계산하기
·
Algorithm
[G5] 1074 Z 문제 바로 가기 1. 문제 요약정수 N, R, C가 주어졌을 때, 2^N × 2^N 배열을 Z 모양 순서로 방문한다고 하면좌표 (R, C)는 몇 번째(0-index) 로 방문되는지 출력하는 문제다. 여기서 핵심은 배열을 진짜로 만들고 순회하면 절대 안 된다는 점이다.2^N은 N이 커질수록 급격히 커지고, 모든 칸을 직접 방문하면 시간/메모리가 터진다. 2. 처음 시도: 전체를 돌면 왜 망할까?가장 흔한 실수는 이런 접근이다.실제 2^N × 2^N 배열 생성Z 순서대로 하나씩 방문하면서 카운트 증가(R,C) 도달하면 출력왜 안 되냐면, 칸 수가 2^(2N)개라서N이 조금만 커져도 탐색 자체가 “물리적으로” 불가능해진다. 즉, 이 문제는 “탐색” 문제가 아니라(R,C)가 속한 위치가..
[백준 1629] 곱셈 (S1) — 메모리 초과에서 분할정복 모듈러 거듭제곱까지
·
Algorithm
[S1] 1629 곱셈 문제 바로 가기1. 문제 요약정수 A, B, C가 주어졌을 때,(A^B) % C 를 출력하는 문제다. 여기서 핵심은 B가 매우 클 수 있다는 점이다.단순히 A를 B번 곱하는 방식은 시간/메모리 측면에서 절대 통과할 수 없다.2. 처음 시도: 단순 재귀의 함정 (메모리 초과)처음에는 다음처럼 b를 1씩 줄이며 곱하는 재귀를 작성했다.return a * func(a, b-1); 왜 메모리 초과가 나는가?이 방식은 재귀 호출이 B번 쌓이는 선형 재귀( O(B) )다.B가 크면 호출 스택이 끝없이 쌓인다.Java는 재귀 깊이가 커지면 스택 메모리가 터지며 보통 StackOverflowError가 발생한다.백준에서는 이런 상황이 “메모리 초과”로 판정되는 경우가 많다.즉, 단순 재귀는 스택..