[인프런 워밍업 클럽 BE]4-5일차 강의 정리 + 1주차 과제 정리 및 짧은 회고

이 문서는 아래 강의 정리글입니다.
https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EC%84%9C%EB%B2%84%EA%B0%9C%EB%B0%9C-%EC%98%AC%EC%9D%B8%EC%9B%90/dashboard

 

벌써 스터디를 시작한 지 일주일이 지나간다...! 과제는 나름대로 열심히 하고 강의도 진도표에 맞게 잘 들어왔지만... 바보 같게도 스케줄 관리 실패로 5일차의 중간 점검 라이브 참석을 못해버렸다... 최근의 일 중 가장 멍청했던 일 아닐까 싶다. 완주 혜택은 말끔하게 사라져버렸지만, 일단 끝까지 완수해보려고 한다. 꾸준히 공부하는 것 만으로도 얻는 것이 클테니까.

 

사실 슬슬 이론보다는 코드의 양이 늘어가기에, 이걸 어떻게 정리해야 하나, 고민이 든다. 개인 노션 페이지에는 마음껏 코드를 올리고 있지만, 이곳에서는 최대한 이론만 들고오려 했기에. 그래도 나름대로 필요하다고 생각하는 내용 위주로 정리해보겠다.

 

4일차

 

14강.

업데이트

HTTP 메서드 - PUT

HTTP path - /user

HTTP body - JSON

결과 반환X

변경은 이름만 변경할 예정이다.

-> 식별자인 id와 변경하고 싶은 이름을 가져와 업데이트하기 때문에, request에는 id와 name이 필요

 

@PutMapping - PUT API를 위한 어노테이션

String sql = "";
jdbcTemplate.update(sql, ...);

 

삭제

HTTP 메서드 - DELETE

HTTP path - /user

HTTP 쿼리 - 문자열 name

결과 반환X

->이름을 기준으로 삭제한다.

@DeleteMapping - Delete API를 위한 어노테이션

 

현재 개발 API의 문제

사실 현재 API에는 큰 문제에 있다. 직접 페이지에서 실행했을 때는 문제가 없어 보이지만 포스트맨 같은 곳에서 존재하지 않는 사람에 대해 변경 혹은 삭제를 시도할 경우, 오류가 아닌 200ok를 내고있다.

-> 예외 처리가 필요!

 

15강.

예외 처리

예외 처리를 어떻게 할까? 방식 자체는 간단하다. 자바 기초 문법을 배울 때부터 자주 접하는

throw new IllegalArgumentException(); //500 내부 서버 오류를 던져준

으로 해결된다.

 

근데 아무 곳에서나 예외 처리를 할 수는 없다! 이 데이터의 존재 여부를 확인 후, 예외 처리를 해야한다.

 

즉, 《조회 쿼리로 데이터가 있는 지 확인 => 예외 처리》 순서로 간다.

String sql = "특정 조건에 대한 조회 쿼리";
boolean isNotExist = jdbcTemplate.query(sql, (rs,rowNum) -> 0, request.getId()).isEmpty();

조회 결과가 있을 경우 0이 담긴 리스트가, 없다면 빈 리스트가 나온다는 것을 이용해, isEmpty() 함수로 boolean으로 반환되도록 한다.

만약 isNotExist 가 true인 경우는, 오류를 던지고 그 외에는 정상 처리를 한다.

 


5일차.

 

17강.

Clean Code

Code는 요구사항을 표현하는 언어

→ Clean Code가 왜 필요한가?

→ 실무에 가면 코드를 읽는 것을 피할 수 없다! 그러니 누가봐도 이해하기 쉬운 코드를 쓰자!

스파게티 코드가 되는 것을 막아야한다!

⇒그렇다면 어떻게 클린 코드를?

⇒클래스는 작아야 한다, 그리고 하나의 책임(단일 책임 원칙)만을 갖게 한다!

+ 객체 지향 설계의 5대 원칙 (SOLID) 에 대해 추가적으로 알아보자.

https://www.nextree.co.kr/p6960/
링크를 건 사이트 외에도 다양한 곳에서 정보를 얻을 수 있다!

 

여기까지만 말해도 느껴진다. 이전에 짠 예제 코드는 컨트롤러 내부에서 너무 많은 처리를 하고 있다…! DB와 연결하고, 쿼리를 실행하고, 필요하면 추가적인 처리를 하고, 결과를 변환해서 반환하고…

⇒ 답은 간단하다! 역할을 분리하여 쪼개기!

 

18강.

Controller

API의 진입 지점 / HTTP body를 객체로 변환

사용자의 요청을 받고, 처리 결과를 반환

Service

애플리케이션의 비즈니스 로직

요청 이행을 위한 도메인 객체들이 협력 수행하도록 조정

예외 처리 역시 서비스에서!

Repository

외부와의 통신 담당

 

public class UserRepository {
    private final JdbcTemplate jdbcTemplate;

    public UserRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
}
public class UserService {
    private final UserRepository userRepository;

    public UserService(JdbcTemplate jdbcTemplate) {
        userRepository = new UserRepository(jdbcTemplate);
    }
}
public class UserController {

    private final UserService userService;

    public UserController(JdbcTemplate jdbcTemplate) {
        this.userService = new UserService(jdbcTemplate);
    }
    }
}

그 외 메서드 분리는 강의를 직접 들으며 공부하자!

 


과제

1-5일차 과제는 개인 노션에 별도 정리했기 때문에 과제 링크를 남긴다!

1일차 - https://www.notion.so/1-35973c9bdd624337b2aedfc160524526

2일차 - https://www.notion.so/2-644f4434de87438d8c282edd2e9d39bd

3일차 - https://www.notion.so/3-31c88c0c9fed403281340735b1b01b45

4일차 - https://www.notion.so/4-722e922685c04b6c96675bc093199998

5일차 - https://www.notion.so/5-7013168ec49f4069a051e05f92f8b82c


마치며

나는 사실 스터디 시작 전에도 해당 강좌를 절반 정도 이미 수강했었다. 하지만, 조금 더 기초부터 착실하게 시작할까 하면서 다른 강의를 수강하다 자격증을 준비하다... 꽤나 끝을 보지 못하고 난잡한 목표의 삶을 살고 있었다.

그런데 강의를 들으면서 새로운 과제도 하고, 질문 답변을 하며 열정을 보이는 다른 사람들을 보며 조금씩 동기부여가 되는 기분이었다. 그것과는 별개로 많이 부족한 자신을 뼈저리게 맞닥뜨리기도 했다.

 

과제는 제출하고 의문이 든 것에 관해 내가 한 질문 혹은 다른 분들이 질문한 것에 대한 코치님의 답변을 받을 때마다 역시 최선의 답이 아니었구나, 싶은 후회의 연속이었다. 특히 리서치 위주의 조사는 시간 부족으로 너무 겉만 핥고 지나간 것들도 많은 것 같아 아쉬웠다. 그래도 좋았던 점을 말하자면 과제를 하다 스스로 두루뭉술하게 알고 있던 키워드는 직접 조사하며 개념을 다잡을 수 있었다. 무엇보다 좋은 점은 다른 수강생분들과 같이 사이드 프로젝트를 할 기회를 얻었다는 것! 또 다른 소소한 장점이라면, 강의를 정리하면서 마크 다운 문서를 나름대로 빠르게 작성해나갈 수 있게 되었다.