본문 바로가기

TIL(Today I Learned)

TIL-230715(항해99 미니 프로젝트-ANABADA(2))

📝오늘 공부한 것

  • 미니프로젝트 - ANABADA 사이트 만들기

 

알게 된 점

계층형 구조(Layered Architecture)? 도메인형 구조(Domain-Driven Design)??

나는 항상 강의에 나온대로 패키지를 계층형 구조로 나눴었다. 그런데 이번 프로젝트에서는 도메인형 구조를 이용하였다. 계층형 구조밖에 몰랐어서 다른 백엔드분이 도메인형으로 패키지를 나눈뒤 git push를 해주셔서 패키지를 왜 이렇게 나눴는지에 대한 이해도 오래걸렸다.

처음에는 controller, service, repository, entity 등이 다 흩어져있어서 찾기어렵고 불편한데 왜 이방법을 쓰는 거지?라고 생각했는데 지금은 프로젝트 크기가 작아서 상관없지만 크기가 커진다면 도메인형이 관련 클래스들이 묶여있어 찾기 쉬울 것 같다.

https://cheese10yun.github.io/spring-guide-directory/#-3

 

Spring Guide - Directory - Yun Blog | 기술 블로그

Spring Guide - Directory - Yun Blog | 기술 블로그

cheese10yun.github.io

계층형 구조 : 전통적이고 간단한 구조로 다양한 애플리케이션에 적용될 수 있음

도메인형 구조 : 복잡한 비즈니스 도메인에 적합하며 비즈니스의 핵심가치를 더욱 잘 반영할 수있음.

-> 프로젝트의 특성과 목표를 고려하여 적합한 구조를 선택하는 것이 중요! 요즘엔 대부분 도메인형 구조를 사용함!

 

 

class, interface, enum, record

class : 객체를 정의해 놓은 것

interface 

 - 일종의 추상 클래스

 - 추상메서드와 상수만을 멤버로 가질 수 있음

enum :

 - 클래스처럼 보이게 하는 상수

https://mine-it-record.tistory.com/204

 

[JAVA] 자바_enum 클래스 (열거형_enumeration type)

- enum 클래스란? - enum 클래스는 열거체(enumeration type)으로 JDK 1.5 이상의 버전에서만 사용이 가능하다. 간단하게 정의하자면 다음과 같다. - 클래스처럼 보이게 하는 상수 - 서로 관련있는 상수들끼

mine-it-record.tistory.com

record 

 - 불변한 데이터를 저장하기 위한 클래스를 간결하게 작성할 수 있도록 지원

 - 필드는 final로 정의됨

 - 멤버변수를 선언할 수 없음. static변수 선언 가능.

 - entity가 될 수 없음!DTO가 적격

https://velog.io/@power0080/java%EC%9E%90%EB%B0%94-record%EB%A5%BC-entity%EB%A1%9C

 

[Java]자바 record를 entity로?

자바의 record를 JPA의 entity로 사용할 수 있을까요? record는 entity보다는 DTO에 보다 적합한 오브젝트입니다.

velog.io

 

enum은 과제에서 User의 권한이 필요했었는데 그 때 UserRoleEnum을 만들어서 알고 있었다. record는 매니저님이 이런게 있다~라고 해서 알고는 있었지만 왜 사용하는지, 어떠한 것인지 알지 못했다. 이번에 프로젝트를 하면서 record를 사용했는데 훨씬 간단했다. 생성자와 Getter 메서드를 작성하지 않아서 코드도 간결해 보였다. 아직 익숙하지 않지만, 적용해보면서 새로운 것들을 익혀야겠다.

 

⛔문제점

기술 매니저님에게

1. request, response에 해당하는 객체의 필드명에 대해 간단히 설명이 있으면 좋겠습니다.

2. response의 필드로 code, result 필드를 사용하고 계시는데 200대 코드를 모두 "success"로 표현하시려는건가요? 이외의 에러 케이스에 대해서도 정리해두시면 좋겠습니다.

3. request 필드명들이 명확하지 않습니다. 좀 더 고민하셔서 직관적인 필드명을 사용하시기 바랍니다.

라는 피드백을 받았다.

 

개선할 점💪🏻

1, 2번 피드백을 반영하여 API명세서를 프론트쪽과 상의하여 수정하였고, 3번에 대해서는 이미 프론트쪽과 백엔드쪽 코드가 많이 진행된 상황이라 당장은 바꾸기 어려워 다음 프로젝트 부터는 변수명만 봐도 어떤 것인지 알수 있도록 이름을 짓기로 했다. 변수명을 짓는 사이트도 찾아봤는데 다음에는 사이트를 활용하여야 겠다.

변수명 잘 짓기!!!

 전체 기능 조회 부분에 페이징 기능을 적용하였는데, 이번에는 예전에 배웠었던 @RequestParam으로 Pageable객체에 page, size, sort를 넣는 방식을 이용하였다. @PageableDefault를 이용하면 쉽다고 했는데 사용해보지 못했다. 다음에는 더 공부해서 꼭 적용해볼것이다.

https://dev-coco.tistory.com/114

 

Spring Boot JPA 게시판 페이징 처리 구현

게시글 리스트를 보여주는 과정에서, 개수가 많아지는 경우 모든 게시글 데이터를 한번에 뿌려주는 것보다 페이지별로 나눠서 보여주는 것이 깔끔하고 데이터 절약에 좋기 때문에 게시글 리스

dev-coco.tistory.com