분류 전체보기

DEV book/Clean Code

[Clean Code] 2장 의미 있는 이름

아주 간단한 프로그램을 만들 때도 네이밍을 하는 것이 가장 고뇌이다. 이 장에서는 변수, 객체, 클래스, 함수 등 작명을 해야할 때 유념해야 할 규칙을 설명해주고 있다. 의도를 분명히 밝혀라 변수나 함수, 클래스의 이름에는 아래 질문에 답할 수 있는 정보가 포함되어야 한다. 변수(혹은 함수, 클래스)의 존재 이유는 ? 수행 기능은 ? 사용 방법은 ? 주석 없이 이름만으로 읽는 사람이 해당 자원의 정보를 캐치할 수 있도록 작명해야 한다. 코드는 단순하기보다는 함축적이어야 한다. 코드 맥락이 코드 자체에 명시적으로 드러나야하며, 이를 다양한 기법으로 구현할 수 있다. 아래 예시를 보자 ! public List getFlaggedCells(){ List flaggedCells = new ArrayList();..

DEV book/Clean Code

[CleanCode] 1장 깨끗한 코드

이전에 회사 인턴 면접을 볼 때, "좋은 코드"가 무엇인가? 에 대한 질문을 받았다. 돌아가기만 하는 코드를 짜왔던 나에게 좋은 코드에 대해서 깊이 생각해 본적이 없어서, "추후 유지보수 시 리팩토링하기 용이한 코드", "다른 개발자들이 읽기 쉬운 코드"라고 두루뭉술하게 답변했다. 추상적으로 말했지만, 구체적으로 프로그래밍 시 좋은 코드를 만들어 내는 방법을 알지는 못하였다. 어떻게 좋은 코드를 짤 수 있을지 개발자로서 한 번도 생각하지 못한게 나중에 실이 될 것 같아 "클린 코드"라는 책을 사서 읽게 되었다. 코드가 존재하리라 책에서도 언급했다시피, chatGPT와 같이 자동으로 코드를 생성해주는 시대가 왔다. 그러나 코드는 요구사항을 상세히 표현하는 수단이다. 따라서 인간의 창의력과 직관, 감정을 가..

Algorithm/Baekjoon

[백준] 14889 스타트와 링크 C++ 문제 풀이

https://www.acmicpc.net/problem/14889 i와 j가 같은 팀일 때 더해지는 능력치 = S[i][j] + S[j][i]로 계산하며, 두 팀의 능력치의 차이를 최소로 하고자 한다. 이를 구현하는 큰 원리는 아래와 같다. (1) 모든 조합에 대해서 능력치의 차이를 구한다. (2) 능력치의 차이가 최소인 경우, 그 값을 출력한다. 0 1 2 3 4 5 1 0 2 3 4 5 1 2 0 3 4 5 1 2 3 0 4 5 1 2 3 4 0 5 1 2 3 4 5 0 (1,3,6) 팀 = 1 + 2 + 5 + 1 + 3 + 5 = 17 (2,4,5) 팀 = 2 + 3 + 2 + 4 + 4 + 4 = 19 위와 같이, 3개의 팀원이 있다면 (1, 3) (1, 6) (3, 6) 세 개의 조합을 만들..

Server/Architecture

[MSA] 터빈 서버 (Turbine Server)로 Hystrix Client 메시지 수집하기

터빈 서버란 ? 마이크로서비스에 설치된 히스트릭스 (Hystrix) 클라이언트 스트림 메시지를 터빈 서버로 통합하여 관리한다. 히스트릭스 클라이언트 스트림이란, 마이크로서비스에 설치된 ‘히스트릭스 클라이언트’ 에서 서비스 처리 요청에 대한 결괏값을 스트림으로 전달해준다. 사용자는 이를 통해 서비스가 잘 돌아갔는 지 확인할 수 있게 된다. 터빈 서버 구축하기 터빈 서버를 마이크로서비스에 등록하기 위해서는, 먼저 터빈 서버를 생성하고 build.gradle에 아래 라이브러리를 추가해준다. implementation 'org.springframework.cloud:spring-cloud-starter-netflix-turbine' 터빈 서버의 application.yml을 보면 아래와 같다. server: p..

Server/Architecture

[MSA] Spring Cloud Config Server 구축 및 profiles 설정

설정 서버 (Config Server)란 ? 설정 서버는 각 Config Client들이 사용할 수 있는 설정 정보를 한 곳에 모아 저장한 Server이다. Spring Cloud Server의 역할 깃에 설정된 profile의 정보가 바뀌게 되어도 마이크로서비스의 재기동 없이 적용이 가능하다. Spring Config Client들에게 설정 정보를 뿌려서, Application의 외부 속성을 중앙 집중식 관리가 가능하도록 한다. 서버는 주로 마이크로서비스를 개발하는 개발서버와 운영 서버, 스테이지 서버, 테스트 서버로 분리된다. 이런 서버들의 포트와 IP주소는 각기 다른데, 환경 설정 정보를 소스로부터 분리하여 소스코드와의 결합도를 낮추는 역할을 하는 것이 설정 서버의 역할이다. 그렇다면 설정 서버에서..

Other/git

[git] .gitignore 적용하기

설정 정보가 포함되어있거나, 민감한 정보가 있는 파일은 깃에 올리지 않는 것이 좋다. 매번 제외하는 것이 아니라, 루트 프로젝트에 있는 .gitignore에 파일 경로를 추가하면 쉽게 제외할 수 있다. (1) .gitignore에 파일 경로 추가하기 아래와 같이 push에서 제외해주고자 하는 파일에서 오른쪽 버튼을 눌러 'Path From Repository Root'를 골라 클립보드에 경로를 복사한다. 그리고 루트에 있는 .gitignore에 들어가서 아래와 같이 붙여넣기 해준다. (2) 적용하기 git rm -r --cached . git add . git commit -m "apply .gitignore" 위와 같이 터미널에 입력한 후 Push해준다. 만약, 이미 Push 명령어로 리포지토리에 올라..

Server/Architecture

[MSA] 유레카(Eureka)서버, 줄(Zuul) 서버 설정 및 구동하기

유레카 서버 (Eureka Server) 마이크로서비스의 기동 여부를 체크하고, 마이크로서비스가 등록되거나 삭제될 때 이에 대한 상태정보를 동적으로 감지하는 역할을 한다. 마이크로서비스는 기동되는 시점에 유레카 서버에게 이 정보를 전달한다. 유레카 서버는 유레카 클라이언트가 접속할 수 있는 defaultZone 서버 주소를 오픈한다 . server: port: 9091 spring: application: name: msa-architecture-eureka-server # 유레카 서버 이름 # Config server cloud: config: url: http://localhost:8888 name: msa-architecture-config-server # Eureka Standalone Serve..

Algorithm/Algospot

[Algorithm] 큐(queue)와 스택(stack), 데크(dequeue) #230213

큐, 스택, 데크 큐는 선입선출 (FIFO)의 속성을 가지고 있다. 스택(Stack) 은 반대로 후입선출(LIFO)의 속성을 가지고 있고, 데크(dequeue) 는 양쪽 끝에서 넣고 뺄 수 있는 자료 구조를 말한다. 이 자료 구조는 동적 배열, 혹은 연결 리스트로 구현할 수 있다 (1) 연결리스트로 구현 시 양쪽 끝에서 상수 시간에 추가와 삭제가 가능하다. (2) 동적 배열을 이용한 구현 시, 배열의 맨 앞에서 원소 삭제 시 O(n)의 시간이 걸린다는 단점이 있다 → head와 tail을 이용해서 이 점을 보완할 수 있다. 즉 배열 전체가 아닌 head부터 tail까지만 자료구조로 사용하겠다는 건데, 버려지는 공간이 많다는 단점이 있다. 이는 환형 버퍼 (circular buffer) 의 개념으로 해결할..

Algorithm/Algospot

[Algorithm] 선형 자료구조 #230212

선형 자료구조 배열은 메모리의 연속된 위치에 각 원소들이 저장되어있고, 연결 리스트는 여기저기 흩어져있는 원소들의 특정 위치에서 삽입과 삭제를 상수 시간에 수행하기 위해 이전 원소에서 다음 원소를 가리키는 “포인터”로 구현한다. struct ListNode { int element; ListNode *prev, *next; } C++에서는 연결리스트를 list라는 STL을 사용해서 구현한다. 조세푸스 문제 #include #include using namespace std; void josephus(int n, int k) { list survivors; for (int i = 1; i 2) { kill = survivors.erase(kill); if (kill == survivors.end()) ki..

MINGYUM
'분류 전체보기' 카테고리의 글 목록 (18 Page)