끝을 보는 용기

Spring 본캠프 Day 061 - 1단계 및 2단계 일정 관리 앱 만들기 중, DTO와 VO 알아 오기 과제 통과!

writingforever162 2024. 12. 6. 23:51

[인용 및 참고 출처]

1. 강의: 스파르타코딩클럽, "[Spring 4기] CH 3 일정 관리 앱 만들기", 부트캠프 소개, (2024.12.06)

2. 구글 검색: Dremio Corporation, "what is value object docs", What is Value Object, (2024.12.06)

 

"개발 공부하신 지 얼마나 되셨죠?"

 

생각해 보니 사전캠프를 포함해도 겨우 두 달이, 본캠프만 따지면 이제 막 한 달이 지났다. 그러니까 이 일정 자체를 소화하는 Spring 4기가 모두 대단한 사람들이었다. 튜터님의 질문에 대답하면서 곰곰이 지난날을 되짚어 보니, '알게 모르게 성장 중이구나' 싶었다. 문득 처음 과제를 받은 날 쓴 TIL이 머릿속을 스쳤다. 그때는 구현은커녕 API 명세서조차 작성하지 못할 줄 알았는데. 자만은 경계해야 하지만, 자존감을 스스로 깎아내리진 말자고 다짐했다.

어떻게든 습관을 되돌리려는 마음이 컸기 때문일까? 알람을 듣기 전에 벌떡 일어났다. 점심과 저녁때 10분씩 운동하면서 다시 습관 다지기에 돌입했다. 내일 아침에 외출 일정을 소화하고 남은 운동 두 가지만 하면 얼추 습관을 다시 잡을 수 있다. 

딱히 인식하지 않았는데 어느새 이것저것 쓰다 보니 글이 90편이 되었다. 본캠프 일정을 막 소화한 직후, TIL을 매일매일 쓸 수 있을까 우려했다. 그땐 정말 항상 버겁다든지 힘들다든지 기운 빠지는 말이 입에서 쉴 새 없이 새어 나왔으니까. 여전히 막히는 부분이 많고 실수도 자주 하는 데다 과제를 제출하며 만족한 적은 단 한 번도 없었지만, '성실성'을 포기하지 않았다는 사실만으로 스스로 더 칭찬하고 아껴도 되겠다 싶었다. 9시에 퇴실 버튼을 누른 뒤에도 새벽까지 함께 공부하는 팀원들을 응원하는 만큼, 나 자신도 응원하고 칭찬해야겠다. 어쩌면 나 자신 칭찬하기가 번아웃(Burnout)을 막을 수 있는 방어책이지 않을까?

 

🥇 토요일: 오늘까지 만든 일정 관리 앱을 데이터베이스에 연동하기 

🥈 일요일: 숙련 Spring 강의 정주행하기    

🥉 일요일: 소설도 읽고, 5일 동안 쌓인 조각 글 정리하기

 

주말에 뭘 할지는 숙련 Spring 강의를 받고 데이터베이스 연동 전 단계까지 구현을 마친 직후 금방 계획했다. 내일이든 일요일이든 열심히 달린 나에게 맛있는 커피 한 잔을 선물하련다.

오늘 데이터베이스 연동 전 단계도 통과하고 어제 받은 과제도 통과하고, 정말 고생했다. 특히 저녁을 먹은 직후 고개 한 번 돌리지 않고 영문을 해석하며 정보를 얻으려고 한 나 자신을 칭찬한다. 

 

1. DTO(Data Transfer Object)

ⓐ Spring에서 DTO: HTTP 요청의 데이터를 전달받거나 계층(layer) 사이를 이동할 때 쓰이는 객체 

ⓑ DTO를 쓰면 좋은 점

- 클라이언트(client)가 엔티티(Entity) 정보를 보지 못하도록 숨길 수 있음 

- 유지 보수가 쉬움 
- DTO와 Entity 클래스의 책임 분리 가능

2. VO(Value Object, 값 객체)

 정의 

id가 없어서 id로 구분하지 않고 특정한 값을 나타내는 불변 객체이다.

A Value Object is an immutable object in software design that represents a specific value with no identity. 

▷ VO는 일단 생성되면 바꿀 수 없으며, 비즈니스 애플리케이션에서 요구되는 고유한 값이나 일련의 값들을 캡슐화하는 데에 주로 쓰인다. 

They are characterized by their immutability, meaning they cannot be changed once created, and their focus on encapsulating a specific value or set of values required for a business application.

ⓑ 특징

불변성: 일단 인스턴스화가 되면, 즉 객체로 생성이 되면, 상태를 변경할 수 없다. 

Immutability: Once instantiated, the state of a Value Object cannot be altered. 

동등성: id와 상관없이 다른 값 객체(VO)와 같은 값을 가지고 있다면 동등하다고 판단된다.

Equality: Value Objects are considered equal if they have the same value, regardless of their identity.

캡슐화: 도메인 개념을 캡슐화하고 값과 연관된 부분을 분리하여 복잡성을 줄인다. 

Encapsulation: They encapsulate domain concepts and reduce complexity by separating concerns specific to their value.