빙응의 공부 블로그

[4,5주차] 본문

goorm

[4,5주차]

빙응이 2024. 9. 25. 12:37

🧷회고록

1. 가상환경 구성 및 장고 프로젝트 설정

장고 프로젝트를 시작하며 가장 먼저 한 일은 Python 가상환경을 구성하고 장고를 설치한 것, 이를 통해 프로젝트 간 의존성을 분리하고, 개발 환경을 통제가 가능했다.

  • Spring과의 공통점 : Django는 하나의 파일에서 설정하는 반면 스프링은 의존성과 yml 파일을 이용하여 사용하였다.

2. 프로젝트 및 앱 생성

장고에서 프로젝트와 앱을 나누어 구성한 부분이 핵심이었다. site_2라는 프로젝트 안에 polls라는 앱을 만들고, 이 앱이 프로젝트 내에서 독립적으로 기능하도록 설정하였고, 이렇게 앱 단위로 나누면 기능별로 관리가 용이해지고, 확장성 있는 설계가 가능해졌다.

  • Spring과의 공통점 :  스프링에서도 프로젝트 내에서 여러 모듈을 만들어 기능을 독립적으로 구성할 수 있다.대신 스프링은 직접 파일을 나누어 구성해야한다.

3. 기본 뷰 및 URL 설정

뷰와 URL 설정을 통해 사용자가 접속할 경로와 각 경로에 맞는 기능을 연결하는 라우팅 작업을 하였다. 특히, polls/urls.py에서 앱 내의 URL을 처리하고, site_2/urls.py에서 전체 URL을 관리하는 방식을 사용

  • Spring과의 공통점 : 스프링은 @RequestMapping 같은 어노테이션을 사용해서 경로를 매핑한다. 

4. 뷰에 데이터 전달 및 템플릿 렌더링

뷰에서 데이터를 처리하고 템플릿을 통해 HTML로 출력하는 것을 사용하였다.  render()를 통해 복잡한 데이터 전달이 가능했다. 

  • Spring과의 공통점 : 스프링처럼 Django도 DTO처럼 데이터 구조를 설계해서 데이터 전달의 가독성과 유지보수 성을 보장해야 한다는 것을 알았다.

5. 모델 생성 및 데이터베이스 마이그레이션

장고의 ORM을 활용해 Question과 Choice 모델을 정의하고, 이를 데이터베이스 테이블로 변환하는 마이그레이션 과정을 거쳤다. 이를 통해 장고가 SQL 쿼리를 자동으로 생성해주는 편리함을 경험하였다.

  • Spring과의 공통점 : 스프링은 JPA를 통해 엔티티를 정의하고, 데이터베이스에 대응하는 테이블을 자동으로 생성한다. Django, jpa 모두 객체 지향적으로 데이터베이스를 관리하고, SQL 문을 자동으로 생성해준다.

6. 쉘을 활용한 모델 객체 확인

장고 쉘에서 직접 Question 객체를 생성하고, 해당 객체가 데이터베이스에 어떻게 저장되는지 확인하였다. 이를 통해 ORM이 데이터베이스와 어떻게 상호작용하는지 이해할 수 있었다.

  • Spring과의 공통점 : 스프링은 해당 검증을 테스트 케이스를 통해 진행하는 편이다.

7. 템플릿에 데이터를 출력하는 기능

Django 템플릿 엔진을 통해 데이터 목록을 반복문으로 출력하고, 링크를 생성하여 상세 페이지로 이동할 수 있게 구성하였다.

  • Spring과의 공통점: Spring에서도 Thymeleaf와 같은 템플릿 엔진을 사용하여 반복문을 돌리고, 링크를 동적으로 생성하는 방식이 유사하다. 두 프레임워크 모두 템플릿에서 동적인 데이터를 처리하는 방식이 비슷한 편이다.

8 상세 페이지 구현 및 에러 처리

설문에 대한 상세 페이지를 구현하고, 데이터가 없을 경우 404 에러 페이지를 반환하는 방식으로 에러 처리를 적용하였다.

  • Spring과의 공통점: Spring에서는 @ExceptionHandler를 사용해 예외 처리를 구현하고, 404 페이지나 다른 오류 페이지를 커스터마이징할 수 있다. Django와 마찬가지로 예외가 발생했을 때 사용자에게 적절한 메시지를 전달하는 방식이 비슷한 편이다.
@RestControllerAdvice
@Slf4j
public class ExceptionManager {

    @ExceptionHandler(CustomException.class)
    public ResponseEntity<ResponseDto<?>> CustomExceptionHandler(CustomException e) {
        ErrorCode errorCode = e.getErrorCode();
        log.info("ErrorMessage = {}", errorCode.getMessage());
        ResponseDto<?> response = ResponseDto.fail(errorCode.getHttpStatus().value(), errorCode.getMessage() + " " + e.getMessage());
        return ResponseEntity.status(errorCode.getHttpStatus()).body(response);
    }

 

 

'goorm' 카테고리의 다른 글

[7주차]  (2) 2024.10.08
[6주차]이미지 처리와 OpenCV 인식  (0) 2024.10.02
[3주차]Django  (1) 2024.09.09
[2주차]Django 본격적인 시작  (0) 2024.09.02
[1주차]Django의 기초  (1) 2024.08.26