반응형 개발247 프로그래밍 관련 법칙(파레토, 디미터, 콘웨이 법칙) 1. 파레토 법칙 (Pareto principle) 80 대 20 법칙, 전체 결과의 80%가 전체 원인의 20%에서 일어나는 현상 소프트웨어의 개발 80%를 20%의 기능을 개발하는데 소비한다. 프로그램 사용자의 20%가 80%의 부하를 발생시킨다. 등으로 사용이 된다. 프로젝트를 설계할 때 이 법칙을 감안해서 설계를 하면 프로젝트를 위험에 빠트리게 하는 위험요소들을 사전에 파악하고 관리가 가능할 것이다. (예를 들어서 중요한 기능을 먼저 구현하던지 특정 사용자들에게서 집중적으로 자원이 소모되는 것을 감안해서 설계 하고 테스팅한다.) 2. 디미터 법칙 (The Law of Demeter) :디미터 법칙은 객체 O의 메소드 m은 다음의 객체들의 타입의 메소드만 호출해야 한다는 법칙이다. 1. O 객체 자.. 2023. 8. 26. 클린 코드(Clean Code) 깨끗한 코드를 작성하는 방법은 배우기 어렵다. 단순히 원칙과 패턴을 안다고 깨끗한 코드가 나오지 않는다. 고생을 해야한다. 연습하고 실패하고 다시 일어서야 한다. 결정을 내리느라 고민하는 모습, 잘못된 결정으로 대가를 치르는 모습도 봐야한다. 보이스카우트 규칙: "처음 왔을 때보다 더 깨끗하게 해놓고 떠나라.” 단순한 설계 규칙 4가지(중요도 순서) 1. 모든 테스트를 실행한다. - 리팩토링 쉽게 가능 2. 중복을 없앤다. 3. 프로그래머의 의도를 표현한다. - 좋은 이름선택, 함수,클래스 크리 줄이기, 표준명칭 사용, 단위 테스트 작성 4. 클래스와 메소드의 수를 최소로 줄인다. 냄새와 휴리스틱 1. 주석 C1 부적절한 정보 - 코드,설계의 기술적인 설명이외의 변경이력 등은 주석으로 적절하지 못함. C.. 2023. 8. 26. 객체지향 설계 개념 객체지향의 목표는 실세계를 모방하는 것이 아니다. 실세계를 추상화하고 은유하여 새로운 세계를 창조하는 것이다. 실세계에 대한 비유는 객체지향의 다양한 측면을 이해하는데 도움이 된다 1. 객체를 스스로 생각하고 결정하는 현실세계의 사물에 비유하는 것은 상태와 행위를 ‘캡슐화’하는 객체의 ‘자율성’을 잘 설명 2. 현실의 암묵적인 약속, 명시적 계약을 기반으로 협력하여 목표를 달성하는 과정은 ‘메시지’를 주고 받으며, ‘협력’하는 객체들의 관계를 잘 설명 설계는 간단히 끝내고 빨리 구현에 돌입하라. 실제 코드를 작성해가면서 협력의 전체적인 밑그림을 그리면서 수정해 나가라. 사람의 인지능력 한계로 인해 설계를 완벽히 끝내고 코드 작성을 하겠다는 어려운 일이다. 객체지향의 본질 1. 시스템은 상호협력하는 자율적.. 2023. 8. 26. SpringBoot AWS S3 한글명 파일업로드 에러 SpringBoot에서 AWS S3에 파일 업로드 중 오류가 발생했다. 테스트 시 문제없이 동작하던 코드였는데 확인해보니 한글 파일명이 문제가 되었다. 아래 코드와 같이 S3에 업로드 되는 파일명은 중복 방지를 위해 UUID를 사용했고, 원본 파일명(originFileName)은 UserMetadata로 저장 하기 위해 코드를 추가했는데 원본 파일명(originFileName)이 한글인 경우 S3에서 오류가 발생했다. public String uploadImage(MultipartFile file) throws Exception{ String originFileName = file.getOriginalFilename(); String filePath = uploadPath + UUID.randomUUID.. 2023. 8. 20. nodejs NVM(Node Version Manager) 설치 및 활용 nodejs 버전을 관리해주는 NVM(Node Version Manager)을 사용하면 여러 버전의 nodejs를 자유롭게 사용할 있어서 편리하다. 어플리케이션들이 여러 버전의 nodejs를 활용해서 개발이 되는데 각각의 어플리케이션 마다 서로 다른 nodejs 환경일 경우 매번 맞춰주는게 많이 번거롭다. nvm을 사용하면 이런 상황에서 여러 버전의 nodejs를 편리하게 스위칭할 수 있다. nvm 설치 nvm 설치는 아래 명령어 한줄이면 된다. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash 최신 버전의 nvm은 아래 사이트에서 확인해서 최신버전으로 설치해준다. https://github.com/nvm-sh/.. 2023. 8. 19. Python Selenium 동적 페이지 크롤링(Docker) Python의 Selenium을 활용해서 동적 페이지 크롤링 하는 부분을 docker 환경에서 실행해본다. 일반적인 데스크탑 환경과 다른점은 docker는 linux 환경으로 UI가 없다는 점이다. 하지만 Chrome 브라우저는 사용하게 된다. 먼저 다음과 같이 Dockerfile을 작성한다. python은 3.9 버전을 사용하고 Google Chrome을 설치한다. 그리고 python 실행에 필요한 패키지들을 requirements.txt를 통해서 설치하고, python 샘플코드를 실행한다. FROM python:3.9 WORKDIR /app RUN apt-get -y update && \ apt install wget && \ wget https://dl.google.com/linux/direct/g.. 2023. 8. 13. Oracle 비밀번호 만료(ORA-28001: the password has expired) Oracle 접속 비밀번호가 만료가 되면 아래와 같은 에러가 뜨면서 접속이 안된다. Caused by: java.sql.SQLException: ORA-28001: the password has expired 위와 같은 에러가 발생하는 경우 비밀번호를 변경해줘야 한다. 비밀번호 변경 방법은 아래와 같다. 먼저 Oracle DB로 접속을 한다. sudo su - oracle #sqlplus 접속 sqlplus "/as sysdba" 다음으로 신규 비밀번호를 설정해준다. # 비밀번호 변경 # 형식: [ alter user 유저명 identified by 비밀번호; ] # 샘플 alter user testuser identified by "mypassword"; 참고로 기본적으로 Oracle 비밀번호 만료가 .. 2023. 8. 13. Python Selenium ChromeDriverManager 버전 오류(There is no such driver by url https://chromedriver.storage.googleapis.com/LATEST_RELEASE_115.0.5790) Python Selenium을 사용하여 동작하던 코드에서 갑자기 에러가 발생했다. 에러 내용은 ChromeDriverManager 관련된 에러였다. ValueError: There is no such driver by url https://chromedriver.storage.googleapis.com/LATEST_RELEASE_115.0.5790 계속 잘 동작하던 코드였고 코드에 변경도 없었는데 갑자기 에러가 발생한 상황이었다. 여기저기 찾아보니 Chrome이 115 버전으로 업데이트 되었는데 ChromeDriver는 아직 114가 현재 최신 버전이라서 발생한 문제였다. 아래 코드처럼 자동 최신 드라이버를 설치하도록 했는데 ChromeDriver는 현재 Chrome의 버전을 기준으로 설치하도록 동작하고.. 2023. 8. 13. 이전 1 ··· 6 7 8 9 10 11 12 ··· 31 다음 반응형