Project
-
SpringBoot 3.1.0 으로 마이그레이션Project/TravelFeelDog 2023. 9. 7. 11:32
기존 프로젝트의 버전은 다음과 같습니다. SpringBoot 의 경우 버전 2.7 을 사용중이였고 , Java 의 경우 버전 17을 사용중이였습니다. plugins { id 'java' id 'org.springframework.boot' version '2.7.7' id 'io.spring.dependency-management' version '1.1.0' } group = 'woowahangongdol' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' ///gradle-7.6.1 Java 의 버전 선택에서는 다음 3가지는 필수로 존재하는 버전을 선택 하고자 했습니다. 1. Java 12 버전 에서 도입된 동적 Switch 문 2. Java 14 Dto..
-
SpringBoot MySql bulkInsert 도입기Project/TravelFeelDog 2023. 8. 30. 22:58
배치란 일련의 작업을 한번에 수행하는 작업을 뜻한다고 한다. 1만건의 데이터를 생성한 후 한방 쿼리를 사용하여 데이터베이스에 저장을 하는 테스트 코드이다. @IntegrationTest public class FeedBulkInsertTest { @Autowired private FeedRepository feedRepository; @Test public void bulkInsert() { var easyRandom = FeedFixtureFactory.get( 4L, LocalDate.of(1998, 12, 1), LocalDate.of(2024, 2, 1) ); var stopWatch = new StopWatch(); stopWatch.start(); int _1만 = 10000; var post..
-
Service Layer 에 읽기 쓰기 분리기Project/TravelFeelDog 2023. 8. 10. 13:56
기존의 프로젝트를 진행을 하는데 있어 서비스 레이어는 다음과 같은 목적으로 작성을 하였다. 1. 어플리케이션에서 사용할 로직을 담당한다 . 2. 클라이언트의 인터페이스를 담당하는 컨트롤러 프랜제테이션 계층과 도메인의 비즈니스 로직을 담당하는 모델의 결합을 끊는 역할 3.Dto 매핑을 하는 역할. 4. 다른 도메인 , 루트 에그리거트의 접근을 제어하는 역할. 서비스는 데이터의 crud 와 관련된 로직을 제어 및 호출 하는 역할을 하였지만 하나의 모델과 관련된 기능이 늘어나면서 가독성이 떨어지고 하나의 클라스에서 담당하는 역할이 많아지면서 클라스의 목적이 모호해지는 현상이 생겼다. 추가적으로 , 조회를 위한 조회 성능을 위한 옵션을 설정한 트랜잭션이 자원을 생성하는 매서드 내부에서 호출 되면서 , 트랜잭션의..
-
Firebase 에서 OAuth2 , JWT 로 전환기(1)Project/TravelFeelDog 2023. 8. 8. 19:46
도입 배경 기존의 프로젝트는 웹과 앱 모두를 지원을 하는 상황 , 유저의 로그인 인증여부를 firebase Auth 서비스를 사용하였다. 당시 한달이라는 개발 기간안에 Spring Security 까지 다룰 여력이 부족하여 Firebase Auth 를 사용한 시스템을 이용했다. Firebase Authentication 의경우 이메일 존재여부, 중복여부, 연락처 인증 등 다양한 기능을 지원하니 여력이 부족하면 사용하는 것을 추천한다. 대략적인 흐름은 다음과 같다. Client : 안드로이드 모바일 , 리엑트 웹 등 Firebase : Firebase Authentication service Resource Server : SpringBoot , Node server etc.. 클라이언트의 구글 로그인을 ..
-
yml 환경 변수 설정Project/TravelFeelDog 2023. 7. 18. 16:39
공개된 장소 인 퍼블릭 깃허브에는 데이터 베이스의 정보나 aws 키를 유출하면 안된다. 이러한 사유로 .gitIgnore 를 사용해서 application.yml 전부를 제외를 시켰다. 운영 측면에서 민감한 정보를 가지는 부분 즉 비공개용 정보보다는 공개가 가능한 부분이 많아 환경 변수를 이용하여 관리하고자 한다. .gitIgnore 에는 application-credentials.yml 파일만 설정 하고 나머지 yml 은 전부 공개를 해도 되는 환경으로 변경하고자 한다. 기본 사용부터 보자. 데이테이스의 이름을 변수로 바꾸는 방법이다. 1. graddle 에 다음과 같이 추가 해주자. implementation 'org.springframework.boot:spring-boot-configuration..
-
경로 에러 추가 하기Project/TravelFeelDog 2023. 7. 18. 15:32
프로젝트 중 경로를 잘못 입력했을때 500 에러가 나는 것을 확인 했다. api 를 설계하는데 있어 사용자에게 서버 로직에러인 500 에러를 알려주는것은 좋은 설계가 아니라고 한다. 이를 바꿔 보자. connection 을 확인하는 간단한 api의 코드이다. @RestController @RequestMapping("/test") @AllArgsConstructor public class ConnectionCheckApi { @GetMapping(value="/{test-number}") public ApiResponse getConnectTest(@PathVariable Long testNumber){ return ApiResponse.success(testNumber); } } 위와 같이 포스트맨을 ..
-
AWS s3 이미지 업로더 분리기 (feat. @Configurration 활용)Project/TravelFeelDog 2023. 7. 14. 18:07
기존 코드의 설명을 하면 , 하단의 코드는 서비스 레이어이며 s3 이미지를 담당하는 모듈의 기능들이다. 퍼블릭 클라우드인 aws 의 객체 저장소인 s3 에 이미지 파일을 올리기 위하여 작성을 해온 코드이다. ... @Transactional(readOnly = true) @Service public class AwsS3ImageService { .. public String uploadImageOnly(MultipartFile file, String folderName) throws IOException { .. return amazonS3.getUrl(bucketName, key).toString(); } public List uploadImagesOnly(MultipartFile[] files, St..
-
거기는 업무 관리를 어떻게 하나요?Project/NYAM 2023. 6. 19. 16:29
작년 GDSC 에서 진행을 한 잡페어에서 , 다른 서비스 팀들의 기술에 관한 질문 보다는 어떻게 팀 또는 스쿼드를 구성하는지 , 회의는 얼만큼 하는지 ,스프린트는 어느 주기로 하는지 등을 주로 물어보고 다녔고 그중 가능하면 항상 기술부채를 어떻게 처리를 하는지 많이 물어 보았다. 기술 부채라는 것의 정의가 팀마다 다르긴 한데 당시 속해 있던 리브위드 팀의 기술 부채의 정의란 다음 3개 의 항목으로 정의 할 수 있다. 1. 지금 당장의 지식으로는 해결 할 수 없는, 서비스 운영의 1~2 주 안으로 추가 하지 않아도 되는 기능 2. 미래의 개발을 해야할 아직 명확한 기획안이 나오지 않은 기능. 3. 컨번션 미 준수 사항 수정 및 리펙토링 당시에는 팀원들이 해야할 작업들을 매주 화요일 개발팀 회의를 통하여 정..