본문 바로가기

분류 전체보기

(116)
JS에서 함수를 사용하기까지 한 생각 JS로 코딩하면서 이것저것 다양한 방식을 도입해봤다. 처음에는 단순하게 필요할 때 변수 선언하고 로직이 필요하면 그때그때 한줄한줄 넣는 방식으로 해봤다. 물론 잘 돌아갔으나 다음에 비슷한 로직이어서 복붙하기 위해서 참고하려고 하니 지옥과도 같았다. 1. 로직과 변수의 결합 로직 사이사이에 변수를 선언하고 거기서만 사용하니 재사용하기 너무 까다로웠다. 변수 이름도 너무 구체적으로 적은 것이 단점이었다. 비슷한 로직이지만 담는 내용이 바뀌니 매번 적절하게 바꾸는 것도 상당히 고된 일이었다. 단점을 알았으니 다음 작업을 진행할 때는 변수를 최대한 전역객체에 선언했다. 이름도 보다 추상적인 이름으로 선택했다. 확실히 이렇게 하니 전보다는 코드를 재사용하기 쉬웠다. 그렇게 진행하다보니 또다시 문제를 발견했다. 쓸..
함수를 사용할 때 return을 제대로 활용하자 return이라는 개념 자체를 이해하는 데 상당히 오래 걸렸다. 구체적으로 코드부터 보고 가보자. let something; let anything; function recordReturn(input) { something = input; if (something === undefined) { something = "something in here"; } return something; } function emptyReturn() { anything = "do not return this."; return; } recordReturn(); emptyReturn(); recordReturn 함수를 호출한다면 그 자리에 무엇이 남을까? something이 남는다. 이렇게 단순한 개념이지만 코드를 볼 때 쉽게..
외부 저장소 패턴이란 무엇인가? 클라우드 인프라를 사용하면 유동적으로 하드웨어 사양이 변경된다. 만약 설정정보를 애플리케이션 내부에 둔다면 설정정보만 변경됐음에도 해당 서비스를 일시 중단하고 재배포를 진행해야 한다. 이런 상황을 방지하기 위해서 클라우드 인프라 같은 유동적인 인프라를 바탕으로 한 소프트웨어에서는 설정정보를 애플리케이션 외부에 두는 패턴으로 설계를 한다. 별도의 설정정보만 가진 설정 서버에서 마이크로서비스는 물론이고 Tracing, OAuth, API Gateway, Service Registry, Monitoring 서비스 모두에 설정을 주입한다. 이렇게 설정을 애플리케이션 외부에 별도로 만든 서버에 저장한다는 의미에서, 외부 저장소 패턴이라고 부른다. 일반적으로 Config Server라는 명칭이 아키텍처에서 보인다면..
서비스 디스커버리, 서비스 레지스트리 패턴이란? 마이크로서비스를 공부하다 보면, 서비스 자체보다 그 기반 서비스에 대한 다양한 패턴이 이해가 안 될 때가 많다. 그 중에서 가장 시작점이 되는 서비스 레지스트리 및 서비스 디스커버리 패턴에 대해서 간단하게 알아보고자 한다. 1. 서비스 디스커버리 패턴 클라우드 기반 마이크로서비스 패턴에서는 다양한 클라이언트에 대응하는 단 하나의 진입점을 생성하는 API GATEWAY 패턴을 사용한다. API GATEWAY는 어떤 서비스를 호출하라는 요청을 받는다면, 그 서비스를 호출하기 위한 두 가지 절차가 필요하다. 최적 경로를 찾기 위한 라우팅. 부하 분산을 위한 로드밸런싱. 두 가지를 활용하여 서비스 호출에 대한 요청을 응답하는 것이 서비스 디스커버리 패턴이다. 2. 서비스 레지스트리 패턴 최적 경로를 찾기 위해서..
strcmp() 같은, 0과 1을 반환하는 함수를 이용한 테크닉 어떤 값이, 프로그래머가 생각한 값이 맞는지 확인하는 수없이 많은 함수가 존재한다. 간단하게 true / false로 값을 반환하는 경우도 많지만, 일부 함수는 0과 1, 혹은 -1과 0, -1과 1등 숫자를 이용하여 값을 검증하는 경우도 많다. TRUE / FALSE를 이용하는 함수는 그 자체로 매우 직관적이라서 따로 눈여결 볼 건덕지가 없다. 하지만 숫자를 반환하여 참과 거짓을 판단하는 함수는 몇 가지 테크닉이 존재한다. 예를 들어, 일반적으로 TRUE는 1, FALSE는 0으로 표현할 수 있다. 어떤 값을 검증하는 함수가 0과 다른 숫자를 반환한다면, 오히려 !
헥사고널 아키텍처 간단하게 알아보기 이직을 준비하면서 느낀 점이, MSA 구조와 헥사고널 아키텍처 및 클린 아키텍처에 대한 이해도를 상당부분 요구한다는 것이었다. MSA는 다양한 자료와 책을 가지고 그 사상과 간단한 구현 방법은 익혔지만, 헥사고널 아키텍처는 달랐다. 그래서 헥사고널 아키텍처에 대해서 간단하게 알아보고자 이 글을 적었다. 가장 많이 참고한 글은 아래 블로그의 글이다! https://engineering.linecorp.com/ko/blog/port-and-adapter-architecture/ 1. Port And Adapter Architecture(PAAA) 헥사고널 아키텍처는 별명이었다. 실은 포트 앤 어댑터 아키텍처를 그 모습 그대로 부른 이명에 불과했다. 그렇다면 이를 PAAA를 이해하기 위해서는 1.1. 포트가 ..
독특한 SQL 사용방법, WHERE 0 = ? SQL을 보다 WHERE 절에 특이한 조건을 넣는 패턴을 보게 됐다. SELECT * FROM TABLE WHERE 0 = ? 이런 패턴이다. 도대체 왜 0을 넣을까 생각을 하고 고민도 많이 해봤지만, 해답은 간단했다. 내가 작업 중인 프로그램에서는 보편적으로 0, 1을 사용하여 성공실패를 나타내기 때문이었다. 0 = ? 이 TRUE라면 어떤 조건을 실패했을 경우 성립되는 조건이라는 것이었다. 너무 어려웠는데 밥 먹고 차분히 생각해보니 바로 답이 나와버렸다... 역시 사람은 휴식이 필요해!
준용할 수 있는 변수명을 사용하기 프로젝트를 진행하면서 새로운 변수 작명 방법에 대한 이야기를 들었다. 기존에는 최대한 해당 변수를 명확하게 설명하려고 풀어쓰는 편이었다. 하지만 내부적으로 사용하는 고유단어가 많은 환경에서는 이런 방식은 독이 된다고 한다. 즉, 프로그램을 외부의 누군가를 위해서 만드는 것이 아니라 회사 내부에서 사용하려고 할 때 이런 경우가 발생한다. 전문성이 있는 경우가 특히 그렇다. 예를 들어서, 의료 관련 프로그램을 만든다고 해보자. 의학 용어는 어떤 단어가 무슨 뜻이라고 명확하게 정의가 되어 있다. 우리가 생각하듯 대충 감기, 몸살 이런 식으로 포괄적으로 표기할 수 있는 방식을 사용하지 않는 것이다. 해당 상황에 맞는 명확하고, 이미 결정된 단어를 사용해야만 하는 것이다. 구구절절 상황을 풀어쓰고 and, or를..
IF-IF와 IF-ELSE IF는 완벽하게 다른 함수다 최근에 if - else if 구문을 활용했기 때문에 의도한대로 로직이 흘러가지 않은 바가 있었다. 나같은 아직 초보자에게 이 미묘한 차이점이 도움이 됐으면 좋겠다. 1. if - if if 구문에 대한 이론적인 설명은 하지 않아도 알 것이라고 믿는다. 따라서, if - if 구문은 어떻게 사용하는지 아는 것이 중요하다고 생각한다. if - if 구문은 내가 본 바로는 바로 값을 검증하는 로직에서 필수적으로 사용한다. 특정한 input 값이 적합한지, 아니면 1부터 10까지 있는 모든 검증사항을 확인해야 한다든지. 이렇게 다수의 경우의 수 중에서 하나가 아니라 경우의 수 모두를 체크하고 넘어가야 하는 시점에서 if - if 구문을 활용한다. 즉, 모든 값 검증 (체크리스트)에 if - if 구문을 활용한..
집계함수 중 COUNT(*)은 대체 뭘까? 쿼리를 보다가 COUNT(*)이라는 표현을 접했다. 이 짧은 함수가 이해가 잘 되지 않아서 정리해봤다. 1. COUNT() SQL 문법 중 COUNT()는 집계함수로 분류된다. 집계함수를 쉽게 인식하자면 다음과 같다. 여러 행의 데이터를 하나의 그룹으로 묶는다. 묶은 그룹을 기준으로 하나의 결과값을 도출한다. 집계함수는 여러 데이터에서 단 하나의 결과값을 얻고자 할 때 사용한다. COUNT()는 이런 측면에서 보면 정말로 단순하다. COUNT('A')라고 표현하면, 'A'라는 값을 가진 행의 개수를 출력한다. COUNT(1)이라고 표현하면, 1이라는 값을 가진 행의 개수를 출력한다. 그렇다면 COUNT(*)는 대체 뭘까? 간단히 생각하면 그 어떤 값이라도 있는 행의 개수를 출력한다는 것이다. 여기서 의문..