Beyond SW Camp 16기 8~9주차 회고

publicguard_·2025년 7월 24일

Beyond SW Camp

목록 보기
7/9

📅 Week 8 : 07/07 ~ 07/11
7/7 : bootstrap
7/8 : javascript(변수, 객체)
7/9 : javascript(배열, 연산자, 함수, 동적생성, json, 콜백함수)
7/10 : javascript(비동기함수, axios), Spring(환경설정, Controller)
7/11 : Spring(Lombok, 파일처리, json처리)

📅 Week 9 : 07/14 ~ 07/18
7/14 : Spring(DI, DTO)
7/15 : Spring(공통 예외 처리, Spring JDBC)
7/16 : Spring(Mybatis, JPA)
7/17 : Spring(Spring Data JPA)
7/18 : Spring(Spring Data JPA 관계설정, 로그처리, 페이징, Builder 패턴)

WIL(Week I Learned)

[javascript]

  • axios

[Spring]

  • DTO 패턴(toEntity, fromEntity)
  • 공통 응답 처리(ResponseDTO)
  • 공통 예외 처리(@ControllerAdvice)
  • JPA Fetch 속성(FetchType.EAGER FetchType.LAZY), Fetch Join
  • 페이징 처리(Page 객체)

[Algorithm Study : Heart Is Gold]

  • 스터디 종료 및 골드 달성

[정리]
https://github.com/SuOhYoon/AlgorithmSolution
https://github.com/SuOhYoon/spring

한주를 돌아보며....

발목 부상을 당한지 2주가 넘었다.
하지만 인대에 직접 맞는 주사와 클라이밍으로 다뎌진 신체 능력(?) 덕분에 남들에 비해 회복속도가 빨랐고, 현재는 어느정도 보행이 가능할 정도로 발목 상태가 회복되었다.

이제 백엔드에서 제일 중요한 Spring을 배우기 시작했다.
대부분 다 아는 내용이라 지루할것 같았지만, 새롭게 알게 된 것이 많아 뜻깊었던 것 같다. 그 내용은 아래 후술하겠다.

좋았던 점

[발목 상태 호전]
발목 상태가 많이 좋아졌다.
첫날 및 둘째날에는 걷는것도 너무 힘들어서 목발을 짚고 다친발을 디디지 못해 엄청 힘들었지만, 셋째날부터 뒷꿈치를 디디기 시작하더니 이 글 작성 시점(7/24)에는 목발 없이 200m 이상을 걸을정도로 많이 회복되었다. 이 경과대로면 다음주에 부목을 해제하고 보호대로 전환할 것 같다. 아마 다음주 목요일 정도면 암장에 다시 발을 들일 수 있다는 판단이 든다. 아니, 확신이 든다.

[Spring에 대한 심도 있는 이해]
01 Builder 패턴과 DTO와 Entity간의 변환
이번에 Builder 패턴과 DTO 패턴에 대해 제대로 이해하게 되었다.

빌더 패턴은 매개변수의 개수와 매개변수의 순서에 상관없이 객체 생성 가능하다는 점에서 기존 생성자를 통한 DTO 생성 방식에 비해 훨씬 유연하다는 것을 알았다. fromEntity는 엔티티를 DTO로, toEntity는 DTO를 엔티티로 바꾸는 로직이다.

02 공통 응답 및 예외처리
예전에 프로젝트를 했을 때는 공통 응답 클래스를 만들지 않고 각각의 경우에 대한 Request와 Response를 만들었다. Request의 경우 요청값이 각 기능마다 달라 모두 따로 만들어야겠지만, Response의 경우 반환 값이 Data, 상태코드등 공통적이기 때문에 따로 만들어서 관리(유지보수)하기가 힘들었다.

예외 처리의 경우에도 마찬가지다. 예외 처리 로직을 각 기능마다 모두 만들어놔서 유지 보수하는데 어려움이 느껴졌었다. 수업을 들으면서 이에 대한 해결 방법을 이해했다.

응답의 경우는 공통 Response DTO클래스를 만들고, DTO안에 Object 타입 data, HTTP 상태 코드, HTTP 상태 메시지를 넣어 처리한다. 이렇게 되면 불필요하게 응답 클래스를 여러개 만들지 않고 하나만 만들어서 여러 경우마다 응답을 다르게 처리할 수 있게 된다.

예외의 경우 자주 발생하는 오류(IllegalArgumentException, NoSuchElementException등)는 공통 예외를 처리하는 클래스를 만들고 @ControllerAdvice를 선언해 공통적으로 발생하는 예외를 해당 클래스에서 처리되게 만들면 된다.

03 JPA의 N+1 처리 방법
이번에 수업을 들으면서 JPA의 N+1 문제가 뭔지 알게 되었고, 이를 해결하는 방법에 대해 배우게 되었다.

JPA의 기본사상은, 연관관계에 있는 테이블의 데이터를 먼저 JOIN을 통해 데이터를 한꺼번에 가져 오는 것이 아닌, 추후에 연관 엔티티 참조시에 연관데이터를 조회하는 전략을 취한다 -> 이때에 조회하는 방식으로 인해 N+1 문제 발생

무슨 말? 예시를 통해 이해해 보자.

  • 자식 엔티티를 조회하면, 자식 엔티티를 로드하는 1번의 쿼리와 부모엔티티(10개가 있다고 가정) 로드를 위한 10번의 쿼리가 발생하여 총 11번의 쿼리 발생

위와 같이 다수의 쿼리로 인한 성능이슈 해결책으로 jpql의 fetch join을 사용한다.

@Query("SELECT p FROM Post p JOIN FETCH p.author")
List<Post> findAllWithAuthor();

fetch join을 통해 연관엔티티를 한꺼번에 가져옴으로서 N+1을 방지할 수 있다.

04 페이징 처리
전에 프로젝트를 개발할때, 페이지 처리를 굉장히 힘들게 개발했던 기억이 있다.
그러나 수업을 배우면서 어이가 털릴정도로 쉽게 PagePageable를 이용해서 페이징 처리를 하는 방법을 알아냈다.

아쉬웠던 점

3주간 클라이밍을 못한 것에 따른 근육량 감소 및 체지방 증가
제목 그대로다. 3주간 클라이밍을 안하니까 근육량이 감소하고 살이 조금 찐것 같다. 그래서 체력이 클라이밍 이전으로 돌아가려고 한다 ㅜㅜ

다음주에 무조건 복귀를 시도해서 다시 체력을 부상 이전으로 정상화시켜야 한다.

개선해야 할 점

이제부터는 백엔드 개발에 있어 가장 중요한 부분을 배우므로, 복습을 철저히 해야겠다.

마무리

다음주 클라이밍 복귀 예정인만큼 부상 재발 방지에 만전을 기하고, 복습을 철저히 해서 배운 내용을 까먹지 않도록 노력해야겠다.

profile
백엔드 개발자로 하루하루 성장 중인 publicguard_의 개발일기입니다.

0개의 댓글