본문 바로가기

Language

(101)
[JPA/Hibernate] Hibernate 기초 Hibernate란?객체 지향 프로그래밍과 관계형 데이터베이스 설계의 관점 차이를 해결하여 개발자가 더 객체 지향 프로그래밍에 집중할 수 있도록 해주는 ORM 중 하나Java에서는 JPA가 표준 인터페이스로 있으며 구현체 중 가장 많이 사용되는 것이 Hibernate→ 즉, 앞서 포스팅한 JPA(인터페이스)의 구현체(클래스)가 Hibernatehttps://bestdevelop-lab.tistory.com/227 [JPA] JPA의 개념 / JPA를 사용해야하는 상황과 그렇지 못한 상황JPA(Java Persistence Api)란? 자바에서 사용하는 ORM(Object-Relational Mapping) 기술 표준자바 애플리케이션과 JDBC 사이에서 동작하며 자바 인터페이스로 정의ORM(객체 관계 맵핑..
[JPA] JPA의 개념 / JPA를 사용해야하는 상황과 그렇지 못한 상황 JPA(Java Persistence Api)란? 자바에서 사용하는 ORM(Object-Relational Mapping) 기술 표준자바 애플리케이션과 JDBC 사이에서 동작하며 자바 인터페이스로 정의ORM(객체 관계 맵핑, Object-Relational Mapping)이란?객체와 관계형 데이터베이스의 데이터를 매핑하는 기술ORM 프레임워크가 객체와 데이터베이스 중간에서 매핑객체와 테이블을 매핑하여 패러다임 불일치 문제를 해결ORM의 종류Hibernate Java 기반의 ORM 프레임워크로 JPA를 구현하여 많이 사용객체와 테이블을 매핑하고 SQL을 작성하지 않고도 CRUD 작업 가능Mybatis SQL 맵퍼로 ORM과 유사한 기능을 제공하면서도 SQL을 XML로 작성하여 직접 관리엄밀히 따지면 Myb..
Call by Value와 Call by Reference의 차이 Call by Value메서드를 호출할 때 값을 넘겨주기 때문에 Pass by Value 라고도 함메서드를 호출하는 호출자(Caller)의 변수와 호출 당하는 수신자(Callee)의 파라미터는 복사된 서로 다른 변수값만을 전달하기 때문에 수신자의 파라미터를 수정해도 호출자의 변수에는 영향 XCall by ReferenceCall by Reference는 참조(주소)를 직접 전달하며 Pass by Reference 라고도 함참조를 직접 넘기기 때문에 호출자의 변수와 수신자의 파라미터는 완전히 동일한 변수메서드 내에서 파라미터를 수정하면 그대로 원본 변수에도 반영JVM 메모리에 변수가 저장되는 위치Java의 Call by Value에 대해 이해하기 위해서는 변수 생성 시 메모리에 어떻게 저장 되는 지 알아야..
[Redis] 캐시란? Redis 캐시(Cache) 전략캐시 전략은 웹 서비스 환경에서 시스템 성능 향상을 기대할 수 있는 중요한 기술일반적으로 캐시는 주기억장치(RAM)을 사용하기 때문에 데이터베이스보다 훨씬 빠르게 데이터 응답이 가능단, RAM은 용량이 한정적이기 때문에 모든 데이터를 캐시에 저장할 경우 용량 부족 상태가 발생따라서, 아래의 기준을 정해두어야 함어느 종류의 데이터를 저장할 것인가?얼만큼 데이터를 캐시에 저장할 것인가?얼마나 오래된 데이터를 캐시에서 삭제할 것인가?[ DB I/O vs Redis 캐시 ]ㅇ Database와 Redis의 저장 위치 - 데이터베이스의 저장 위치  : 일반적으로 보조기억장치(HDD or SSD) - Redis(In-memory Data Store)의 저장 위치 : 주기억장치(RAM..
[JWT] Refresh Token을 이용한 Access Token 재발급 Refresh Token을 이용한 Access Token 재발급 로직@Overridepublic GatewayFilter apply(Config config) { return ((exchange, chain) -> { // 생략 String token = jwtUtil.substringToken(authorization); log.info("authorization = {}", authorization); try { jwtUtil.validateToken(token); return chain.filter(exchange); } catch (SecurityException | MalformedJwtE..
[PasswordEncoder] BCryptPasswordEncoder Spring Security 의존성을 추가 해야만 PasswordEncoder 제공PasswordEncoder의 구현체인 BCryptPasswordEncoder은 Hashing(해싱) 방식을 사용하여 복호화가 불가능한 단방향 방식비밀번호는 노출이 되어서는 안 되기 때문에 암호화를 시키고 복호화를 할 필요가 없이, 사용자가 입력한 비밀번호가 맞는지만 검증하면 되기 때문에 BCryptPasswordEncoder를 사용 BCryptPasswordEncoder 사용 이유? 강력한 해시 알고리즘BCrypt는 해시 계산이 느리기 때문에 공격자가 무작위 대입 공격(Brute-force attack)을 시도하는 데 시간이 더 많이 소요Salt 자동 생성BCrypt는 내부적으로 랜덤한 salt 값을 생성하여 해싱 과정에..
[JWT] JwtUtil 사용 예제 및 설명 Enum Class = UserRolepublic enum UserRole { USER(Authority.USER), // 사용자 권한 ADMIN(Authority.ADMIN); // 관리자 권한 private final String authority; UserRole(String authority) { this.authority = authority; } public String getAuthority() { return this.authority; } public static class Authority { public static final String USER = "ROLE_USER"; public s..
[JWT] JWT 등장 배경, Access Token, Refresh Token Cookie와 Session의 문제점Cookie의 문제점보안에 취약요청 시 쿠키의 값을 그대로 전송유출 및 조작의 위험성용량 제한으로 많은 정보를 담을 수 없음 (도메인 별 약 4KB)웹 브라우저마다 쿠키에 대한 지원 형태가 다르기 때문에 다른 도메인 간 공유가 불가능 쿠키의 사이즈가 커질수록 네트워크에 부하 증가 Cookie & Session의 문제점상태 유지(Stateful)서버는 각 사용자의 세션을 메모리나 데이터베이스에 저장쿠키를 포함한 요청이 외부에 노출되더라도 세션 ID 자체는 유의미한 개인 정보를 담지 않지만, 해커가 이를 중간에 탈취하여 클라이언트인척 위장할 수 있다는 한계가 존재→ 세션 하이재킹(Session Hijacking)서버에서 세션 저장소를 사용하므로 요청이 많아지면 서버에 부하..