오늘은 개인과제를 들어갔다 기본적으로 흐름을 파악하고 각 기능을 정리하고는

 

구현을 들어갔는데 자료를보고 내용 정리만 할때는 잘 모르겠었는데

 

직접 구현을 하니까 조금 더 감이 잡힌거 같다

 

아래의 링크를 통해서 주요 개념을 보고 구현 해보았다

https://vuddus526.tistory.com/128

 

[항해99] Spring 입문 (기본 CRUD API 구현)

기본적인 CRUD를 구현하고 이에 활용되는 Lombok, DTO 학습하기 Lombok 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메서드 / 생성자 등을 자동생성해줌으로써 코드를 절약할 수 있도록 도와

vuddus526.tistory.com

 

 

아래는 구현한 코드의 깃허브 주소이다

https://github.com/vuddus526/3WeekTest.git

 

GitHub - vuddus526/3WeekTest

Contribute to vuddus526/3WeekTest development by creating an account on GitHub.

github.com

 

그리고 오늘 기술 매니저님이 오셔서 그동안 궁금했던 점을 몰아서 물어보고

 

다른 조의 질문도 통합해서 정리를 해보았다

더보기

1. 흐름에대한 질문

정석적인방법
main -> controller -> service -> repository ->
service -> controller -> main

1) 메인메서드 동작
2) Controller로 들어가서 url 찾음 (매핑)
3) 예로들어 업데이트 하는 곳으로 갔음
4) id는 pathVariable 로 변수처리, RequestBody는 JSON 타입을
객체로 변환해주는건데 여기서 변환처리 되는 과정이 궁금하다
지금 현재 코드 줄에서 뿅하고 바뀌는건지
5) memoService.update(id, requestDto) 로 값이 들어가서 service로 감
6)그리고 memo.update에 requestDto 담아서 Memo 클래스로 넘어감
7) 거기서 update 메서드에 들어가서 변수에 담기고
8) 다시 service와서 getId를 리턴함
9) controller에 넘어와서 id 리턴하고 끝

그럼 여기서 repository를 가서 DB 저장하는 행위가 있었어야 하는거 아닌가?
혹시 Memo가 entity 로 테이블과 연계된 즉 테이블 자체가 된거니까
변수에 담기는거 자체가 DB에 값이 저장되는 행위라고 보면 되는건가?

//아니다 DB JPA 영속성 컨텍스트
this. 은 Db에 접근하는 행위는 아니다


2. contorller에서 repository, service 어디로 가는가

강의에서 하는건 service 들리지 않고 바로 repository 처리하던데
그것 보단 만약 간단한 get 이라도 service에 메서드 만들어서
service 거치고 repository 처리하고 다시 controller로 반환해주면 되는건가요?

// 컨트롤러에서 레포지토리를 실행해도 상관은 없다 하지만 서비스를 거치는
정석적인 방법을 하는걸 추천한다


3. @RequiredArgsConstructor, @NoArgsConstructor
개념 이해가 잘 안됨, 두개 차이점

//직적찾아보고 정리를해보는걸 추천한다 그러면 밑에 질문들도 해결이될듯


4. final로 선언하면 상수인줄만 알았는데
@RequiredArgsConstructor 없으면
객체 타입만 선언? 하면 빨간줄 뜨던데
그게 final 때문이던데 여기서 final의 역할이 뭔가요?

// @RequiredArgsConstructor 을 알아봐라 final을왜 붙인지 알꺼다


5. @Bean에 대해서
그리고 1주차 실습에는 메인메서드 밑에 @Bean을 썼는데 2주차부터는 쓰지않고도 하자나요? 그건 H2에서 입력 해주느냐 인텔리제이에서 값을 넣어주냐 때문에 그런걸까요?

// 일단 1주차는 잊어버려라 쓸모없다 @Bean에 대해서 구글링해보고 개념만 정리해라


6. @Transactional
강의에서는 메서드가 쿼리로서 작동하게 알려준다 설명하던데
검색해보면 트랜잭션 하게 만들어준다고 하던데 뭐가 맞냐
트랜잭션이라는게 고객이 결제를 할때 판매자가 금액을 바꾸면
결제 오류가 뜨게끔 만들어주는거라 설명하던데
그럼 수정할때는 그럴수 있는데 delete할때는 필요없지 않나?

// @트랜잭션을 왜 쪼개는가를 알아봐라
더티채킹 : 뭐가달라졌지? / 롤백 더티채킹 커밋 에대한 흐름 이해


7. service 클래스에서 전역 변수를 사용하고 if문을 활용해서 로직을 짜도 괜찮은 코드 작성법인가요?

// 해도된다 코딩에 정답은 없다
그러나 효율적인 방법이 있기때문에 다음주 부터 점차 배우게될것이다
하지만 지금 상황에서는 그렇게 처리해주는게 제일 효율적이라고 할 순 있다


8. 개인과제에 data에 객체를 담고 error 처리도하던데 변수를 다 선언해서
담아 넘기면 되는가?

// response DTO 를 찾아봐라
DTO를 활용해서 넘기면 더 쉽게 넘기고 정형화된 코드를 작성할 수 있게 된다

 


9. Bean은 무엇인지?

>bean은 바구니안에든 콩이라 생각하면 이해가 쉽다. 
거기서 service, controller, repository같은 것들을 뽑아오는 것이다! 

>DI 의존성 주입은 중요한 개념이니, 추후 꼭 알아둬야 한다.

 


10. Dto사용이유는 명확하게 무엇 때문인지?

>DB에 있는 엔티티를 직접 다루는 것은 위험하기에, Dto를 대신 다뤄서 DB에 집어넣는다.
Dto는 그런 용도를 위해서 활용한다.

>JPA를 사용하는 곳은 DB와 밀접한 연관이 있는 repository 뿐이다!

>우선 노션위주로 빨리 실습진행 및 과제 진행하는 것을 권장한다.
이론은 실무를 하며 보충해보고 2번보면 이해가 갈수도 있다.

>Entity는 DB에 바로 저장된다.

>Dto는 하나의 데이터 틀이다 → service에서 repository (jpa repository)를 끌어와서 로직을 가공한다음 DB에 다시 집어넣는다. 이게 데이터 이동과정이다!

 

결론적으로는 궁금한 내용은 키워드를 검색해보면 된다는 답변이다

 

어떤 키워드를 적으면 될지 가이드 해주시기도 해서 도움이 많이 되었다

 

또한 헥클이라는 회사의 협력세션이 있었는데

 

앞으로 어떻게 공부를하고 준비해야할지 알게되는 시간이였다

 

오늘 공부시간