전체 글 73

[Spring Security] 비밀번호 암호화

Bcrypt 란? Bcypt는 브루스 슈나이어가 설계한 키(key) 방식의 대칭형 블록 암호에 기반을 둔 암호화 해시 함수다. Niels Provos 와 David Mazières가 설계했다. Bcrypt는 레인보우 테이블 공격을 방지하기 위해 단방향 암호화에 솔팅과 키 스트레칭을 적용한 대표적인 예이며 복호화가 불가하다. 이를 활용하여 비밀번호 암호화를 해볼 예정이다 ! 1. Spring Security 의존성 주입 우선 비밀번호 암호화에 사용되는 PasswordEncoder를 사용하기 위해서는 Spring Security 의존성을 주입해줘야 한다. org.springframework.boot spring-boot-starter-security org.springframework.security spr..

Spring 2023.06.12

[스프링 핵심 원리 - 기본편] 1. 객체 지향 설계와 스프링

이야기 - 자바 진영의 추운 겨울과 스프링의 탄생 스프링 EJB 컨테이너 대체 단순함의 승리 현재 사실상 표준 기술 2002년 로드 존슨 책 출간( 책 출간 직후 유겐 휠러와 얀 카로프가 로드 존슨에게 오픈소스 프로젝트를 제안) 하이버네이트 EJB 엔티티빈 기술을 대체 JPA(Java Persistence API) 새로운 표준 정의 스프링이란? 스프링 부트 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용 단독으로 실행할 수 잇는 스프링 애플리케이션을 쉽게 생성 Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨 손쉬운 빌드 구성을 위한 starter 종속성 제공 스프링과 3rd path(외부) 라이브러리 자동 구성 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준..

[Spring + JPA] No Property Found for Type Exception 에러 해결

구현 프로젝트 연극 리스트를 출력하는 과정에 페이징 처리를 구현해보려 한다. 1. Service public Page selectAll(Pageable pageable){ return playRepository.findAll(pageable); } Page을 타입으로 지정하면, 반드시 파라미터로 Pageable을 받아야 한다. 2. Controller package com.cc.model.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org..

Spring 2023.06.03

[프로그래머스 / lv 2] 소수찾기(JAVA)

문제 풀이방법 소수를 판단하는 함수와 dfs방식으로 숫자 조합을 만드는 함수를 구현 중복없이 담기위해 HashSet 생성하여 모든 숫자 조합을 담은 후 소수를 판단하여 카운트 코드 import java.util.*; class Solution { HashSet numbersSet = new HashSet(); public int solution(String numbers) { dfs("", numbers); int count = 0; Iterator it = numbersSet.iterator(); while (it.hasNext()) { int number = it.next(); if (isPrime(number)) count++; } return count; } public boolean isPrim..

코딩테스트 2023.05.20

[Spring + Jpa] 테이블 Join & 문제해결

구현 CommentDto에 해당하는 UserDto를 가져오고자 G_Comment 테이블과 G_User 테이블을 조인 CommentDto Class package com.gld.model.dto; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.I..

Spring 2023.05.15

[프로그래머스 / lv 2] 타겟 넘버 (JAVA)

문제 풀이방법 깊이 우선 탐색 알고리즘 사용 마지막 노드까지 탐색했을 때 타겟 넘버와 합계가 같으면 정답 카운트 증가 탐색할 노드가 남아있는 경우, 이전 노드까지의 합에서 해당 노드의 값을 더하고 빼는 두가지 경우로 깊이 우선 탐색 알고리즘 재실행 코드 class Solution { int answer = 0; public int solution(int[] numbers, int target) { dfs(numbers,0,target,0); return answer; } public void dfs(int[] numbers, int depth, int target, int sum){ if(depth==numbers.length){ if(sum==target){ answer++; } }else{ dfs(n..

코딩테스트 2023.05.08

[Spring + Jpa] 로그인 구현하기 & 문제해결

구현 1. JPA를 이용하여 회원 정보를 관리하는 User Entity Class package com.gld.model.dto; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "G_USER") public class UserDto { @Id private Long Id; @Column(name = "USER_ID",nullable = false, unique = true) private String userId; @Column(name = "US..

Spring 2023.04.29

[프로그래머스 / lv 1] 문자열 내림차순으로 배치하기 (JAVA)

문제 풀이 방법 문자열을 배열로 변환 후 Arrays.sort()를 사용하여 정렬 후 다시 문자열로 반환한다. mapToObj()는 기본형을 객체형으로 변환해서 처리하고, map()은 객체형을 객체형으로 변환해서 처리합니다. 하지만 반환값은 항상 객체형 스트림이며, 입력값에 따라 다른 형태의 객체형 스트림이 반환됩니다. 따라서 각 메소드 안에서 어떤 값을 넣느냐에 따라 반환값이 달라질 수 있습니다. StringBuilder.reverse()를 활용해서 내림차순 정렬도 가능하다. 코드 import java.util.Arrays; import java.util.Collections; import java.util.stream.Collectors; class Solution { public String sol..

코딩테스트 2023.04.15

MyBatis

마이바티스(MyBatis)는 자바 객체와 SQL문 사이의 자동 매핑(mapping)을 지원하는 오픈 소스 프레임워크입니다. 즉, 개발자가 SQL문을 직접 작성하여 데이터베이스와 상호작용할 수 있으면서도, 코드상에서 객체 지향적인 방식으로 데이터를 다룰 수 있습니다. MyBatis에서 지원하는 의 종류는 다음과 같습니다. - JDBC: JDBC 트랜잭션 매니저를 사용합니다. - MANAGED: 외부 컨테이너가 트랜잭션 매니저를 관리합니다. - JTA: JTA(Java Transaction API)를 사용합니다. 1. 데이터베이스: 마이바티스를 사용하여 데이터를 조회하거나 조작할 데이터베이스가 필요합니다. 2. 마이바티스 라이브러리: 마이바티스를 사용하기 위해 필요한 라이브러리 파일들입니다. 이 라이브러리는..

메모장 2023.04.12

[프로그래머스 / lv 0] 문자열 정렬하기(1) (JAVA)

문제 풀이 방법 emergency를 정렬시킨 배열을 만든다. 해당 배열의 인덱스를 통해 진료 순서를 answer 배열의 값으로 저장한다. 오름차순 정렬이므로 전체 길이에서 해당 배열의 인덱스를 뺀 값이 진료 순서가 된다. 코드 import java.util.Arrays; class Solution { public int[] solution(int[] emergency) { int[] emergency2 = Arrays.copyOf(emergency,emergency.length); int[] answer = new int[emergency.length]; Arrays.sort(emergency2); for(int i=0; i

코딩테스트 2023.04.07