개발일지/Today I Learned

230713 알고리즘 문제 풀이, 장고 50문 50답 채우기 [TIL]

마이구미+ 2023. 7. 13. 19:57

<오늘 한 일/>

- 이력서 수정하기

  • 이력서를 수정하기는 했는데 누가봐도 X를 줄 것 같다,,,
  • 예쁘게 꾸밀 자신 없으면 인텔리픽 이력서에 쓰라고 해서 했는데 영 아닌 것 같다
  • 아무래도 노션을 이용해야겠어...
  • 여튼 아직 공개하기는 부끄러우니 그냥 오늘 이력서를 수정했다~ 라는 흔적만 남긴다 ㅋㅋㅋ

- 알고리즘 문제 풀이

  • https://guco.tistory.com/282
  • https://guco.tistory.com/283
  • 오늘 2문제 풀었는데 빨리 레벨2로 넘어가야 할 것 같다
  • 근데 알고리즘 문제시트에 있는 문제는 다 풀고 넘어가고 싶어서 꾸역꾸역 하는 중
  • 코테 특강 때 실력을 향상시키려면 내 수준보다 어려운 문제를 풀어야 한다고 하는데....근데 사실 난 아직 레벨1이 맞긴 한디....레벨2...풀 수 있을까.....?
  • 알고리즘 문제시트에 있는 문제를 다 풀고 나면 레벨2를 자연스게 풀 수 있게 되지 않을까?!
 

[코테] 예산

문제링크 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.k

guco.tistory.com

 

[코테] 삼총사

문제 링크 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.

guco.tistory.com


- 장고 50문 50답 채우기

Django가 무엇인지 설명하시오

  • Python 프로그래밍 언어로 작성된 오픈 소스 웹 애플리케이션 프레임워크로 개발자들이 빠르고 쉽게 웹 애플리케이션을 만들 수 있도록 도와줌. 
  • Django는 Model-View-Controller (MVC) 패턴을 따르며, 이를 통해 데이터 처리와 사용자 인터페이스를 분리하여 코드의 가독성과 유지관리가 향상됨. 
  • 또한 Django는 강력한 관리자 기능을 제공하여 데이터베이스와의 상호작용을 용이하게 하며, 내장된 보안 기능으로 웹 애플리케이션의 보안을 강화할 수 있음.


Django를 백엔드 스택으로 선정한 이유는 무엇입니까?

  • Python 기반
    • Django는 Python 언어로 작성되어 있어서 Python의 장점 모두 활용 가능함. Python은 가독성이 좋고, 빠르게 배울 수 있는 언어로, 다양한 분야에서 사용됨.
    • 데이터 과학, 머신러닝, 웹 개발 등에서 인기를 끌고 있어, 다양한 분야의 프로젝트와 호환성이 좋음.
  • 빠른 개발
    • Django는 "배터리가 포함된 웹 프레임워크"라는 철학을 가지고 있으며, 개발자가 기본적인 웹 애플리케이션 개발에 필요한 대부분의 기능을 갖추고 있음.
    • 이로 인해 개발 시간이 단축되고 개발자가 비즈니스 로직에 더 집중할 수 있음.
  • MVC 아키텍처
    • Django는 Model-View-Controller(MVC) 패턴을 사용하며, 이를 통해 데이터 처리와 사용자 인터페이스를 분리할 수 있음.
    • 이는 코드를 가독성이 좋고, 유지보수가 쉬운 구조로 만들어 줌.
  • 생산성과 확장성
    • Django의 확장 가능한 플러그인 시스템과 함께 거대한 커뮤니티가 지원하는 수많은 패키지 덕분에 빠른 개발 속도와 뛰어난 확장성을 가짐.
  • 보안
    • Django는 내장된 보안 기능을 통해 Cross-site Scripting(XSS), Cross-site Request Forgery(CSRF), SQL 인젝션 등의 주요 웹 애플리케이션 취약점에 대해 보호할 수 있음.
  • 관리자 기능
    • Django는 강력한 관리자 인터페이스를 제공하여 데이터베이스와의 상호작용을 용이하게 하여 개발 및 유지보수에 도움이 됨.


Django에는 어떤 장점이 있습니까?

  • 기본적인 기능, 패키지 및 라이브러리가 다 갖춰져 있어 개발하기 편리함.
  • 공식 문서가 엄청 자세하게 쓰여있음.
  • 장고 이용자가 많아서 질문을 했을 때 원하는 답변을 비교적 쉽게 얻을 수 있음.


Django가 다른 Python 웹 프레임워크와 비교되는 특징이 있다면 무엇입니까?



Django의 프로세스는 어떤 순서로 동작합니까?

  1. 클라이언트로부터 요청(Request)를 받으면 URLconf 모듈을 이용해서 URL을 분석함.
  2. URL 분석 결과를 통해 해당 URL에 매칭되는 View 실행.
  3. View는 자신의 로직을 실행하고, 데이터베이스 처리가 필요하면 Model을 통해 처리하고 그결과를 반환 받음.
  4. View는 자신의 로직 처리가 끝나면 Template을 사용하여 클라이언트에 전송할 HTML 파일을 생성함.
  5. View는 최종 결과로 HTML 파일을 클라이언트에게 보내 응답(Response)함.


Django의 MTV 패턴 시스템은 무엇입니까?

  • Model-Template-View의 약자로 MVC(Model-View-Controller)와 비슷한 개념이나 장고만의 특징을 가지고 있어 명칭이 다름.
  • Model은 MVC의 Model과 대응되며, 데이터베이스에 저장되는 데이터를 말함.
  • Template는 MVC의 View와 대응되며, 사용자에게 보여지는 부분. 장고는 뷰에서 로직을 처리한 후 html 파일을 context와 함께 렌더링하는데 이 때의 html 파일을 템플릿이라 칭함. 장고는 자체적인 Django Template 문법을 지원하며 이 문법 덕분에 html 파일 내에서 context로 받은 데이터를 활용할 수 있음.
  • View는 MVC의 Controller와 대응되며, 웹 요청을 받고 전달받은 데이터들을 view에서 해당하는 로직(함수)으로 가공하여, 그 결과를 템플릿에 보내줌. 항상 템플릿을 렌더링 하는 것은 아니고 백엔드에서 데이터만 주고 받는 경우도 있음.


ORM에 대해서 설명하시오

  • ORM(Object-Relational Mapping)은 객체 지향 프로그래밍과 관계형 데이터베이스 관리 시스템(RDBMS) 간의 데이터를 변환하고 관리하는 기술.
  • ORM은 프로그래밍 언어로 작성된 객체와 데이터베이스 테이블 간의 맵핑을 제공하여 개발자가 관계형 데이터베이스에 대한 SQL 쿼리 없이 데이터를 조작할 수 있음.


Django ORM의 장단점은 무엇입니까?

  • <장점>
    • 객체지향적인 코드로 인해 더 직관적이고 로직에 집중할 수 있도록 도와줌.
        - SQL문이 아닌 클래스의 메소드를 통해 DB를 조작할 수 있으므로 개발자가 객체 모델만 이용해서 개발을 하는 데 집중 가능.
        - 선언문, 할당, 종료 같은 부수적인 코드가 없거나 줄어듦.
        - 객체마다 코드를 별도로 작성하기 때문에 코드의 가독성이 높아짐.
        - SQL의 절차적이고 순차적인 접근이 아닌 객체지향적인 접근으로 인해 생산성을 높여줌.
    • 재사용 및 유지보수의 편리성 증가
        - ORM은 독립적으로 작성되어있고, 해당 객체들을 재활용할 수 있음.
        - 매핑 정보가 명확하여, ERD를 보는 것에 대한 의존도를 낮출 수 있음.
    • DBMS(Database Management System)에 대한 종속성이 줄어듦.
        - 대부분 ORM 솔루션은 DB에 종속적이지 않기 때문에 구현 방법 뿐만 아니라 많은 솔루션에서 자료형 타입까지 유효함.
        - 개발자는 Object에 집중함으로 극단적으로 DBMS를 교체하는 큰 작업에도 적은 리스크와 시간이 소요됨.
    • ORM을 사용하면 SQL 쿼리를 직접 작성하지 않고 데이터베이스 작업을 수행하기 때문에 SQL 인젝션과 같은 보안 문제에 대한 위험이 감소함.
  • <단점>
    • 완벽한 ORM으로만 서비스를 구현하기 어려움.
        - 사용하기는 편하지만 설계는 매우 신중하게 해야 함.
        - 프로젝트의 복잡성이 커질 경우 난이도 또한 올라갈 수 있으며, 이때는 직접 SQL 쿼리를 작성할 필요가 있을 수 있음.
        - 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수 있음.
        - 일부 자주 사용되는 대형 쿼리는 속도를 위해 SP를 쓰는 등 별도의 튜닝이 필요한 경우가 있음.
    • 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어려움.
        - 이미 프로시저가 많은 시스템에선 다시 객체로 바꿔야하며, 그 과정에서 생산성 저하나 리스크가 발생할 수 있음.

<느낀 점/>

  • 이력서 누가 대신 작성해줬으면 좋겠다...
  • 근데 이력서를 쓰면서 느끼는 건데 프로젝트 할 때는 진짜 할 것도 많고 내가 뭔가 많은 것을 했다고 생각했는데 정리하려고 보니까 내가 했던 일들은 너무 기초적인 거라 포트폴리오에 쓰기 좀 그렇다
  • 나 진짜 뽑아만 주면 진짜 잘....까지는 아니어도 진짜 잘 적응하고 잘 따라가고 잘 공부할 자신 있는데...!!!
  • 나를 소개하는 게 너무 어려운 것 같다....

<내일 목표/>

  • 이력서 피드백에 따라 수정하기(웬만하면 노션에 이력서를 만들어야 할 것 같음. 인텔리픽은 폼이 안 남...!!)
  • CS 기초 개념 공부하기
  • 알고리즘 2문제 이상 풀기