본문 바로가기

전체 글

(97)
전략적 설계의 Domain-Driven-Design DDD 에 관한 오해  처음 DDD를 접했을 때 느낀 첫인상은 말 그대로 "Domain 특별 대우 아키텍처"이다.  도메인을 직역하자면 "영역" 으로, 서비스 안에서 핵심이되는 메인 이벤트들을 도메인(영역) 단위로 분리하여 각각의 도메인에게 메인 이벤트 관심사를 준다. 즉, 도메인이 책임지는 메인 이벤트는 해당 도메인 안에서 해결되어야 한다.결국 도메인 중심의 객체지향 클린아키텍처라고 생각했다. 하지만 처음 나의 생각과 다르게 DDD가 갖는 가치는 이뿐만 아니라 다른 곳에도 있었다. 전략적 설계의 DDD  DDD는 Domain 을 정의하고 관심사를 분류하는 전략적 설계 관점과, 그 설계를 직접 구현하는 과정의 전술적 패턴 관점으로 나누어 볼 수 있다. 쉽게 말하면 설계에서의 DDD와 구현에서의 DDD 를..
[JavaScript] node.js 의 동작원리 🔨 JavaScript 의 single thread  Node.js 는 싱글 스레드를 기반으로 실행된다. 즉 코드가 실행되면 동작을 지정하고 실행하는 Call Stack 이 단 하나라는 의미이다.이는 그동안 내가 주로 프로그래밍했던 Java 의 실행환경으로서 멀티 스레드인 JRE 와의 가장 큰 차이점이었으며, 작업중 모든 궁금증과 문제의 원인은 이 스레드 내부 동작원리에 기반되어 있었다.   싱글 스레드의 장점은 직관적인 코드 실행 동작 과정과 Dead-Lock 과 같이 복잡하고 디버깅 하는데에 많은 노력이 필요한 버그에 부담이 줄어든다는 것이다. 여담으로 교수님들이 종종 말씀하시길 Dead-Lock 문제는 탄피 찾기 또는 극한의 교통정리에 비유된다. 아마 모든 팀원들이 프래임워크단 부터 하나하나 샅샅..
[JavaScript]동기/비동기? (async/await) 📶 동기(Synchronous)와 비동기(Asynchronous) 개념 정리 동기(Synchronous)란, 서버에 요청을 보냈을 때 그에 대한 응답이 온 후에야 다음 작업을 진행할 수 있는 방식이다.즉 실행되고있는 코드의 작업이 완료된 후에야 다음 코드의 작업을 수행할 수 있다.이러한 방식으로 작업의 순서를 보장하여 코드의 안정성을 확보한다.따라서 대표적으로 결제 서비스와 같이 작업 순서가 보장되어야하는 작업에 필연적으로 쓰인다.  비동기(Asynchronous)란, 반대로 서버에 요청을 보냈을 때 그에 대한 응답이 오지 않아도 다음 작업을 진행할 수 있는 방식이다.즉 코드 작업이 실행될 때 그 작업이 완료되지 않더라도 다음의 코드 작업을 수행할 수 있다.이러한 방식은 병렬작업이 가능하기 때문에 시간..
[Java] java.time패키지 - 코딩밥상 java.time패키지 java.time 날짜와 시간을 다루는데 필요한 핵심 클래스들을 제공 java.time.chrono 표준(ISO)이 아닌 달력 시스템을 위한 클래스들을 제공 java.time.format 날짜와 시간을 파싱하고, 형식화하기 위한 클래스들을 제공 java.time.temporal 날짜와 시간의 필드(field)와 단위(unit)을 위한 클래스들을 제공 java.time.zone 시간대(time-zone)와 관련된 클래스들을 제공 해당 패키지의 가장 큰 특징은 String클래스처럼 '불변(immutable)'이라는 것이다. 그래서 날짜나 시간을 변경하는 메서드들은 기존의 객체를 변경하는 대신 항상 변경된 새로운 객체를 반환한다. (기존 Calendar클래스는 변경 가능하므로, 멀티 쓰..
[Java] 형식화 클래스(Format클래스) - 코딩밥상 형식화 클래스  데이터를 일정한 형식으로 정리하고 싶을때 또는 원하는 형식으로 출력하고 싶을 때, 자바에서 이를 쉽게 해결할 수 있는 방법을 제공하는데 그 것이 바로 형식화 클래스이다. 이 클래스는 java.text패키지에 포함되어 있으며 숫자, 날짜, 텍스트 데이터를 일정한 형식에 맞게 표현할 수 있는 방법을 객체지향적으로 설계하여 표준화하였다. 형식화 클래스는 형식화에 사용될 패턴을 정의하는데, 데이터를 정의된 패턴에 맞춰 형식화할 수 있을 뿐만 아니라 역으로 형식화된 데이터에서 원래의 데이터를 얻어낼 수도 있다. 형식화 클래스에서는 원하는 형식으로 표현 또는 변환하기 위해서 패턴을 정의하는데, 형식화 클래스에서는 패턴을 정의하는 것이 전부라고 해도 과언이 아니다. DecimalFormat 형식화 ..
[Java] Calendar와 Date 클래스 - 코딩밥상 Calendar와 Date Date는 날짜와 시간을 다룰 목적으로 JDK1.0부터 제공되어온 클래스이다. 하지만 그 기능은 턱없이 부족했기 때문에 Calendar라는 새로운 클래스를 그 다음 버젼인 JDK1.1부터 제공하기 시작했다. Calendar는 Date보다 훨씬 보안되었지만 몇 가지 단점들이 여전히 존재했다. 그 후 JDK1.8부터 'java.time패키지'로 기존의 단점들을 개선한 새로운 클래스들이 추가되었다. 그럼에도 불구하고 Calendar와 Date는 자바의 탄생부터 지금까지도 사용되고 있으므로 간략하게 개념과 사용 방법들을 익히면 많은 도움이 될것이다. Date와 Calendar간의 변환 Calendar가 새로 추가되면서 Date는 대부분의 메서드가 'deprecated(더 이상 사용을 ..
[Java] Mac Os Java(JDK)버전 변경하기 - 코딩밥상 Java JDK 버전 변경하기  스프링 강의를 듣기 전에 JDK11버전을 권장하기에 기존 17버전에서 11버전으로 변경하려고 한다. 또는 프로젝트에 따라 팀원들과 버전을 통일 시켜야 하기에 버전을 변경해야하는 경우가 종종 생긴다니 이참에 정리해 보려고 한다. 1. 현재 버전 확인하기 java -version 2. 설치된 자바 버전 확인하기 /usr/libexec/java_home -V 3. zshrc에서 환경변수 설정(경로변경)해주기 vim ~/.zshrc 다음을 터미널에 입력하면 들어가 지는데, 다음처럼 현재 설정되어있는 경로를 볼 수 있다. i키를 누르면 insert모드로 변경되고, 원하는 버전으로 바꿔준 후 esc로 insert모드 꺼주고 :wq를 입력해주면 된다. 마지막으로 source ~/.z..
[Java] java.lang패키지(wrapper 클래스) - 코딩밥상 wrapper 클래스 때로는 기본형(primitive type) 변수도 어쩔 수 없이 객체로 다뤄야 하는 경우가 있다. 이 때 사용되는 것이 래퍼(wrapper)클래스이다. 8개의 기본형을 대표하는 래퍼클래스가 있는데, 이 클래스들을 이용하면 기본형 값을 객체로 다룰 수 있다. 래퍼 클래스의 생성자는 매개변수로 문자열이나 각 자료형의 값들을 인자로 받는다. 이 때 주의할 것은 생성자의 매개변수로 문자열을 제공할 때, 각 자료형에 알맞은 문자열을 사용해야한다는 것이다. 예를 들어 'new Integer("1.0");' 과 같이 하면 NumberFormatException이 발생한다. public final class Integer extends Number implements Comparable{ //....