시작하기 전에 계층형 아키텍처에서 개발을 진행할 때 우리는 보통 Controller, Service, Repository 이렇게 3개의 계층의 구조로 짜게 된다. 이 3개의 계층은 Controller에서 Service로, Service에서 Repository로 의존성이 흐르는데, 이 중에서도 Repository 부분을 보통 JpaRepository나 Mybatis mapper 같은 클래스로 직접 의존성으로 사용하는 경우가 많다. 하지만 Service 계층에서 바로 이런 클래스들에 의존하게 될 경우 몇 가지 문제가 생기게 된다. 이 글에서는 쉬운 예제 작성을 위해 JpaRepository를 사용하겠다. Service에서 바로 JpaRepository를 의존할 때 생기는 문제 Service 계층이 세부 사항..
기존에 테스트 코드를 열심히 짜던 환경도 아니었기도 하고, 프론트엔드 환경에서의 테스트 코드 작성은 처음이다보니 이것저것 어려운 점이 많았다. 문제를 해결해 나가면서 사용한 방법들을 정리해 보았습니다. process.env 모킹하기 운영과 개발 환경을 분기 처리를 하기 위해서는, 다음과 같이 process.env에 의존하게 되는 코드를 짜게 될 때가 많다. export const siteURL = process.env.REACT_APP_ENV === 'production' ? 'https://naver.com' : 'http://localhost:3000'; 이 때 아래 처럼 코드를 짜게 될 경우 예상한대로 동작하지 않는다. it('production일 때 도메인 주소로 설정된다', () => { pro..
💡 소개 이 세션에서는 가장 먼저 아키텍처를 구성할 때 가장 중요한 것이 무엇인지 돌이켜봅니다. 그리고 대부분의 개발자들에게 익숙한 계층형 아키텍처가 갖는 문제점은 무엇인지 이야기해 보고, 조금이나마 유지 보수하기 쉬운 아키텍처를 구성할 수 있는 방법에 대해 소개합니다. 아키텍처에서 중요한 것은 무엇인가? 프레임워크, DB, 테이블 설계, 캐시 등은 세부 사항이다. 중요한 것은 핵심 비즈니스 로직과 유스케이스이다. 핵심 비즈니스 로직: 사업적으로 의미 있는 규칙 또는 절차로써, 시스템의 유무와 상관없이 존재하는 것. ex) 대출을 해주고 이자를 받는 것은 은행이 돈을 버는 업무 규칙 핵심 비즈니스 데이터: 핵심 비즈니스 로직을 처리하기 위한 데이터 이를 가지고 도메인 엔티티를 뽑아낼 수 있음. (핵심 비..
탭을 스페이스바 4개로 전부 '찾아바꾸기'를 하려고 했는데, 찾기에 탭을 입력하면 커서가 이동해버린다. ALT + 9 를 누르면 Tab이 입력된다!
GitHub - Octoping925/MobileEntropyHelper_ChromeExtension Contribute to Octoping925/MobileEntropyHelper_ChromeExtension development by creating an account on GitHub. github.com 📝 계기 내 회사에선 업무 기록을 위해 이슈를 레드마인에서 관리하고 있다. 하지만 매번 이슈가 들어올 때마다 레드마인에 등록하는 것은 여간 귀찮은 일이 아닐 수 없다. 그래서 레드마인 등록을 포함해서, 우리 회사에 만연하고 있는 쓸모없는 반복 작업을 대신해줄 수 있는 크롬 확장 프로그램을 만들어보고자 하는 생각을 했다. 🔍 조사 크롬 확장 프로그램은 웹 개발과 거의 다름이 없는 듯하다. 심지어는..
비트마스킹은 이진법을 이용하여 적은 메모리로 데이터를 저장하는 기법이다 int arr[20]에 0 또는 1의 데이터를 저장하느니, 20자리의 이진수 숫자 하나에 비트 하나당 0, 1의 값으로 데이터를 저장하는 것이 훨씬 이득일 것이다. int bitmask = 0; // 초기화 // [ n번째 값 1로 만들기 ] bitmask |= (1
숫자배열에서 두 번째로 큰 값을 찾는 몇 가지 방법을 소개한다. 방법 1 배열을 내림차순으로 정렬한 후, 두 번째의 값을 반환한다. 이 방법은 무척 코드로 쓰기 간단하지만, O(nlogn) 정도의 시간복잡도가 소모된다는 단점이 있다. Arrays.sort(arr); int second = arr[1]; 방법 2 for문을 사용하여 순회하며 두 번째로 큰 값을 찾는 방법도 있다. int max = -Integer.MAX_VALUE; int second = -Integer.MAX_VALUE; for(int i : arr) { if(i > max) { second = max; max = i; } else if(i > second) { second = i; } } 응용으로 세 번째로 큰 값도 쉽게 구할 수 있다..