1️⃣ 2739 번: 구구단 https://www.acmicpc.net/problem/2739 2739번: 구구단 N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다. www.acmicpc.net 💻 나의 풀이 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); for(int i = 1; i st = new StringTokenizer(br.readLine(), " "); StringTokenizer의 nextToken() 함수를 쓰면 readLine..
1️⃣ 1330번: 두 수 비교하기 https://www.acmicpc.net/problem/1330 1330번: 두 수 비교하기 두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오. www.acmicpc.net 💻 나의 풀이 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); if(a>b) System.out.println(">"); else if(a= 90) System.out.println("A"); else if (A >= 80)..
각 사용자의 권한을 부여하기 위해 Role과 관련된 테이블을 추가해줬습니다. 사용자(User)와 권한(Role) 간에는 다대다 관계가 있습니다. 즉, 한 사용자가 여러 개의 권한을 가질 수 있고, 한 권한도 여러 사용자에게 할당될 수 있습니다. 매핑 테이블을 만들 때는 보통 각각의 주요 테이블의 기본키(primary key)를 외래키(foreign key)로 참조하며, 이 외래키들이 결합하여 복합 기본키를 형성합니다. 여기서는 "user_role"이라는 매핑 테이블을 만들어 사용자와 권한 간의 다대다 관계를 나타낼 것입니다. user_role 테이블은 다음과 같은 구조를 가집니다. user_id: 사용자를 식별하는 외래키 role_id: 권한을 식별하는 외래키 💻 프로젝트 적용 1️⃣ mySql에 테이블..
사용자 인증 방식은 일반적으로 세션 기반 방식과 토큰 기반 방식(JWT)이 있습니다. 각 방식의 장단점이 있어 상황에 맞게 결정하여 사용하는 것이 중요합니다. 지난 팀 프로젝트의 경우에는 서버 사이드 렌더링 방식이기 때문에 세션 방식을 사용해 구현했었는데요. 이번 개인 프로젝트에서는 클라이언트 사이드 렌더링 방식으로 한 웹 페이지이기 때문에 확장성을 고려하여 토큰 기반 방식으로 구현해보려고 합니다. 한참을 공부하고 헤매이면서 구현한 과정이라 추후에 필요한 부분은 수정, 또 수정을 거쳐서 상세히 기록해보려고 합니다. 1️⃣ 라이브러리 설정 Spring Security와 JWT를 사용하기 위해 다음 라이브러리들을 추가해줍니다. build.gradle dependencies { // Spring Securit..
보안성을 위해 회원가입 시 비밀번호와 비밀번호 확인 필드의 값이 일치하는지 확인하는 과정입니다. 처음에는 아무것도 모르고 비밀번호2 라는 컬럼을 DB에 생성했더랬죠... 하지만 그럴 필요없이 DTO와 프론트단에 필드만 만들어주면 됩니다! [React] Register.js password2 필드를 추가해줍니다. {/* 비밀번호 */} 비밀번호 {/* 비밀번호 확인 */} 비밀번호 확인 UserDTO.java private String password2; 를 추가해줍니다. @JsonProperty("password2") @NotBlank(message = "비밀번호는 필수 입력 값입니다.") @Pattern(regexp = "(?=.*[a-z])(?=.*[0-9]).{8,16}$", message = "비..
UserDTO에 @Valid 사용 build.gradle implementation 'org.springframework.boot:spring-boot-starter-validatio import import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Pattern; @NotBlank @Pattern @Getter @Setter @AllArgsConstructor @NoArgsConstructor @Builder public class UserDTO { private Long id; @JsonProperty("userId") @NotBlank(message = "아이디는 필수 입력 값입니다.") privat..
아이디 입력 필드 옆에 아이디 중복 확인 버튼을 구현했었는데 회원가입 버튼을 누를 시 다시 한번 확인하고 resoponse 해주는 부분을 구현했습니다. ResDTO 먼저 모든 API의 Response에 대해 공통으로 감싸줄 수 있는 ResDTO를 새롭게 만들어 주었습니다. 🧐 그렇다면 ResDTO를 만드는 이유는 무엇일까요? Response에서 요청된 응답 값만 전달해주는게 아니라 결과에 대한 코드, 내용, 에러메세지 등을 같은 포맷으로 전달해주어 프론트에서 더 효율적으로 사용하게 하기 위한 목적입니다! 또한, 객체 지향적인 설계를 촉진합니다. ResDTO 객체를 사용함으로써 응답 데이터를 하나의 객체로 추상화하고, 응답 생성 및 전달에 관련된 로직을 한 곳에서 관리할 수 있게 됩니다. 서버 사이드 렌더..
1️⃣ 문자열 나누기 문제 설명 문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다. 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다. 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다. s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다. 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다. 문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solut..
WebSecurityConfig.java PasswordEncoder를 빈으로 등록합니다. @Bean public PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } PasswordEncoder는 주로 사용자의 비밀번호를 해싱(hashing)하여 저장하고, 로그인 시에 비밀번호를 검증하는 데 사용됩니다. 여기서 BCryptPasswordEncoder는 PasswordEncoder의 구현체 중 하나로, BCrypt 해싱 알고리즘을 사용하여 비밀번호를 안전하게 해싱합니다. UserService.java package com.example.demo.service; import com.example.demo.dto.ResDTO; im..