본문 바로가기

프로젝트44

[Key Word 개발기] Flyway 적용기 부트캠프 협업프로젝트에서 flyway를 적용하기로 했다. 개인프로젝트때도 적용해보기도 했고 특히 협업프로젝트때 적용하면 좋을 것같아서 팀원들에게 적용하자고 말하게되었다. Flyway?? 이미 블로그에 flyway에 대해서 적은 적이 있다. 그럼에도 우리 프로젝트에 왜 flyway를 적용했는지 정리하고자 한다. 일단 flyway란 데이터베이스 마이그레이션 툴로서 데이터베이스 변경사항을 추적하고, 업데이트나 롤백을 보다 쉽게할 수 있도록 도와주는 도구이다. 데이터 마이그레이션이 필요한 이유는 프로젝트를 진행할때 위 그림처럼 여러 환경에서 데이터베이스가 존재한다. 팀원들이 각자 로컬에서 데이터베이스를 이용하기도 하고, CI, Test 할때도 각각 별도의 데이터베이스를 이용한다. 팀원들이 각자 로컬에서 개발을 .. 2024. 1. 5.
[Key Word 개발기] CI/CD 어떻게 할것인가... 협업프로젝트하면서 부트캠프 쪽에서는 CI/CD까지 완성하기를 바라시는 것같다. 물론 하면 좋긴한데... 나뿐만 아니라 우리 백엔드 팀원들이 배포를 해본 경험이 없어서... 잘할 수 있을지 걱정 가득.. 일단 어떻게 CI/CD를 할 것인지 구조는 대충 정해졌다. CI & CD CI는 GitHub Actions를 이용하기로 했다. CD는 Jenkins를 이용한다. CI에서 GitHub Actions를 이용한 이유는 PR과정에서 테스트코드가 작동되는지 확인하는 점이 프로젝트 배포과정에서 오류같은 이슈를 많이 줄것이라고 생각했다. CD에서 Jenkins를 이용한 이유는 처리속도가 Jenkins가 더 빠르다 사실 우리 조가 무중단 배포까지 구현할 수 있을지는 모르겠다. 다만 무중단 배포를 안할 경우 배포되는 시간.. 2024. 1. 2.
[Key Word 개발기] Spring RestDocs 와 Swagger 같이 사용하기 원래 협업 프로젝트때 Spring RestDocs를 통해서 api 문서를 만들려고 했다. 그런데 귀찮은 부분이 있었다. 첫번째 adoc파일을 직접 디자인??해야된다는 점 두번째 문서가 추가되면 asciido 문서를 일일이 편집해야한다는 점 세번째 swagger처럼 직접 테스트 해볼 수 없다는 점이다. 거기다가 팀원분들이 대부분 swagger는 해보셨는데 RestDocs는 처음 사용하시는 것같았다...사실 나는 둘다 사용안해봄... 그런데 찾아보니 Spring RestDocs랑 Swagger를 같이 쓸 수 있는 방법이 있었다. Swagger UI + Spring Rest Docs 위에가 전체적인 흐름이다 1. 기존처럼 테스트코드를 통해 docs문서를 생성 2.docs문서를 openApi3스펙으로 변환 3... 2023. 12. 30.
[2] Spring Batch writer에서 merge발생?? - JpaPagingItemReader,JpaItemWriter파보기 찾았다. 그대의 답을... 이전 [1] 블로그에서 이어쓰려고 했는데 다 지우기에는 나의 사고과정에 대한 기록이 다 사라져서... 따로 블로그를 쓴다. 오늘 트랜젝션 + 영속성 컨텍스트 +OSIV를 공부하다가 깨달은 내용이다. 내가 지금 설명할 부분은 JpaItemWriter, JpaPagingItemReader부분이다. 해당 라이브러리를 살짝 파볼 것이다. 아 그러기전에 결론부터 내리자면 JpaPagingItemReader 에서 entitymager가 생성되고 해당 entitymanger에서 트랜젝션이 시작되고 commit된다 이후 Processor를 거치고(reader의 entitymanger살아있음) JpaItemWriter에 왔을때 새로운 entitymanger를 생성하고 update, insert.. 2023. 12. 29.
[Key Word 개발기] final 컨벤션 개인프로젝트때도 파라미터라든지 수정이 되면 안되는 객체??들한테 final을 붙였는데 협업프로젝트 때에도 나의 추천..???으로 final을 붙이기로 하였다. 근데 나도 사실 다른 분들 깃 보다가 참고한거라 왜 final을 붙이는지에 대해 정확하게 알지 못한다. 이기회에 알아보자구나.. 일단 첫번째로 변수의 재할당을 막기위해 final을 붙였다. 예를들어 public Hello(String hello){ hello="바꾸기" } 이렇게 되면 어떻게 될까?? 의도하지 못한 갑이 할당될 것이다. 물론 그렇지 않기 위해 노력하겠지만 사람인지라..실수가 있을 수 있다. 그래서 만약 파라미터에 final을 붙이면 컴파일 에러가 발생하여 예상치 못한 동작을 사전에 방지할 수 있다. 두번째 수정할 수 없다라는 의미?.. 2023. 12. 29.
[Key Word 개발기] Swagger ?? Spring Rest Docs?? 협업 프로젝트에 들어가면서 api문서에 있어 Swagger를 사용할까??Spring Rest Docs를 사용할까?? 고민하였다. 나는 개인적으로는 Spring Rest Docs를 적용하고 싶었다. 그 이유를 여기서 차차 설명할것이다. 첫번째 Swagger는 운영코드에 침투적이다 Swagger를 사용하려면 컨트롤러단에 코드를 추가해야한다.예를 들어 @ApiOperation(value=" 회원 조회 ") @ApiResponses(value = { @ApiResponse(code=200, message ="회원 존재", response=String.class), @ApiResponse(code=500, message = "서버 에러") } @PostMapping("/member/{id}") public Res.. 2023. 12. 29.
728x90