이제 코딩배운지 4개월차인 개발자 지망생입니다.
오늘 실전프로젝트 첫 멘토링이 있었습니다.
일주일간의 회고와 프로젝트에 대한 질문답변과 조언을 들었습니다.
SOLID 원칙
클린 코드에 대한 이야기가 나왔는데 멘토님이 SOLID 원칙을 말씀해주셔서 찾아보았습니다.
로버트 C. 마틴이 2000년에 쓴 논문 Design Principles and Design Patterns에서 software rot에 대해 설명하면서 처음 소개된 개념입니다.
S Single responsibility principle (단일책임원칙) - 하나의 클래스는 하나의 책임만 가진다.
O Open-closed principle (개방-폐쇄원칙) - 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야 한다.
L Liskov substitution principle (리스코프 치환 원칙) - 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
I Interface segregation principle (인터페이스 분리 원칙) - 특정 클라이언트를 위한 인터페이스 여러 개가 인터페이스 하나보다 낫다.
D Dependency Inversion principle (의존관계 역전 원칙) - 프로그래머는 "추상화에 의존하며, 구체화에 의존하면 안된다."
2004년에는 Michale Feathers에 의해 SOLID 라는 약어로 소개되었습니다.
SOLID 원칙들은 어떠한 객체지향 디자인에도 적용할 수 있습니다.
애자일 개발 또는 Adaptive software development(ASD)의 방식의 핵심 철학이 될 수 있습니다.
출처:
실전주차 1주차에 대한 회고
솔직히 이번주차는 개인적으로 중요한 큰 이슈가 있어서 부트캠프에 100% 집중하지는 못했습니다.
하지만 맡은 역할은 다 구현을 했고 지금은 관련해서 refactoring을 하고 있습니다.
mapstruct도 처음 써봤고 직접 swagger를 적용하는 것도 처음입니다.
다른 분들의 저와는 달리 깔끔해보이는 코드를 보면서 반성도 하고 제 꺼에 적용도 해보면서 발전해나가고 있습니다.
생각보다 API 명세서를 수정해야하는 부분이 많이 보여서 처음에 설계한 대로 구현하긴 했지만 refactoring 해야할 부분들이 많이 보입니다.
저희 프로젝트는 백엔드 보다는 프론트엔드 부분의 역량이 중요해서 백엔드에 대해서 어떤 도전적인 모습을 보여줄 수 있을까 고민도 했는데 굳이 고민안해도 될 것 같습니다. 생각보다 구현이 어려운 부분이 많습니다.
그래도 부트캠프 처음 들어왔을 때와 지금을 비교하면 천지차이라고 할 수 있습니다.
간단한 CRUD는 그냥 합니다.
이번주차에서 어려웠던 것은 한 request안에 여러 Entity들에 들어가는 값들을 받아와서 따로 그 Entity에 맞는 repository에 저장을 해주는 것이었습니다. 반대로는 (다른 Repository에 있는 정보를 하나의 Response Dto에 넣어서 보내주기)는 했는데 반대를 어떻게 해야할 지에 대한 고민이 있었습니다.
결론은 한 requestDto에 여러 entity의 값들을 받아와서 controller에서 두개의 dto로 나눠 service에 전달을 하는 거였습니다.
코드 공유를 살짝 하자면 아래와 같습니다. MapStruct는 사랑입니다.
@PostMapping("/api/post/{postid}/collabo")
public ResponseEntity<?> collaboRequest(@PathVariable Long postid, @RequestBody RequestCollaboRequestDto requestCollaboRequestDto, @ApiIgnore @AuthenticationPrincipal CustomUserDetails customUserDetails){
collaboRequestService.collaboRequest(postid, requestCollaboRequestDto.tocollaboRequestDetailsDto(), requestCollaboRequestDto.tosaveMusicDto(), customUserDetails.getMember());
return SuccessResponse.toResponseEntity(COLLABO_REQUEST, null);
tocollaboRequestDetailsDto() 와 toSaveMusicDto()로 RequestCollaboRequestDto로 받아온 값들을 나눠서 service에 전달해주었습니다.
지금은 처음에 Musicfile를 하나만 작성할 수 있었는데 API 명세를 보니 조회할때는 musicList로 받아와서 여러개를 requestDto에 담을 수 있도록 수정하고 있습니다. 오늘 이거는 해놓고 퇴근하려고 합니다.
'TIL' 카테고리의 다른 글
TIL JPA List 수정하기 230109 (0) | 2023.01.09 |
---|---|
TIL CRUD 마스터의 길 230108 (0) | 2023.01.09 |
TIL Cleancoding의 필요성을 느끼다 230106 (0) | 2023.01.07 |
TIL List에 List를 넣고 List를 넣어? 230105 (0) | 2023.01.07 |
TIL MapStruct 이해하고 활용하기 230104 (0) | 2023.01.05 |