본문 바로가기

Programming138

[개발자 기술 면접 대비]🚦동기/비동기 vs 블로킹/논블로킹 – 헷갈리는 개념 한 번에 정리하기 기술 면접 단골 질문: “동기와 블로킹이 같나요?”이 질문에 제대로 답하기 위해선 개념을 구분하고, 조합해서 설명하는 능력이 필요합니다.📌 개념 정리✅ 동기(Synchronous)작업 완료 여부를 확인한 뒤 다음 작업을 수행즉, 순차적 흐름을 강제함예: 함수 호출 → 결과 반환 → 다음 줄 실행✅ 비동기(Asynchronous)작업 완료 여부를 기다리지 않고, 다음 작업을 수행결과는 콜백/이벤트/프로미스/await 등을 통해 나중에 처리병렬적 작업 흐름에 적합✅ 블로킹(Blocking)함수 호출 시 작업이 끝날 때까지 기다림 (제어권 반환 X)작업 중인 동안 프로그램 흐름이 멈춤✅ 논블로킹(Non-blocking)함수가 즉시 리턴됨 (작업이 끝나지 않아도)결과는 나중에 확인하거나, 실패 예외를 통해 처.. 2025. 7. 25.
[개발자 기술 면접 대비]💡 블로킹(Blocking)과 논블로킹(Non-blocking)의 차이 📌 네트워크, 시스템 프로그래밍, 백엔드 개발 면접에서 자주 나오는 기본 개념!1️⃣ 블로킹(Blocking)이란?블로킹은 하나의 작업이 완료될 때까지 다음 작업이 대기(중단) 상태에 들어가는 방식입니다.주로 입출력(I/O) 작업에서 많이 쓰이며, 결과가 올 때까지 가만히 기다리는 구조라고 생각하면 됩니다.🧪 예시 (Python)data = socket.recv(1024) # 데이터가 도착할 때까지 프로그램이 여기서 멈춤print("받은 데이터:", data)위 코드에서 recv() 함수는 서버로부터 데이터가 오기 전까지 프로그램 전체를 멈추게(block) 합니다.✅ 특징구현이 단순하고 직관적작업 순서가 명확대기 시간이 길어지면 성능 저하 발생 가능2️⃣ 논블로킹(Non-blocking)이란?논블로.. 2025. 7. 25.
[Django] Form 처리, 함수형 뷰에서 클래스 기반 뷰(CBV)로 리팩토링하기 “코드가 너무 길어졌어요… 뷰를 더 깔끔하게 쓸 수 없을까요?”장고를 배우면서 가장 먼저 접하게 되는 건 함수형 뷰(Function-Based View)입니다.하지만 프로젝트가 커지면 점점 코드가 길어지고 반복되는 부분도 많아지죠. 이럴 때 좋은 대안이 클래스 기반 뷰(Class-Based View)입니다.오늘은 제가 직접 구현했던 리뷰 폼 기능을 CBV로 리팩토링한 과정을 소개드리며, 왜 이렇게 고쳐야 했는지도 함께 정리해볼게요.1️⃣ 기존 함수형 뷰 코드def review(request): if request.method == 'POST': form = ReviewForm(request.POST) if form.is_valid(): form.save(.. 2025. 7. 24.
[Django] ModelForm으로 폼을 간단히! 그런데 레이블을 잃었다... 🧩 상황Django에서 사용자 입력 폼을 만들 때 forms.Form을 쓰면 유효성 검사나 필드 구성이 번거로워요. 그래서 forms.ModelForm을 사용하면 모델 기반으로 폼을 자동 생성할 수 있어서 매우 간편합니다.class ReviewForm(forms.ModelForm): class Meta: model = Review fields = "__all__"위와 같이 쓰면 Review 모델의 모든 필드를 자동으로 폼으로 생성해줍니다. 하지만 문제는...❗ 레이블(label)이 다 영어 변수명으로 나와요!🔍 원인ModelForm은 Model 클래스에 정의된 필드 이름을 그대로 label로 사용합니다. verbose_name을 모델에서 정의하지 않으면 변수명을 그대로 .. 2025. 7. 24.
[Django] Form을 통해 사용자 리뷰 저장하기 (feat. Model 연결) 장고에서는 사용자의 입력을 받아서 데이터베이스에 저장하는 과정을 간단하게 처리할 수 있습니다.이번 포스팅에서는 Form과 Model을 연결해서 사용자 리뷰를 저장하는 과정을 하나씩 살펴보겠습니다.✅ 목표사용자로부터 이름, 리뷰 내용, 평점을 입력받는다유효성 검사를 한다models.py의 Review 모델에 데이터를 저장한다성공하면 /thank-you 페이지로 리디렉션한다📌 1. 모델 만들기 (models.py)from django.db import modelsclass Review(models.Model): user_name = models.CharField(max_length=100) review_text = models.TextField() rating = models.Integer.. 2025. 7. 24.
[Django] ManyToManyField 역참조 출력 오류 해결: post.tags 관련 에러 정리 Django에서 ManyToManyField를 템플릿에서 출력하려고 할 때 Internal Server Error가 발생했습니다. post.tags를 반복문으로 출력하다가 다음과 같은 에러를 만났습니다.TypeError: 'ManyRelatedManager' object is not iterable이 오류는 ManyToManyField에 대해 .all()을 호출하지 않고 템플릿에서 직접 루프를 돌리려고 할 때 발생합니다.문제 상황예를 들어, 아래와 같은 템플릿 코드가 있다고 가정해봅시다. {% for tag in post.tags %} {{ tag.caption }} {% endfor %}위 코드는 겉보기에 아무 문제가 없어 보이지만, 실제로는 post.tags는 ManyRelat.. 2025. 7. 23.