[프로젝트] usdz-shop ver 1.0.0를 통해 배운 점

2023. 12. 28. 18:50프로젝트

1. Repository는 database 역할을 한다. 즉, 데이터를 저장하고 꺼내오고의 역할을 가진다.

2. Service는 repository 구현체를 주입받아 사용한다. 예를 들어, repository 메소드를 이용해서 신규 회원을 저장하거나 회원을 찾는 역할을 한다. 어떻게 보면 다음과 같이 Repository의 메소드로 위임하는 역할만 하기도 한다.

public Content findOne(Long id) {
        return contentRepository.findOne(id);
    }

3. Entitymanager method는 crud 연산을 포함한다. 또한 atomic하다.
4. Transaction의 특징은 하나라도 실패하면 롤백시키고 모든게 성공해야 한꺼번에 적용한다 즉 consistency를 보장한다.
5. Service는 여러 레포지토리를 사용할 수 있기 때문에 transactional해야한다 또한 핵심 비즈니스 로직을 담는 만큼 그 기능은 transaction을 보장해야 하기 때문에 transactional해야한다.

6. 기본적으로 @Transactional(readOnly = True)로 하고 write가 필요한 메소드에서만 @Transactional annotation을 추가로 등록해주는게 데이터베이스 성능적으로 좋다.

7. @Entity는 JPA에서 하나의 테이블과 같다. 

8. @GeneratedValue는 자동으로 값이 생성될 필요가 있을때 사용된다. 주로 primary key 생성에 사용된다.

9. @Lob은 큰 object를 저장할때 사용된다.

10. XtoOne 관계는 직접 지연로딩으로 설정해야한다.

11. 모든 연관관계는 지연로딩으로 설정한다.

12. @Controller는 요청을 처리하는 곳이다. Service 구현체를 주입받아 여러 로직을 호출하고 그 결과를 이용해 데이터를 리턴한다.

13. @GetMapping, @PostMapping

14. @PathVariable을 사용하면 url에 있는 값을 파싱할 수 있다.

15. @GetMapping, @PostMapping으로 return하는 상대경로는 resources/templates 부터 시작한다.

16. github templates 기능을 이용해보았다. 그 과정에서 issue_template과 pull_request_template을 활용하면 팀원들이 하나의 형식을 사용하기 때문에 통일성을 높일 수 있고 매번 작성할 필요가 없어 간편하다는 이점이 있음을 알게 되었다.

17. github action 기능을 이용했다. 특히, 이 action 기능을 활용하면 push 될 때마다 자동으로 test 코드를 돌려보도록 만들 수 있어 안정성을 향상할 수 있음을 알게 되었다.

18. docker를 이용하여 jar 파일을 컨테이너화했다. 그 과정에서 java를 따로 설치할 필요가 없이 이 컨테이너만 있으면 바로 서버를 띄울 수 있다는 간편성과 호환성이 매력임을 알게 되었다.

19. aws elastic beanstalk을 이용하여 배포해보았다. 그 과정에서 생기는 여러 문제들, 예를 들어, beanstalk 생성 오류 문제, port 번호 설정, 413 request error 등의 문제를 해결하며 실제 상용화를 위해 서버를 할당받아 배포하는 과정을 공고히 하였다.

 

 

Reference


https://github.com/WorldBestProgrammer/usdz-shop-ver-1

 

GitHub - WorldBestProgrammer/usdz-shop-ver-1

Contribute to WorldBestProgrammer/usdz-shop-ver-1 development by creating an account on GitHub.

github.com