분류 전체보기 17

[소프트웨어 공학] 객체 지향 설계(OOD) 5가지 원칙 - S.O.L.I.D 원칙

S.O.L.I.D란?S.O.L.I.D 원칙은 로버트 C. 마틴(Robert C. Martin)이 최초로 제안한 객체 지향 설계의 5가지 원칙이다. 이름에서 알 수 있듯, S.O.L.I.D는 5원칙의 앞글자를 하나씩 따서 만들어진 준말이다. Design Smell이 발생하지 않게 하기 위한 설계 원칙이라고 생각하면 된다.S.O.L.I.DSingle-Responsibility Principle (SRP) Open-Closed Principle (OCP) Liskov Substitution Principle (LSP) Interface Segregation Principle (ISP)Dependency Inversion Principle (DIP)S. Single-Responsibility PrincipleA..

[소프트웨어 공학] 나쁜 코드에서 나는 수상한 냄새 - Code Smells and Design Smells

세상에 나쁜 코드는 없다.개발을 하다보면 어딘가 모르게 코드가 꼬여간다고 느낀 적이 있다. 제대로 설계되지 않고 코드를 작성하다보면 불필요하게 중복이 발생한다거나, 코드가 엉킨다는 느낌을 받곤 한다. 프로그래밍에서, 이를 냄새가 난다(smell)고 표현한다. 대표적으로 Code smells과 Design smells이 있다. 사실 세상에 나쁜 코드는 없다. 나쁜 개발자만 있을 뿐..(우리가 미안해..)Code SmellsCode Smells은 소스코드가 잘못 작성되었다고 판단할 수 있는 신호나 증상들을 말한다. Code Smells은 곧바로 심각한 버그나 문제를 발생시키진 않지만, 프로그램이 방대해지고 복잡해지면 점점 코드를 파악하기 힘들어지는 스파게티 코드(Spaghetti Code)가 될 수 있다.A..

[네트워크] 4G와 5G, 셀룰러 네트워크(Cellular Network)에 대해

무선 네트워크(Wireless Network) 무선 네트워크(wireless network)는 선(wire)이 없는 네트워크로, 노드(node)와 노드가 전파를 통해 통신하는 방식으로 운용된다. 현재는 휴대폰, 태블릿과 같은 PMD를 사용하지 않는 사람을 찾기 힘들 정도로 무선 네트워크는 일상생활에서 많이 접할 수 있다. 따라서, 많은 사람들이 무선 통신에 대해서 관념적으로 이해하고 있다. 모바일 = 무선? 일반적으로 '모바일'은 '무선'을 잘 구분하지 않고 사용되는 경우가 있지만, 컴퓨터 네트워크에서는 아래와 같은 차이가 있다. 특히, 어떤 장치나 망이 이동성(Mobility)을 가졌다고 하는 것은 크게 두가지 관점으로 나눠진다. 이용자 입장에서 언제, 어디서든 상관없이 네트워크에 접속할 수 있다면 그..

CS/네트워크 2023.06.12

[Docker] 당신의 application을 dockerizing해야 하는 이유; Docker 알아보기

도커(Docker)가 필요한 세상 소프트웨어 개발론에서 대두되는 개발방식은 애자일 방법론이다. 애자일(Agile)은 신속한 반복 작업을 통해 실제 작동 가능한 소프트웨어를 개발하여 지속적으로 제공하기 위한 소프트웨어 개발 방식을 말한다. 이는 고객의 피드백에 빠르게 반응할 수 있고, 시장 변화에 쉽게 적응할 수 있어 소프트웨어의 리스크를 쉽게 관리할 수 있다. 이런 '신속한 반복 작업'과 '지속적 제공'을 편리하게 자동화하기 위한 개발 방법이나 개발 도구를 CI(Continuous Integration; 지속적 통합)/CD(Continuous Delivery; 지속적 인도)라고 한다. Docker는 대표적인 CI/CD이다. 가상화(Virtualize)와 컨테이너화(Containerize) 어플리케이션을 ..

CI&CD/Docker 2023.06.04

[알고리즘] 시간복잡도(Time complexity)

1. 어떤 알고리즘이 더 좋은가? 어떤 물건이나 상품에 대해 평가하고자 할 때, 어떤 기준을 통해 비교할 수 있을까? 가령 새로운 차를 구매하고자 한다면, 어떤 차를 갖기 원하는가? 누구는 연비가 좋은 차를 원할 것이고, 누구는 최고 속력이 빠른 차를 원하거나, 승차감이 좋은 차를 원할 수도 있을 것이다. 다만 차의 본 기능을 생각해보면, '느린' 차보다 '빠른' 차를 선호할 것이다. 같은 질문을 알고리즘에 대해 해봐도 다양한 답이 나올 수 있다. 하지만, 대부분의 프로그램 설계자들은 '더 빨리 수행하는 알고리즘을 고른다'라 할 것이다. 컴퓨터 과학에서 알고리즘에 대한 주 평가기준은 알고리즘의 수행시간이다. 2. 알고리즘의 수행시간 알고리즘은 어떤 값을 입력받아 특정 값을 출력하도록 정의된 계산 절차를 ..

CS/알고리즘 2023.05.24

[Docker] 자주 쓰는 명령어 모음

이미지 이미지 빌드 docker build 옵션 설명 예시 -e 환경변수 설정 -e MY_SQL_PASSWORD=password -t 이미지 이름 및 태그 지정 -t my-func:1.0, -t my-func -f, --file 도커파일(Dockerfile) 지정 -f /tmp/dev.Dockerfile 이미지 삭제 docker rmi 컨테이너 이미지를 컨테이너로 생성 후 실행 docker run 옵션 설명 예시 --name 컨테이너명 지정 --name my-container -p 호스트 포트와 컨테이너 포트 맵핑 -p 8080:8000 -d, --detach 백그라운드에 실행 --rm 컨테이너 종료 시 자동 삭제 실행 중인 컨테이너 보기 docker ps 옵션 설명 예시 -a, --all 모든 컨테이너..

CI&CD/Docker 2023.03.13

[웹 스크래핑] Scrapy + playwright를 이용한 유튜브 스크래핑

Scrapy Scrapy는 대표적인 웹 스크래핑 도구로, 파이썬에서 사용 가능하다. 스크래핑(scraping)은 날카롭거나 예리한 도구를 이용해 표면에 붙은 어떤 것을 떼어내는 행위를 뜻한다. 이와 비슷하게, 웹 스크래핑(web scraping)은 웹 사이트로부터 데이터를 추출해내는 행위를 뜻한다. 웹 스크래핑은 방대한 웹 사이트의 데이터를 손쉽게 모을 수 있다는 장점이 있지만, 타인의 콘텐츠를 무단으로 도용할 수 있다는 단점도 존재한다. 특히 브라우저를 통해 사이트를 접속할 경우, 웹 서버에서 접속자가 스크래핑 봇(bot)인지, 일반 사용자인지 구분하기 어렵다. 이를 이용해 Selenium은 CI/CD에서 테스트 도구로 활용되기도 한다. Scrapy 프로젝트 생성 간단한 scrapy 프로젝트를 만들어 ..