문제 소개Level 2https://school.programmers.co.kr/learn/courses/30/lessons/42860테스트케이스 (추가)“BBAAAAB” / 6풀이public int solution(String name) { int count = 0; int length = name.length(); int move = length-1; // 순서대로 가는 이동 수 char[] chars = name.toCharArray(); for (int i = 0; i Z로 이동 } int next = i+1; while (next 처음에는 알파벳을 조정하는 조이스틱인 상, 하에 대한 요소만 신경 쓰다가 틀리게 된 문제이다.좌, 우를..
Notion - 퀵 정렬Git - 퀵 정렬 이해하기 이번에는 퀵 정렬에 대해서 정리해보려고한다.퀵 정렬이란?퀵 정렬은 불안정 정렬이며, 다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬 방법이다.불안정 정렬?정렬 과정에서 같은 값을 가진 요소의 상대적 순서가 보장되지 않는 정렬을 뜻한다.예를들어, [a1, b, c, a2] 가 있다고 가정하겠다.a1, a2는 같은 a이며, 위 예제에서는 이해하기 쉽도록 a1, a2로 설명하겠다.정렬이 완료된 후 [a2, a1, b, c] 가 될 수도 있고, [a1, a2, b, c]가 될 수도 있다.이처럼 정렬 이후 상대적으로 뒤에 있던 a2가 항상 뒤에 오는 것이 아닌 앞으로 올 수도 있기에, 상대적인 순서를 보장하지 못하는 불안정 정렬이라고 불린다.분할 정복 알고리..
Notion - @Transactional Duplicate entry 이슈문제Duplicate entry '325' for key 'token.UK_c56184j4djjqx16jwprg167qp'이전에 개발하던 개인 프로젝트에서 @Transactional에 대한 이해가 부족하여 발생한 문제이다. 아래는 문제가 발생한 코드의 일부이다. `UserService`@Transactionalpublic Long userLogin(UserForm userForm) { User user = userRepository.findByEmail(userForm.getEmail()) .orElseThrow(InvalidSigninInformation::new); if(!scryptPasswor..
이 글은 아래 두 글로 부터 이어집니다. https://ppusda.tistory.com/84 데코레이터 패턴 데코레이터 패턴 데코레이터 패턴은 기존 객체를 변경하지 않고 기능을 동적으로 추가하거나 확장할 수 있게 해주는 디자인 패턴이다. 데코레이터의 말 뜻대로 객체를 꾸며주는 역할을 한다고 ppusda.tistory.com https://ppusda.tistory.com/85 프록시 패턴 프록시 패턴 프록시 패턴은 특정 객체를 대리하여 작업을 처리하는 프록시 객체를 제공하여 로직의 흐름을 제어하기 위한 패턴이다. 클라이언트와 실제 객체를 중계해주는 대리자 역할을 한다 ppusda.tistory.com 한 번에 글을 보고 싶으신 분은 아래를 참고해주세요. Git - 데코레이터 패턴과 프록시 패턴의 차이 ..
이 글은 아래 두 글과 함께 보면 더 좋습니다. https://ppusda.tistory.com/84 데코레이터 패턴 데코레이터 패턴 데코레이터 패턴은 기존 객체를 변경하지 않고 기능을 동적으로 추가하거나 확장할 수 있게 해주는 디자인 패턴이다. 데코레이터의 말 뜻대로 객체를 꾸며주는 역할을 한다고 ppusda.tistory.com https://ppusda.tistory.com/86 데코레이터 패턴과 프록시 패턴의 차이 이 글은 아래 두 글로 부터 이어집니다. https://ppusda.tistory.com/84 데코레이터 패턴 데코레이터 패턴 데코레이터 패턴은 기존 객체를 변경하지 않고 기능을 동적으로 추가하거나 확장할 수 있게 해 ppusda.tistory.com 한 번에 글을 보고 싶으신 분은 아..
이 글은 아래 두 글과 함께보면 더 좋습니다. https://ppusda.tistory.com/85 프록시 패턴 프록시 패턴 프록시 패턴은 특정 객체를 대리하여 작업을 처리하는 프록시 객체를 제공하여 로직의 흐름을 제어하기 위한 패턴이다. 클라이언트와 실제 객체를 중계해주는 대리자 역할을 한다 ppusda.tistory.com https://ppusda.tistory.com/86 데코레이터 패턴과 프록시 패턴의 차이 이 글은 아래 두 글로 부터 이어집니다. https://ppusda.tistory.com/84 데코레이터 패턴 데코레이터 패턴 데코레이터 패턴은 기존 객체를 변경하지 않고 기능을 동적으로 추가하거나 확장할 수 있게 해 ppusda.tistory.com 한 번에 글을 보고 싶으신 분은 아래를 ..
Notion - Spring security에서 DeferredResult 처리 시 401 Unauthorized문제401 - Full authentication is required to access this resourceorg.springframework.security.access.AccessDeniedException: Access Denied최근에 팀 프로젝트 진행하면서 Long polling을 이용하여 알림기능을 구현하였다.이 과정에서 DeferredResult와 Spring security 같이 사용하게 되었는데, 요청 시에는 정상적으로 인증이 되었어도 응답 시에 401 Unauthorized가 반환되는 상황이 발생했다. 이슈가 발생했던 코드는 아래와 같다.@GetMapping(value ..
Notion - Spring Aop와 Proxy오늘은 Spring의 Proxy에 대해서 알아 볼 예정이다.추가로 Proxy에 대해 알아보려면 Spring의 AOP에 대해서도 이해하면 좋기 때문에 이도 같이 다룰 예정이다. Proxy?Proxy Server프록시는 어디서 들어본 것 같은 느낌이 많이 드는데, 이는 프록시 서버 떄문일 것같다.프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 시스템 혹은 프로그램을 뜻한다. 클라이언트와 서비스 사이의 중계기능을 하는 것을 뜻하며, 쉽게 말하자면 중계 서비스, 즉 대리로 동작을 수행하는 것이다. 즉, 프록시 서버는 대리 통신을 해준다고 생각하면 된다. Spring에서의 Proxy그렇..
문제 java.lang.NoClassDefFoundError: org/hibernate/dialect/MySQL57Dialect 최근에 개인 프로젝트 리팩토링을 진행하면서 스프링 부트 버전(2.5.9 → 3.2.1)을 업그레이드 하면서 발생하게 되었다. 단순히 Run만 하더라도 발생하게 되었으며, 이미 Github에서 관련 Issue가 다뤄진 적이 있어 정리해두려고 한다. 원인 Spring Boot 3.2.1 버전 부터 명시적인 Dialect 설정을 했을 시 발생하게 되는 문제이다. Spring Boot는 JPA Provider가 적절한 Dialect를 찾아내게 하는 책임을 가지도록 하였으나, 이를 명시적으로 지정하게 되면서 발생하게 된 것이다. 하지만 프로젝트를 진행하면서 이를 명시적으로 지정했던 기억..
문제점 & 삽질 과정 카카오 로그인을 진행하면서, 토큰을 가져오는 단계에서 문제가 발생했다. 401 Unauthorized: [no body] https://kauth.kakao.com/oauth/token 위 경로로 데이터를 보내 accessToken과 refreshToken을 받아와야 하는데, 401 Unauthorized 에러가 발생했다. 구글링을 통해 찾아본 결과 의심되는 상황은 아래와 같이 있었다. Content-type: application/x-www-form-urlencoded 미설정 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 위 처럼 header에..