전체 글27 [wise-pick 개발] Next.js SEO 최적화로 Lighthouse 100점 달성기 제가 왔습니다.wise-pick 개발을 완료 했는데요, 치명적인 문제가 생겼습니다. SEO 점수가 58점 밖에 안된다는 겁니다. 쌰갈! 하지만 친절하게 어떠한 항목이 잘못됐는지 알려주었기에 해결을 해보도록 하겠습니다. 영어를 잘 하진 못하지만 해석을 해보자면 인덱스 코드의 헤드 > 메타 태그에 크롤링을 하지 못하도록 막아놓는 설정이 있는데 이를 막아놨다고 합니다. 구글 검색 엔진 최적화(SEO)의 원리 중 첫 번째 단계는 검색 봇이 내 사이트를 크롤링(수집)하고 인덱싱(색인)하게 됩니다.robots.txt는 봇의 접근 권한을 제어하는 파일인데, 여기서 크롤링을 막아버리면 구글이 제 사이트에 어떤 콘텐츠가 있는지조차 읽을 수 없습니다ㅠㅠ 즉, 검색 결과 노출의 1단계부터 문을 막아버리므로 SEO에 가장 치.. 2025. 12. 25. [DevOps] 초기 클라우드 서버(OCI) 최적화: 속도와 안정성 3단계 튜닝 (BBR, Swap, ulimit) 클라우드 인스턴스(OCI, AWS EC2 등)를 처음 생성하고 그대로 사용하면, 생각보다 네트워크 속도가 느리거나 트래픽이 몰렸을 때 서버가 쉽게 뻗을 수 있다. 특히 FastAPI나 Django 같은 백엔드 서비스를, 그것도 도커(Docker) 기반으로 운영할 계획이라면 초기 OS 튜닝은 필수다.오늘 진행한 리눅스 서버의 필수 최적화 3가지(TCP BBR, File Descriptor, Swap) 설정을 정리한다.1. 네트워크 속도 최적화: TCP BBR 적용기본 리눅스 커널은 CUBIC이라는 혼잡 제어 알고리즘을 사용한다. 이는 패킷 유실(Packet Loss)이 발생하면 전송 속도를 급격히 줄이는 방식이라, 해외망이나 무선 환경에서 제 속도를 내지 못한다. 이를 구글이 개발한 대역폭 기반의 BBR(.. 2025. 12. 15. [Django] settings.py 리팩토링하기 Django는 settings.py 파일 하나에 모든 설정이 들어있습니다.하지만 프로젝트를 진행하다 보면 필연적으로 이런 상황을 마주하게 됩니다."로컬에서는 SQLite 쓰고 싶은데, 배포 서버에서는 PostgreSQL 써야 해.""실수로 DEBUG = True인 상태로 배포해버렸네? 큰일 났다""GitHub에 API 키가 그대로 올라갔어.."이런 치명적인 실수를 방지하기 위해 실무에서는 설정 파일을 환경(Local/Prod) 별로 분리하고, 민감한 정보는 환경변수(.env)로 숨기는 전략을 사용합니다.🚀 1단계: 파일 쪼개기 (Module Separation)가장 먼저 해야 할 일은 거대한 settings.py를 역할에 따라 물리적으로 나누는 것입니다.1. 폴더 구조 변경기존 settings.py를 .. 2025. 12. 8. [Django/DRF] 장고의 DRF 설계 튜토리얼 비유: API는 자판기데이터베이스(DB)를 자판기 내부의 창고라고 생각해 봅시다. 거기엔 음료수도 있지만, 사장님의 돈통(비밀번호)도 있고, 재고 관리 장부(민감 데이터)도 있습니다. 우리가 만든 API(GET 요청)는 자판기 버튼입니다. 손님이 버튼을 누른다고 해서 자판기 문이 활짝 열리고 돈통이 쏟아져 나오나요? 아닙니다. 딱 우리가 전시해 둔(허용한) 음료수 하나만 톡 떨어집니다. DRF에서는 이 전시와 통제를 담당하는 3명의 문지기가 있습니다.🛡️ 1단계 방어막: Serializer (필드 필터링)첫 번째 문지기인 Serializer는 어떤 항목(Column)을 보여줄지 결정합니다.예를 들어, DB에 User 테이블이 있고 거기에 password와 phone_number가 있다고 가정해 봅시다.. 2025. 12. 8. [Django] 성능 최적화 : N + 1 문제를 prefetch_related로 해결하기 오늘은 많은 Django 개발자들이 한 번쯤 마주치게 되는 N+1 Query 문제와, 이 문제를 prefetch_related를 통해 얼마나 간단하고 효과적으로 해결할 수 있는지 공유하려고 합니다. 최근 진행한 프로젝트의 API 성능을 개선했던 경험을 작성해보겠습니다. 저는 core 앱에 '보고서(Report)'에 여러 '제품(Product)'이 연결되는 데이터 모델을 가지고 있었습니다. 그리고 Django REST Framework(DRF)를 사용해 보고서 목록을 보여주는 API를 만들게 되었습니다. 초기 ViewSet 코드는 다음과 같이 매우 단순했습니다.reports/views.py (개선 전) class ReportViewSet(viewsets.ReadOnlyModelViewSet): """보.. 2025. 12. 7. [📚서비스 개발기] [Q&A] 1인 개발과 팀 개발의 플로우의 차이와 생산성 극대화 전략 문답 모음 팀 개발이 버스를 타고 정해진 노선과 규칙을 지키며 다 함께 이동하는 것이라면, 1인 개발은 오토바이를 타고 빠르게 골목을 누비는 것과 비슷합니다. 1인 개발자가 불필요한 절차(Overhead)를 줄여 속도를 높이면서도, 놓치지 말아야 할 최소한의 시스템은 무엇인지 제미나이와의 대화로 알게된 지식을 정리해보았습니다.Q1. 팀 개발과 1인 개발, 구체적으로 무엇을 다르게 가져가야 하나요?가장 큰 차이는 '커뮤니케이션 비용'과 '책임의 범위'에서 발생합니다.1. 팀에서는 필수지만, 1인 개발에선 생략 가능한 것 (Overhead 줄이기)팀 개발의 핵심은 '동기화(Synchronization)'입니다. 반면 1인 개발은 나만 알면 되므로 이 과정을 과감히 생략하여 개발 속도를 높일 수 있습니다.엄격한 브랜치 .. 2025. 12. 7. [📚서비스 개발기] Django 프로젝트 디렉토리 구조 바꾸기 Django를 처음 배울 때 우리는 django-admin startproject myproject 명령어로 시작합니다. 하지만 프로젝트 규모가 커지고 앱(App)이 하나둘 늘어나기 시작하면, 루트 디렉토리는 금세 난장판이 됩니다.settings.py 하나에 개발/배포 설정이 뒤섞여 있고 (DEBUG = True 껐다 켰다 해야함..)루트 폴더에는 users, products, orders 등 앱 폴더들이 나뒹굴고...프로젝트 설정 폴더 이름은 프로젝트 이름과 같아서(myproject/myproject) 헷갈립니다.이번 프로젝트(KCAreportForShopping)를 진행하면서, 유지보수성과 확장성을 고려해 "프로덕션 레벨의 디렉토리 구조"로 리팩토링한 과정을 공유합니다.1. Before vs Afte.. 2025. 11. 30. [📚서비스 개발기] "장고의 wsgi와 asgi 기술의 차이" 현재 한국소비자원의 제품 시험 리포트를 분석해 제공하는 데이터 정보 플랫폼을 개발하고 있습니다.저는 Python 활용이 주력이기 때문에 백엔드 프레임워크로 Django를 선택하여 개발하고 있습니다.프로젝트 진행 중, Django가 두 가지 실행 방식을 모두 지원한다는 것을 알게 되었습니다. 그에 대한 글을 작성해 봅니다. WSGI: 우리가 알던 전통적인 방식ASGI: Node.js처럼 비동기로 동작하는 최신 방식 "장고는 특이하게 WSGI와 ASGI를 나누었네?"이 글은 이 질문에 대한 답을 찾기 위해, CS(Computer Science) 관점에서 두 아키텍처를 비교하고 공부해 보겠습니다.1. Node.js가 빠르다는 이유 (ASGI를 이해하기 위한 비유)Django의 ASGI가 무엇인지 이해하려면, .. 2025. 11. 30. 젠킨스 환경 구축 프로젝트를 하면서 수동적인 배포에 피로감을 느끼던 찰나 젠킨스라는 도구를 알게 되어 적용하게 되었습니다.사전 준비링크 에서 각 환경에 맞는 설치 방법을 사용하시면 됩니다. 저는 ubuntu 패키지를 이용하겠습니다.설치 완료 후 /:8080/ url로 접속하게 된다면 해당 화면을 볼 수 있습니다.패스워드를 가져오라는 의미인 것 같습니다. 해당 경로의 패스워드 파일을 조회해 보도록 하겠습니다.cat /var/lib/jenkins/secrets/initialAdminPassword이후 자동으로 플러그인 설치하기를 누르면 이런 화면이 나오게 됩니다.각 칸마다 특별히 지켜야 할 것은 없습니다. 계정명은 ID에 해당됩니다.설치와 회원가입이 완료되면 이러한 초기화면을 볼 수 있습니다.저는 cloud를 이용 중이어서 .. 2025. 11. 24. 이전 1 2 3 다음