본문 바로가기

배운 거/항해99

[항해99] 32일차 - 주특기 심화주차 完

"하하하"

 

 

주특기 심화주차가 끝났다.

 

팀플 과제인데 스스로 기여분이 좀 적은거 같아서 많이 아쉬웠다...

 

그동안 어떻게 과제를 해결해 왔나 싶다..

 

이번주 가장 힘들었던 부분은 Repository에서 원하는 조건을 못불러 오는 거였는데

 

대댓글에 좋아요를 눌렀을때 자꾸 적용이 되질 않아서

 

날새가면서 디버깅을 했는데 알고보니 반환타입을 일치를 안시켰지뭐야..

 

쿼리문을 제대로 사용을 못해서 그런 줄 알고 네이티브 쿼리까지 검색하려다가 

 

간신히 잡아내서 아주 짧게나마 잠에 들 수 있었다...

 

 

아무튼 이번주는 어느 주차보다 많이 배웠다.

 

Spring에서 Request를 받아 처리하는 기본적인 흐름을 이해하는 게 가장 어려웠다.

 

대충 도식화해서 보면 쉽게 이해할 줄 알았는데

백날이고 천날이고 보는 것보다 코드 작성하는게 훨씬 도움됐다.

 

 

과제 중에 좋아요 기능은 이런식으로 구현했는데 중복 예외처리를 어떻게 하지 고민을 되게 많이 했던 거 같다.

 

하나의 메소드로 좋아요와 중복시에는 취소가 되게 구현하는 것도 블로그를 보면서 많이 참조하였는데

 

연관관계 메서드 부분을 모르고 있어서 좋아요 수를 추가하거나 취소할때 

 

comment 값을 가져와서 더하고 줄이고 하는 식으로 진행했다.

 

https://medium.com/react-native-seoul/%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%A3%BC%EB%8F%84-%EC%84%A4%EA%B3%84-domain-driven-design-in-real-project-1-%EB%8F%84%EB%A9%94%EC%9D%B8-83a5e31c5e45

 

도메인 주도 설계(Domain-Driven Design) in Real Project — 도메인

도메인 주도 설계(Domain-Driven Design)는 무엇일까요?

medium.com

그런데 나중에 도메인 주도 설계의 관점에서는 지양해야하는 부분이란 걸 알았다.

 

관련 강의 좀 찾아 들어봐야겠다.

 

 

 

백엔드 개발자라면 API는 눈감고도 짤 줄 알아야한다는 말에 정신이 살짝 들어서

 

일단은 내일 정리하고 해야할 꺼리들을 좀 모아봤다.


 

야자반 숙제 - CRUD 예제 작성하기

 

기초심화반이 항해 과정중에 생겨서 Spring에 기본적인 구조를 익히는 데 도움을 많이 받았다.

 

우선 예제를 통해 CRUD를 구현해보는 API를 만들어 봤는데 

 

구조를 이해하고 직접 만들 수 있다는 게 참 신기했다.

 

아무튼 오늘은 기술매니저님이 만들어보라셨던 예외 처리를 해봤는데

 

거기에 덧붙여서 Exception Handler를 통한 에러코드를 바디로 출력 할 수 있게 하는 다음의 숙제다.

 

그리고 Controller 레이어에서 Entitiy를 노출 시킨 부분이 많아서

 

Dto로 처리도 해주어야한다.

 

거기에 대한 이유는 검색으로 찾아봤는데

 

https://velog.io/@devsh/JPA-API-%EA%B0%9C%EB%B0%9C%EC%97%90%EC%84%9C%EC%9D%98-JPA

 

JPA - API 개발에서의 JPA

근래는 SPA 를 많이 사용하면서 대부분 API 개발이 많죠.API 개발에 JPA 를 사용할 때 주의해야 되는 점들과 쿼리 최적화에 대해서 알아보겠습니다.

velog.io

Controller 레이어에서 엔티티 사용 금지

엔티티를 왜 직접 사용하면 안되는가?

API 의 스펙은 변경되면 아니된다.

API 는 여러 곳에서 사용하게 될텐데, 이 스펙이 변경되면 API를 사용하고 있는 클라이언트에 다 알려줘야 한다.

따라서 이런 경우 기존에 사용되는 엔티티를 데이터 전송을 위한 DTO 를 만들어 사용하는 것이 권장이 아니고 필수다.

조회할 때 응답값으로 엔티티를 외부에 직접 노출하면 안된다.

개발을 할 때 모델과 뷰의 의존성을 줄이려고 한다. 하지만 응답값으로 엔티티를 직접 노출하게 되면서 받는 문제점들이 있다

  • 뷰의 로직이 모델에 추가되게 된다.
  • 엔티티의 모든 값이 노출된다.
  • 엔티티의 변경은 API 스펙의 변경을 초래한다.

등등 과 같은 문제점이 발생한다.

따라서 API 응답 스펙에 맞춰서 별도 DTO을 반환해야 한다.

 

아무튼 이렇게 이해하기로 했다.

 

일단은 코드를 짜면서 기본적으로 배운 생성자를 통한 객체 생성도

생성 메서드를 통해 코드 정리를 할 예정이다.

 

그리고 마지막으로 댓글 기능을 통해 게시글과 Entitiy 연관관계 설정 구현도 할 예정.

 

그럼 정리

 

  • Exception Handler 예외 처리 출력기능
  • Controller 레이어에 노출된 Entitiy를 Dto로 처리.
  • 생성자 -> 생성메서드로 객체생성하게 바꾸기
  • Entitiy 연관관계 설정을 통한 게시글 -> 댓글 기능 구현

이렇게 총 네가지를 진행할 예정이다.

 


코딩테스트 문제풀이

https://www.acmicpc.net/problem/1064

 

1064번: 평행사변형

평행사변형은 평행한 두 변을 가진 사각형이다. 세 개의 서로 다른 점이 주어진다. A(xA,yA), B(xB,yB), C(xC,yC) 이때, 적절히 점 D를 찾아서 네 점으로 평행사변형을 만들면 된다. 이때, D가 여러 개 나

www.acmicpc.net

코딩테스트를 혼자 공부하려니까 재미도 없고 그래서

 

스터디를 하기로 했다.

 

매일 하던 CS스터디는 좀 비중을 줄이고

 

줄인 만큼 코딩테스트에 투자해보려고한다.

 

일주일에 6문제씩 푸는게 목표이긴 한데

 

적당히 내가 발표할 부분 포함 세문제까지만을 일차 목표로 정해두었다.

 

다음주도 화이팅 해봐야겠다.

 


지난 개인과제를 풀면서 집안일을 자꾸 미뤄두고 살았더니

 

결국 초파리가 엄청 많아졌다...

 

대체 이놈들은 어디서 자꾸 나타나는 지

 

잡아도 잡아도 끝이 없다

 

자꾸 모니터 앞에서 왔다갔다하니까 집중도 잘 안되고

 

다시는 설거지를 미루면 안되겠다...

 

일단 오늘의 TIL은 여기까지로 하고 

 

내일 있을 미니 프로젝트 주간도 열심히 해낼 수 있길 기원하면서

 

글을 마쳐본다.

 

그럼 코바!