inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런 워밍업 클럽 1기/BE] 세번째 발자국

장종원
0

3주차 발자국을 찍으며..

목표를 세우는 것을 좋아하는데, 그 목표가 무너질 때마다 조금씩 힘이 들었던 것 같다.
매 정해진 날짜의 강의만큼은 다 들어야지 생각을 했었는데, 이번주는 여러 일이 겹치며 다 듣지 못해 너무 아쉽고 완주조건인 100%를 언제까지 채웠어야 하는 지는 모르겠으나 어떻게든 짬을 내 최선을 다 해 마무리 완강하고자 한다.
완강 한 이후 이 발자국에 수정하여 적거나, 다음주차 발자국이라도 찍어서 완성했다는 뿌듯함을 꼭 느끼고 싶다.
그래도 배포 전 개념적으로 배워야 하는 수업까지는 완료했기 때문에 큰 걱정은 덜은 것 같다.
git이나 데이터베이스, 리눅스 서버, 배포에 대해서는 어느정도 알고 해보았기 때문에 수업을 이전보다는 어렵지 않게 마무리 할 수 있을 것으로 예상한다.
수업 마무리 열심히 듣고 마지막으로 다음주까지 미니 프로젝트에 대한 과제도 있는데,
미니 프로젝트를 그동안 열심히 배운 것을 활용해서 재밌게 최대한 좋게 잘 만들어 보려고 한다.


섹션5. 책 요구사항 구현하기

조금 더 복잡한 기능을 API로 구성하기. 30~32강

 

{
  "name" : String // 책 이름
}

image④ DTO 생성

image⑤ Controller와 Service 생성, 위와 같은 순서로 완성해나갔다. 비슷한 방식으로 나머지 기능을 완성해나간다.

 

{
  "userName" : String,
  "bookName" : String
}
{
  "userName" : String,
  "bookName" : String
}

객체지향과 JPA 연관관계. 33~36강

[33. 조금 더 객체지향적으로 개발할 수 없을까?]

image

⇒ 위의 것을 아래와 같이 바꿀 수 있겠다

image

image

⇒ 아래와 같이 개선할 수 있겠다.

image


[34. 연관관계]


[35. 책 대출/반납 기능 리팩토링과 지연 로딩]

image

* 위의 그림을 아래와 같이 변경해보자

image

image

@Transactional
    public void returnBook(BookReturnRequest request) {
        User user = userRepository.findByName(request.getUserName())
                .orElseThrow(IllegalArgumentException::new);

//        UserLoanHistory history = userLoanHistoryRepository.findByUserIdAndBookName(
//                        user.getId(), request.getBookName())
//                .orElseThrow(IllegalArgumentException::new);
//        history.doReturn();

        // 위의 코드를 쓰지 않으므로
        // 유저만 가지고 데이터를 처리할 수 있게됨
        user.returnBook(request.getBookName());

image


과제6. 과제#4에서 만들었던 API를 분리해보며,
Controller-Service-Repository 계층에 익숙해져보기

https://slime-feels-660.notion.site/8cf3f404a3bb43f6a0fe08637f0b27e6?pvs=4

6-1. 3계층 레이어로 분리하는 첫번째 문제는 과제#4를 할 때 이미 배운대로 분리해서 작성을 했다보니 엉겹결에 처리되었다.

6-2. @Qualifier와 @Primary를 이용해 인터페이스 레포지토리를 구현한 2가지 레포지토리를 필요에 따라 적용되도록 배운대로 적용해보는 과제였다. 수업에 나온 내용대로 해보면 되는 것이었기 때문에 6-1이 이미 되어 있어 조금 빠르게 마무리할 수 있었다.

과제7. 몇 가지 문제를 통해 JPA를 연습해 봅시다

https://slime-feels-660.notion.site/60c761713fc348a8b963539f11eca3ac?pvs=4

7-1. 테이블 변경을 하고, JPA에 맞게 원래 작성했던 코드에서 수정하였다.
(Entity에서는 카멜케이스로 작성, DB에서는 스네이크케이스로 작성하는 등..)
이유는 정확히 모르겠지만 @Query 어노테이션을 사용하면서 오류가 발생했었는데,
구글링 시 어노테이션 안에 오는 SQL은 JPQL을 사용하는 것이라는 것을 발견했고,
리턴타입으로 Entity가 아닌 것을 반환받으려면 Interface based Projection을 활용해야 한다는 글을 보고
이 인터페이스를 추가해 리턴타입으로 바꾼 후 추후에 Service단에서 원래 reponse타입으로
변경해주는 작업을 넣으니 결과가 잘 나왔었습니다.
※ 추후 더 공부해서 원리를 제대로 알고 쓸 수 있고 싶다는 생각을 했습니다.

7-2. 2번은 Response만 결과에 맞게 생성하고 count만 하면 되어 간단하게 할 수 있었던 과제였던 것 같습니다.

7-3. 1번과 마찬가지로 컬럼을 변경하고 DB와 연결하는 작업 등을 먼저 해주었습니다.
조금 작업이 필요한 과제였는데, 완성하고 나서 결과를 확인했을 때 되게 뿌듯한(?) 느낌이 들었습니다.
이걸로 미니 프로젝트를 제외한 모든 과제를 마무리했는데, 특히 마지막 과제를 하면서 API에 대해 어느정도 익숙해진
느낌이 들며 혼자 해냈다는 생각을 들게 해주어 보람찼습니다. 아마 과제를 내주신 강사님도 이런 느낌을 느끼길 바라 시며 내주신 것 같아서 이런 과제를 만들어주셔서 감사하다는 말씀을 드리고 싶었습니다.


마무리

3주가 진짜 순식간에 지나갔다. 이번주는 특히나 일이 겹쳐 강의도 계획대로 듣지 못했다.
하지만 17일 특강도 듣고 강사님께 질문도 해보며, 나름대로 개발에 대한 생각이라고 해야할까 이런 게 많이 바뀌었다.
하면 할수록 할 수 있는 것도 많아지는 것 같고 정말 재미있다고 생각한다.
조금 남아있는 수업 또한 마무리해서 완강을 찍을 수 있도록 할 것이고..
이렇게 앞으로도 공부할 것을 하나씩 작은 계획을 세우고 계획을 노력해 완성하고 그 계획을 완성했던 동안을 회고하며 이런 방식으로 또 공부할 수 있으리라는 생각을 하게 만들어주는 워밍업클럽이었다.
비록 아쉬운 부분이야 있지만 지금처럼 회고를 하며 의지를 계속 다짐하다보면 잘해나갈 수 있지 않을까 기대해본다.

백엔드 백엔드 워밍업클럽 발자국

답변 0