본문 바로가기

spring boot

JPA / spring boot (로그인 구현, RSA) 일단 로그인을 위한 테이블과 회원가입 테이블을 구분해놨다.회원가입 테이블엔 유저의 정보만,로그인 테이블엔 유저네임과 최근 로그인 기록을 남기기 위함이다. 먼저 전에 회원가입 부분에서 Bcrypt로 단방향 암호화를 진행했다.하지만 뷰단에서 비밀번호를 보낼 때에도 암호화가 필요하기에 RSA 를 사용해 양방향 암호화를 진행했다.@GetMapping(value = "login")public String login(HttpServletRequest request) { Rsa rsa = new Rsa(); rsa.initRsa(request); return "login";} rsa.init(request); 를 통해 뷰단에 공개키 생성을 위한 RSAModulus, RSAExponent 를 전달했다... 더보기
JPA / spring boot (TemplateInputException, dotenv, spring-security / Bcrypt) 회원가입 완성 TemplateInputException (해당 템플릿을 찾을 수 없습니다.)로그인, 회원가입 폼을 만들다 TemplateInputException 이 발생했다.타임리프가 해당 템플릿 파일을 찾을 수 없다는 에러였다. 원인이 뭔지 찾다가 해당 클래스에 @RestController 를 붙이면 해결된다는 말을 들었다.그런데 현재 내 컨트롤러는 뷰단을 반환해야 하는 경우도 있기에 @RestController 는 쓸 수 없었다. 이에 해당 API에 @ResponseBody를 붙이니 해결되었다.  spring-dotenv application.properties 파일에 내 DB에 관한 정보가 들어있다.이를 .env 파일로 빼서 쓰고 싶은데 spring 기반에선 dotenv 라는 라이브러리를 사용해야 .env를 인.. 더보기
JPA / spring boot (spring security, 회원가입 && 로그인 기능 feat. Bcrypt, RSA) BCrypt 단방향 암호화가 가능한 암호화 방법이다.유저가 보낸 문자열을 암호화할 순 있지만 다시 같은 문자열로 복호화는 불가능하다. 대신 Bcrypt.checkpw(유저가 보낸 패스워드, DB 저장된 해시값) 을 사용하면 암호화된 문자열과 비교는 하게 해준다. 특징 1. 같은 문자를 해싱하면 항상 같은 결과의 암호화된 문자열을 뱉어낸다.2. 이로 인해 생긴 문자열은 본래의 문자열을 추론할 수 없다. RSA 양방향 암호화가 가능한 암호화 방법이다.공유키와 개인키 두 쌍의 키로 암호화를 진행한다. 암, 복호화 둘 다 가능하기 때문에 본래의 문자열을 돌려받을 수 있다. =====================================================회원가입 프로세스 1. 유저가 값을 입력할 프.. 더보기
JPA / spring boot (session, token, oauth) 세가지 방식을 통한 로그인 처리 1. session입장권을 발급받아 그 입장권에 유저의 세션 id를 저장하고 서버나 DB에 보관한다. 장점유저가 입장권을 관리하지 않기 때문에 token에 비해 보안이 철저하다. 단점유저가 get, post 요청을 할 때마다 DB 조회를 하기때문에 과부하가 걸릴 수 있다. 2. token유저에게 유저의 정보가 담긴 입장권을 직접 발급한다.유저가 입장권을 조작은 못 하는게 해당 정보를 짧은 문자열로 암호화하기에 저장된 값과 다르면 응답을 받을 수 없다. 장점유저가 직접 입장권을 관리하기 때문에 대규모의 데이터를 관리할 때도 DB에 부담이 덜하다. 단점유저가 직접 입장권을 관리하는 만큼 그 입장권이 해킹당하면 서버에선 막을 수단이 없다. session || token 차이점 .. 더보기
JPA / spring boot (JPA , ORM, Hibernate) ORM이란 데이터 입출력을 위해선 SQL문을 작성해야하지만 ORM라이브러리를 사용하면 JAVA 문법으로 데이터 관리를 할 수 있다. JPA란 JAVA에서의 ORM 표준 문법 Hibernate란 JPA의 구현체 (사용하기 편하게 구현한 것)요즘은 거의 JPA와 동일한 의미로 사용한다.  엔티티로 테이블 생성했으니 JPA로 데이터 입출력해보기 1. repository 생성2. 원하는 클래스에 repository 등록3. repository 입출력문법 사용 spring에서의 Mapper 역할? (interface) 더보기
JPA / spring boot (JPA , ORM, Hibernate) ORM이란 데이터 입출력을 위해선 SQL문을 작성해야하지만 ORM라이브러리를 사용하면 JAVA 문법으로 데이터 관리를 할 수 있다. JPA란 JAVA에서의 ORM 표준 문법 Hibernate란 JPA의 구현체 (사용하기 편하게 구현한 것)요즘은 거의 JPA와 동일한 의미로 사용한다.  엔티티로 테이블 생성했으니 JPA로 데이터 입출력해보기 1. repository 생성2. 원하는 클래스에 repository 등록3. repository 입출력문법 사용 spring에서의 Mapper 역할? (interface) 더보기
JPA / spring boot 게시글 수정 name이 id인 현재 id 값을 전달   1. RequestParam("id") : 인풋 네임이 id인 값을 받음2. 받아온 id를 서비스단의 editItem() 메소드로 전달하고 result 변수에 담음3. editItem() : 받아온 id 값에 해당하는 데이터 반환4. result가 null이 아니면 프론트단에 데이터 전달   (뷰단 바인딩 완료) 5. 기본 값을 서버에서 전달받은 데이터로 세팅하고 required로 값이 빈 채 넘어가는 것을 방지6. 버튼을 클릭시 /editItemInfo 경로로 POST 요청  7. @ModelAttribute Item 으로 받아온 데이터들을 Item 타입으로 받아옴8. 만약 받아온 데이터가 null이 아니면 url을 vo의 id경로로 설정하고 editItemI.. 더보기
JPA / spring boot 기초 사용자가 form에 입력한 정보 서버로 전송하기  input 태그에 name 속성이 없으면 서버에 전송이 되지 않는다.form action 속성엔 POST 요청할 url 경로를 적는다.우리는 서버로 데이터를 전송할 예정이기에 POST 요청을 한다. 버튼은 submit 타입으로 지정해야 서버로 데이터 전송이 가능하다.  프론트단에서 url 파라미터로 보낸 데이터를 한번에 받기 위해 Map 타입을 사용했다.받은 데이터를 toString() 을 이용해 확인 itemRepository.save()의 조건은 해당 리포지토리 클래스타입의 오브젝트를 넣어줘야 한다.그렇기에 formData.get("데이터이름")에 알맞은 형변환을 넣어줘 DB로의 전송 또한 마무리 짓는다.  @ModelAttribute 위에선 Map으.. 더보기