inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

PathVariable과 RequestParam, Test Code에 관하여

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요 쿠케님 강의 잘 듣고 있습니다. 너무 좋아서 팀원들한테도 전파했을 정도입니다. 다들 구매예정이시라고 하네용 강의 듣는 도중 궁금점이 생겼는데 PathVariable과 RequestParam의 가장 큰 차이점은 단 하나의 유일한 자원의 식별자를 url 경로에서 표현하는가의 여부로 배웠습니다. 그래서 저는 articleId의 경우는 PatVariable로 남겨두었습니다. 이 두가지를 구분하는 쿠케님의 기준이 있으실까용? 이 강의에서 테스트는 전부 JUnit이 아닌 다른 것들로 수행 중이신데요. 실제로 테스트 코드 작성하실때도 JUnit을 사용하지 않으시나요? 아니면 그냥 강의 진행 편의상 JUnit을 사용하지 않으신건가요? 감사합니다.

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
wisehero 댓글 2 좋아요 0 조회수 225

좋아요 동시성 로직 관련 질문

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요 강사님, 좋은 강의 잘 듣고 있습니다. 바쁘실텐데도 불구하고 답변해주셔서 감사합니다. 질문은 크게 2가지 입니다. 유니크 제약 조건 위반시 예외처리방법 like() 로직에선 article_id와 user_id로 유니크 제약 조건을 걸어서 한 명의 사용자가 중복 생성하는 것을 막고 있습니다. 이 유니크 제약 조건을 위반하여 발생하는 에러는 @ControllerAdvice에서 @ExceptionHandler(DataIntegrityViolationException.class) 로 시작하는 핸들러를 통해서 처리하는 것이 일반적인가요? 2.unlike()에서 한 명의 사용자가 삭제 중복요청시 발생하는 동시성 문제 @Transactional public void unlikePessimisticLock2(Long articleId, Long userId) { articleLikeRepository.findByArticleIdAndUserId(articleId, userId) .ifPresent(articleLike -> { articleLikeRepository.delete(articleLike); ArticleLikeCount articleLikeCount = articleLikeCountRepository.findLockedByArticleId(articleId).orElseThrow(); articleLikeCount.decrease(); }); } 한 명의 사용자가 "좋아요" 중복 생성 요청하는 것을 방어하는 로직이 있으니 "좋아요 해제" 중복 요청에 대한 고려에 대해서 생각해봤습니다. 이 로직에선 findLockedByArticleId 에서 베타락을 걸게 되어서 하나의 article에 대한 여러 사용자의 "좋아요 해제" 요청시의 동시성 문제를 방어하고 있습니다. 그런데 한 명의 사용자가 "좋아요 해제" 중복 요청 시에 ifPresent 구문을 통과하게 되어 articleLikeRepository.delete(articleLike);를 여러번 수행하게 됩니다. 여기서 delete는 멱등성이 보장되니 큰 문제 없이 넘어가겠지만 그 아래 count감소 로직은 해당 트랜잭션들이 베타락을 획득할 때마다 계속 수행되는 것이 아닌지 궁금합니다. 일단 ifPresent 구문 안으로만 들어오면 count감소는 무조건 일어나게 되니 문제가 생기는게 아닐까요? 그래서 ifPresent구문 전에 락을 걸기 위해 findByArticleIdAndUserId() 여기서 락획득이 이루어져야 하는건 아닌지 궁금합니다. 작성하다 보니 질문이 길어져서 죄송합니다.

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
차성호 댓글 2 좋아요 3 조회수 324

redis-cli 데이터 적재 확인

미해결

15일간의 빅데이터 파일럿 프로젝트

HBase에 적재까지는 확인했는데 redis에는 아무것도 안뜹니다...

  • 빅데이터
  • hadoop
  • kafka
  • zookeeper
  • redis
  • flume
  • impala
  • 데이터-엔지니어링
댓글 2 좋아요 0 조회수 167

CommentServiceTest에서 테스트 오류가 나요.

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. [문의사항] 강사님의 코드 그대로 따라서 하나하나 작성하고, 모든 부분의 설정을 똑같이 했습니다. Comment 테스트 중에 <삭제할 댓글이 자식 있으면, 삭제 표시만 한다.> 는 성공이 되었습니다. 그러나 <하위 댓글이 삭제되고, 삭제되지 않은 부모면, 하위 댓글만 삭제한다.> 부분의 테스트를 그대로 따라했는데, mockito.exceptions.misusing.UnnecssaryStubbingException 오류가 납니다. 강의 자료로 올려주신 소스코드를 그대로 복사하여 붙여넣기 해도 같은 오류가 납니다. 소스코드와 에러메세지 작성드리며, 같은 환경에서 똑같은 소스코드를 작성했는데 어떻게 오류가 나는지 궁금합니다. 해결 부탁드립니다 ㅠㅠㅠ package kuke.board.comment.service; import kuke.board.comment.entity.Comment; import kuke.board.comment.repository.CommentRepository; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import java.util.Optional; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class CommentServiceTest { @InjectMocks CommentService commentService; @Mock CommentRepository commentRepository; @Test @DisplayName("삭제할 댓글이 자식 있으면, 삭제 표시만 한다.") void deleteShouldMarkDeletedIfHasChildren() { // given Long articleId = 1L; Long commentId = 2L; Comment comment = createComment(articleId, commentId); given(commentRepository.findById(commentId)) .willReturn(Optional.of(comment)); given(commentRepository.countBy(articleId, commentId, 2L)).willReturn(2L); // when commentService.delete(commentId); // then verify(comment).delete(); } @Test @DisplayName("하위 댓글이 삭제되고, 삭제되지 않은 부모면, 하위 댓글만 삭제한다.") void deleteShouldDeleteChildOnlyIfNotDeletedParent() { // given Long articleId = 1L; Long commentId = 2L; Long parentCommentId = 1L; Comment comment = createComment(articleId, commentId, parentCommentId); given(comment.isRoot()).willReturn(false); Comment parentComment = mock(Comment.class); given(parentComment.getDeleted()).willReturn(false); given(commentRepository.findById(commentId)) .willReturn(Optional.of(comment)); given(commentRepository.countBy(articleId, commentId, 2L)).willReturn(1L); given(commentRepository.findById(parentCommentId)) .willReturn(Optional.of(parentComment)); // when commentService.delete(commentId); // then verify(commentRepository).delete(comment); verify(commentRepository, never()).delete(parentComment); } private Comment createComment(Long articleId, Long commentId) { Comment comment = mock(Comment.class); given(comment.getArticleId()).willReturn(articleId); given(comment.getCommentId()).willReturn(commentId); return comment; } private Comment createComment(Long articleId, Long commentId, Long parentCommentId) { Comment comment = createComment(articleId, commentId); given(comment.getParentCommentId()).willReturn(parentCommentId); return comment; } }

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
유지상 댓글 4 좋아요 0 조회수 298

화면에 글씨가 너무 작아요 ㅠㅠ

해결됨

[실습] 대기업 근무하며 경험한 Redis를 야무지게 사용하기

화면 글씨가 인간적으로 너무 작은거 같아요.. 아이패드 11로 보고 있는데..눈 빠질거 같아요 ㅠㅠ 보는 사람을 배려해서 강의 제작 하셨으면 좋겠어요..

  • spring
  • redis
  • redisinsights
  • cache
nhs0912 댓글 1 좋아요 0 조회수 128

좋아요 구현 오류 질문입니다.

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 혼자 해결해 보려고 3일 동안 했는데 해결을 못해서 질문 드립니다. likeAndUnlikeTest() 실행하면 이런 오류가 발생합니다.. 디버깅 해보니 여기까지는 되는데 다음에 AopUtils로 넘어가서 구현체까지 넘어가는데 어디 문제인지 모르겠습니다!.. 이게 테스트 코드이고 DB까지 강의랑 똑같이 했습니다,,

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
pay 댓글 2 좋아요 0 조회수 217

해당 강의가 실제로 현업에서 쓰는 방법들인가요??

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님 이번에 강의를 구매한 학생입니다. 해당 강의가 실제로 현업에서 사용될 수 있는 방법들인가요? 해당 강의를 수강하고, 이를 바탕으로 프로젝트에 녹여내볼려고 하는데 현업에서 사용하지 않는 방법들이라던가 교육용 강의라면 고민을 좀 해봐야 될 것 같아 문의글 남깁니다 감사합니다.

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
blackhole124 댓글 2 좋아요 0 조회수 226

카프카 토픽 생성에서 에러

미해결

15일간의 빅데이터 파일럿 프로젝트

25/02/26 18:11:20 INFO zookeeper.ZooKeeper: Session: 0x0 closed 25/02/26 18:11:20 INFO zookeeper.ClientCnxn: EventThread shut down 25/02/26 18:11:20 INFO zookeeper.ZooKeeperClient: [ZooKeeperClient] Closed. Exception in thread "main" kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING at kafka.zookeeper.ZooKeeperClient$$anonfun$kafka$zookeeper$ZooKeeperClient$$waitUntilConnected$1.apply$mcV$sp(ZooKeeperClient.scala:242) at kafka.zookeeper.ZooKeeperClient$$anonfun$kafka$zookeeper$ZooKeeperClient$$waitUntilConnected$1.apply(ZooKeeperClient.scala:238) at kafka.zookeeper.ZooKeeperClient$$anonfun$kafka$zookeeper$ZooKeeperClient$$waitUntilConnected$1.apply(ZooKeeperClient.scala:238) at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:251) at kafka.zookeeper.ZooKeeperClient.kafka$zookeeper$ZooKeeperClient$$waitUntilConnected(ZooKeeperClient.scala:238) at kafka.zookeeper.ZooKeeperClient.<init>(ZooKeeperClient.scala:96) at kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1824) at kafka.admin.TopicCommand$ZookeeperTopicService$.apply(TopicCommand.scala:262) at kafka.admin.TopicCommand$.main(TopicCommand.scala:53) at kafka.admin.TopicCommand.main(TopicCommand.scala) 카프카 토픽생성에서 이런 에러가 뜹니다...

  • 빅데이터
  • hadoop
  • kafka
  • zookeeper
  • redis
  • flume
  • impala
  • 데이터-엔지니어링
지욱 댓글 2 좋아요 0 조회수 171

8강 Spring Boot 프로젝트 세팅 2

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

8강 Spring Boot 프로젝트 세팅 2 강의를 반복해서 보고 있습니다. 강의에서는 Multi Module 을 생성하기 위하여 Directory 를 생성하고, build.gradle 파일을 생성한 후 코드 입력 settings.gradle 에 Module 정의를 하시고 계십니다. 인텔리제이에서는 프로젝트에 Module 을 추가하기 메뉴가 있습니다. 인텔리제이 에서 프로젝트에 Module 을 추가하면, 강좌파일의 모듈처럼 생성이 되지 않습니다. project/module1, project/module2 이렇게 1단계 모듈만 작성이 가능합니다. 인터넷 검색자료에도 모듈작성이 1단계방식(에를들어 service-article, service-like)으로 되어 있습니다. 계층구조가 강의 내용이 보기 깔끔하여 따라 해보려 하는데 잘 되지 않습니다 디렉토리를 2단계로 작성( project/service/article)하고 build.gradle 파일을 직접 생성하면 "dependecies" 키워드도 자동안성이 되지 않습니다 인텔리제이 버전은 "IntelliJ IDEA 2024.3.3 (Ultimate Edition)", "Build #IU-243.24978.46, built on February 11, 2025" 입니다 인텔리제이가 버전업이 될때마다 메뉴라던가, 기능이 많이 바뀌기는 합니다만. 조금 답답합니다

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
내멋으로 댓글 2 좋아요 0 조회수 190

댓글 최대 2 depth - CUD API 테스트 & 테스트 데이터 삽입 RestClient 호출시 null

미해결

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 댓글 최대 2 depth - CUD API 테스트 & 테스트 데이터 삽입 시 RestClient 호출시 null 발생 됩니다. 혹시 어느 부분을 봐야 할까요?? > Task :service:comment:test CommentApiTest > create() FAILED org.springframework.web.client.ResourceAccessException at CommentApiTest.java:36 Caused by: java.net .ConnectException at CommentApiTest.java:36 Caused by: java.net .ConnectException at Utils.java:1041 Caused by: java.nio.channels.ClosedChannelException at SocketChannelImpl.java:202 1 test completed, 1 failed > Task :service:comment:test FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':service:comment:test'. package kuke.board.comment.service.api; import kuke.board.comment.service.response.CommentResponse; import lombok.AllArgsConstructor; import lombok.Getter; import org.junit.jupiter.api.Test; import org.springframework.web.client.RestClient; public class CommentApiTest { RestClient restClient = RestClient.create("http://localhost:9001"); @Test void create() { CommentResponse response1 = createComment(new CommentCreateRequest(1L, "my comment1", null, 1L)); CommentResponse response2 = createComment(new CommentCreateRequest(1L, "my comment2", response1.getCommentId(), 1L)); CommentResponse response3 = createComment(new CommentCreateRequest(1L, "my comment3", response1.getCommentId(), 1L)); System.out.println("commentId=%s".formatted(response1.getCommentId())); System.out.println("\tcommentId=%s".formatted(response2.getCommentId())); System.out.println("\tcommentId=%s".formatted(response3.getCommentId())); } CommentResponse createComment(CommentCreateRequest request) { return restClient.post() .uri("/v1/comments") .body(request) .retrieve() .body(CommentResponse.class); } @Getter @AllArgsConstructor public static class CommentCreateRequest { private Long articleId; private String content; private Long parentCommentId; private Long writerId; } }

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
요조 댓글 2 좋아요 0 조회수 172

동영상 질문

해결됨

[개념 & 이론] 대기업 근무하며 경험한 Redis를 야무지게 사용하기

원래 설명만하고 화면은 고정인가요?? 화면 하나만 띄우고 설명만 있는거 같아서 저만 그런가 하고요..

  • 아키텍처
  • redis
  • cache
허지훈 댓글 2 좋아요 2 조회수 169

이벤트 폴링이 안되시는 분들

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

스프링 최신버전으로 하신분들은 messageRelayPublishPendingEventExecutor가 Executer를 반환하면 안되고 TaskScheduler를 반환해야 한다고 하네요. @Bean public TaskScheduler messageRelayPublishPendingEventExecutor() { ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.setPoolSize(1); scheduler.setThreadNamePrefix("task-scheduler-"); scheduler.initialize(); return scheduler; } 이렇게 작성하시고 ArticleApplication에 @EnableScheduling을 추가해주시면 이벤트가 잘 폴링됩니다. @EntityScan(basePackages = "kuke.board") @SpringBootApplication @EnableJpaRepositories(basePackages = "kuke.board") @EnableScheduling public class ArticleApplication { public static void main(String[] args) { SpringApplication.run(ArticleApplication.class, args); } }

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
gudwlszz 댓글 2 좋아요 1 조회수 176

댓글 무한 depth 질문입니다.

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요 강사님 강의 잘 듣고 있습니다. 댓글 무한 depth 강의를 듣고 있는 도중에, 전부터 궁금했던 내용인데 Repository에 extends JpaRepository를 하면 @Repository를 안 붙여도 되는 걸로 알고 있는데 붙이시는 이유가 따로 있으신지 궁금합니다. https://sudo-minz.tistory.com/147 참고했던 블로그 글입니다!

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
pay 댓글 2 좋아요 1 조회수 305

HotArticleApiTest 오류

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

package kuke.board.hotarticle.api; import kuke.board.hotarticle.service.response.HotArticleResponse; import org.junit.jupiter.api.Test; import org.springframework.core.ParameterizedTypeReference; import org.springframework.web.client.RestClient; import java.util.List; public class HotArticleApiTest { RestClient restClient = RestClient.create("http://localhost:9004"); @Test void readAllTest() { List<HotArticleResponse> responses = restClient.get() .uri("/v1/hot-articles/articles/date/{dateStr}", "20250225") .retrieve() .body(new ParameterizedTypeReference<List<HotArticleResponse>>() { }); for (HotArticleResponse response : responses) { System.out.println("response = " + response); } } } 섹션 6 인기글 Producer&Consumer 테스트 테스트 코드 실행 오류가 발생합니다. 2025-02-25T14:24:03.178+09:00 INFO 38230 --- [kuke-board-hot-article-service] [nio-9004-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2025-02-25T14:24:03.178+09:00 INFO 38230 --- [kuke-board-hot-article-service] [nio-9004-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms 2025-02-25T14:24:03.191+09:00 WARN 38230 --- [kuke-board-hot-article-service] [nio-9004-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingPathVariableException: Required URI template variable 'dataStr' for method parameter type String is not present] org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 Internal Server Error: "{"timestamp":"2025-02-25T05:24:03.195+00:00","status":500,"error":"Internal Server Error","path":"/v1/hot-articles/articles/date/20250225"}" 다른 질문글에서 언급한 500에러 해결책을 참고해봤지만 소용이 없네요. 코드를 점검해봐도 잘못 작성한게 없어보입니다. 기초 선수지식이 없는 상태에서 클론코딩을 하다보니 어디를 어떻게 더 점검해야할지 모르겠는데 제시 해주신다면 찾아서 해결해보려고 합니다. 어떻게 해야할까요?

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
theplayer1003 댓글 2 좋아요 0 조회수 122

HDFS 명령어를 치는데 오류가 납니다

미해결

15일간의 빅데이터 파일럿 프로젝트

(사진)

  • 빅데이터
  • hadoop
  • kafka
  • zookeeper
  • redis
  • flume
  • impala
  • 데이터-엔지니어링
지욱 댓글 2 좋아요 0 조회수 166

좋은 강의 감사합니다. 질문있습니다

해결됨

[실습] 대기업 근무하며 경험한 Redis를 야무지게 사용하기

안녕하세요. 강의 잘 듣고 있습니다. 강의를 들으면서 몇가지 질문이 있어서 남깁니다 1. CacheManager + @Cacheable 과 같은 어노테이션으로 레디스 캐싱을 쓰는 방법은 실제 근무했던 기업에서 많이 사용하는 방법인가요? - 위의 질문의 요지는 말 그대로 Template를 사용한 방법과 CacheManager가 제공하는 어노테이션를 활용한 경우가 많은지 궁금합니다 - 위와 관련해서 한가지 더 질문 드리자면, 보통 값을 저장할 때 객체를 직렬화해서 저장하게 되는 경우가 많은데, 수백개가 넘는 객체를 모두 정의할 수 없는 환경에서 GenericJackson2JsonRedisSerializer를 사용하는 것으로 알고 있습니다. 하지만, 이런 경우에는 다른 서버에서는 패키지 구조가 맞지 않아서 사용하지 못하는데 이런 경우에는 어떻게 하나요? 2. 리스트 결과물 (ex. 00 목록 조회 등)은 보통 어떤 자료구조를 사용하나요?

  • spring
  • redis
  • redisinsights
  • cache
홍승현 댓글 1 좋아요 0 조회수 218

테스트 코드 작성 관련해서 질문드립니다!

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

강사님 안녕하세요. 강의의 테스트 코드도 보고 실무서 테스트 코드 작성시 문득 궁금한 사항이 생겼습니다. 테스트 코드 작성시 단위, 통합, E2E 등 종류도 많고 일정 등 고려해야 될 사항이 많은데 강사님의 테스트 코드 작성 기준이 궁금합니다. 제가 정한 기준은 아래와 같습니다. 단위 테스트 (도메인 폴더 하위 순수 객체) 는 반드시 작성 일정 일정이 급할때 단위 테스트 일정이 여유로울때 단위 테스트 API 테스트 or 통합 테스트 서비스의 핵심 로직 단위 테스트 API 테스트 or 통합 테스트 일정이 급해도 최대한 작성 그리고 다음과 같은 고민도 있습니다. Mockito를 이용한 테스트가 충분히 검증이 될까? 근데 될것 같기도..? XxxFacade 혹은 XxxService에 Mockito를 이용한 테스트의 정확도에 의문을 품었습니다. 그래서 @SpringBootTest를 이용한 통합 테스트 를 작성하였는데 테스트를 위한 데이터 세팅이 너무 귀찮더라구요.(하하하) 그래서 도메인 모델링을 잘하고 단위 테스트를 꼼꼼하게 작성 한다고 쳤을때 Mockiot의 verify를 이용해 의도한 메서드가 호출이 되었는지만 테스트만 해도 괜찮지 않을까? 란 생각이 들었습니다. 회사일도 바쁘실텐데 다음 강의 준비도 하시고 질의응답도 해주셔서 언제나 감사드립니다.

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
soap 댓글 2 좋아요 0 조회수 250

이거 맞아요?

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

이런식으로 서비스 밑의 폴더 이어 붙이기 하고 article 따로 service 따로 서버 실행할수 있게 되면 그게 msa 기본 구조 잡아가는 과정인가요? 지금 막 우당탕탕 이렇게 저렇게 막 코드 붙여가면서 되는거 같기는 한데 뭐 하고 있는지 헷갈리고 어지러워요

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
dktmvktm 댓글 1 좋아요 0 조회수 253

PK 전략에 관련해서 질문 드립니다!

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요. 만 1년된 작은 중소기업에서 일하고 있는 개발자입니다. 강의 잘 듣고 있습니다! 현재 회사에서는 오라클 데이터베이스를 사용하고 있고 최근 스프링부트와 JPA를 사용해서 프로젝트를 시작했고, 낡은 레거시 사업을 영위하는 업체라서 이게 회사의 첫 스프링부트 프로젝트입니다! 나름 새로운 기술스택을 제안했기에 가지는 부담감이 심한데요. 최근에 만든 거의 대부분의 프로젝트들은 단일 DB를 사용하고 있기 때문에 별다른 고민 없이 AutoIncrement를 선택했습니다. 오라클에서도 최신 버전에서는 잘 지원해주고 있고 DB 버전은 높았기 때문에 이에 익숙해서 JPA에서 지원하는 IDENTITY 전략을 사용해서 시스템을 만들었는데요. 현재 ID를 노출해야하는 상황이 생길 경우 이를 그대로 노출하고 있습니다. 다른 PK 전략을 사용하지 않고 보완할 수 있는 방법이 있을까요? 현재 떠오르는것은 외부로 노출할 때 컨트롤러에서 이를 해싱하거나 난수화를 하는 방법을 생각하고 있습니다. 감사합니다!

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
wisehero 댓글 2 좋아요 0 조회수 227

인기 태그

인프런 TOP Writers

주간 인기글