본문 바로가기

Programming134

Pull Request 009 - 자유게시글 수정 기능 TDD로 구현해보기 지난 글까지 자유 게시글 작성 기능을 모두 마쳤다. 이제는 자유게시글의 수정 기능을 구현해보려 한다. 아 그리고 지난 글의 마지막에서 언급했던 설계 수정은 다시 원상복구 했다. 이유는 다음과 같다. 서비스 레이어의 한 클래스는 엔트리 포인트 역할을 담당하긴 해야한다. 그렇지 않으면 컨트롤러와의 의존 관계가 너무 복잡해진다. 결국 컨트롤러와 통신하는 계층과 레파지토리와 통신하는 계층이 나뉘는 형태를 유지한다. 의존관계가 많이 물려 테스트하기 어렵긴 하다. 이 부분은 천천히 고쳐나가보자. 아무튼 자유 게시글의 수정 로직은 다음과 같다. 자유게시글 수정은 FreeBoardCommandService#updateFreeBoard(FreeBoard freeboard, FreeBoardDto.Put putDto);에.. 2023. 11. 9.
Pull Request 008 - 자유게시글 작성 기능 TDD로 구현해보기 - 마무리 이제 모든 과정을 마쳤다. 마지막으로 FreeBoardService#createBoard(); 메서드의 테스트를 완성시킬 단계다. 지난 과정에서 작성해놓았던 테스트 코드와 기능 코드는 다음과 같다. @Test void createBoardTest(){ FreeBoardDto.Post boardPostDto = new FreeBoardDto.Post(); FreeBoardDto.Response boardResponseDto = boardService.createFreeBoard(boardPostDto); assertThat(boardResponseDto).isNull(); } ////////////////////////////////// @Transactional public FreeBoardDto.Res.. 2023. 11. 9.
6장. 함수형 프로그래밍 함수형 프로그래밍의 핵심 함수형 프로그램과 일반적인 자바 프로그램의 핵심 차이는 변수의 가변성이다. 자바 프로그램은 가변 변수를 사용하며, 가변 변수는 프로그램 실행 중에 상태가 변할 수 있다. 반면 함수형 프로그램(책에서는 클로저 프로그램을 예시로 들었다)은 가변 변수가 없다. 함수형 언어에서 변수는 변경되지 않는다. 불변성과 아키텍처 변수가 가변적이고 불변적인 것이 왜 중요한가? 이유는 대부분의 동시성 문제가 가변적인 변수로 인해 발생하기 때문이다. 레이스 컨디션, 데드락 상태, 데이터베이스 동시 업데이트의 문제는 모두 가변 변수로 인해 발생한다. 어떠한 변수도 갱신되지 않으면 레이스 컨디션, 데이터베이스 동시 업데이트 문제가 발생하지 않는다. 두 문제의 공통점은 하나의 값을 여러 대상이 동시에 바꾸.. 2023. 11. 9.
06. 다양한 연관관계 매핑 연관관계 매핑시 고려할 점 다중성 두 엔티티가 일대일 관계인지 일대다 관계인지의 다중성을 고려해야 한다. 단방향, 양방향 두 엔티티 중 한쪽만 참조하는 단방향 관계인지 서로 참조하는 양방향 관계인지 고려해야 한다. 연관관계의 주인 양방향 관계면 연관관계의 주인을 정해야 한다. - 다중성 다대일(@ManyToOne) 일대다(@OneToMany) 일대일(@OneToOne) 다대다(@ManyToMany) : 실무에서 거의 사용하지 않는다. - 단방향, 양방향 객체 관계에서 한 쪽만 참조하는 것을 단방향, 양쪽이 서로 참조하는 것을 양방향이라 한다. A 엔티티와 B 엔티티가 연관관계를 맺는다 할 때, A의 필드에만 B가 있고 B에는 A가 없다면 단방향이다. 서로의 필드에 서로가 있다면 양방향이다. - 연관관계의.. 2023. 11. 6.
Pull Request 007 - 자유게시글 작성 기능 TDD로 구현해보기 - @SpringBootTest 제거하기 이전에 작성했던 테스트에서는 Service 계층을 테스트하기 위해 @SpringBootTest 애너테이션을 사용했다. @SpringBootTest애너테이션을 사용해도 우리가 원하는 테스트는 가능하다. 필요한 Bean들이 Spring Container에 생성되어 적절히 주입되고, 기능을 올바르게 테스트 해볼 수 있다. 그러나 Bean이 생성된다는 데에서 문제가 생긴다. 테스트는 F.I.R.S.T원칙을 지키도록 작성해야 한다. 그러나 Bean을 모두 생성하는 것은 첫 번째 원칙인 Fast에 어긋난다. Service 계층만 테스트하고 싶은데, 불필요하게 Repository나 Controller계층의 객체들까지 생성하기 때문에 당연히 시간이 오래 걸린다. 따라서 @SpringBootTest 애너테이션을 제거하고.. 2023. 11. 1.
반응형