분류 전체보기 11

디스패처 서블릿이란?

디스패처 서블릿이란? 역할 : 요청 라우팅 - 사용자의 url요청을 보고 어떤 컨트롤러의 어떤 메서드를 호출해야 하는지 찾아간다. 데이터 바인딩 - http파라미터를 자바 객체로 변환하거나, json데이터를 객체로 매핑한다.(핸들러 어댑터) 뷰 렌더링 - 컨트롤러가 데이터(model)와 뷰 이름을 넘겨주면 디스패처서블릿이 뷰 리졸버를 호출해 렌더링해 준다. 중앙 집중식 관리 - 과거에는 모든 서블릿을 web.xml에 일일이 등록해야 했으나 이제는 디스패처 서블릿이 모든 요청을 받아 적절한 컨트롤러로 배분한다.= 프론트 컨트롤러 패턴 구조적 위치톰캣 : 웹 서버이자 서블릿 컨테이너. 필터 단계를 관리. 스프링 컨테이너 : bean들이 위치. 인터셉터 단계. 실행 순서필터(서블릿)public class..

백엔드 2026.02.14

4주차 스터디 내용

예외처리 파고들기 ControllerAdvice와 RestControllerAdvice의 차이 : @RestControllerAdvice는 @ResponseBody가 붙어 있어 응답을 Json으로 내려준다 그렇다면 orElseThrow 와 ResponseEntity... 중 어떤게 더 효율적일까? 구분 return ResponseEntity.status(...).body(...) orElseThrow(() -> new BusinessException(...))처리 위치Controller (응답을 직접 제어)Service (로직에만 집중)코드 스타일if-else 문이 많아져 코드가 길어짐한 줄로 처리되어 가독성이 좋음유지보수에러 응답 형식이 바뀌면 모든 컨트롤러를 수정해야 함Advice 클래스 한 곳만..

카테고리 없음 2026.01.23

파이썬 스터디 - nonlocal

중첩 함수 내에서만 유효하다.전역이 아닌 상위 스코프를 탐색한다.실제 변수 바인딩: nonlocal로 선언된 변수를 수정하면 실제 상위 함수의 변수 값이 바뀐다. 사용하는 이유 1. 파이썬의 객체지향 def make_counter(): count = 0 # 상위 함수의 변수 (Enclosing variable) def counter(): nonlocal count count += 1 # count 값을 변경하기 위해 nonlocal 선언 필수 return count return countermy_counter = make_counter()print(my_counter()) # 1print(my_counter()) # 2count 변수는..

스터디 2026.01.10

DJANGO 프로젝트의 Entry Point 및 내부 소스 분석

manage.py#!/usr/bin/env pythonShebang(쉬뱅) 라인: 이 파일을 실행할 때 어떤 프로그램(python)을 사용할지 시스템에 알려주는 설정 from setproctitle import setproctitle실행 중인 프로세스의 이름을 변경하는 라이브러리 진입@csrf_exempt 보안 검사(CSRF)를 이 함수에서만 제외 fs = FileSystemStorage(...) 파일을 저장할 도구(저장소)를 준비 OpenCV(이미지 처리 라이브러리)코드 내용 cv2.imread / cvtColor이미지 파일을 읽어오고, 처리 속도를 높이기 위해 색상을 **그레이스케일(회색)**로 변환합니다.cv2.threshold(..., OTSU)이진화: 아주 밝은 회색은 흰색으로, 어두운 회색..

스터디 2025.12.26

몽고DB 데이터 덤프

버전 5에서 7로 업그레이드한다는 가정 하에,5 -> 6 -> 7 로 가는 대신 데이터만 덤프하여 7버전으로 이관하기로 결정. 준비물: 기존 몽고DB 다른 버전 몽고DB mongodb database tools mongosh 진행:mongodb database tools 를 공식 페이지에서 받는다. https://www.mongodb.com/try/download/community Try MongoDB Community EditionTry MongoDB Community Edition on premise non-relational database including the Community Server and Community Kubernetes Operator for your next big pro..

피드백 & 복습 2025.12.17

크롤링 코드 수리하기

기존에 작성된 코드의 유지보수를 위해 처음으로 크롤링 코드를 접해봄 진행하며 알게된 것들을 복기 목적으로 정리. spider, scrapy, scrapy-selenium? scrapy-selenium(미들웨어)스크래피 요청(Request)을 처리할 때 셀레니움 웹드라이버(필자는 크롬 사용) 런치, url로드, 종료해줌셀레니움을 통해 로드된 HTML을 가져와서 Scrapy의 표준 응답객체와 유사한 SeleniumResponse 객체로 변환하여 스파이더에게 전달.JavaScript 실행이 필요한 동적(Dynamic) 웹 페이지도 scrapy-selenium 을 사용하면 Scrapy의 프레임워크 내에서 쉽게 처리selenium을 별도로 사용할 경우스파이더 내에서 직접 webdriver.Chrome() 등으로..

피드백 & 복습 2025.11.05

pyarmor + pyinstaller

난독화 한 코드를 설치하기 편하도록 컴파일할 필요가 생겼다. - pyinstaller는 크로스 컴파일러가 아니므로 윈도우에서 번들링하면 윈도우에서만 실행 가능.- rocky 리눅스 환경에서 진행. 미니콘다 가상환경 실행 후 진행CONDA ACTIVATE MYENV 파이아머, 파이인스톨러를 설치한다.pip install pyarmorpip install pyinstaller 난독화 과정을 확인해 보기 위해 간단한 코드를 생성한다.cat > test_input.pyprint('Hello World!') 난독화pyarmor gen test_input.py dist/test_input에 생성된 파일 내용 확인(무서워)난독화 완료. 다음은 pyinstaller로 난독화 완료된 파일을 묶어 단일 실행파일을 만든..

피드백 & 복습 2025.10.24

Ollama vs vLLM

올라마와 vllm은 로컬에서 llm을 실행하기 위한 도구이다.다양한 모델을 지원하며 추론 방식을 가지고 있다. (vLLM의 PagedAttention, Ollama의 llama.cpp) 오픈소스 엔진으로 오픈소스 llm을 실행하면 나만의 챗지피티를 공짜로 사용할 수 있는 셈이다. 그렇다면 왜 다들 이렇게 사용하지 않을까?수많은 이유가 있겠지만, 직접 경험해본 사례와 빗대어 정리해 보려 한다. - 높은 하드웨어 요구사항대부분의 LLM은 VRAM을 요구한다. 메인보드에 장착되어 있는 RAM과 달리 연산/GPU 전문적인 메모리이다. 내가 설치를 시도했던 GPU는 16GB의 VRAM을 가지고 있었다. 1. vLLM 으로 첫 시도, 실패 vLLM 공식 도커 이미지를 사용해 설치를 시도해 보았다.좋은 성능의 모델은..

카테고리 없음 2025.10.08

miniconda로 가상환경 구축하기

파이썬 가상환경을 만들어두면 여러 프로젝트를 실행할 때 의존성 충돌 문제를 방지할 수 있다. 한 프로젝트가 하나의 방을 사용할 수 있도록 해 주는 것. 아나콘다나 venv 등을 사용하면 생성 방법도 간단하다. 사용한 것파이썬 3.11.9미니콘다 (파이썬 지원버전)리눅스(rocky9 사용) - virtureBox 사용 1. 미니콘다 설치wget 명령어로 온라인 저장소에서 쉽게 다운받을 수 있다.wget https://repo.anaconda.com/miniconda/[파일이름]사용하는 파이썬 버전과 호환되는 Miniconda 24.7.1-0 를 선택. (만약 wget이 없으면 sudo dnf install wget으로 설치해주자.) 1-1. 실행bash Miniconda3-py39_24.7.1-0-Lin..

피드백 & 복습 2025.09.25

배포 연습 서버로 Ubuntu를 선택한 이유

1. 서버 선택 리눅스 서버용 OS를 고를 때 많이 언급되는 건 다음 두 가지다.Rocky Linux : RedHat(RHEL) 계열. 안정성과 보안성이 강점. 대기업 서버 환경에 많이 사용된다.Ubuntu : Debian 계열. 설치와 관리가 쉽고, 커뮤니티와 자료가 풍부하다. 아래는 챗지피티가 비교해준 록키 리눅스 vs 우분투항목Rocky LinuxUbuntu설치 난이도조금 복잡함매우 쉬움검색 자료 양상대적으로 적음매우 풍부패키지 설치 방법yum/dnf 사용apt 사용 (명령어가 간단)개발 친화성엔터프라이즈 서버에 최적화개발자 실습용으로 최적화 쉽다는 설명도 매력적이지만, 실제 사용자도 우분투 쪽이 더 많다는 점이 설득력있었다.이번 연습의 목적이 "리눅스 환경에 익숙해지는 것"이기 때문에 초반에는 U..

백엔드 2025.04.27