만쥬의 개발일기
article thumbnail
[클린 코드] - 12장 창발성, 13장 동시성
📖BOOK/📙Clean Code 2023. 7. 20. 03:20

12장 - 창발성 창발적 설계로 깔끔한 코드를 구현하자. 창발성이라는 말이 조금은 생소할 수 있다. 창발성이란, 복잡한 시스템이나 구조의 특성이 간단한 구성 요소들의 상호작용을 통해 나타나는 현상을 말한다. 다시 말해, 간단한 부분들의 조합으로 인해 전체적인 시스템이나 패턴이 생겨나는 것을 의미한다. 아래 네가지 규칙을 준수한다면 소프트웨어 설계 품질은 크게 높아진다. 모든 테스트를 실행한다. 중복을 없앤다. 프로그래머 의도를 표현한다. 클래스와 메서드 수를 최소로 줄인다. 단순한 설계 규칙 1 : 모든 테스트를 실행하라 테스트가 불가능한 시스템은 검증이 불가능하다. 그리고 검증이 불가능한 시스템은 절대 출시하면 안된다. 결합도가 높으면 테스트 케이스를 작성하기 어려우므로, DIP와 같은 원칙을 적용하고..

article thumbnail
[DATABASE] - 정규화(Normalization) 완벽 이해하기

KEY에 대한 이해가 부족하다면 KEY를 정리한 포스팅을 먼저 보고 오자. 2023.07.19 - [📚CS/📘데이터베이스] - [DATABASE] - Key 완벽 이해하기 (기본키, 후보키, 외래키 등) [DATABASE] - Key 완벽 이해하기 (기본키, 후보키, 외래키 등) key는 데이터베이스의 가장 중요한 개념이다. key는 데이터베이스(혹은 릴레이션) 내에서 특정 레코드(tuple)를 고유하게 식별하기 위해 사용되는 필드 또는 속성(attribute)을 의미하고, 그 종류로는 kangmanjoo.tistory.com 정규화(Normalization)란? 정규화(Normalization)의 기본 목표는 테이블 간에 중복된 데이타를 허용하지 않는다는 것이다. 중복된 데이터를 허용하지 않음으로서 무..

article thumbnail
[DATABASE] - Key 완벽 이해하기 (기본키, 후보키, 외래키 등)

key는 데이터베이스의 가장 중요한 개념이다. key는 데이터베이스(혹은 릴레이션) 내에서 특정 레코드(tuple)를 고유하게 식별하기 위해 사용되는 필드 또는 속성(attribute)을 의미하고, 그 종류로는 후보키, 기본키, 대체키, 슈퍼키,외래키 등이 있다. 예시 릴레이션 학생 TABLE 강의 TABLE 후보키 (Candidate Key) 후보 키(Candidate Key)는 데이터베이스 테이블에서 각 튜플을 유일하게 식별하는 데 사용할 수 있는 키들의 부분집합이다. 모든 릴레이션은 반드시 하나 이상의 후보키를 가져야한다. 릴레이션에 있는 모든 튜플에 대해서유일성과 최소성을 만족시켜야한다. 유일성을 만족한다는 것은, 예를들어 학생 릴레이션의 경우, 후보키만으로도 한 튜플을 특정지을 수 있는 것이다...

article thumbnail
[MySQL] - ERROR 1698 (28000): Access denied for user 'root'@'localhost' 해결하기
🛠️TOOL/🐬Mysql 2023. 7. 19. 16:28

오랜만에 WSL2로 MySQL 서버에 접속하려다가 , 그만 root 암호를 잊어버리는 사태에 직면했다. 이후 비밀번호 재설정을 하고, 여러가지 설정들을 건드리다가 2002번 에러를 직면했다. 소켓에 연결이 안되는 경우 서버 설정에 문제가 있는 경우가 많다고 들어서 아예 재설치를 해주었다. 그러자 이번엔, ERROR 1698 (28000): Access denied for user 'root'@'localhost' 라는 에러를 만나게 되었고.. 여러가지 해결 방법을 시도해보았다. 1. MySQL을 보안 기능 비활성화로 재시작 먼저 첫번째로 'sudo mysqld_safe --skip-grant-tables &' 커맨드를 사용해 보안 기능을 끄고 재시작을 해주었다. 이후 mysql -u root 위 커맨드로..

article thumbnail
[클린 코드] - 10장 클래스 , 11장 시스템
📖BOOK/📙Clean Code 2023. 7. 18. 14:07

10장 클래스 클래스 체계 클래스 내부 선언 순서는 표준 자바 관례에 따라 정의가 되어있다. 그 순서는 다음과 같다. 정적 공개 상수 (static public) 정적 비공개 변수 (static private) 비공개 인스턴스 변수 공개 변수(거의 존재하지 않는 경우) 공개 함수 비공개 함수(자신을 호출하는 공개 함수 직후에) 때로는 변수나 함수를 protected로 선언하여 테스트 코드에서 접근을 허용하기도 한다. 같은 패키지 안에서 함수 등을 호출하여 테스트 해야한다면, protected로 쓰되 비공개 상태를 유지할 방법을 강구한다. 캡슐화는 항상 지키도록 노력할 것. 클래스는 작아야 한다 클래스의 이름을 지을때는 해당 클래스의 역할을 기술해야한다. 한 클래스의 역할이 너무 많아서는 안된다. 단일 책..

article thumbnail
[Spring Boot] Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.0.8...에러 해결하기

spring boot 프로젝트 생성 중, 위 오류에 부딪혀 구글링을 통해 해결했다. 1.환경변수 설정 https://coding-factory.tistory.com/838 [Java] 자바(JDK) 환경변수 설정방법 (for Windows) 자바(Java) 환경변수 설정 이유 환경 변수란 윈도우 운영체제에서 사용하는 설정 정보가 담겨있는 변수입니다. 윈도우에서 명령 프롬프트 (cmd)로 파일을 찾거나 실행을 시킬 때 현재 위치에 파일 coding-factory.tistory.com 위 블로그에 자세한 설명이 나와있다. 2.intellij SDK 확인 File > Project Strucure > Project > SDK 설정 SDK가 기존에 설정이 안되어있어서 11버전으로 설정해주었다. 3.Spring ..

article thumbnail
[플로이드-워셜(Floyd-Warshall)] - BOJ_14938 : 서강그라운드
✏️PS 2023. 7. 12. 16:20

오늘은 오랜만에 그래프 알고리즘을 공부하려고 한다. 블로그에 글은 안썼지만, 그동안 프림, 크루스칼등 MST(최소 신장 트리) 그리고 다익스트라(한 정점에서 다른 정점까지의 최단 거리를 찾는 알고리즘) 등을 공부해왔었는데, 오늘은 플로이드-워셜 알고리즘을 공부해보았다. 오늘 풀어볼 BOJ 14938 문제이다. 알고리즘 분류를 보면 다익스트라와 플로이드-워셜 모두 사용 가능하다고 되어있지만, 노드의 개수가 100으로 시간복잡도의 부담이 적고, 모든 노드를 시작점으로 잡고 최단거리를 구해야 하는 점, 음수 간선이 없는 점을 근거로 플로이드-워셜을 적용해 푸는 것이 쉽고 빠르다. 💡플로이드 워셜 알고리즘이란? 모든 정점에서 다른 모든 노드로 향하는 최단 경로를 구하는 알고리즘 모든 노드간의 최단 거리를 구하기..

article thumbnail
[스마트팜] - forever로 실행한 애플리케이션 log 확인하기

서버를 배포중, 문제가 생겼을 때 에러를 확인하려면 반드시 log를 확인해야 한다. 하지만 node.js에서 forever로 실행할 경우, 콘솔에 찍은 에러는 확인이 불가능하기 때문에 반드시 따로 로그 파일을 생성해주어야한다. 물론 server.js에서 처리해주어도 되지만, 기존 콘솔에 찍히던 log들을 모두 옮겨주기도 귀찮고 테스트시에는 어차피 콘솔에 찍으며 하기 때문에, 콘솔에 찍히던 log또한 파일에 저장 후 확인 가능하도록 하였다. sudo forever start -w -o ../out.log -e ../err.log server.js 위와 같이 실행할경우, 기존 출력되던 로그들은 out.log 파일에, 오류 출력 로그들은 err.log에 정상적으로 저장된다. -w: 파일 변경을 감지하고 자동으..