- 개인정보 수집 유효기간 : 단순 구현
- DDD 3장 (4,5장 내용 포함)
단순 구현문제!! 1번으로 나올법하네 ㅋ 하고 봤더니 실제 1번문제였다는 얘기.
알파벳으로 구분되며 1~100의 값을 가지는 각 정책이 있는데, 이는 개인정보를 갖고있는 유효기간(월 단위)을 나타낸다. 각 회원이 가입한 날짜와 회원의 정책, 그리고 오늘의 날짜가 주어졌을 때 개인정보를 파기해야하는지 여부를 따지는 문제였다!
를 빠른 시간에 파바박! 구현해서 끝내야하는 문제였다.
def add_month(year,month,add):
month += add
while (month>12):
year += 1
month -= 12
return year,month
def solution(today, terms, privacies):
answer = []
t_year,t_month,t_day = map(int,today.split("."))
policy = {}
for t in terms:
name,month = t.split(" ")
policy[name] = int(month)
for i in range(len(privacies)):
date,term = privacies[i].split(" ")
ex_year,ex_month,ex_day = map(int,date.split("."))
ex_year,ex_month = add_month(ex_year,ex_month,policy[term])
if (t_year<ex_year):
continue
if (t_year==ex_year and t_month<ex_month):
continue
if (t_year==ex_year and t_month==ex_month and t_day < ex_day):
continue
answer.append(i+1)
return answer
add_month()
함수를 통해 연단위를 넘어가는 개월수에 대해 while
문을 돌며 12씩 빼는 작업을 했다! 또, 개인적으로 isExpired()
하나 만들어서 해당 개인정보를 파기해야하는지 여부를 return하게 하고싶었는데.. (코드 아래쪽 if 3개 연달아 나오는 부분) 커찮아서 그냥 깡구현 해버렸다.
코테 공부하면 "어떻게든 돌아가게만 하면 됨ㅋㅋ"에 빠져서 이렇게 되어버리는 것 같다ㅜㅜ 지금 멘토링으로 객체지향을 하고있는데도.
애그리거트, 그리고 도메인 객체에 대해 설명된 챕터였다. 4,5장은 JPA를 통한 infrastructure의 구현 내용이 있었는데 막 Sort
Pageable
Specification
등등의 문법을 사용해서 화려하게 객체 조회를 이끌어내는 내용이라 대충 읽었다 ㅜ 사실 오늘 3,4,5,6,7,8,9장을 읽었는데 머릿속에 남는건 많이 없고 중요했던 내용 위주로 다시 한 번만 정리해보고자 한다!
EAGER
, LAZY
로딩의 성능 고민을 해야한다는 점Collection
으로 표현된 관계에서, 1:N은 N쪽에서 1의 엔티티를 참조하는 식으로 구현된다. M:N은 중간에 join table을 두어 1:N을 2개로 쪼개는 식으로 구현한다.
썩은 필기와 초콜렛
에에... domain, presentation, service, infrastructure 4개의 패키지 구조로 된 프로젝트다. 컨벤션으로 많이들 사용하기 때문에, 처음 보는 프로젝트의 코드가 이같은 패키지 구조를 따르면 반가워 보일지도?
각 영역이 하는 일은 어제 작성했던 글의 설명과 같다. presentation은 사용자 요청 및 응답 포맷을 맞추고, domain은 애그리거트 기능을 구현하기 위한 데이터와 정책을 설정하고, service는 도메인을 이용해 일정한 기능을 수행하고, infrastructure은 실제 기술 구현과 관련된 코드를 다루고..
DDD 패키지 구조에서 가장 중요한 원칙만 가져가자!!
위와 같은 원칙은, domain영역이 어플리케이션의 정책을 담은 최고수준 모듈이기 때문이며, infrastructure은 실제 기술과 맞닿아있는 최저수준 모듈이기 때문이다. infrastructure에 실제로 구현된 기능이 많기 때문에 해당 객체에 의존하고싶은 유혹이 들 때가 많은데 절대! 그러지 말고 domain에 상위 인터페이스를 추가해 DIP로 사용해야한다고 한다. 이것도 저번에 언급했는데, 기술 때문에 정책이 바뀌고 정책 때문에 기술이 바뀌는 무한나생문참사가 일어날 수 있다고..
도메인 주도 개발 시작하기 - 최범균
존경하는 멘토님과의 멘토링 시간!!!!