Share
Sign In
TIL 웹개발
TIL 웹개발 - 소프트웨어 설계
서경태
👍
자료
자료구조
데이터를 효과적으로 젖아하기 위해 어떤 논리나 규칙으로 자료를 모안호은 구조
선형 구조
자료간의 관계가 1:1로 순차적으로 나열되어 있는 것
배열 : 메모리상에 연속적인 공간에 데이터를 저장하는 방법
리스트 : 메모리상에 임이의 위치에 데이터를 저장하지만 각 데이터들이 앞뒤 관계를 갖게 하는 방법
스택 : 선입후출 방식의 자료구조. 히스토리 기능을 구현할 때 유용하고 DFS(깊이우선탐색), 후위연산, 백트래킹, 유효성 검사 등 다양한 곳에 사용된다.
큐 : 선입선출 방식의 자료구조. 작업스케쥴링 기능을 구현하거나 BFS(너비우선탐색), 티켓 시스템 등 다양한 곳에서 사용된다.
비션형 구조
자료들 간 관계가 1:N으로 나열되어 있는 것을 의미한다.
그래프: 노드와 간선으로 이루어진 자료구조
무방향 그래프 / 방향 그래프 / 가중치 그래프
트리: 그래프의 한 종류로 싸이클의 구조가 없어야 한다.
이진트리 : 각 부모노드의 자식 노드가 최대 2개인 트리
편향트리 : 한쪽으로만 자식을 갖는 트리
포화이진트리 : 이진트리에서 모든 부모가 2개의 자식노드를 갖는 이진트리
완전이진트리 : 이진트리에서 거의 모든 노드가 채워져 있으며 강한한 제일 왼쪽부터 채워져 있는 이진트리
프로그래밍 기본
컴파일러
고급 프로그래밍 언어로 작성된 소스코드를 기계어로 번역 및 실행하기 위한 프로그램. 가장 큰 특징은 소스코드 전체를 분석하고 그 다음 기계어로 번역 후 실행한다.
인터프리터
컴파일러와 마찬가지로 고급 프로그래밍 언어로 작성된 소스코드를 기계어로 번역 및 실행하기 위한 프로그램. 컴파일러와 차이는 한 줄씩 소스 코드를 번역하고 실핸한다는 것이다.
실행순서
파이썬 소스코드 작성.py → PVM(파이썬 가상 머신)을 통해 바이트코드로 변환.pyc → PVM이 바이트코드를 해석하고 기계어로 명령을 실행
메모리 영역
코드영역
프로그램을 실행하기 위해 명령어들이 저장되는 공간
데이터 영역
static 변수, 전역 변수와 같은 데이터들이 저장되는 공간. 프로그램 시작과 함께 할당되고 프로그램이 종료될 때 소멸된다.
Heap 영역
동적 메모리 할당을 위한 곳. 프로그래머가 직접 사용 및 관리해야하는 메모리 영역으로
Stack 영역
OOP(Object-Oriented Programming) 객체지향 프로그래밍
추상화하고자하는 객체의 모습을 가상의 공간에 구체화하며 설계해 나가는 것
객체(instance)란? 현실세계에 있는 어떤 대상을 추상화한 것을 의미한다.
class 클래스가 항상 따라 나온다.
상속
만약 다른 클래스의 기능을 사용하고 싶다면 상속을 받아서 부모클래스와 자식 클래스의 관계를 만든다.
오버라이딩
상속받은 클래스에서 어떤 기능을 재정의 하는 것을 의미한다.
오버로딩
함수의 이름은 같으나 매개변수를 다르게 설정하여 사용 목적에 따라 다르게 불러오는 것
파이썬에는 없다.
소프트웨어 개발 방법론
폭포수 방법론
하향식 방법으로 가장 오래된 개발 방법
계획 → 설계 → 개발 → 시험 → 유지보수
순차적으로 진행하며 SDLC(소프트웨어 개발 생명 주기)가 굉장히 길다.
매우 큰 규모의 큰 프로젝트에 적합하며 이미 진행된 작업에 대해서는 변경 및 수정이 어렵다는 단점도 있다.
애자일 방법론
반복적이고 점진적으로 개발하는 방법
계획 → 설계 → 개발 → 시험 → 유지보수
SDLC가 굉장히 짧기 때문에 여러번 반복하며 점진적으로 개발해 나간다.
이해관계자의 피드백을 빠르게 반영할 수 있지만 개발 계획을 세우기 어려울 수 있다.
디자인 패턴
소프트웨어를 설계 및 구현할 때 어떠한 공통된 구조를 띄는 형태
MTV
파이썬 기반의 웹 구현을 위한 프레임워크인 Django가 MTV 디자인 패턴을 지향합니다.
M 은 model을 의미하며 DB에 데이터를 적재하고 테이블을 정의한다.
T는 Template을 의미하며 사용자에게 보여지는 화면을 의미한다.
V는 view를 의미하며 요청에 따라 필요한 로직을 수행하는 역할을 의미한다.
형상관리
소프트웨어의 변경사항을 추적하고 통제하기 위한 작업을 의미한다.
git, gerrit, jira 등등이 있다.
V&V (Verification & Validation) 검증과 확인
소프트웨어 완성도 및 신뢰도를 검증 및 확인하는 작업
Verification 검증
개발자 중심에서 제품이 요구사항에 만족하게 구현되었는지 검증
Validation 확인
사용자 중심에서 제품이 사용감에 만족하게 구현되었는지 검증
Test 시험
단위 → 통합 → 시스템 → 인수
Unit test 단위 시험
최소 기능 단위로 시험
Integraiton test 통합 시험
함수간, 클래스간, 모듈 간 등이 잘 작동하는지, 충돌이 없는지
System test 시스템 시험
실제 적용하려는 하드웨어나 어떤 시스템에 개발한 소프트웨어를 탑재한 뒤 시험
Acceptance test 인수 시험
출시 및 배포 전 최종 시험
Test 종류
정적 테스트
소프투에어를 구동하지 않고 테스트하는 방법
동료 검토, 코드 리뷰, 기술
동적 테스트
Black Box Test
White Box Test
Subscribe to 'kyugntae-ai'
Welcome to 'kyugntae-ai'!
By subscribing to my site, you'll be the first to receive notifications and emails about the latest updates, including new posts.
Join SlashPage and subscribe to 'kyugntae-ai'!
Subscribe
👍
Other posts in 'TIL 웹개발'See all
서경태
TIL 웹개발 - 빅데이터 인공지능
빅데이터 데이터의 종류 정형 데이터 정량적이고 수치로 확인할 수 있거나 구조를 가지고 있는 데이터를 의미 시간, 시계열, 데이터, 금융 데이터 등등 비정형 데이터 수치적으로 확인할 수 없거나 구조를 띄지 않는 데이터를 의미 그림, 소리, 영상 등등 반정형 데이터 정형 데이터와 비정형 데이터의 성격을 두 개 다 가지는 데이터 DICOM, JSON, XML, 스마프톤에서 위치 값을 함께 저장하는 사진 데이터 전처리 데이터를 AI에게 학습시키기 전이나 분석하기 전에 적합한 형태로 가공하는 작업 빅데이터 단순히 많은 양의 데이터를 의미하는 것이 아님. 규모, 속도, 다양성 - 3가지의 특성을 가진다. 규모 - 굉장히 방대한 양의 유의미한 데이터 속도 - 데이터의 생성 및 처리 속도가 매우 빠름 다양성 - 데이터의 종류 뿐만 아니라 형식이 다양하다. 데이터 수집 계획 빅데이터를 구성하기 위해서는 ㅁ여확한 수집 계획이 필요
서경태
TIL 웹개발 - 사고의 전환
프로그래머스 '숫자 문자열과 영단어' 문제를 풀다보니 문제를 해결하는 방식은 주어진대로 하는 것이 아님을 느꼈다. 문제의 내용은 s가 "one4seveneight" 이런식으로 주어지는데 숫자로 올바르게 변환하는 함수를 만드는 것이다. 먼저 나는 문제를 풀기 위해 영단어와 숫자가 일치하는 딕셔너리를 만들었다. 하지만 코드를 적다보니 딕셔너리를 사용하지도 않고 굉장히 단순하고 무식한 방법으로 풀었다. 문자열 s를 하나씩 풀어서 일치하는 조건의 값을 숫자로 돌려주는 함수다. 다른 사람의 문제 풀이를 보니 순서를 바꿔서 푸는 방법도 있었다. 내가 처음 생각했던 것도 딕셔너리로 만들어 s의 일부값이 딕셔너리 키값에 들어있다면 해당 숫자를 반환하는 식이었는데 이 코드는 아예 딕셔너리부터 시작해서 s에 해당하는 값을 찾았다. 그리고 answer를 문자열 그대로 사용해 replace로 키값과 밸류를 치환했다. 내가 항상 리스틀 만들고 그걸 다시 해답에 맞게 조합하거나 조작해서 출력하는 경우가 많은데 시간복잡도면에서 리스트를 사용하지 않는게 더 좋으니 앞으로 다른 방법도 고민해야한다. 딕셔너리의 특성도 잘 알고 있어야 한다. 반복문에서 num_dict.items()는 키-값 쌍을 반환한다. 그래서 key, value를 동시에 추출하는 것도 가능하다. 만약 key만 뽑거나 value만 뽑을때는 .keys / .values 라고 적어줘야 한다.
서경태
TIL 웹개발 - 서버
클라이언트와 서버 클라이언트 요청을 보내는 사용자 서버 클라우드 서버 웹 서버 데이터베이스 서버 어플리케이션 서버 프록시 서버 데이터베이스 테이블 표 열 행 DBMS (데이터베이스 관리 시스템) RDBMS(관계형 데이터베이스 관리 시스템) MySQL PosgreSQL SQLite