스택과 큐는 모두 JavaScript에서 데이터 컬렉션을 저장하고 관리하는 데 사용할 수 있는 데이터 구조입니다. 둘 사이의 주요 차이점은 컬렉션에서 요소가 제거되는 순서입니다. 스택은 LIFO(Last In First Out) 데이터 구조입니다. 즉, 스택에 마지막
OWASP TOP 10에 대해 알아보자!OWASP TOP 10 이란 무엇일까Open Web Application Security Project 의 줄임말로 '오픈소스 웹 어플리케이션 보안 프로젝트'이다. 이 프로젝트는 주로 웹에 관한 정보노출, 악성 파일 및 스크립트,
데이터베이스의 정규화는 데이터의 중복을 줄이고, 무결성을 지키기 위해 사용되는 데이터베이스 구성 방법입니다. 정규화는 데이터를 더 작고 관리하기 쉬운 조각으로 나누어 데이터 중복성을 제거하는 데 도움이 됩니다. 다만 작은 조각으로 나누기 때문에 여러 테이블과 관계를 설
우리는 웹브라우저를 통해 접속하는 홈페이지에서 로그인을 하지 않거나 회원가입을 하지않으면 특정 컨텐츠를 이용하지 못하는 경우를 충분히 경험해 보았을 것이다. 서비스를 담당하는 회사 측에서 알 수 없는 사용자가 이용하였을 때에 문제가 발생할 수 있는 일부 컨텐츠에 대한
면접을 준비하면서 any타입과 unknown타입에 대해서 설명해 달라는 질문을 받았었다. 고작 1주일만에 프로젝트를 완성하면서 타입스크립트를 사용했기 때문에 실상 any타입은 사용해보았지만 unknown타입은 사용해 보기는 커녕 완전히 처음 듣는 타입이었다. 그럼 이제
우리가 흔히 사용하는 TypeORM, prisma, sequelize 등을 ORM이라고 부른다. ORM이라고 부르고 라이브러리를 설치해서 사용하게 되는데 이 ORM이라는게 무엇이고, 어떠한 장단점이 있는지 알아보자ORM(Object-relatinal mapping)이란
npm init -y를 통해 이니셜라이즈를 하게되면 package.json파일이 생성되고, 이후 다른 npm을 통한 라이브러리 설치시 package.lock.json파일 생성과 더불어 package.json파일이 업데이트 된다.우리가 직접만들지 않은 이 두파일은 무엇일
보안 우수 사례나, 웹서이스의 보안에 대해서 검색하다보면 안전한 데이터 전송을 위해 HTTPS를 사용권장을 한다.HTTP와 HTTPS가 무엇이 다르길래 HTTPS로 전송하는게 안전하다고 하는 걸까?HTTP(Hyper Text Transfer Protocol)란 서버/클
호이스팅(Hoisting)에 대한 개념을 정리해 보자 호이스팅이란? 호이스팅(Hoisting)은 자바스크립트에서 변수나 함수를 선언하면, 해당 변수나 함수를 유효 범위(Scope)의 최상단으로 끌어올리는 동작을 의미한다. 호이스팅이한 변수나 함수의 선언이 호출보다
하나의 프로젝트가 확장됨에 따라 많은 기능들을 만들어야 하는데 하나의 프로젝트에 여러 기능들을 만들다 보면, 여러가지 어려움이 생길 수 있다. 여러 기능들이 하나의 서버에 맞물려 있다보니, A기능을 손봤을 때 연관된 B에서 에러가 생길 수 있고 또 B을 고침에 따라 관
우리가 웹서버를 개발하면서 라이브러리를 설치할 때 대부분 명령어 npm --- 로 설치를 한다. 이때 사용하는 npm명령어는 뭘까?npm은 node package manager 의 약자로 자바스크립트 런타임 환경인 Node.js에서 사용되는 패키지 관리자이다. 보통 n
var, let, const에 대해 알아보자var, let, const는 세가지 모두 javascript에서 변수를 선언하기 위한 키워드이다.각 키워드에 대한 자세한 내용을 알아보자 var 키워드는 변수를 선언할 때 사용하는 가장 오래된 방식이다. var로 선언된 변수
개인 프로젝트가 아닌 팀에서 주도하는 협업 프로젝트에서 각자의 개성에 맞게 코드를 작성하면 가독성이 떨어지고 내 코드는 내가 알아보고 남의 코드느 남만 알아보는 사태가 발생할 수 있다. 코드자체의 부분이 나의 담당이 아니더라도 한 팀에서 제작한 프로젝트는 일관성을 가
우리가 폴더, 파일, 변수, 클래스명 등 이름을 지을 때 굉장히 많이 고민을 한다. 좀 더 알아보기 쉽고 일관성 있고, 적절한가에 대해 끝없이 고민하지만, 의미적인 측면 뿐만이 아니라, 그 변수나 파일 등의 이름에도 규칙을 통해 일관성 있게 작성해야한다. 이러한 이름을
우리는 게임에서 무언가를 지우거나 잃어버리거나, 실수로 홈페이지 아이디나 게시물을 지웠을 때 가끔 관리자에게 문의하여 복구하는 경우가 있다. 그냥 삭제(delete)를 하였을 때 남아있는 데이터가 존재하지 않는데 어떻게 똑같은 상태로 복구할 수 있는 것일까? 위와 같
개발 초기에 깃허브에 머지하거나 풀을 땡겨오면서 바뀐것도 없어보이는데 자꾸 수정사항이 있는 것으로 나오거나, 충돌이 나는 경우를 한번 쯤 경험해 보았을 것이다. 우리가 중요하게 생각하지 않았던, '' 나 ""의 서로다름, 코드의 마지막에 ;을 찍는지 않찍는지, tab으로 들여쓰기를 하면 몇번의 띄어쓰기를 적용하는지가 사람마다 달라서 불필요한 커밋과 개발 코...
우리가 프로젝트에서 백서버를 만들고 프론트엔드와 HTTPS로 통신하기 위해 NginX를 node.js서버 앞단에 함께 배포하여 요청 통신을 주고 받는다.NginX가 무엇이고 왜 사용하는지에 대해서 알아보자로드 밸런싱, 리버스 프록시, 캐싱 등의 기능을 제공하여 대규모
복잡도에 대해 우리가 알고리즘 문제풀이 등을 진행하다 보면 실제 예시의 테스트는 통과하시만, 결과확인 테스트에서 효율성 문제로 실패하는 경우가 발생한다. 이는 내가 작성한 알고리즘 코드가 일정의 효율을 결과테스트에서 만족하는 만큼까지 끌어올리지 못해서 발생하는 경우이
앞서 설명한 복잡도를 표현하는 표기법으로 빅오(Big-O)을 사용한다. 빅오(Big-O) 표기법은 알고리즘의 시간 복잡도와 공간 복잡도를 표현하기 위한 수학적인 표기법이다.알고리즘의 시간 복잡도와 공간 복잡도는 입력의 크기에 따라 변화한다. 예를 들어, 배열의 길이가
트랜젝션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다.DB에 접근하는 방법은 쿼리이므로, 즉 여러 개의 쿼리들을 하나로 묶는 단위라고도 할 수 있다.우리가 DB에 접근하는 쿼리가 동작할 때 여러가지 특징을 보이는데, 이것이 트랜잭션의 특징
배열(array)와 연결리스트(linked list)에 대해서 알아보자배열과 연결리스트는 둘 다 선형 자료 구조이다.그렇다면 선형자료 구조는 무엇일까?선형자료구조는 요소가 일렬로 나열되어 있는 자료구조는 뜻한다.선형자료구조의 종류로는 배열, 연결리스트, 백터, 큐, 스
면접준비를 하면서 CS지식을 공부하며 Base64인코딩에 대해서 알아보려 했다.일단 말 그대로 풀면 Base(기본이되는), 64(64비트), 인코딩(Encoding) 64비트를 기본으로하는 인코딩이라는 것인데 이해할 수 없는 용어 하나 인코딩!! 그렇다면 인코딩이란 무
개발을 배우면서 초기에는 함수를 function a() = a x 2 이런식으로 사용했다면 지금의 코드에선 function이라는 단어 자체를 찾아볼 수 없다. 개발 초기에 배운 화살표 함수 덕분에 안그래도 영타에 쥐약인 나는 화살표함수를 사용하면 오타범벅 오류가 나지
우리가 현재 JS로 코드를 짜면서 async/await을 걸어서 비동기 처리를 하고 JS로 작성한 코드가 동작할 때는 코드를 한줄 한줄 완료해 가면서 동기적으로 처리된다는 것도 알고 있다.하지막 이건 어렴풋한 개념일 뿐 정확한 개념에 대해서 알아보자
우리는 가끔 실수로 javascript로 코드를 짜면서 비동기 처리를 할 때 async를 걸고 await을 안걸었을 때 결과의 객체가 promise로 나와서 에러가 발생한 경우를 격어 보았을 수도 있을 것이다. 필자의 promise에 대한 첫 인상은 그랬다. 객체이긴
앞서 동기/비동기 와 javascript의 promise에 대해서 포스팅 했다. 하지만 지금 내가 짜고 있는 코드는 대부분 비동기 처리를 할 때 async/await을 사용한다. 그럼 이 또한 promise처럼 javascript에서 비동기 처리를 위한 안배라고 생각
우리는 코드를 작성하면서 프로트엔드와 요청 및 통신을 위해 API를 작성하고 그에 따른 API명세서를 작성하는데 정확히 API가 무엇일까? 알아보자Application Programming Interface(애플리케이션 프로그램 인터페이스)의 약자로, 소프트웨어 응용
항상 javascript와 node.js로 코드를 짤 때 프레임워크로 express를 사용하였다. express를 이용해서 서버를 구축하는데 대체 이 프레임워크가 뭘 하는 것이고 어째서 서버를 구축할 때 도움을 줄 수 있는 것일까?express에 대한 포스팅은 다음에
저번 포스팅에서 프레임워크는 소프트웨어나 서버의 개발을 위한 틀이라고 설명했었는데, 그렇다면 우리가 npm패키지로 설치하는 라이브러디들은 무엇일까?
우리는 프레임워크와 라이브러리를 알아보았다. 두 가지 개념은 비슷한 듯 다른 개념인데 이에 대해서 알아보자.앞서 적은 프레임워크 포스팅과 라이브러리 포스팅의 공통점이 있다. 바로 둘다 코드의 모음이자 집합체라는 것이다. 프레임워크를 설명할 때 소프트웨어나 프로젝트 코드
프레임워크와 라이브러리의 가장 큰 차이점을 제어의 역전(IoC)라고 하였다. 제어하는 것은 개발자의 역할이라고 생각하지만, 프레임워크를 쓰게 되면 프레임워크의 틀안에서 개발자의 짜둔 어플리케이션 코드를 호출하게 된다. 따라서 제어하는 역할이 프레임워크가 가지게 되어 제
😀의존성 주입(DI)에 대한 포스팅은 준비하면서 의존성 주입의 등장배경에 대해서 정리하다보니 객체 지향 프로그래밍(OOP)을 먼저 알아야 할 필요성이 생겨 포스팅을 정리하게 되었다. OOP에 대해 알아보기 전에 객체지향과 관련된 다른 프로그래밍 패러다임에 대해서 알아
😀이전 포스팅에서 절차지향과 객체지향에 대해서 알아보았다. 이전 포스팅에 이어서 이번 포스팅에 객체지향 설계와 프로그래밍에 대해서 알아보자 객체지향 설계 > 훌륭한 객체지향 설계의 핵심은 캡슐화를 이용해 의존성을 적절히 관리함으로써 객체 사이의 결합도를 낮추는 것이
DI(Dependency Injection)이라는 용어를 아무것도 모르고 봤을 때는 꼭 SQL Injection, CRLF Injection 처럼 해킹 공격 기법이 생각 났다. 하지만 제어의 역전(IoC) 포스팅을 작성하면서 IoC구현 방법 중에 하나로 DI(Den
😀우리가 코드를 작성할 때 과연 지금 작성한 내 코드가 RESTful 한가?에 대해서 계속 고민하고 리펙토링해 간다. 어렴풋이 RESTful함이 명서세 대로 주소를 잘 짯고, GET•POST 등 메소드를 잘 연결 지어서 API를 짜는 것이라고 알고 있었는데 정확히 R
😀면접준비를 위해 CS공부를 준비하는 중 얕은복사와 깊은복사를 알게되어 포스팅하게 되었다.얕은복사와 깊은복사 두 개념 모두 이전에 포스팅한 객체 지향 프로그래밍(OOP)에서 객체를 복사할 때 사용되는 개념이다.각 복사의 개념에 대해서 알아보자얕은 복사란 객체를 복사할
😀CS를 준비하면서 동시성과 병렬성을 비교해서 설명하라는 예상질문을 보았다. 근데 비교에서 설명한다면 서로의 차이점에 대해서만 설명하게 되지않을까? 일단 동시성과 병렬성이라는 기본 적으로 각 개념이 가지고있는 고유의 특성을 알지못하고 차이점만 알고 있다면 면접에서 쉬
😀이 글에 앞서 포스팅한 동시성과 병렬성 포스팅에서 동시성의 구현에 스레드를 사용하고 멀티태스킹의 구현에 프로세스와 스레드를 사용한다는 내용이 있다. 우리는 일상 용어에서도 프로세스를 사용한다. 일반적인 일의 과정이나 공정을 뜻하는 의미로도 사용하고, 컴퓨터를 사용하
😀프로세스를 땔래야 땔수없는 개념이 스레드이다. 프로세스에 관해 검색을 시도하면 어떻게 해서든 스레드가 연관되서 나온다. 스레드는 왜 프로세스와 땔 수 없는 개념인 걸까?프로세스 내에서 프로세스의 자원을 이용하여 실행되는 여러 흐름의 단위스레드(thread)란 프로세
😀'데이터베이스의 속도를 올리려면 무엇을 해야합니까?'라는 물음에 대한 가장 많은 답변으로 '인덱싱'을 생각해보라 라는 말을 들었다. 배열에서의 인덱스는 알아도 데이터베이스에서 인덱스는 뭔지 알아보자. 인덱스(Index)란? > 인덱스(Index)는 데이터베이스에
복합 인덱스(Composite Index)는 데이터베이스에서 여러 개의 컬럼(열)들을 조합하여 인덱스를 생성하는 것을 말합니다. 단일 인덱스(Single Index)가 한 개의 컬럼에 대해 생성되는 것과는 달리, 복합 인덱스는 여러 개의 컬럼을 함께 사용하여 인덱스를
😀필자는 단기프로젝트를 진행할 때 github action을 통해 CI/CD의 구현을 노력해보았지만, 실패하였다. 실질적인 개념에 대한 이해 없이 기술적인 부분만 만들어내려 했기 때문에 CI와 CD가 어떠한 의미를 가지고 필수적으로 포함해야할 내역이 무엇인지 생각해
😀면접을 위한 CS지식을 정리하면 콜 바이 벨류(Call by Value)와 콜 바이 레퍼런스(Call by Reference)에 대해 정리하게 되었다. 실질적으로는 처음듣는 용어라 조금 접할땐 생소했지만, 몇개의 포스팅을 보니 이건 얕은복사, 깊은복사의 확장판? 이
😀우리가 일상생활에서 나이맞추기 퀴즈? 같은 것을 하거나 주변인과 소통을 하면서 특정 수에 대해서 나는 결과를 알고있고, 상대방이 못 맞췄을 때 힌트를 주기위해서 up & down으로 특정 수를 찾을 수 있게 도와준 경험이나, 이야기를 들어보았을 것이다.예를들어, 필
트리와 그래프 모두 대표적인 비선형 자료구조이다. 선형자료구조와 다르게 데이터 요소들이 계층적으로 연결되어 있다. 그렇다면 비선형 자료구조란 무엇일까? 비선형자료구조란? > 비선형 자료구조(Non-linear Data Structure)란 데이터를 일렬으로 구성하지
이전 포스팅 그래프(Graph)에 이어서 이번엔 트리(Tree)에 대해서 알아보자 트리(Tree)란? 트리는 그래프의 하위 개념 중 하나이다. 트리를 그래프의 특징에 따라서 정의하게 된다면. > 트리는 방향성이 있는 연결된 비순한 그래프이다. 하지만, 트리를 따
😀CS지식 관련 면접질문에 대해서 알아보면 제네릭이란 무엇이고, 컬렉션 클래스에서 왜 제네릭을 사용하지 설명해달라는 질문을 보았다. 대충 구글링 해 본결과는 JAVA공화국인 한국에서 당연히 나올 수 있는 질문이었는데, 필자는 JAVA는 아직 손대 본 적도 없다. 나는
😀이번 포스팅은 스터디그룹에서 주제로 "List, Set, Map, HashMap을 비교해서 설명해보자"였는데, 얼핏보면 일반적인 비선형 자료구조를 이야기하는거 같지만, 그렇게 비교하게 된다면 "List, Set, Map, HashTable"일텐데 마지막 "HashM
함수 선언 시 함수가 받아들일 값파라미터는 함수를 선언할 때 함수가 받아들이는 값을 정의하는 변수라고 할 수 있고, 함수가 호출될 때 필요한 값을 받아들이는 매개체, 함수나 메서드를 정의할 때 사용되는 변수의 이름이라고도 할 수 있다.위와 같은 함수가 있다고 한다면 a
😀TCP와 UDP의 공통점과 차이점을 설명해보라는 CS면접질문을 보고 내게 취약한 네트워크CS지식을 보충할 수 있는 좋은 질문이 될 것이라 판단하여 이 포스팅을 정리하게 되었다. TCP와 UDP를 비교 분석해봐라는 질문이기에 TCP와 UDP를 하나씩 천천히 알아보고
😀이번 포스팅에서는 웹서버(WS)와 웹 어플리케이션 서버(WAS)를 알아보도록 하자. 웹서버(WS) 위키 백과의 웹서버 정의에 따르면 > 웹 서버(Web server)는 HTTP 또는 HTTPS를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일
😀IT용어 정리에서 간단하게 정의만 작성한 오버로딩(OverLoading)과 오버라이딩(OverRiding)에 대해서 예시를 포함해 좀 더 자세하게 알아보도록 하자오버로딩이란 같은 이름의 메소드를 여러 개 정의하는 것이다. Overload의 사전적 의미는 v.과적하다
😀관계형 데이터베이스와 비관계형 데이터베이스에 대해서 알아보고 비교해보자테이블 간의 관계(Relationship)를 표현하면서 데이터를 저장하고 관리하는 데이터베이스관계형 데이터베이스는 테이블 형태로 데이터를 저장하고, 각 테이블은 릴레이션(Relation)이라고 불
😀이번에 CORS포스팅을 정리하면서 URL의 구조에서 Origin을 인용하는데 전 부터 잘 알지 못했던 URL과URN, URI의 자세한 정의나 개념을 이해하고자 이번 포스팅을 정리하게 되었다.URL은 Uniform Resource Locator의 약자로 네트워크상에서
😀이번 포스팅엔 CORS를 알아보고자 한다. CORS를 알아보기 위해서 사전지식으로 Origin과 SOP를 알아야한다. CORS란 (Cross-origin resource sharing)의 약자로 직역하면 '교차 출처 리소스 공유'라 해석하고 말그대로 출처가 다른
😀저번에 개발자로써 첫 면접을 보러갔을 때 CS질문 중에서 옵티마이저(Optimizer)가 무엇인지 설명해 달라는 질문을 받았다. 이때 나는 옵티티마이저에 대해서 들어본 적도, 알아본 적도 없어서 전혀 모르겠다는 솔찍한 답변을 했었다.비록 그 회사에서 콜이 오진 않았
이번엔 카카오 로그인에 대한 구현을 해보기에 앞서 카카오로그인의 기반이되는 OAuth 2.0에 대해서 포스팅을 해보도록 하자. 일반적으로 전혀모르는 것에 대해서는 일단 공식문서가 있는지 없는지 찾아보게 되는데... 이게 참 한국 친화적이지 못한게 많다. OAuth
😀JWT로 인증을 진행하면서 항상 들던생각을 찾아서 정리해 보려고 한다. 🙄JSON Web Token은 왜 헤더로 주고받을까? 개발 초기에 처음 JWT를 사용할 때는 뭣도 모르고 body에 JWT를 집어넣어서 프론트와 주고 받으며 개발을 진행했었다. 하지만 JW
😀지금 나는 작성한 기존의 코드에 대해서 일일히 테스트 코드를 만들고 있다. 항상 테스트 코드에 대해서 검색하고 알아보다보면, TDD라는 용어가 나온다. 정확히 TDD가 무엇이고 어떠한 장점들이 있는지 알아보자. TDD란? TDD는 Test-Driven Develo
😀저번 정규화와 비정규화 포스팅에서는 둘 간의 특징과 비교점에 대해서 포스팅했었다.이번 포스팅에서는 정규화에 대해서 좀 더 자세하게 알아보자.
일반적으로 나는 AWS에서 EC2의 가상 컴퓨터를 빌려서? 서버를 배포한다. 이때 EC2의 OS가 Linux이다.따라서 이 리눅스 컴퓨터의 cmd창 또는 명령프롬프트 또는 터미널창에서 내가 원하는 작업을 하기위해서는 리눅스OS에 대한 명령어를 알고 있어야만 한다.이번에
나는 AWS EC2를 빌려서 node로 만든 프로젝트를 배포할 때 PM2를 설치하여 동작시킨다. 하지만 실질적으로 PM2 무엇인지 정확히 모르고, 그저 처음 프로그래밍을 배울때 이렇게 한다고 해서 사용해왔다. PM2가 무엇인지 알아볼 필요성이 있다고 판단하여 이와 같은
이번에 CI/CD를 위해서 외부툴이 아닌 github에서 제공하는 Github action을 사용해 보고자 이렇게 포스팅을 정리해본다. Github actions 구성요소를 이해할 필요가 있다. github acstions에서 사용되는 yaml파일 내 기본적인
😀저번에 면접에서 DNS가 무엇인지 물어보는 질문에 전혀 대답하지 못했다. 따로 알아보지 않고 어떤말의 줄임말인지 조차 알 수 없어서 D, N, S의 세가지 이니셜만 가지고 추론해야 했는데.. 이게 뭘 추론할 수 있을 수가 없었기에 꿀먹은 벙어리가 되어버렸다. 이번
😀DB작업 속도를 올리는 방법들을 찾아보았을 때 Index, 옵티마이저, 클러스터링, 샤딩 등이 존재했다. 이번 포스팅에선 DB속도 개선을 위한 DB클러스터링이 무엇인지, 어떻게 구성되어있는지 알아보자.Clustering이란 영문 그대로의 번역 "군집화"와 같이 '유
EC2 인스턴스 IP주소는 인스턴스를 강제종료 후 다시 시작을 하면 재할당된다.내가 원치 않은 상황에서 서버가 다운되서 강제로 인스턴스를 종료하고 다시 시작해야하는 경우도 발생하는데,이럴경우 자동으로 변경되는 IP주소 때문에 ssh접속이나 github actions에
메모리 용량문제로 서버가 다운되고 나서 EC2 인스턴스를 확인해 보니 아래와같이 상태검사 1/2 검사통과 상태를 확인할 수 있었고, ssh로 접속하던 서버는 현재 접속되지 않음을 확인할 수 있었다.이 상태검사를 다시 통과상태로 바꿔놔야 인스턴스가 정상적으로 동작하고 I
AWS EC2 인스턴스 프리티어 t2.micro 를 사용한다면, 부족한 메모리용량 때문에 서비스가 중단되는 경우가 있다. 물론 서버에 올려둔 프로젝트의 무게 자체를 줄이는 방법으로 해결할 수도 있지만, EC2에서 가용할 수 있는 메모리 용량을 증가시켜서 해결할 수도
EC2 인스턴스에 ssh로 접속한 후 메모리나, 디스크 용량을 무엇이 얼마나 사용하고 있는지 확인할 수 있는 명령어를 적어본다.df -hfree -hwatch -n -1 해당 명령어 뒤에 위의 용량확인 명령어를 붙이면 watch -n -1 free -h와 같이 작성하면
😀최근 메모리 부족현상으로 인한 에러를 자주 격게 되어서, 메모리 그 자체에 대한 지식이 필요하다 판단하게 되었다. 이번 포스팅에서는 컴퓨터구조의 메모리에 대해서 포스팅해보도록 하자. 메모리란? 컴퓨터 구조에서 메모리는 주기억장치(main memory)를 의미한다.
이번 포스팅에서는 컴퓨터의 핵심 두뇌인 CPU에 대해서 알아보자. CPU란? Central Processing Unit의 약자로, Computer system에서 연산과 제어를 수행하는 가장 핵심이 되는 부품이다. 컴퓨터의 모든 작업은 CPU를 통해서 이루어지고, 사
솔찍하게 누구든지 "클린코드가 무엇이냐?"물어본다면, 누구나 "깔끔하게 다른사람들도 알아볼 수 있고, 코드를 처음 보는 사람도 동작을 직관적으로 파악할 수 있도록 작성된 코드"라고 답할 수는 있을 것이다.문제는 "말로만?"이다. 말로는 위와같이 설명하지만, 정작 코드를