값 객체에 대해서 29cm 기술 블로그에서 본 적 있다.그때는 유효성 검증 등 한 곳에서 처리할 수 있구나~~~ 만 알고 넘어갔었다.그리고 한 메서드에 대해 오버로딩을 하면서 long 타입 값을 BrandId, StoreId 등으로 래핑하면서 이게 값 객체인가? 생각했던 적이 있다.근데 이번에 DDD를 공부하면서 값 객체가 나왔다... 내가 진짜 조금만 알고 있었구나... 싶었다.한 번 제대로 알아보자 !값 객체 (Value Object)프로그래밍 언어에는 원시 데이터 타입이 있다. int, boolean 등등.. 이 원시 데이터 타입만을 사용하여 개발을 할 수 있지만, 시스템 특유의 값을 정의해야 할 때가 있다. 이때 정의하는 객체를 값 객체라고 한다. 이름으로 예를 들었을 때String fullNam..
TIL
도메인 주도 설계소프트웨어 개발자는 개발만 아는 것이 아닌, 도메인에 대해서 이해를 해야한다. 예를 들어서 물류 시스템을 개발한다면 운송, 배송 과정 등을 배워야한다.개발자는 소프트웨어 사용자에 대해서 이해를 해야한다는 것이다. 물류 시스템을 개발하기 위해서 배송 과정, 연료 등의 정보는 아주 귀중한 정보다.하지만 트럭이 어떻게 움직이는지, 트럭이 무슨 색인지 등의 정보는 가치가 없다.지식을 취사선택 해야한다는 것이다. 도메인 주도 설계는 이러한 고찰을 반복하는 설계를 통해, 이용자의 세계와 소프트웨어 구현을 연결하는 것이 목적이다. 도메인소프트웨어 개발에서 도메인은 프로그램이 쓰이는 대상 분야를 의미한다.더 중요한 것은 도메인에 무엇이 포함되어있는 것인가다. 물류 시스템을 예로 들면 창고, 운송 수단,..
JPA 를 사용하면서 지연로딩과 즉시로딩에 대한 개념을 알고 있었다. 근데 얘네 덕분에 N+1이 발생한다는 사실을 알았다. 사실 n+1에 대해서만 쪼오오끔 알구.. 쿼리dsl로 넘어 갔었어서 정확히 몰랐었다 ㅎㅎ… 이번 프로젝트에소 JPA 위주로 사용하니까 짚고 가려고 한다 즉시로딩@Entity public class Board { @Id private Long id; } @Entity public class Post { @Id private Long id; @ManyToOne @JoinColumn(name = "board_id") private Board board; } 이런 식의 엔티티들이 있다고 치자 @Service @RequiredArgsConstructor public class PostServ..
백준에서 BufferedReader와 StringTokenizer를 사용하라는데 어떻게 사용할지 몰라서 애먹었었다. 둘을 왜 사용하는지는 다음에 설명 내가 우선 Token의 개념을 몰랐음 Token 공백 (띄어쓰기, 개행, 탭) 등으로 구분되는 요소 안녕 하세 요 라고 하면 1. 안녕 2. 하세 3. 요 이렇게 구분 된다. readLine() 하고 nextToken()? 뭐지? 했었는데 Token의 개념을 알면 이해된다. "안녕 하세 요" 를 받고 nextToken()을 하면 "안녕" 이나오고 한번 더 하면 "하세" 가 나오는 것 https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄..
인터넷 계층 인터넷 계층은 장치로부터 받은 네트워크 패킷을 IP주소로 지정된 목적지로 전송하기 위해 사용되는 계층이다. IP, ARP, ICMP 등이 있으며 패킷을 수신해야 할 상대의 주소를 지정하여 데이터를 전달한다. 상대방이 제대로 받았는지에 대해 보장하지 않는 비연결형적인 특징을 가지고 있다. 링크 계층 링크 계층은 전선, 광섬유 무선 등으로 실질적으로 데이터를 전달하며 장치 간에 신호를 주고받는 ‘규칙’을 정하는 계층이다. 참고로 네트워크 접근 계층이라고도 한다. 이를 물리 계층과 데이터 링크 계층으로 나누기도 한다. 물리 계층 - 무선 LAN과 유선 LAN을 통해 0과 1로 이루어진 데이터를 보내는 계층 데이터 링크 계층 - ‘이더넷 프레임’ 을 통해 에러 확인, 흐름 제어, 접근 제어를 담당하..
TCP 연결 성립 과정 TCP는 신뢰성을 확보할 때 '3-way handshake' 라는 작업을 진행한다. SYN 단계: 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보낸다. ISN은 새로운 TCP 연결의 첫 번째 패킷에 할당된 임의의 시퀀스 번호를 말하며 이는 장치마다 다를 수 있다. (ex. 10000) SYN + ACK 단계: 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 다시 클라이언트에게 보내며 승인번호로 클라이언트에게 받은 ISN + 1 을 보낸다. (ex. 서버의 ISN: 5000 / 클라이언트한테 보내는 승인번호: 10001) ACK 단계: 클라이언트는 서버의 ISN + 1 한 값인 승인번호를 담아 ACK를 서버에 보낸다. (ex. 서버에 보내는 승인번호: 5001) 3 ..