본문 바로가기

개발일지

20231205 - 프로그래머스/42748 https://school.programmers.co.kr/learn/courses/30/lessons/42748 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때 k 번째 있는 수 구하기 제한 사항 array의 길이는 1이상 100이하 array의 각 원소는 1이상 100이하 commands의 길이는 1이상 50이하 commands의 각 원소는 길이가 3 예시 array : [1, 5, 2, 6, 3, 7, 4] commands : [[2, 5, 3], [4, 4, 1], [1.. 더보기
20231204 - 프로그래머스/12915 https://school.programmers.co.kr/learn/courses/30/lessons/12915 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 문자열로 구성된 리스트 Strings와 정수 n이 주어졌을 때, 각 문자열의 n번째 인덱스를 기준으로 오름차순 정렬하기 제한 사항 strings는 길이 1 이상, 50 이하인 배열 strings의 원소는 소문자 알파벳 원소는 길이 1 이상, 100이하인 문자열 모든 strings의 원소의 길이는 n보다 큼 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에.. 더보기
20231201 - Dto 테스트 프로젝트를 완성 후 진행하지 않았던 테스트 코드를 작성해 보았다. 우선 Dto 클래스들의 테스트 코드를 작성했는데 여기서 생각해야 할 점이 데이터가 Json형식으로 @RequestBody를 통해 들어온다는 점과 유효성 검사가 잘 이루어지고 있는지를 체크해야 했다. @Test @DisplayName("비밀번호 변경을 위한 Dto") void test2() throws Exception{ ObjectMapper objectMapper = new ObjectMapper(); //given String requestBody = "{\"originPassword\" : \"12345678\"," + "\"newPassword\" : \"123456789\"," + " \"newPasswordCheck\" : \".. 더보기
20231201 - 프로그래머스/12926 https://school.programmers.co.kr/learn/courses/30/lessons/12926 문제설명 주어진 문자열의 알파벳을 주어진 숫자만큼 밀어낸 결과를 출력하기 제한조건 공백은 밀어도 공백이다. 주어진 문자열은 대문자, 소문자, 공백으로 이루어져 있다. 문자열의 길이는 8000 이하 n은 1~25의 자연수 예시 알파벳 : "a B z" 숫자 : 4 결과 : "e F d" 풀이 과정 처음 문제를 보고 풀었을 때에는 for문을 통해 하나씩 가져온 알파벳들의 아스키코드를 단순히 n만큼 증가시키는 코드를 작성했다. 하지만 이렇게 풀 경우, ' Z ' 와 ' z '를 넘어가면서 알파벳이 아닌 값이 나오게 된다. 그래서 if문을 통해서 구간을 나눠주었다. 문자열은 알파벳 혹은 공백이고 n.. 더보기
20231129 - UserDetails, UserDetailsService 인증 처리를 구현하면서 로그인한 사용자의 정보를 쉽게 받아오기 위해 @AuthenticationPrincipal 어노테이션을 사용했고, UserDetailsImpl 클래스를 만들어 데이터를 담아보았다. 1.UserDetailsImpl.java //UserDetailsImpl.java public class UserDetailsImpl implements UserDetails { private final User user; public UserDetailsImpl(User user) { this.user = user; } public User getUser() { return user; } @Override public String getPassword() { return user.getPassword().. 더보기
20231128 - 세 번째 팀 프로젝트를 마치며 일주일 동안의 팀 프로젝트가 끝이 났다. 이번 프로젝트는 JWT를 이용한 인증 인가와 CRUD를 중점으로 한 프로젝트였다. 나는 프로젝트에서 인증을 위한 구조를 설계하고 회원가입, 로그인, 로그아웃 기능을 구현했다. 아직 JWT를 다루는 방법이 미숙해서 강의와 블로그를 참고하면서 진행했다. 전체적으로 큰 문제없이 흘러가는듯 했지만 로그아웃을 구현하는데에서 어려움이 있었다. 토큰을 삭제하는 방법은 사용할 수 없어서 Redis라는 처음 보는 DB를 사용하기로 했다. 하지만 왜 Redis를 사용해야 하는지도 몰랐고 어떻게 사용해야 하는지도 감이 잡히지 않았다. 이것 역시 블로그를 참고해서 하려 했으나 저마다 로그인 기능부터 구현한 모습이 다 달라서 쉽게 적용시키기가 어려웠다. 그래서 처음으로 ChatGPT의 .. 더보기
20231127 - redis 사용법 1. redis를 설치해준다 https://github.com/microsoftarchive/redis/releases Releases · microsoftarchive/redis Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes - microsoftarchive/redis github.com 2.build.gradle implementation 'org.springframework.boot:spring-boot-starter-data-redis'.. 더보기
개발일지 25 - Jwt 검증 중 발생한 오류 뉴스피드 프로젝트를 진행하는 중에 Postman으로 http요청을 보내는데 자꾸 에러가 뜨면서 진행이 되지 않았다. 결론적으로 말하자면 굉장히 많은 문제들이 겹쳐있어서 한 가지만 해결해서 될 문제가 아니었다. 일단 로그를 보면서 하나씩 해결해 나가기로 했다. 1.Validation 첫 번째는 내가 정한 Email의 형식을 지키지 않은 형태의 데이터값이 넘어와 데이터 검사에서 걸린 것이다. 이는 다시 형식에 맞춰 보내니 해결되었다. 2. 토큰검증 시 예외발생 요청헤더에 토큰을 담아 보내는데 자꾸 예외가 발생했다. 그래서 토큰 관련 메서드를 보면서 잘못작성한 코드가 있는지 확인해 봤다. // 토큰 생성 메서드 public String createToken(String userId){ Date date = n.. 더보기