분류 전체보기 75

UserSesseion 재로드하기

최초 소셜 로그인 시, 닉네임을 입력받는 기능을 구현하려 했다. 만약 닉네임이 있다면, 닉네임을 입력받는 폼을 띄우지 않는다. @PutMapping("/users/update") public RedirectView updateUserInfo(@LoginUser SessionUser sessionUser, SetNicknameForm nicknameForm, BindingResult result) { String nickname = nicknameForm.getNickname(); if (result.hasErrors()) { System.out.println("form error"); return new RedirectView("/home"); } userService.updateUserInfo(sess..

Spring 🌱 2023.11.03

[Java] Cheat Sheet 정리

int와 long의 범위 int : -2,147,483,648 ~ 2,147,483,647 long : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 String → Integer 타입 변환 Integer num = Integer.parseInt(str); Object → String 타입 변환 String.valueOf(o); str = "" + o; 문자열 인덱싱 str.charAt(i) 문자열 자르기 str.substring(begin_idx, end_idx); 2차원 배열 초기화 int[][] arr = {{10, 20}, {30, 20}, {50, 20}} 배열의 자료형 변환 Arrays.copyOf(original, int newLength,..

카테고리 없음 2023.10.06

[SQL] Cheat Sheet 정리

SQL 문법 순서 : 해석 우선순위 SELECT column_name(s) : 5 FROM table_name : 1 WHERE condition : 2 GROUP BY column_name(s) : 3 HAVING condition : 4 ORDER BY column_name(s) : 6 중복제거 SELECT DISTINCT name FROM animal_ins WHERE name IS NOT NULL; GROUP BY의 조건절 SELECT NAME, COUNT(NAME) FROM ANIMAL_INS GROUP BY NAME HAVING COUNT(NAME) >= 2 날짜 데이터에서 시간 추출하기 SELECT HOUR(DATETIME) AS HOUR FROM ANIMAL_OUTS; // 2017-05-..

카테고리 없음 2023.10.05

Dispatcher Servlet이란? 동작 방식과 장점

디스패처 서블릿의 dispatch는 "보내다"라는 뜻을 가지고 있다. 그리고 이러한 단어를 포함하는 디스패처 서블릿은 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller)라고 정의할 수 있다. 디스패처 서블릿은 요청이 들어오면 URI에 맞는 핸들러와 뷰를 찾는다. 다음과 같이 "/posts/save"의 URI 주소로 GET 요청을 보내면 디스패처 서블릿은 아래 컨트롤러를 찾아 작업을 위임한다. //PostController.java @GetMapping("/posts/save") public String loadPostForm() { return "post-save"; } Dispatcher-Servlet의 장점 Spring..

Spring 🌱 2023.09.25

토큰이 필요한 이유와 JWT 동작 방식

토큰이 필요한 이유 만약 인증 서버가 JSON 객체를 토큰으로 변환하지 않고 일반 JSON으로 보낸다면? 클라이언트 애플리케이션의 API는 전송받을 콘텐츠가 올바른지 확인 불가능 악의적인 공격자가 사용자 ID를 변경할 수도 있다. 그러나 애플리케이션의 API는 그런 일이 발생했는지 알 수 없다. * 인증서버 : 인증된 클라이언트만 접근을 허용한다. 이러한 보안 문제 때문에 인증 서버는 클라이언트 애플리케이션에서 확인할 수 있는 방식으로 정보를 전송해야한다. 이때 '토큰'을 사용하는 것이다. 인증(Authentication)과 인가(Authorization) 인증 사용자의 신원을 검증한다. id와 pw로 로그인하는 행위가 인증에 해당한다. 인가 인증 이후의 프로세스로, 사용자의 엑세스 권한을 허용/거부하는..

카테고리 없음 2023.09.21

JWT(JSON Web Token)란? | JWT 구성요소

JWT JSON 객체를 사용해 서버와 클라이언트 간 정보를 안전하게 전송하는 공개 표준 JWT는 클라이언트나 악의적 공격자가 JSON 객체를 변경할 수 없도록 암호화(해싱)를 사용하여 서명된다. 구성요소 JWT는 . 을 구분자로 3가지의 문자열로 구성되어 있다. xxxxx.yyyyy.zzzzz의 구조로 앞부터 헤더(header), 내용(payload), 서명(signature)로 구성된다. 헤더(Header) 헤더는 두가지 정보를 가진다. • typ : 토큰의 타입을 지정함. JWT이기에 "JWT"라는 값이 들어간다. • alg : 해싱 알고리즘을 지정한다. 토큰을 검증할 때 사용되는 signature 부분에서 사용된다. * 해싱 : 가장 많이 쓰이는 암호화 방식 중 하나. 암호화만 가능하며 복호화가 불..

카테고리 없음 2023.09.19

[Spring JPA] Entity에 @Setter를 지양해야 하는 이유

1. 데이터의 무결성을 깨뜨린다. 엔티티는 이상적으로 불변성을 가지도록 설계되어야 한다. @Setter를 사용하면 엔티티의 모든 필드에 대해 외부에서 수정이 가능해진다. 따라서 엔티티의 상태를 무작위로 변경할 수 있으며 무효한 값이 데이터베이스에 저장될 수 있다. 2. 변경 포인트를 추적하기 어려워진다. @Setter를 사용하면 어디서든 필드에 접근이 가능해지기 때문에 어느 시점이든 엔티티의 상태가 변경될 수 있다. 따라서 엔티티 상태에 문제가 발생하면 어디서 값이 변경된 것인지 추적하기 어려워져 유지보수가 어렵다. 3. 사용 의도가 분명하지 않다. 예를 들어 post.setTitle('title1')이란 코드가 있으면 이게 게시글의 제목을 생성하는 건지, 변경하는 건지 파악하기 어렵다. 따라서, 데이터..

Spring 🌱 2023.07.27