TOY42에서 사용된 프로그래밍 언어, DB, 프레임워크들을 왜 사용했는지 회고?

무슨 이유로 사용하게 됬는지 더 좋은 대안은 없었는지 정리해보겠습니다! 

언어는 python

프레임워크는 django, bootstrap,

DB는 mysql

사용했으며 각자의 장단점을 알아보고 결정적으로 TOY42에 적용하게된 이유를 정리해봤습니다.

 

 

 

 

python

파이썬의 장점

 

1. 광범위한 라이브러리

 

파이썬은 광범위하게 라이브러리를 다운 받을수 있습니다. 라이브러리는 여러가지 목적에 맞게 쓰여진 코드들을 가지고 있으며, 이 코드들을 다운 받아서 사용할수 있습니다.

예를들면, 정규표현식, 문서생성, 유닛테스팅, 웹브라우저, 쓰레딩, 데이터베이시, 이메일, 이미지 수정, 데이터분석 등등 목적에 맞게 파이썬 라이브러리를 다운받아서 사용할수 있습니다.

 

2. 확장성

 

파이썬은 다른 언어로도 확장이 가능합니다.

어느정도의 코드는 C++ 이나 C 로도 작성이 가능합니다.

 

4. 향상된 생산성

 

파이썬의 심플함과 광범위한 라이브러리의 사용으로. 파이썬은 Java 나 C++ 같은 언어보다 더 생산성이 높습니다.

코드는 조금쓰고 얻는건 더 많습니다


6. 쉽고 간단함

자바같은 언어에서는, 'hello world'를 출력하기 위해서도 클래스를 사용해야 합니다. 이런 간단한 출력문에도 복잡한 클래스를 사용해야 한다는 뜻이죠. 하지만 파이썬에서는, print 문 하나면 해결이 됩니다.

파이썬은 꽤나 쉽게 배울수 있고 이해할수 있고 코딩까지 할수 있습니다.

배우기 쉽고 간단하기 때문에, 상대적으로 어려운 언어인 Java같은 언어 대신 파이썬을 선택합니다.

비전공자한텐,, 그렇게 쉽지도 간단하지도 않습니다. 깊게 들어가면 어렵습니다.. 한없이... 많이.. 매우.. 장고쟁이

타 언어에 비해서 코딩이 매우 간결합니다. 초심자에게 대체로 많이 권장되는 언어 입니다.

7. 가독성

파이썬을 읽는것은 그저 영문을 읽어내리는것과 비슷합니다.

이 점이 바로 어째서 파이썬이 배우기 쉽고, 이해하기 쉽고, 코딩하기 쉬운 점입니다.

또한, 파이썬은 불필요한 중괄호를 사용하지 않고 들여쓰기로 코드를 구분합니다

복잡한 중괄호를 사용하는 대신에, 들여쓰기로 공간을 구분함으로써, 타 언어보다 가독성이 높은 편입니다.

 

 

8. 객체 지향 프로그래밍

파이썬은 객체 지향 프로그래밍 언어 입니다.

함수들은 코드의 재사용성을 높이고. 클래스와 객체들은 현실세계에 있는것들을 추상화하고 모델링 하는데 도움이 됩니다.

하나의 클래스는 데이터와 함수를 하나로 캡슐화를 해줍니다.

객체 지향 프로그래밍의 개념과 클래스의 개념을 잘 알아야 합니다. 이 부분에 대해서 공부 열심히 해야합니다.
장고쟁이

9. 무료 그리고 오픈소스

파이썬은 무료입니다! 공짜. 그리고, 파이썬은 오픈소스이기 때문에.

다운 받아서 사용도 가능하지만, 다운받아서 소스코드를 수정한뒤 다시 배포할수 있습니다.

추가로, 파이썬은 인터프리티드 언어 입니다. 파이썬에서 구문은 하나 하나씩 실행이 됩니다. 따라서, 디버깅이 다른 컴파일 언어보다 쉽습니다.

 

파이썬의 단점

 

1. 속도의 한계

파이썬은 코드가 한줄씩 실행 됩니다. 그리고, 파이썬은 인터프리티드 언어이기 때문에 실행이 느립니다.

한줄 한줄 읽어가면서, 파이썬 코드를 컴퓨터가 이해할수 있는 언어로 해석하여 프로그램이 실행이 되기 때문에 실행이 컴파일 언어에 비해서 많이 느립니다.

빠른 속도를 요하는 프로젝트에는 적합하지 않은 언어일수 있습니다.

3. 디자인 제약

파이썬은 동적 타이핑 언어입니다. 이 말은, 파이썬에서는 변수를 선언할때 변수의 타입을 선언하지 않아도 된단 이야기 입니다. 파이썬은 duck-typing 을 사용합니다. 이것은 프로그래머들이 코딩할땐 편하지만,

런타임 에러를 발생 시킵니다.

https://blog.naver.com/PostView.nhn?blogId=headfat1218&logNo=221872912607

 

사용하게 된 이유

1. 다룰줄 아는 언어 중 웹 개발에 적합하며 웹프레임워크가 존재하는점

2. 다룰줄 아는 언어 중 이해도가 가장 높은점

3. 가독성! 파이썬을 좋아하는 이유 중 하나입니다!

 

 

 

 

 

Django

 

장점

 

1. 진입장벽이 낮은 프로그래밍 언어인 Python을 기반으로 한다.

2. 인증, 관리와 같이 거의 대부분의 사이트에서 사용하는 기능들이 기본 모듈로 제공된다.

3. 성공적인 도입 사례가 있습니다.(Instagram 등)

4. 높은 코드 완성도를 유지할 수 있다.

5. python의 강제된 indent가 코드 완성도에는 일조함.

6. IDE 지원이 훌륭한 편이다.(Pycharm, Visual Studio 등)

7. AWS, Google Cloud, Azure등에서 전폭적으로 초기 단계부터 지원한 프레임워크다.

   -> deploy 및 운용에 대한 개발 비용을 크게 아낄 수 있다.

 

단점

 

한글 문서가 아주 풍부한 편은 아니다.

typeless 언어의 약점은 그대로 보유하고 있다.

python에 대한 높은 이해도가 필요하다 → 실제로 데코레이터 개념에 대해서는 다시 한번 공부를 했다.

**.**Django는 문제를 python으로 해결하는 편이다. (프레임워크 특화 기능보다)

성능 문제에서 자유롭지 못하다.

python은 ruby보다 빠를 뿐이다.Django도 rails보다 빠를 뿐이다.

 

출처:

https://elky.tistory.com/652

 

 

사용하게된 이유

  1. 파이썬 기반 웹 프레임워크 이기 때문에
  2. 빠르게 TOY42프로젝트를 구현하고 배포해보고 싶은 생각이었는데 실제로 django를 공부해보니 생산성이 좋다는 말을 체감할 수 있었다. → flask와 django를 두고 고민하던 중 이 부분에 크게 매력을 느끼고 django로 결정했다.
  3. Pycharm을 사용하여 개발을 진행했는데 가상환경 구성, PRO버젼에서는 html문법 체크까지 해줘서 html,css등의 지식이 높은 수준이 아닌 나의 입장에서 오류를 해결하는데 시간을 많이 줄일 수 있었다.-> 6번 장점
  4. 성능 문제에서 자유롭지 못하다는 단점에서는 TOY42를 최종적으로는 42seoul API와 연동하여 구현할 계획이기 때문에 크게 장애가 되지 않을 것이라고 생각했다. -> 42seoul 인원은 많아진 지금도 1000명이 넘지 않기 때문에
    1. user 수 에서 자유로울 수 있다.
    2. 게시판 형식으로 프로젝트 팀원을 구하는 TOY42에서 성능 문제를 저하시킬만큼 복잡한 로직을 쓰지 않을것 이다.

 

 

 

 

 

부트스트랩

Bootstrap 장단점

장점

 

부트스트랩의 가장 큰 장점은 그 내부의 클래스들만 알고 있다면 빠르고 쉽게 여러형태의 웹 페이지를 제작할 수 있다. 그리고 대부분은 각 해상도 대응에 대한 처리도 되어있기 때문에 반응형 처리도 어렵지 않다.

퀼리티 또한 나쁘지 않기 때문에 많은 기업들이 사용하는 프레임워크이다.

 

 

 

단점

 

디자인이 정형화되어 있어서 비슷한 디자인의 페이지가 양산될 수 있다. 사실 이 문제를 오픈 소스의 힘으로 극복할 수 있다. 부트스트랩은 오픈 소스이다 보니 사용자가 변경하는 것이 자유롭고, 변경한 것을 재배포하거나 상업적으로 판매하는 것이 가능하다. 변경한 테마를 내려받아 적용하는 것도 어렵지 않다.

이미지를 많이 쓰는 화려한 디자인을 부트스트랩으로 만들려면 소스를 처음부터 뜯어 고쳐 가면서 코딩을 해야 하다보니 복잡한 디자인에 사용하는 데에는 어려움이 있다. 원초부터 정형화된 디자인을 위해 있는 것이므로, 오히려 복잡한 사이트를 원한다면 그냥 안 쓰는 게 낫다.

 

사용하게 된 이유

 

1. 위의 단점들보단 front end에 대한 지식수준이 낮은 나로써는 내부 클래스만 알면 빠르고 쉽게 웹페이지를 제작할 수 있다는 장점이 너무 크게 느껴졌다.

정형화된 디자인의 페이지가 양상될 수 있다는 단점때문에 부트스트랩을 사용하는게 최선일까? 라는 생각을 가지고 있었지만  실제로 TOY42프로젝트와 맞는 게시판 형식의 부트스트랩 테마를 발견하고부터는 이런 생각은 없어졌다.ㅋㅋ

 

그리고 실제로 부트스트랩 테마를 구매해 42TOY프로젝트에 적용했고 django template 언어를 사용해 데이터를 주고 받는데 큰 어려움이 없었다.

 

2. 부트스트랩은 내부의 클래스들만 알고 있다면 html과 css에 대한 고도의 숙련도를 요구하지 않는다.

 

 

아래는 42toy에 쓰인 부트스트랩 테마 링크이다.

https://w3layouts.com/template/animus-a-blogging-category-flat-bootstrap-responsive-web-template/

참조 : https://aimho.tistory.com/94

 

 

 

 

 

 

 

 

MYSQL

사실 처음 DB후보군에는 mysql과 postgresql두가지가 있었다.

 

MySQL

오픈 소스로 무료로 사용 가능하다. O

  • top n개의 레코드를 가지고 오는 케이스에 특화되어 있다.O

  • update 성능이 postgre보다 우수하다.O

  • Nested Loop Join만 지원한다.

    Nested Loop Join바깥 테이블의 처리 범위를 하나씩 접근하면서 추출된 값으로 안쪽 테이블을 조인하는 방식이다.중첩 루프문과 동일한 원리좁은 범위에 유리하다.순차적으로 처리한다.

  • 복잡한 알고리즘은 가급적 지원하지 않는다.

  • 문자열 비교에서 대소 문자를 구분하지 않는다.

  • 간단한 처리 속도를 향상 시키는 것을 추구함 O

간단한 데이터 트랜잭션을 위한 데이터베이스가 필요한 웹 기반 프로젝트에 널리 사용된다. 로드가 많거나 복잡한 쿼리는 성능이 저하된다.

→ TOY42는 게시판형식의 간단한 로직들로 이루어질 거라 MYSQL이 적합하다고 생각했다.

위 세가지 장점이 MYSQL을 선택하게된 강력한 이유들!(무료!)

 

PostgreSQL

오픈 소스로 무료로 사용 가능하다.

  • 다양한 join 방법을 제공한다.nested loop join, hash join, sort merge join결합 할 데이터가 많을 때는 hash, sort merge join데이터가 이미 정렬 되어 있는 경우에는 sort merge그렇지 않으면 hash join 추천

    sort merge join조인의 대상범위가 넓을 경우 발생하는 Random Access를 줄이기 위한 경우나 연결고리에 마땅한 인덱스가 존재하지 않을 경우 해결하기 위한 조인 방안양쪽 테이블의 처리범위를 각자 Access하여 정렬한 결과를 차례로 Scan하면서 연결고리의 조건으로 Merge하는 방식

  • hash join해시값을 이용하여 테이블을 조인하는 방식

  • update를 할 때, 과거 행을 삭제하고 변경된 데이터를 가진 새로운 행을 추가하는 형태라서 update가 느리다.

  • 처리 속도를 빠르게 하기 위해 여러 CPU를 활용하여 쿼리를 실행한다.

  • 데이터베이스 클러스터 백업 기능을 제공한다.

    클러스터 : 디스크로부터 데이터를 읽어오는 시간을 줄이기 위해 자주 사용되는 테이블의 데이터를 디스크의 같은 위치에 저장시키는 방법

읽기, 쓰기 속도가 중요하고 데이터를 검증해야 하는 대규모 시스템에서 널리 사용된다.빈번한 update 성격일 경우 성능, 불안정 하지만 insert 위주 성격일 경우에는 적합하다.복잡한 쿼리를 실행해야하는 시스템에서 가장 잘 사용 된다.

 

출처 :

https://velog.io/@jisoo1170/Oracle-MySQL-PostgreSQL-차이점은

 

사용하게 된 이유

 

대규모 시스템, 복잡한 쿼리에서 장점을 가지고 있는 postgresql OUT!

 

사실 처음에는 postgresql을 사용했지만 pythonanywhere의 서비스를 이용해 배포를 했는데 postgresql사용시에는 유로이기 때문에 배포할 때 mysql로 바꾸게 되었다.

 

반응형

+ Recent posts