분류 전체보기 31

[Python] 프로그래머스 양궁대회

양궁대회 문제 분석하기 해당 문제는 라이언과 어피치가 n개의 화살을 쏴서 라이언이 가장 큰 점수차로 이긴 배열을 반환하는 문제입니다. 첫번째 조건 단 조건이 있는데요 라이온은 챔피언이라 어피치에게 핸디캡을 주고 시작합니다. 0 ~ 10점까지가 있는데 땅따먹기처럼 하나의 점수는 한 사람만 점수를 획득할 수 있습니다. 예를들어 10점을 어피치와, 라이온이 1발씩 맞춘다면 어피치가 10점을 가져가게 되는 것입니다. 그렇기에 점수를 획득하려면 무조건 어피치 + 1의 점수를 맞춰야 하는 것입니다. 두번째 조건 가장 큰 점수차가 2개 이상이라면 점수가 낮은 배열순으로 많이 맞춘 배열을 선택합니다. 의사코드 작성하기 lion이 쏠 수 있는 모든 경우의 수 만들기 -> product 중복 o 순서 o 라이언이 n개 이..

코딩테스트 2023.05.10

[Python] 프로그래머스 후보키

이 문제는 데이터베이스에서 관계형 데이터의 후보키(candidate key)를 찾는 문제입니다. 데이터베이스에서는 후보키(candidate key)라는 개념을 사용하여 테이블에서 튜플을 유일하게 식별할 수 있는 속성 또는 속성의 집합을 의미합니다. 이때 후보키는 다음 조건들을 만족해야 합니다 후보키란? 후보키는 릴레이션들의 속성 또는 속성들의 집합을 이용해서 유일하게 식별할 수 있는 값을 의미합니다. 후보키에 구성하기위한 필수적인 조건들이 있습니다. 유일성(uniqueness): 테이블에서 모든 튜플에 대해 유일하게 식별할 수 있어야 합니다. 최소성(minimality): 최소한의 속성 집합으로 테이블에서 유일하게 식별할 수 있어야 합니다. 유일성이란 유일성은 데이터베이스의 모든 ROW 중에 유일하게 존..

코딩테스트 2023.05.07

[Spring Boot] @WithMockUser 테스트 시 getPrincipal Null

오늘의 문제점 테스트 코드를 작성할 때 Security에서 제공하는 @WithMockUser 어노테이션을 사용해서 인증 테스트를 수행했습니다. 하지만 Authentication의 getPrincipal() 메소드를 사용할 때 null이 반환되는 현상이 발생해서 테스트를 통과 하지 못했습니다. 기존의 방식 @GetMapping("/mycomments") public Response getMyComments(Authentication authentication, Pageable pageable) { String username = authentication.getName() Page response = postService.getMyComments(username, pageable).map(CommentRe..

SpringBoot 2023.05.02

[Spring Boot] Redis 캐싱 서버 적용하기

Redis란 무엇인가? Redis(Remote Dictionary Server)로 오픈 소스 기반의 인 메모리 데이터 저장소입니다. Redis의 특징 메모리 내 데이터 저장 Key : Value 타입 다양한 데이터 구조지원 메시징 큐 구현 가능 싱글 스레드 방식 Redis 사용 용도 일반적으로는 캐싱, 세션 관리, 풀링, 메시지 브로커, 게임 랭킹 등 다양한 영역에서 사용됩니다. Redis의 장점 Key:Value로 이뤄져 있는 만큼 빠른 속도로 데이터를 검색할 수 있습니다. 비관계형 데이터베이스로 확장성에 있어서 이점이 있습니다. in-memory 방식으로 디스크 방식보다 빠릅니다. Redis의 단점 데이터 일관성, 동시성 제어를 위한 기능이 미약합니다. Redis 캐싱 서버 적용하기 Redis의 서버..

SpringBoot 2023.05.01

[SpringBoot] Transaction 커밋 적용

오늘의 문제: Transaction 내 코드 분석 Transaction 오늘 코딩하면서 게시글을 수정하는 단계에서 updated_at 수정 필드가 업데이트가 되지 않아서 찾아보게 됐다. @Transactional public Post modify(String title, String body, String username, Integer postId) { // 포스트 찾기 log.info("포스트 찾기"); PostEntity postEntity = postRepository.findById(postId).orElseThrow(() -> new SnsException(Errorcode.NOT_EXISTS_POST, String.format("게시글 ID: %d", postId))); // 생성자, 수정자..

SpringBoot 2023.04.20