[스파르타코딩클럽]/TIL 60

[231116] Spring 숙련주차 개인과제

Spring 숙련주차 개인과제 "회원가입, 로그인 기능이 있는 투두앱 백엔드 서버 만들기" 요구사항 회원 가입 API username, password를 Client에서 전달받기 username은 최소 4자 이상, 10자 이하이며 알파벳 소문자(a~z), 숫자(0~9)로 구성되어야 한다. password는 최소 8자 이상, 15자 이하이며 알파벳 대소문자(a~z, A~Z), 숫자(0~9)로 구성되어야 한다. DB에 중복된 username이 없다면 회원을 저장하고 Client 로 성공했다는 메시지, 상태코드 반환하기 로그인 API username, password를 Client에서 전달받기 DB에서 username을 사용하여 저장된 회원의 유무를 확인하고 있다면 password 비교하기 로그인 성공 시, ..

[231116] Access Token과 Refresh Token

Access Token의 문제점 제 3자에게 탈취당할 경우 보안에 취약 발급된 이후 서버에 저장되지 않고 토큰 자체로 검증하여 사용자 권한을 인증하기 때문에 탈취된 경우 토큰이 만료되기 전까지 토큰을 획득한 사람은 누구나 권한 접근이 가능해짐 JWT는 발급 후 삭제가 불가능하기 때문에 토큰에 유효기간을 부여하는 식으로 탈취 문제에 대응 유효기간이 짧으면 토큰 남용을 방지할 수 있지만 그만큼 사용자는 로그인을 자주해서 토큰을 발급받아야 함 Refresh Token 형태는 Access Token과 같은 JWT이거나 혹은 간단한 문자열 또는 UUID일 수 있음 Access Token은 접근에 관여하는 토큰이고 Refresh Token은 재발급에 관여하는 토큰 로그인 성공했을 때 서버는 Access Token과..

[231115] HttpMediaTypeNotAcceptableException 에러 해결

Spring 숙련주차 개인과제를 하던 중 로그인, 회원가입, 할일카드 기능을 만든 후에 댓글 관련 기능(댓글 생성 기능)을 개발하기 시작하면서 에러를 마주하게 되었다. 이전에 만들었던 할일카드 생성 코드와 거의 비슷하게 작성하였는데 왜 에러가 발생하는지 의문이 들었다. 위의 콘솔에서 보이는 에러를 구글링해봤을 때에는 나의 상황과 맞지 않아서 해결하기 아려웠다. 일단 request로 보낸 댓글은 댓글 데이터베이스에 저장이 된 것을 확인했고 디버깅했을 때도 컨트롤러에서 리턴까지는 잘 되다가 그 이후에 문제가 발생한 듯이 보였다. 따라서 리턴 이후 과정을 하나하나 따라가면서 디버깅해보다가 HttpMediaTypeNotAcceptableException 를 마주하게 되었다. 그리고 해당 에러로 검색을 해보니 드..

[231113] Spring 입문 개인과제 해설

모범답안 깃허브 링크: https://github.com/camp-robbie/board-app GitHub - camp-robbie/board-app: NB Camp Task Level1: Board APP NB Camp Task Level1: Board APP. Contribute to camp-robbie/board-app development by creating an account on GitHub. github.com 게시글 삭제 기능 - 비밀번호를 header에 담기 개인과제를 할 때 DELETE 메소드의 body에 내용을 담는 것은 지양한다는 말을 듣고 비밀번호를 어떻게 보내야하나 고민하다가 PUT 메소드를 사용했는데 http 헤더에 담는 방법이 있었고, 이에 대해 알게 되었다. @Requ..

[231109] Java 배열과 ArrayList

알고리즘 문제 풀기 https://jinjinjincode.tistory.com/214 [프로그래머스] 숫자의 표현(Java) https://school.programmers.co.kr/learn/courses/30/lessons/12924 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 jinjinjincode.tistory.com 위의 문제를 풀면서 자바의 자료구조에 대해 좀 더 이해할 필요성을 느꼈기에 한 번 정리해보려고 한다. 배열 (Array) 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것 정해진 크기의 메모리를 할당받아 사용 저장 공간이 연속적 식별자(인덱스)가 존재 String 배열이라면? 배열..

[231106] 알고리즘 문제, 스탠다드반 과제

알고리즘 문제 풀기 프로그래머스의 'JadenCase 문자열 만들기' 문제를 풀었다. 처음에는 split으로 공백 기준으로 문자열을 나눈 뒤 각 단어의 첫 글자를 isUpperCase()로 대문자로 만들었다. 그런데 문제의 조건에 공백이 여러 개 있을 수 있다고 되어있어서 문자열의 문자를 하나씩 검토하는 방식으로 바꿔야곘다는 생각이 들어 수정했다. 나는 문자열의 문자 하나씩 조회하면서 공백 다음 문자인지 flag를 통해 확인하였다. 문제를 풀고 난 뒤 다른 사람의 풀이를 확인했더니 문자열을 문자 하나씩 검사하는 것이 아니라 split을 이용해 각 문자 1개로 이루어진 문자열들의 배열로 만드는 방식을 사용했다. split("")과 같이 사용하는 것은 처음 봐서 놀랐고 문자열 배열로 만들어 하나씩 검사하니까..

[231103] Spring 개인과제

Spring 입문 강의 2주차를 마무리하고 주어진 개인과제를 했다. 강의에서 배우자마자 과제를 하다보니 내가 잘 알아서 코드를 짠다기 보다 얼추 끼워 맞춰가면서 과제를 하는 느낌이었다. 거의 강의 자료를 토대로 따라한 거긴 하지만 일단 개인과제를 다 했기 때문에 기록해두려고 한다. 과제: 스파르타 익명 게시판 서버 만들기 필수 구현 기능 게시글 작성 기능 제목, 작성자명, 비밀번호, 작성 내용, 작성일을 저장할 수 있습니다. 저장된 게시글의 정보를 반환 받아 확인할 수 있습니다. 반환 받은 게시글의 정보에 비밀번호는 제외 되어있습니다. 선택한 게시글 조회 기능 선택한 게시글의 정보를 조회할 수 있습니다. 반환 받은 게시글의 정보에 비밀번호는 제외 되어있습니다. 게시글 목록 조회 기능 등록된 게시글 전체를..

[231102] 배열을 리스트로, 스프링 bean과 싱글톤 패턴

알고리즘 문제 풀기 스트림을 이용해 배열 -> 리스트 변환하기 배열을 리스트로 변환하기 위해 .toList() 스트림을 쓰려고 했는데 오류가 발생했다. 배열은 int[] 배열인데 리스트의 값은 Integer 타입이기 때문이다. 검색해보니 중간에 .boxed()를 추가해서 박싱한 후 리스트로 변환해줘야 했다. List list = Arrays.stream(arr).boxed().toList(); 스프링 bean 스프링 강의를 들으면서 bean에 대해 배우게 되었다. 스프링에서 Controller, Service, Repository 이렇게 세 개의 레이어로 나누는 과정에서 외부에서 미리 만든 객체를 주입함으로써 의존성을 역전시켜 코드의 유지보수성을 높인다는 내용을 배웠는데 그 과정에서 Spring 프레임워..

[231101] 스트림을 배열로 변환, POST와 GET의 차이

알고리즘 문제 풀기 프로그래머스의 '배열 조각하기'라는 문제를 풀면서 한 가지 궁금증이 생겼다. 미리 선언한 arr라는 int 배열에 Arrays.copyofRange로 특정 배열의 일부분을 복사할 때 기존 배열의 크기에 맞춰서 값만 대입이 되는 건지(남은 공간은 0으로 채워지는 건지) 아니면 해당 범위로 자른 배열 그 자체가 대입되는 것인지 궁금했다. 처음에는 기존 배열의 길이에 맞춰 값이 들어가겠다고 생각했는데 Arrays.copyofRange의 코드로 들어가보니 새로운 길이로 선언한 배열 자체를 리턴해주고 있었다. public static int[] copyOfRange(int[] original, int from, int to) { int newLength = to - from; if (newLe..

[231031] Spring 입문

Spring 입문주차 강의 오늘은 처음으로 Spring 강의를 지급받아 수강하기 시작했다. 초반에 sql을 복습할 때에는 기억이 잘 안나서 조금 애먹었다. Spring 강의를 들으면서 이전 팀원분들이 알려주신 내용 덕분에 친숙함을 느꼈고 그래서 더 이해를 잘 할 수 있었다. 오늘은 처음으로 간단한 API 하나를 설계하고 구현해보는 데까지 해보았다. 처음이라 코드들이 대부분 낯설지만 그래도 재미있게 느껴졌다. 일단 수업을 잘 따라가면서 스프링을 잘 익히고 싶다 ! 내배캠 관련 리포지토리 합치기 https://backendcode.tistory.com/271 [Git] GitHub 여러 Repository 합치기 간단 총 정리 이번 글에서는 이전에 생성하였던 여러 Repository를 하나의 Reposito..