。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

프로젝트/BleuAuction

[BleuAuction 리팩토링] 12/4(월) 종1's 코드리뷰

quarrrter 2023. 12. 4. 16:58

[해온 것]

https://github.com/NC7-BleuAuction/bleuauction_be/pull/116

 

[Refactor, Test] Notice 도메인 작업 #113 by seunghyun333 · Pull Request #116 · NC7-BleuAuction/bleuauction_be

작업 PR #113 작업내역 Notice Controller 및 Service Refactoring Notice기능의 TestCase제작 다음 차례는 ,,, 두근두근

github.com

작업내역
Notice Controller 및 Service Refactoring
Notice기능의 TestCase제작

 

 

 

 


열심히 Notice 도메인 작업을 했다. 컨트롤러에서 서비스로 로직 옮기기! 

주문, 주문메뉴, 메뉴 3개의 도메인 작업을 거쳤기에 약간은 익숙하면서도 또 새로웠다. 

새벽에 몰래 작업해서 pr을 날렸는데 감동스럽게도 종1님이 코드를 싹 훑고 코멘트를 다 달아줬다.

일단 봐주신 것도 감동인데 그 새벽에 몰래 쓱 올렸는데 확인해주신게 더,, 충격 땡큐였다. 

 

리뷰 중 하나

 

스트림이,, 뭐지!?

https://timi-d.tistory.com/321

 

Stream

스트림은 java8부터 추가된 배열이나 컬렉션의 요소(List, Map, Set)들을 더 편리하게 가공하고 처리하도록 해주는 반복자 장점: 람다식 사용과 연산 과정에서 불필요한 변수를 남기지 않기 때문에

timi-d.tistory.com

 

 


[앞으로 할 것]

지금 한 서비스에 너무 많은 역할을 부여하고 있어서 기능별로 서비스도 나눠보자고 했다.

모듈서비스는 레파지토리만 받게하고 / 비지니스 로직 처리 x, 단순 crud만 (db 접근하는 것만)

컴포넌트서비스는 모듈을 받아서 로직 만들기 , 비지니스 로직을 처리

 

그리고 각 서비스 별 annotation 만들어놓음 - 컴포넌트, 모듈 // 좀더 확실하게 구분하고 분간하고 싶으면 사용해보라고 했다.

서비스랑 같음 = 서비스 컴포넌트=모듈 서비스

 

package bleuauction.bleuauction_be.server.config.annotation;

import org.springframework.stereotype.Service;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * ComponentService는 비즈니스를 처리해야 하며, 또는 타 서비스 Layer를 참조해야 할때 선언한다.
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Service
public @interface ComponentService {
}

 

package bleuauction.bleuauction_be.server.config.annotation;

import org.springframework.stereotype.Service;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * ModuleService는 단순히 CRUD만 처리하는 Service Layer로 Repository만 주입이 가능하다.
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Service
public @interface ModuleService {
}

 

⇒ 기존의 것은 의존성 문제가 있고, 컨트롤러에서 서비스로 내리면서 순환참조 문제, 컨트롤러는 인증, 인가 정도만 해야하는데 너무 많은 의존을 하고 있고,  서비스에서 트랜젝션 원자성을 지켜야하는데 그걸 못 함. 서비스에서 한개의 트랜젝션의 원자성을 가져보고자 이렇게 수정함. 다른 서비스에서 무엇을 가져와도 일관성있게 작업 가능.

 

https://timi-d.tistory.com/322

 

트랜젝션

트랜젝션이란? 원자성이란? 트랜젝션(Transaction) 작업의 완전성을 보장해주는 것으로, 논리적인 작업을 모두 완벽하게 처리하거나 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적

timi-d.tistory.com

 

 


Optional 쓰면서 .get() 온 사방군데 다 뿌리고 다녔는데..... 

 

https://timi-d.tistory.com/323

 

Optional

Optional은 Java 8에서 도입된 클래스로, 값이 존재할 수도 있고 없을 수도 있는 컨테이너. 주로 NullPointerException을 방지하고자 할 때 사용 => null인지 아닌지, 안전하게 판단하고 싶어서. 검증을 확실

timi-d.tistory.com

 

 


종원님이 member :findById 메서드 만들어놨다고 했다.

앞으로 고치면서 그거 갖다 써야할 것 같고 ,, 일단 서비스 분할보다 코드리뷰 달아주신거 수정부터 시작해야겠다. 

쪼금씩 앞으로 나아가는 느낌이 들어서 아주 좋다. 

 

그리고 리퀘스트 바디를 엔티티로 받는데 DTO로 수정 들어가야한다. 찬찬히,,, 해보겠어. 

다음 목요일 회의까지는 노티스 수정 해야겠다. 추가로 나가는 건 힘들겠어 ..!!