개발 지식(66)
-
(Git) Git의 저장구조(커밋 저장 구조)
거의 모든 개발자는 Git을 사용한다. Git을 사용하는 이유는 여러가지가 있겠지만 아마 저장의 편의성 때문이지 않을까 생각한다. 그럼 Git commit을 입력 했을 때 어떤 일이 일어나는지 알고 있는가? 그 저장 방식을 알고 있는 사람은 극히 드물 것이라 생각된다. 코드의 작동 결과를 이해하는 방법에는 코드를 하나하나 살펴보는 방법도 있지만 DB를 열어서 어떤 결과가 저장되는지 확인하는 방법도 있다. 이렇듯, Git 역시 DB를 확인한다면 훨씬 더 Git에 대한 이해도가 올라갈 수 있을 것이다. 🧐 Git의 DB Git은 어떤 종류의 DB를 가지고 있을까? RDB? NoSQL? Key : Value 형태로 저장되기 때문에 NoSQL의 범주에 포함된다. 그럼 어떤 것이 key고 어떤 것이 value 일..
2022.09.07 -
(Spring) Transactional 사용법
Transactional. 이 어노테이션을 왜 붙이는 지 모른다면, 트랜잭션에 대한 이해도가 부족한 것일 수 있다. Transaction에 대한 이해가 필요하다면 아래 문서를 참고해보자. (Database) 트랜잭션(ACID)과 무결성 구글에 트랙잭션을 검색하면 가장 많이 나오는 말이 있다. "DB의 상태를 변화시키기 수행하는 단위" 그런데 이것 만으로는 트랜잭션에 관해 전혀 감이 오지 않는다. (나만 그런가?) 나는 이 문장 mirrorofcode.tistory.com 그럼 트랜잭션에 대해서 안다고 가정하고 시작하겠다! @Transactional 스프링에서는 트랜잭션 처리를 간편하게 어노테이션으로 처리할 수 있다. 아래 코드를 보자. @Service @Transactional(readOnly = tru..
2022.08.10 -
(Spring) Why Maven? Why Gradle?
Spring Initializer를 사용하거나, Intellij를 사용하면 처음 Spring Project를 만들 때, 두 가지 빌드 방법을 볼 수 있다. Maven과 Gradle 둘 다 사용해보신 분들도 있을 것이고, 하나만 사용해 보신 분들도 있으리라 생각된다. 이번 글은 둘 중 하나만 사용해보신 분들을 위해서 작성되었다. 🧐What is Maven? Maven은 아파치 재단에서 만들어진 오픈소스 툴로, 프로젝트 매니징 툴이다. Project Obejct Model(POM)을 기반으로 하고 있으며, 프로젝트 빌드, 리포트, 도큐먼트 작업까지 관리할 수 있다. Maven을 사용해보신 분들은 알겠지만, POM.xml을 기반으로 프로젝트를 빌드한다. Maven이 추구하는 목표는 다음과 같다. 빌드 프로세스..
2022.08.07 -
(Git) 유구한 역사를 가진(?) 컨벤셔널 커밋
개발자들이라면 git commit 명령어를 날려보지 않은 사람은 없을 것이다. git commit 명령어를 입력하고나면 나오는 창은 바로 커밋 메시지 입력 창이다. 이때마다 우리는 어떻게 작성해야하는지, Feat이라는 단어는 왜 쓰는 것이며, 어떨 때 fix를 사용하는지 등 뭔가 관습적이지만 출처 불분명한 규칙들로 커밋을 작성하곤 한다.(나만 그런가?) 그래서 도대체 이 커밋 문장은 어떻게 작성하는 것인지, 그 기준은 뭔지에 대해서 찾아보던 중 Conventional Commits 규칙을 알게 되었고, 소개하려 한다. (이미 나 빼고 다 아는 거 같지만) 🧐 Conventional Commits (컨벤셔널 데드리프트 아님, 하지만 같은 컨벤은 맞음) 컨벤셔널 커밋은 일종의 조약, 약속에 가깝다. 컨벤셔널..
2022.07.28 -
(JS) var를 지양해야하는 이유
JS가 탄생할 당시에는 변수를 선언할 때 사용할 수 있는 예약어가 var밖에 없었다. 하지만 JS는 점차 발전했고, ES6(ECMA Script 2015)의 발표에서 let과 const가 추가되었다. 제목에서 말했듯, var를 지양하고 let, const를 사용해야하는 이유가 뭘까? 어떤 문제가 있는걸까? 🧐선언 문제 아래 코드를 보자. var computer = "mac"; var computer = "mac2"; var computer = "mac3"; console.log(computer); 이 코드를 실행하면 어떻게 될까? Java와 C++이라면 상상도 하지 못할 일이 발생한다. 에러가 없이 실행이 되는 것도 모자라서, mac3라는 문구가 출력된다. 완전히 동일한 변수 이름으로 다른 값을 넣어 선..
2022.07.23 -
(방법론) BDD와 TDD, 그리고 DDD(행동 주도 개발, 테스트 주도 개발, 도메인 주도 개발)
클린 아키텍처를 다시 읽으면서 BDD에 관한 언급이 아주 짤막하게 있었다. 테스트는 시스템의 일부인가? 아니면 별개인가? 어떤 종류의 테스트카 있는가? 단위 테스트와 통합 테스트는 서로 다른가? 인수 테스트, 기능 테스트, Cucumber 테스트, TDD 테스트, BDD 테스트, 컴포넌트 테스트 등은 어떻지? - 28장 테스트의 경계, 262p 그래서 나는 BDD가 무엇인지 찾아보게 되었고, 아주 놀라운 사실들을 발견할 수 있었다. 🧐BDD(Behavior driven development) 직역하자면 '행동 주도 개발'이다. 어떤 행동을 말하는 것일까? 이 행동은 비지니스 로직에 관한 행동 일 것이다. (역으로 생각하면 BDD의 특징이 비즈니스 요구사항에 집중할 수 있는 것이니) '할인된 상품의 목록을..
2022.07.21