본문 바로가기

FRAME WORK

(35)
Django ) Django를 쓰는 이유 웹서버(apache, nginx, IIS)를 사용하는것과 웹 애플리케이션 서버(django, flask, php, jsp, ROL)를 만들어서 사용하는 것은 어떤 차이가 있을까?웹서버를 사용할때에는 필요한 페이지를 미리 만들어놔야하지만 웹 애플리케이션 서버를 사용할때에는 웹페이지를 생성하는 공장이라고 할수있는 프로그램을 하나만 만들어 놓으면 된다. 예를 들면 view.py .웹서버는 사용자가 접속할때 미리 준비되어있는 페이지로 접속하게된다.그러나 웹 애플리케이션 서버에서는 사용자가 접속할때, 예를들어  /read/1/ 로 접속하면 1번에 해당하는 데이터를 데이터베이스 같은곳에서 가져와서 그 순간에 html에 코드를 만든 후 그것을 응답하게된다.이러한 특성때문에 웹서버는 한번 만들면 계속 그렇게 생긴거라서..
Django ) app 생성 실제로 어플리케이션을 프로젝트안에서 구현하는것이 아니라 app이라는 더 작은 단위를 만들어서 그 안에서 실제 구현을 하게된다. app이라고 하는것은 프로젝트를 하다보면 프로젝트가 복잡해질 수 있다. 그러면 서로 연관된 조직들을 모아서 그룹핑하고 싶을 때가 있는데 그때 여러개의 앱들을 만들어서 정리정돈 하게된다. 그리고 각각의 앱 안에는 urls.py 파일이 담겨져있을것이다. 또 그 안에는 view를 만들게 될것이고, 그리고 여러가지 함수들을 만들어서 애플리케이션의 여러가지 구현들을 그 안에서 하게될것이다. django-admin startapp myapp  그럼 전체적인 맥락을 알아보자.사용자가 접속을 하게되면 여러가지 경로로 들어올것인데 그 각각의 경로를 누구에게 위임할것인가를 urls.py를 수정해서..
Django ) 포트의 개념 두대의 컴퓨터가 있고 오른쪽의 컴퓨터는 127.0.0.1이라는 ip주소를 가지고있는 서버컴퓨터이고, 세개의 서버 소프트웨어가 깔려서 동작되고있다. 그런데 저중에 누가 통신하고 있는지 알 수가 없다. 이런 문제를 해결하기 위해서 port라는 개념이 존재한다. 0번부터 65535번까지의 포트가 존재하고, 서버 소프트웨어를 실행시킬때는 어떤 포트와 연결할지 지정해야한다. 이를 리스닝한다고한다.
Django ) 라우팅 내가 어떤 웹프레임워크를 사용하건간에 제일 먼저 하는 작업이 라우팅이다. 라우트는 경로를 말한다.웹 애플리케이션에서 경로라는 것은 사용자가 접속한 각각의 경로를 누가 처리할것인가를 지정하는 것이고 이게 바로 라우팅이다. 어떤 프레임워크를 사용하건간에 제일 먼저 따질것이 라우팅이다. 장고에서는 프로젝트 폴더안에 있는 urls.py가 가장 큰 틀의 라우팅을 하고, 그것을 적당한 앱으로 위임을 해주면 앱이 뷰 안에 있는 특정 함수로 위임을 해주고 그 함수가 작업을 처리하게된다. app 설치django-admin startapp myapp 프로젝트 안의 urls.py제일먼저 따져봐야할것은 여러 약속을 지키는것이다. 먼저 urlpatterns라는 이름의 리스트를 반드시 정의해야하고, 그 리스트 안에는 라우팅과 관..
Django ) 설치 장고 설치python3 -m pip install django 서브 명령어 확인하고django-admin 프로젝트 생성뒤에 . (점)은 현재 디렉토리에 myproject 폴더를 생성하겠다.django-admin startproject myproject .  settings.py - 운영에 필요한 설정들이 들어가있는 파일urls.py - 사용자가 접속하는 path에 따라서 요청을 어떻게 누가 처리할것인지 정하는 파일manage.py - 프로젝트를 진행하면서 필요한 여러가지 기능이 들어가있는 유틸리티 파일  app 생성django-admin startapp myapp 서버 열기python manage.py runserver 특정 포트에서 서버열기python manage.py runserver 2000  오류..
React ) 리액트로 사업자번호 유효검사 import logo from './logo.svg';import { useState } from 'react';import './App.css';function Main(){ const validNumber = [1,3,7,1,3,7,1,3,5]; const [businessNumArray, setBusinessNumArray] = useState([]); const [tempArray, setTempArray] = useState([]); //const [sum, setSum] = useState(null); return ( { event.preventDefault(); ..
React ) state props는 하위컴퍼넌트로 값을 전달하는 방법, state는 한 컴퍼넌트안에서 값을 전달하는방법 app내에 변수값은 최초 콜 시에만 인지하고 변경된 값은 인지하지못한다.그래서 변화되는 값을 추적하기위해 useState를 사용한다.useState는 배열을 리턴하는데 0번째 데이터는 값, 1번째 데이터는 값을 변경하는 함수를 가진다.보통 함수는 변수명, set어쩌고 로 받는다.     위의 코드에서 기존의 topics를 복제하여 복제된 변수에 새로운 객체를 추가하고 그 객체를 setTopics로 변경해주었는데 그렇게해야 변경이된다. topics는읽기속성이기 때문에 읽기속성에 puch를 때려봤자이기도하고 useState의 경우 원래 값과 변경함수를 사용하여 변경한 값이 같으면 다시 로드를 안하기 때문이다.im..
React ) 컴퍼넌트 아래처럼 사용자 정의 태그를 만들수 있다.이때 return값은 문자열, 태그가 아니고 jsx 객체이다.   컴퍼넌트에 값을 전달할수도있는데, 마치 속성값처럼 작성하여 값을 전달할 수 있다.하지만 진짜 태그도 아니고 진짜 속성값도 아니다. jsx 객체이다.그렇기때문에 title이라고 안해도되고 aaaaa="WEB" 이렇게 전달해도 무방하다.그냥 변수전달로 생각하면되겠다. 전달한 값은 props파라미터로 전달 받고, 전달하고 싶은 영역에 { } 처리하여 작성하면 된다.{}에 있는 값은 문자열이 아닌 표현식으로 인식된다.일반적으로 파라미터명은 props를 많이쓰며, props는 값을 전달하는데 하향전달만 가능하다.  Contents 영역도 수정해보자.먼저 나열될 리스트의 정보를 객체로 만들어주고 Content..