Validation 이란 어떤 데이터 (주로 사용자 또는 다른 서버의 request)의 값이 유효한지, 잘못된 내용이 있는지 확인하는 단계를 뜻합니다. 예를들어 이메일 주소의 양식은 "email@email.com"의 양식어어야 하는데, 이 양식과 일치하지 않는 값이 들어온다면 해당 값의 저장을 막을 수 있습니다.
초기 가르쳐줄때 인증, 인가 만 하던 처리 하던것에서 토큰을 가져와서 적용하는 부분으로 수정할때 이해가 어렵다.
새로 알게된점
API 접근 권한 제어 이해
페이지 접속시 관리자를 제외한 회원들을 관리자 페이지에 접속 하지 못하게 하기위해서 회원 상세정보 (UserDetailsImpl)에 권한(Authority) 설정하여 특정 권한을 가지지 못하게 하는자를 API를 통해 못들어오게 할 수 있다.
자릿수 더하기
문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
제한사항
N의 범위 : 100,000,000 이하의 자연수
입출력 예
N
answer
123
6
987
24
입출력 예 설명
입출력 예 #1 문제의 예시와 같습니다.
입출력 예 #2 9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.
*원래 문제의 의도대로 숫자에서 각각의 백의 자리, 십의 자리, 일의 자리를 더하는 방식으로 정수 N을 문자 String 방식으로 바꾸었으나 각각 따로 합치는 방법을 찾지 못했다. 그래서 while문을 사용해서 정수를 10씩 나누어 일의자리를 더하는 방식으로 만들었다.
public class Solution {
public int solution(int n) {
int answer = 0;
while (n > 0) {
answer += n % 10; // 일의 자리부터 자릿수 더하기
n /= 10;
}
return answer;
}
}
이렇게 할 경우 입력한 값에서 answer += n % 10; 통해 나머지 값을 따로 빼낸후 입력값을 10으로 나누어 나머지를 없애는 int형 정수로 만든다음 다시 answer += n % 10; 통해 나머지 값을 따로 빼내는 형식의 while문으로 처리된면서 빼낸값들을 합치는 방식으로 처리한다.
만약 입력한 값이 135 라면 135%10 = 5 이며
answer += 5 인 셈이다
135 -> 5
13 -> 3
1 -> 1
5+3+1 = 9 를 쉽게 구할 수 있다.
이후 처음 의도대로 하는 방법을 찾아보다가 코드를 찾았는데
class Solution {
public int solution(int n) {
int answer = 0;
String a = Integer.toString(n);
for(int i = 0; i < a.length(); i++){
answer += Integer.parseInt(a.substring(i, i + 1));
}
return answer;
}
}
해당 코드에서는 parseInt를 이용했었다.
분명 처음 배울때 parseInt에 대해 배우긴 했지만 실제로 이렇게 이용하는거는 처음봐서 굉장히 신기 했다.
오늘의 느낀점
코드 카타를 풀고 다른사람들의 풀이를 보면서 정말 다양한 방법들이 있다는것을 알게 된다.
코드를 쉽게 적거나, 읽기좋게 만들거나, 효율을 올리는등 정말 다양하게 적혀 있는걸 보면서 좀더 생각의 틀을 넓혀야 겠다는 생각을 느꼈다.
HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 코드이며 Web 애플리케이션에서 관리되는 영역으로 Client로 부터 오는 요청과 응답에 대해 최초/최종 단계의 위치이며 이를 통해 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가할 수 있습니다.
필터는 객체의 형태로 존재하며 옆에 그림에 보이는 것처럼 클라이언트로부터 오는 요청(request)을 받아 최종자원(서블릿/JSP/기타 문서)을 거쳐 클라이언트의 요청 정보를 알맞게 변경한 후 다시 필터를거쳐 최종 자원과 클라이언트로 가는 응답(response)를 제공한다.
오늘의 느낀점
처음에 필터를 배울때 이런 방식을 왜쓰나 했는데 이후 Spring Security를 배우면서 내가 사용하는 페이지에서 재접속시 이미 다시 로그인하는 번거로움을 없애기위해 필수적인 구조라는 것을 깨닫고 웹구조는 사람의 편의를 위해서 정말 많은 수정을 겪어왔다는 것을 느꼈다.
점점더 배울수록 어렵고 이해가 안되서 혼자 끙끙대면서 머리를 싸매지만 영상에서 알려준 내용의 구조와 설명을 듣고 평소 내가 사용했던것이 이렇게 만들어졌구나라는것을 보고 느끼면서 신기하면서도 조금씩 재미를 느껴가는거 같다.
수많은 클라이언트들의 데이터를 저장하기 위해서는 다량의 서버가 필요하며 이 다수의 서버를 운용하기 위해서 Session Storage가 필요한데 카카오 같은 동시접속자가 많은 경우에는 서버측 부하를 낮추기 위해서 Session Stroage가 아닌 JWT를 사용한다.
왜냐하면 Session Strorage는 모든 클라이언트의 로그인 정보 소유하고 있기때문인데 클라이언트가 서버를 거쳐서 Session Strorage로 로그인정보를 요청하는 과정을 가지는데 JWT는 로그인 정보를 Server 에 저장하지 않고, 클라이언트 에 로그인 정보를 JWT 로 암호화하여 저장하도록 하여 서버를 거치기 않고 클라이언트 정보를 가져오기 때문이다.
오늘의 느낀점
JWT 구조를 보면서 확실히 서버에 접속하는데 부하를 줄일수있지만 보안에 취약하다는것을 보고 제대로 관리 못하면 해킹당할 가능성이 높겠다라고 생각이 들었다.
각각의 구조에 따라 장단점이 있으며 가성비에 따라 혹은 운영방침에따라 데이터 관리가 달라지겠다는 생각도 같이 들면서 추후 백엔드 개발자로 일할때 큰 참고가 될것 같다.
위에 예시의 코드 의미는 List<Memo> 안에 들어있는 자료중 find...By로 조회를 select한후 안에All 넣어 모든 범위를 대상으로 한다 이후 OrderBy는 순서정렬에 대한 내용이며 ModifiedAt이라는 필드데이터를 의미, Desc는 내림차순을 말한다.
즉 ModifiedAt이라는 필드데이터를 기준으로 정렬(OrderBy) 해서 전체데이터를 내보낼건데(findAllBy) 이를 내림차순(Desc)으로 할것입니다.
밑에 추가 예시는 꼭 자료전체 뿐아니라 뒤에 keyword를 넣어서 특정 단어가 들어가 있는 데이터를 찾게 하도록 하는 것도 가능하다.
오늘의 느낀점
하나의 프로젝트를 완성하기 위해서 적용해야 할 기술이 정말 많은거 같다.
간단하면서 편리하게 사용하기 위해 만든 기술이지만 이해를 못하면 오히려 더 어렵게 느껴지고 헷갈려 구분이 안가게 된다.
이번에도 한가지 기능을 이해하기위해서 부수적인 것을 찾으면서 적용하다보면 점점 더 알아야 할게 많아지다보니 JPA를 공부하면서 정말 공부해야할 것이 많다는것을 새삼 깨닫게 됬다.