전체 글243 [싹틔움] 10/28 개발일지 Service 순환참조 해결 고민 : Repository 직접 의존 / 패서드 패턴 ☘️ [문제 인식]favoriteDictionaryService와 userService 간에 상호 의존 관계가 발생했습니다. favoriteDictionaryService는 사용자가 특정 식물도감을 관심등록 했는지 확인하고 필요시 해제하는 기능을 제공하며, 이 과정에서 유저 조회가 필요합니다. 반면 userService는 사용자가 관심등록한 식물도감 리스트를 조회하여 사용자 정보와 함께 출력하는 기능을 담당하고 있습니다.User 테이블에서 직접 FavoriteDictionary 와 연관관계를 지어서 양방향 관계를 설정하기 보다는 User 객체를 생성할 때 FavoriteDictionary 로 부터 List 를 받아서 출력시키기를 바랬습니다.이로 인해 두 서비스가 서로의 기능에 의존하게 되어 순환 참.. 2024. 11. 2. [싹틔움] 10/25 개발일지 이미지 업데이트 구현 방식 고민 📚 [배경] 회원정보 수정 페이지에서 프로필 이미지 변경이 필요했습니다. 기존에는 회원정보 수정 시, 프로필 이미지, 사용자 이름, 비밀번호 등이 동시에 업데이트되어서 데이터베이스에 저장되었습니다. 하지만, 사용자 경험을 개선하고자, 프로필 이미지 변경 작업을 다른 요청으로 나누고, 데이터베이스 저장을 최종 수정 단계에서 한 번에 처리하는 방식으로 개선하려 합니다. 🌱 [요구사항] 프로필 이미지 변경 요청 시, 즉시 데이터베이스에 반영하지 않고, 회원정보 수정 페이지에 이미지 URL 을 반환해 사용자에게 변경 사항을 시각적으로 확인할 수 있도록 했습니다. 이후 회원정보 수정 페이지의 저장 버튼을 눌러야만 사용자가 변경한 데이터인 이름, 이미지 등이 데이터베이스에 반영됩니다. 회원정보 수정 중 프.. 2024. 11. 2. [CS] CI/CD 파이프라인 구축을 위한 이해 1. CI/CD 는 세 단계를 가진다. 개발, 빌드, 배포각 단계는 하나의 서버 개념이다.2. Jar 파일 빌드 시점에 대한 고민 .jar 파일을 빌드해야하기 때문에 이 과정을 개발 단계에서 포함해서 가져가냐, 빌드 단계에서 가져가냐의 차이는 있다. 빌드 단계에서 .jar 파일을 빌드하게 해놓는다면 Github Actions, Jenkins 등 툴에 따라서 환경을 맞춰줘야한다.이렇게 하면 이미지가 가벼워진다. 개발단계에서 이미지를 만들고 도커파일 자체에서 jdk, gradle 를 정의하고 가져온다면 build 를 어떤 툴로 하든 가능해진다. but, 이미지가 무거워진다는 단점이 있다. 사실상 이렇게 만든 .jar 파일을 배포하면 끝이다.3. 서버 확장 시 생길 수 있는 문제 하지만 나중에 EC2 서버를.. 2024. 10. 28. [CS] Spring Bean 이 없는 세상 PPT : Spring Bean - 프레젠테이션 YOUTUBE : https://www.youtube.com/watch?v=WoFiKb4oAqU 2024. 10. 27. [CS] CI 와 CD 란? PPT : CI/CD - 프레젠테이션 YOUTUBE : [CS발표] CI / CD - YouTube 2024. 10. 27. [싹틔움] 소셜 로그인 버튼 2024. 10. 24. [Spring] 페이지네이션 정리 코드 Controller// 식물사전 리스트 조회@GetMapping("/v1/dictionaries")public ResponseEntity>> getDictionaryList( @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { return ResponseEntity.ok(ApiResponse.success(dictionaryService.getDictionaryList(page, size)));} 🎯 @RequestParam 으로 page, size 를 받고 defaultValue 를 설정함으로서 다른 입력이 없으면 기본 값을 설정해준다. 🎯 Page 로 반환하.. 2024. 10. 23. [CS] ACCESS 토큰과 REFRESH 토큰 💡 Refresh 토큰이 뭐에요 Access 토큰과 비교해서 알아봅시다.구분액세스 토큰리프레시 토큰역할API 호출 시 인증액세스 토큰 재발급수명짧음 ( 몇 분 ~ 몇 시간 )김 ( 며칠 ~ 수개월 )사용 위치모든 API 요청에 사용만료된 액세스 토큰 갱신 시 사용저장 위치브라우저 메모리, 쿠키 등쿠키, 로컬 스토리지 또는 서버만료 시 처리리프레시 토큰으로 재발급만료 시 재로그인 필요 이 두 가지를 함께 사용하면 보안과 편의성을 모두 확보할 수 있다.리프레시 토큰을 통해 자주 로그인하지 않아도 되면서도, 액세스 토큰의 짧은 수명으로 보안을 강화할 수 있다. 💡 어떤 구조로 이 두 가지를 함께 사용할 수 있을까?💡 Access 토큰과 Refresh 토큰을 조합할 때의 주의사항이 뭘까?리프레시 토큰 재.. 2024. 10. 23. [싹틔움] 10/21 개발일지 싹틔움 프로젝트 SA 작성 및 회의, 초기 작업 진행 사항 🌱 개요식물 키우기 가이드 및 정보공유 서비스초보자부터 숙련자까지 누구나 쉽게 반려식물을 키우고 관리할 수 있도록 돕는 정보 제공 및 커뮤니티 플랫폼. 📚 배경코로나 이후 증가하는 홈가드닝코로나19 팬데믹은 많은 사람들이 집에서 보내는 시간을 늘리면서 홈 가드닝의 인기를 높였습니다. 식물은 심리적 안정과 치유 효과를 제공하며, 허브와 다육식물 등의 수요가 급증하고 있습니다. 우리 커뮤니티는 서로의 경험과 정보를 나누며, 홈 가드닝을 즐기는 공간을 만들어 나가고자 합니다.식물키우기 입문자 지원식물에 대한 지식이 부족한 초보자들이 보다 쉽게 반려식물을 관리할 수 있도록 다양한 정보와 가이드를 제공하는 것이 목표입니다.식물 정보 공유이미 식물을 키우고 있는 사용자들끼리 커뮤니케이션할 수 있는 장소를 제공하.. 2024. 10. 22. [CS] 트랜잭션 오버헤드 조회 성능을 최적화 하는 과정에서 트랜잭션 오버헤드를 줄여서 성능을 향상시키는 방법을 몇 가지 제시받았는데, 트랜잭션 오버헤드가 정확히 뭔지 처음 들어봐서 한 번 알아보고자 한다. 트랜잭션 오버헤드가 뭔가요? 트랜잭션 오버헤드란 트랜잭션을 시작하고 유지하며 완료하기 위해 추가적으로 발생하는 비용을 의미한다. 이는 트랜잭션이 데이터의 무결성과 일관성을 보장하기 위해 필요한 여러 작업(락, 로그 기록, 복구 준비 등)에서 발생한다. 이 추가 비용은 CPU, 메모리, 네트워크, 디스크 I/O 등의 리소스를 소비하며 시스템 성능에 영향을 미칠 수 있다. 트랜잭션 오버헤드의 원인에는 뭐가 있나요.1. 트랜잭션 시작 및 종료 작업명령 처리 비용:트랜잭션을 시작하면 데이터베이스는 begin, commit, rollb.. 2024. 10. 21. [Redis] 데이터를 DB 에서 조회하는 것과 캐시 에서 조회하는 것의 차이 // 인기 카드 Top3 조회 ( Redis )@Transactional(readOnly = true)public Map getTopViewCardList() { Set> topCardsWithScores = redisTemplate.opsForZSet().reverseRangeWithScores(TODAY_RANKING_KEY, 0, 2); return topCardsWithScores.stream() .collect(Collectors.toMap( tuple -> tuple.getValue().toString(), // title tuple -> tuple.getScore().int.. 2024. 10. 20. [내배캠] Spring Project 24조 뉴스피드 프로젝트 KPT 회고 KPT 회고KEEP, 다음 프로젝트로 가져갈 · 추가 구현에서 경험한 동시성 처리, Redis를 이용한 캐시의 이점, 쿼리와 인덱스를 이용한 최적화, 젠킨스와 도커를 이용한 CICD까지 직접 구현하진 않은 부분일지라도 팀 노션에 작성된 부분을 통해 간접 경험을 하거나 동료의 구현 모습을 보면서 좀더 본인의 기술을 디벨롭 할 수 있는 경험. · 의견 차이를 커뮤니케이션을 통해 극복하는 자세를 유지하면 좋다. 대부분의 개발이 단체로 이뤄지기 때문에 의견을 수용하고, 배우는 자세를 유지하는것은 매우매우 좋음. · 동시성 처리에서 분산락, 낙관락, 비관락을 활용한 다양한 동시성 처리 방식을 적용해보았고, 각 방법이 특정 메서드에 얼마나 적합한지 확인하는 과정을 거침. · 외부 API 호출을 통한 알.. 2024. 10. 18. [Redis] SpringBoot 에 Redis 초기 세팅 코드 build.gradle// redisimplementation 'org.springframework.boot:spring-boot-starter-data-redis' 의존성 주입RedisConfigpackage com.sparta.springusersetting.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;impo.. 2024. 10. 16. [Spring] Discord 알림 구현 webhookControllerpackage com.sparta.springusersetting.domain.webhook.controller;import com.sparta.springusersetting.domain.webhook.service.WebhookService;import lombok.RequiredArgsConstructor;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestController@RequiredAr.. 2024. 10. 16. [GIT] Remote Repository 등록 및 변경 1. Repository 생성 2. IntelliJ 파일 생성 3. git bash 터미널에 아래 코드 입력 echo "# e" >> README.md git init git add README.md git commit -m "{commit 하고 싶은 문구}" git branch -M main git remote add origin {remote 하고 싶은 Repository 주소}git push -u origin main 4. Remote 및 commit, push 성공!Remote 를 이용해서 Repository 를 변경하면, Repository 를 다른 Repository 에도 적용시킴으로서,backup 파일을 만들다든지, 반복되는 작업을 Repository 를 통해서 해결하고 시작할 수도 있다.현.. 2024. 10. 13. 이전 1 2 3 4 5 ··· 17 다음