본문 바로가기

Project Trouble Shooting/[축팅] 축제 소개팅 어플리케이션 - 카카오 테크 캠퍼스 1기7

카카오 테크 캠퍼스 수료 및 대상 🏆 올해 초부터 계속 진행해온 카카오 테크 캠퍼스가 끝났다.우리 팀이 라춘상을 받았는 데 열심히 해준 팀원분들 너무 감사합니다.  (상 이름도 참 이름도 카카오스럽다...)  아무튼 더 나은 개발자가 되기 위해서 개인 회고를 진행해보려고 한다. [깃허브 링크]https://github.com/Step3-kakao-tech-campus/Team14_BE GitHub - Step3-kakao-tech-campus/Team14_BE: 14조 Spark14조 Spark. Contribute to Step3-kakao-tech-campus/Team14_BE development by creating an account on GitHub.github.com  개인 회고 - 팀장주간 회의와 팀 소통매주 월요일 아침, 비.. 2023. 11. 19.
Transaction을 고려한 CheckedException 예외 처리 배경지식 CheckedException은 맨 아래에서 설명하고 있습니다. 문제 상황 현재 파일 시스템에 파일을 저장하고 있다. 아래 코드의 문제점이 무엇일까? public List storeFiles(List multipartFiles) throws IOException { List storeFileResult = new ArrayList(); for (MultipartFile multipartFile : multipartFiles) { storeFileResult.add(storeFile(multipartFile)); } return storeFileResult; } @Transactional public List saveCertifications(List certificates) throws IOEx.. 2023. 11. 12.
ThreadLocalRandom의 설계의도와 스레드의 관계 ThreadLocalRandom 클래스의 설계 의도는 무엇일까?Random 클래스는 멀티 스레드에서 하나의 Random 인스턴스를 공유하며 전역적을 동작합니다.seed를 통해서 난수를 반환하기 때문에 싱글톤으로 설계하는 게 이점이라 생각해 이렇게 구현되었을 것이라 추측합니다.(개인적 의견) 그런데 이는 문제가 하나 있습니다. 바로, seed가 같으면 같을 경우 같은 난수가 반환될 수도 있다는 것입니다.Random 클래스에서의 seed는 따로 지정되지 않을 시에 컴퓨터의 현재 시간으로 결정됩니다.그렇다면, 여러 스레드가 동시에 Random 클래스를 사용할 경우도 분명 있을 것입니다. 이 경우에 같은 난수를 반환할까요?다행히 Random 클래스에서는 선형 합동 생성기 알고리즘을 사용해서 같은 난수를 반환하지.. 2023. 11. 1.
"Run all Tests"로 모든 단위테스트를 한번에 돌릴 때 실패하는 이슈 카카오 테크 캠퍼스 3단계 축팅의 인기피드를 개발하고 테스트를 하고 있는 도중 아래와 같은 이슈를 만났습니다. Redis에서 인기 게시물을 조회하는 기능 테스트시 Fail이 발생하였습니다. 단위테스트를 수행할 경우에는 성공하는 데, "Run all Tests"로 모든 단위테스트를 한번에 돌릴 때는 실패할 때도 있고, 성공할 때도 있습니다. 먼저 상황을 분석해보겠습니다. 상황 분석 teardown.sql을 사용해 테스트 시에 게시물 300개를 테이블에 저장하고 있습니다. Run all Tests시 해당 ControllerTest에서 Fail이 발생하였습니다. @Sql("classpath:db/teardown.sql") @AutoConfigureMockMvc @SpringBootTest(webEnvironm.. 2023. 10. 14.
ComposeMethod을 적용해 리팩터링 해보자 현재 카카오 테크 캠퍼스 3단계에서 축팅이라는 서비스의 인기 피드 부분를 담당해 개발하고 있는 중입니다. 개발 하는 중 멘토님께서 피드백해주신 내용을 블로그로 포스팅해보려고 합니다~ 현재 코드 @Transactional public void execute(){ List top300Posts = postRepository.findTop300ByOrderByPopularityDesc(PageRequest.of(0, POPULARITY_SIZE)); redisTemplate.delete(RedisKey.POPULAR_POST_KEY.getKey()); top300Posts.forEach(getIncompletePopularPostDTO -> { redisTemplate.opsForZSet().add(Redis.. 2023. 10. 13.
Instant 클래스 도입에 관한 고찰 현재, 카카오테크캠퍼스 3단계에서 저희 팀 Spark는 게시물의 날짜를 저장하는 데 LocalDateTime 자료형을 사용하고 있습니다. @Entity @NoArgsConstructor(access = PROTECTED) @Getter public class Post { // Primary Key @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long postId; // 게시글 ID ... @Column(nullable = false) private LocalDateTime createdAt; // 생성일 } 저희 어플리케이션에서는 게시물의 생성일을 활용해 게시물을 나이를 구하여 이를 인기도에 반영하고 있습니다. 즉, 게시물의 생성일 데.. 2023. 10. 2.
728x90