전체 글

· Django
이 글은 피로그래밍 22기 Django 세션을 위해 작성되었습니다.1. Django User Model이란?Django의 User 모델은 사용자 인증과 관리를 위해 제공되는 기본 모델이다. 이 모델은 django.contrib.auth 앱에 포함되어 있으며, 사용자의 계정 정보를 저장하고 인증을 처리하는 역할을 한다.2. Django User Model 구조class User(AbstractUser): """ Users within the Django authentication system are represented by this model. Username and password are required. Other fields are optional. """ class..
· Django
Django를 사용해 웹 애플리케이션을 개발할 때, 데이터베이스의 구조를 유지하고 변경하는 것은 매우 중요하다. 마이그레이션은 데이터베이스 테이블을 생성, 수정, 삭제하는 과정을 자동화하는 기능으로, 이 기초적인 부분을 잘만 이해해 놓는다면 개발할 때 매우 편할 것이다. 따라서 이번 글에서는 Django에서 마이그레이션과 같이 알아두면 좋은 개념들(Sqlite, 마이그레이션, 마이그레이션 롤백,Django Shell 등), MySQL을 Django 프로젝트에 연동하는 과정을 설명하려 한다. Django Migration이란?마이그레이션(migration)은 Django에서 데이터베이스의 스키마(구조)를 관리하고 변경하는 방법이다. 데이터베이스 테이블을 생성, 수정, 삭제하는 과정을 자동화해 준다.Djan..
· Django
이 글은 피로그래밍 22기 Django 세션을 위해 작성되었습니다.오늘 세션의 내용은 아니지만 제가 19기에 진행한 Django 기초 세션 자료를 다시 정리해 봤습니다. 오늘 세션을 위해 간단하게 읽어만 주세요! 웹 개발의 시작웹 개발을 배우기 위해서는 기본적인 웹 동작 원리를 이해하는 것이 필요하다. 웹이 어떻게 동작하는지 알면 클라이언트와 서버의 역할을 명확히 이해하고, 개발 과정에서 발생할 수 있는 문제를 더 쉽게 해결할 수 있다. 따라서 이번 글에서는 클라이언트-서버 구조, 프론트엔드와 백엔드의 차이를 가볍게 다룬 뒤 Django에 대해서 알아볼 예정이다. 웹 동작 흐름웹의 기본 동작은 클라이언트와 서버 간의 요청과 응답으로 이루어진다. 브라우저가 클라이언트 역할을 하여 서버에 요청을 보내면, 서..
· Spring
문제 발견: 중복 회원가입 문제회원가입 로직에는 중복 검증 로직이 존재하지만, 회원가입이 완료되기 전에 사용자가 버튼을 다시 누르면 중복으로 회원가입이 처리되는 문제가 발생한다. 이는 여러 요청이 동시에 처리되면서 데이터베이스의 동시성 제어가 제대로 작동하지 않기 때문이다. 이러한 문제는 데이터의 무결성을 훼손하고 리소스 낭비를 초래하며, 사용자 경험에도 악영향을 끼친다. 실제 서비스의 문제를 확인한 뒤 테스트 코드를 통해서 회원가입이 동시에 발생하는 환경을 만들어 주었을 때도 같은 오류가 나는 것을 확인할 수 있었다.  테스트는 동일한 회원가입 요청이 동시에 처리되는 상황을 시뮬레이션하고, 중복 회원가입이 방지되었는지 확인한다.threadCount = 2으로 2개의 동시 요청을 준비하고, 이를 병렬로 ..
· Spring
이번에 MDC와 Logback을 활용해 Discord Webhook 연동을 구현하면서 두 가지 주요 문제가 발생했다. 이 글을 통해 문제를 해결하기 위해 고민했던 방법들과 최종적인 해결책을 함께 담아보려 한다. 1. Failed to parse multipart servlet request 오류 해결 MDC (Mapped Diagnostic Context)와 Logback을 활용하여 로그 데이터를 Discord 웹훅으로 연동하는 작업을 진행하고 있었다. 로그를 보다 효과적으로 관리하고 문제 발생 시 빠르게 알림을 받을 수 있도록 하는 것이 목적이었다. 완료한 뒤 테스트 과정에서 예상치 못한 문제가 있었다. 이 문제의 원인과 해결 방법을 공유하고자 한다.  { "message": "서버 내부 오류입니다...
· Spring
매번 배포 진행 후 실패할 경우 ec2에 직접 접속해서 docker의 로그를 확인하는 것이 너무 비효율적이라 생각이 들었다..(물론 프로젝트 끝나고 든 생각이라 나중에 하긴 했다 ㅎㅎ)그렇지만 스프린트를 이어나갈 가능성도 있고, 해두면 언제 에러가 나든 편리하게 이슈대응할 수 있을 것 같아서 한참 전에 파두었던 로깅 관련 이슈를 늦게서야 완성시킨 일을 써보려 한다. 1. MDC (Mapped Diagnostic Context)MDC란?MDC는 Mapped Diagnostic Context의 약자로, SLF4J와 같은 로깅 프레임워크에서 제공하는 Thread-Local 기반의 데이터 저장소이다. 멀티쓰레드 환경에서도 요청별로 로그 데이터를 구분할 수 있도록 쓰레드마다 고유의 값을 저장한다.예를 들어, 특정..
· Infra
누군가에게 Nginx를 왜 쓰며, 쓰지 않을 경우 어떻게 될까라는 질문을 받게 되었다. 그렇다.. 머리가 띵했다.나름 왜?라는 자세로 공부를 하고 있었다 생각했는데 정작 Django(Python) 배포할 때부터 사용한 Nginx는 그냥 웹 서버라고만 알고 있었다. 그래서 오늘은 좀 더 자세하게 Nginx에 대해 파고들고자 한다. Nginx란?Nginx는 기본적으로 웹 서버로, HTTP 요청을 처리하고 클라이언트에게 웹 페이지나 파일 같은 정적 콘텐츠를 제공한다. 다음과 같이 클라이언트와 백엔드 서버(WAS, Database) 사이에 위치해 다양한 기능을 수행하는 게 핵심이다. Client  Nginx(Web Server)  WAS  Database 웹 서버를 별도로 운영하는 이유사실 저 로직에서 Web ..
· 대외활동
ICT멘토링이란?우선 이브와가 뭔지 알려면 ICT멘토링을 알아야 하는데 ICT멘토링은 산업-대학의 인력수급 불균형을 해소하기 위해 기업 실무형 프로젝트를 수행하여 ICT·SW 산업의 인력을 확충하고 확대하는 데 기여하고 있는 프로젝트이다.이 ICT 멘토링엔 각자 특성이 있는 트랙별로 나눠져 있고, 한이음, 프로보노, 이브와, 스마트해상물류 총 4가지의 트랙이 있다. 정확히 어떤 특성을 가진 프로젝트들을 하는지 궁금하면 홈페이지에서 지난 수상작들을 확인하면 제목만 봐도 느낌이 온다. 그리고 각 트랙마다 자율형, 산업체 연계형, 학점 연계형처럼 다양하게 있으니까 각자 본인 상황에 맞는 프로젝트를 골라서 신청하면 될 것이다.난 이중에 이브와 ICT멘토링 트랙에 참여했다. 내가 참여한 이브와 ICT멘토링은 IC..
· Java
WORA(Write Once Run Anywhere)고급 언어로 작성된 프로그래밍 언어를 기계어로 번역하는 것에는 대표적으로 2가지 방법이 있다. 컴파일러(Compiler: 번역기)- 플랫폼 종속적이다. - 소스코드를 한 번에 연속적으로 번역한다.- 실행속도가 빠르다. 인터프리터(Interpreter: 해석기)- 플랫폼 비종속적이다.- 한 줄씩 기계어 번역을 수행한다.- 번역속도는 빠르지만 실행속도가 느리다. 여기서 플랫폼은 OS나 코드가 돌아갈 환경을 말한다.또한, Compiler와 Interpreter를 혼합하여 사용하는 언어를 Hybrid 언어라고 하고, Java는 여기에 속한다.이 둘을 모두 사용함으로써 Write Once Run Anywhere를 실현할 수 있었다. 자바 컴파일러(javac)..
· Spring
최근 프로젝트에서 Course 삭제 시 다음과 같은 404 에러가 발생했다. 이 문제는 다음과 같은 validateCourse 메서드에서 Course의 소유자와 삭제를 요청한 사용자가 동일한지 확인하는 과정에서 발생했다.private void validateCourse(final User findUser, final Course findCourse) { if (!findUser.equals(findCourse.getUser())) { throw new ForbiddenException(FailureCode.COURSE_DELETE_ACCESS_DENIED); }} 디버깅을 해보니, findCourse.getUser()와 findUser는 동일한 User 객체를 참조하고 있음에도 불..
가든잉
garden