전체 글

트러블슈팅

Kakao Login 시 401 Unauthorized

문제점 & 삽질 과정 카카오 로그인을 진행하면서, 토큰을 가져오는 단계에서 문제가 발생했다. 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에..

트러블슈팅

CreatedDate, LastModifiedDate 사용 시 값이 들어가지 않는 이슈

문제점 최근에 알게 된 어노테이션인 @CreatedDate와 @LastModifiedDate를 사용할 때 값이 제대로 들어가지 않는 이슈가 있었다. 이유를 찾아보았고 문제는 다음과 같았다. @EnableJpaAuditing @EntityListeners 단순히 사용할 필드에 두 어노테이션을 붙히기만 하는 것이 아닌 위 두 어노테이션을 통해 기능을 활성화 해야지 정상적으로 동작한다. 해결 Application 실행 부분에서 @EnableJpaAuditing 어노테이션으로 Auditing 기능을 활성화 해야한다. @SpringBootApplication @EnableJpaAuditing public class TestApplication { public static void main(String[] args..

트러블슈팅

[오류를 잡아보자] 생성자 바인딩 이슈 (Cannot resolve parameter names for constructor)

문제 java.lang.IllegalStateException: Cannot resolve parameter names for constructor cat.community.NyangMunity.board.request.BoardListRequest(java.lang.Integer,java.lang.Integer) 최근에 개인 프로젝트를 리팩토링 하는 과정에서 발생한 문제이다. 발생하게 된 계기는 자바 버전(15 → 17)과 스프링 부트 버전(2.5.9 → 3.2.0)을 업그레이드 하면서 발생하게 되었다. 기존 코드는 아래와 같았고, 정상적으로 작동하던 코드에서 에러가 발생했다. @Getter @Setter @Builder public class BoardListRequest { private stati..

트러블슈팅

[오류를 잡아보자] JSON 직렬화에서의 이슈 해결 (through reference chain)

Notion - JSON 직렬화에서의 이슈 해결 (through reference chain) 문제 최근 팀 프로젝트를 하면서 겪은 문제인데, 진행 중의 겪은 이슈의 원인을 제대로 파악하지 못해서 자세히 정리해보게 되었다. 문제의 코드와 에러 내용은 아래와 같았다. 코드 public class Article { @OneToMany(mappedBy = "article", fetch = FetchType.EAGER) @Builder.Default private List commentList = new ArrayList(); } // ---------------------------------- public class Comment { @ManyToOne(fetch = FetchType.LAZY) @JoinC..

트러블슈팅

WSL 설치 오류

WSL 설치 오류 Docker 사용을 위해 WSL 을 설치하면서 겪은 우여곡절을 정리해본다. 문제 발생 & 해결 과정 먼저, WSL을 설치하려는 중에 문제가 발생했다. 발생한 에러 내용들로는 아래와 같다. error code: wsl/service/createinstance/createvm/hcs/hcs_e_hyperv_not_installed Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS. 이상하게도 가상화 관련 문제가 발생했다. CPU 가상화, 하이퍼바이저 플랫폼, 가상 머신 플랫폼 모두 켜져있는 것을 확인했지만 계속해서 가상화 옵션이 꺼져있다는 에러를 뱉..

오늘의 공부/기타

NCP 이용해보기!

Naver Cloud Platform 이번에 NCP를 사용해 볼 기회가 생겨 사용법에 대해서 기록해보려고 한다. NAVER CLOUD PLATFORM cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification www.ncloud.com 서버 생성 먼저 서버를 생성해보자. 로그인 후 콘솔로 들어오면 서버 탭으로 이동할 수 있다. 만들어 둔 서버가 있다면 서버목록을 확인할 수 있지만, 그게 아니라면 서버 생성화면이 나온다. 서버 이미지 선택 부팅 디스크 크기, 이미지 타입을 골라야한다. 기본 값인 50GB, OS를 선택했으며 서버 이미지는 CentOS 7.8..

회고

우테코 프리코스 회고록

이번에 우테코 프리코스를 경험해 볼 기회가 생겼다. 프리코스를 즐겨보았고, 각 주차에 대한 회고와 배운 점을 남겨보려고 한다. 1주차 ⚾ Git - 숫자야구 제출 - https://github.com/woowacourse-precourse/java-baseball-6/pull/652 진행 과정 1주차 과제 때는 정말 기능구현에 대해서 완성시키는 것이 목적이었다. 그렇기 평소에 코딩을 하던 것 처럼 코드를 작성했고 기능을 완성하게 되었다. 간단한 기능이기도 하였지만 108줄의 코드와 3개의 커밋으로 과제를 제출하였다. 코드 리뷰 거의 사용해본 적 없었던 Pull Request와 처음으로 경험해보는 코드 리뷰를 하게되었다. 나의 코드가 리뷰되는 것은 물론이고 상대방의 코드도 리뷰해주어야하는 상황에서 처음에는..

오늘의 공부/기타

코드 리뷰 작성해보기

이번에 코드 리뷰를 해보면서 개인적으로 느낀 코드 리뷰 작성법에 대해서 정리해보려고 한다 코드 리뷰 코드 리뷰에서 가장 중요한 점은 상대방이 리뷰를 통해 고민하고 성장해나가거나 코드에 대한 자신감을 가질 수 있게 하는 것이라고 생각한다. 코드에서 아래와 같은 부분들을 중점적으로 보면 보다 더 쉽게 리뷰를 작성할 수 있을 것 같다. 기능이 정상 작동하지 않는 부분을 찾아라 이 부분은 가장 정석적인 리뷰가 될 수 있을 것 같다. 기능 요구사항을 만족하지 못하고, 예외사항이 제대로 처리되지 않는 부분이 있을 수 있다. 주로 도메인 부분에서 이런 부분을 찾을 수 있으며, 이런 부분을 찾아보면서 코드의 전체적인 흐름 구조를 파악할 수 있을 것이다. 구조가 어색하거나 개선이 필요한 부분을 찾아라 이 부분에서는 구조..

오늘의 공부/기타

else 예약어를 지양하자

이번 글에서는 else 예약어를 지양해야 하는 이유에 대해서 설명해보려고한다. If - else If - else는 프로그래밍에서 조건에 따라 다른 코드를 실행하도록 하는 조건문이다. 조건은 프로그래밍에 있어서 매우 중요한 요소이며, 이를 통해 우리는 여러 제약을 걸어 프로그램을 구현할 수 있다. 그런데 이런 구조에서 else를 지양하자니 무슨 말인 걸까? else를 지양하자? 이번에 코드리뷰를 받아보면서 else 예약어를 지양해야 한다는 말을 듣게되었다. 이유가 궁금해 찾아보았고, if -else 구조에서 else 예약어를 사용하게 되면 가독성과 유지보수성이 떨어진다는 말을 보게 되었다. 실제로 위와 같이 if - else가 반복되는 상황에는 보기 싫은 코드가 될 수 있겠으나 실제로 위와 같이 사용하는..

알고리즘/코딩테스트

[프로그래머스] - 131705_삼총사

문제 소개 Level 1 https://school.programmers.co.kr/learn/courses/30/lessons/131705 풀이 public class Pr131705 { public int solution(int[] number) { int answer = 0; for(int i = 0; i < number.length-2; i++) { for(int j = i+1; j < number.length-1; j++) { for(int k = j+1; k < number.length; k++) { if(number[i] + number[j] + number[k] == 0) { answer ++; } } } } return answer; } } 문제는 Bruteforce를 이용해서 풀어보았다..

알고리즘/코딩테스트

[프로그래머스] - 147355_크기가 작은 부분 문자열

문제 소개 Level 1 https://school.programmers.co.kr/learn/courses/30/lessons/147355 테스트 케이스 "2147483649" / "2147483650” / 1 풀이 public class Pr147355 { public int solution(String t, String p) { int answer = 0; int start = 0; int end = p.length(); while(end < t.length()+1) { long tmp = Long.parseLong(t.substring(start, end)); if(tmp

알고리즘/코딩테스트

[프로그래머스] - 12930_이상한 문자 만들기

문제 소개 Level 1 https://school.programmers.co.kr/learn/courses/30/lessons/12930 테스트 케이스 (추가) "AA aa ZZ zz” / "Aa Aa Zz Zz” "aaa “ / "AaA “ 풀이 public class Pr12930 { public String solution(String s) { StringBuilder answer = new StringBuilder(); int count = 0; for(char ch: s.toUpperCase().toCharArray()) { if(ch == ' ') { answer.append(ch); count = 0; } else if(count % 2 != 0) { answer.append((char)(..

ppusda
기억하기 위한 기록들