1. 요구사항구현된 프로젝트에서 사용자가 지정한 비밀번호 값은 입력한 문자열 그대로 저장이 된다.보안을 위해 해시값을 저장할 예정이고 SHA-256를 사용하려고 한다. 2. 해결 방법수정이 필요한 API는 회원가입, 로그인, 비밀번호 재발급이다. 비밀번호 암호화에 대해 궁금증이 생겼다... 바로 salt값에 대한 것.salt값을 사용해서 무작위 공격을 방어한다고 배웠는데 그럼 salt값은 어디에 저장되는걸까?답은 이 블로그에서 얻었다.따로 정리하고 싶지만 지금은 개발이 급하기에 패스! 구현에 BCryptPasswordEncoder 클래스를 사용하려고 한다. salt 생성하고, 해시값에 붙여주고 비교해주는 것까지 해결해준다. 아래는 해당 클래스의 주요 메서드이다. encode(CharSequence ra..
1. Session 인증 → JWT 인증 올해 초에 개발한 프로젝트에서는 Interceptor를 사용하여 로그인과 인증 과정을 (코드는 '더보기' 참고) 구현하였다. 사실 머쓱할 정도로... 단순하고 허접한 구현이라 구현을 했다고 보기도 어렵다. session에 id 속성이 있다면 모두 접근 허용을 해줬다. 해당 세션 정보를 별도의 DB에 저장을 하고 관리를 하는 방법으로 개선할 수 있을 거 같다. 너무 구현자체에 급급했다. 더보기package semohan.owner.global.auth;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import jakarta.servlet.ht..
JPA가 어떻게 변경된 엔티티 객체를 찾는지 명확하게 이해하려면 영속성 컨텍스트라는 JPA 내부 원리를 이해해 야 한다. 이 부분은 JPA 기본편에서 자세히 다룬다. 지금은 트랜잭션 커밋 시점에 JPA가 변경된 엔티티 객체를 찾아서 UPDATE SQL을 수행한다고 이해하면 된다. '스프링 DB 2편 - 데이터 접근 활용 기술' 강의의 JPA 파트에 위와 같이 '영속성 컨텍스트'가 언급되었다. JPA 사용 시, entity 객체의 값을 수정하면 자동으로 db에 update된다. 어떤 원리로 작동되는건지 계속 궁금해하고 있었는데 이번 기회에 다뤄보고자 한다! 영속성 컨텍스트란?영속성 컨텍스트는 JPA가 엔티티를 기반으로 데이터를 처리하는데 핵심 역할을 하는 객체로,EntityManager가 제공하는 메..
위와 같이 작동한다. 위 플로우에서 SqlSession이 언제 생성되는지, 누구에 의해 생성되는지 궁금해 졌다.SqlSession은 스프링 MyBatis 통합 설정에 의해 관리된다고 한다.스프링은 SqlSession을 자동으로 생성하고 매퍼 메소드 호출 시 만들어져 있던 SqlSession을 사용한다. 그럼 SqlSession은 JDBC 커넥션과 같은 것일까?SqlSession이 JDBC 커넥션을 사용하는 관계이다.SqlSessionFactory는 SqlSeesion을 생성할 때 커넥션 풀에서 커넥션을 가져와 사용한다.
(인프런/김영한) 스프링 DB 2편 강의에서 가져온 코드 중 일부입니다. JDBC Template을 이용해 DB에서 값 조회 시, 람다식을 활용할 경우 코드를 효율적으로 작성할 수 있다. 아직 람다식 사용이 익숙치 않아 코드를 분석해보고자 글을 작성한다. 단건 조회: 객체 조회Actor actor = jdbcTemplate.queryForObject( "select first_name, last_name from t_actor where id = ?", (resultSet, rowNum) -> { Actor newActor = new Actor(); newActor.setFirstName(resultSet.getString("first_name")); newActor.setLastName..
같이 플젝하고 있는 친구를 위해, 그리고 겸사겸사 복습해보기 위해내가 아는 선에서의 Spring Data JPA에 대해서 정리를 해보려고 한다!(틀린 내용이 있을 수 있다... 혹시 있다면 알려주세요...) 기술에 대한 개요나 설정 등은 건너 뛰고'사용 방법'에 대해서만 간단히 정리를 해보겠다. 1. Entity우선 Spring Data JPA는 ORM 기술이다. 객체와 DB의 테이블을 자동으로 Mapping해준다.Spring Data JPA 사용 시, 테이블을 직접 생성하지 않아도 된다. 설정 파일에서 ddl-auto를 상황에 맞게 변경해주면 테이블이 자동으로 생성된다! 그럼 테이블을 어떤 클래스와 Mapping 되는 것일까? 아래와 같이 @Entity 어노테이션이 붙은 클래스는 테이블로 매핑된다. ..
1. 스프링부트 시작하기스프링부트 프로젝트 시작하기gradle과 java를 선택했고 아래와 같은 의존성들을 추가하였다. 2. DB 연결하기교수님이 참고하라고 올려주신 예제를 보니 db 설정이 두 곳에 되어있다. properties 파일이나 yml 파일이나 담는 정보의 결이 항상 비슷했던거 같아서 찾아보았다.yml은 계층구조와 key:value 형태yml 형식이 properties의 개선된 버전properties 파일이 우선 순위로 일부 설정 덮어씌어질 수 있으니 하나만 사용 권장 참고 오류가 뜬다... 라이브러리를 jar파일로 넣어주면 된다는데 jar 파일을 찾을 수 없어 다운로드 먼저 진행했다.넣어주니 해결 완료! /src/main/resources/application.yml 에 다음과 같이 작성..
해결해야 할 요구사항 회원 A가 회원 B와 채팅하기 버튼을 누른 상황이다. 이때 기존 A, B간의 채팅룸이 존재한다면 ture를 반환하고 존재하지 않는다면 false를 반환하는 api를 작성해야 한다. 해결 방법 채팅 참여 테이블에서 A가 참여한 roomId 리스트와 B가 참여한 roomId의 교집합을 구한다. 교집합의 원소가 있으면 true, 없으면 false를 반환한다. 코드 ChatRoomController.java @GetMapping("/check") public ResponseEntity hasChatRoom(@AuthUser User user, @RequestParam("receiverId") Long receiverId) { if(user == null) throw new CustomExc..
1. 로그인 후, 알림 받을 채널 구독: /topic/notification/{user_id} 2. 상대방이 채팅 보낼 때, 위 채널로 '새로운 채팅!' 메세지 발행 (좌측: 채팅 메세지 발송, 우측: 알림 받음) 두명 모두 채팅방 참여해 있을때도 알림이 갈텐데 안가도록 처리해야 할거 같다. 상대방이 채팅을 구독한 상태일 경우에는 안가도록 처리하면 될거 같다! 다른거 먼저 구현하고 후에 다시 돌아와야지... 테스트툴: https://github.com/jiangxy/websocket-debug-tool?tab=readme-ov-file
- Total
- Today
- Yesterday
- 백준 2108
- 백준9375번
- RDD
- 스프링 강의
- 리트코드 1768 해석
- 자바 1004번
- 동덕여대
- 생활코딩
- 리트코드 1768
- 백준
- 컴퓨터학과
- 컴과
- 자바
- 컴공
- 알고리즘
- 자바 9375
- BFS
- 웹
- 안드로이드
- 프로그래밍
- 코딩
- bcrypaswordencoder
- 백준 1004
- 동덕여대 컴퓨터학과
- 그리디 알고리즘
- 스프링부트
- 개발
- 아이엘츠
- 코틀린
- 스파크
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |