본문 바로가기

Language/Spring

(28)
[공통처리] Filter, Interceptor, AOP 차이점 및 흐름과 역할 공통 처리개발을 하다보면 다음과 같이 공통적으로 적용되는 부분들이 존재로그인 세션 유지권한 체크(Spring Security 등)XSS(roos site sprict)로깅페이지 인코딩 처리이러한 공통 기능들은 모든 페이지에 똑같은 코드를 넣게 되면 중복 코드를 초래하게 되는데 이는 가독성이 좋지 못할 뿐더러 유연성과 유지보수 측면에서도 매우 좋지 않음따라서 공통된 코드들은 따로 분리하여 관리하는 것이 매우 효율적인데 공통 코드를 처리하는 방법은 3가지가 존재하는데 각각 적용되는 위치가 다름FilterIntercepterAOP요청에 따른 흐름Filter : Servlet Container(Tomcat) 영역 = 서블릿 레벨Interceptor, AOP : Spring Container 영역 = 스프링 레벨..
[AOP] AOP란? AOP(Aspect Oriented Programming)의 개념관점 지향 프로그래밍어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠보고 그 관점을 기준으로 각각 모듈화핵심적인 관점 : 개발자가 적용하고자 하는 핵심 로직부가적인 관점 : 핵심 로직을 수행하기 위해 필요한 DB 연결(JDBC), 로깅, 파일 입출력 등 AOP의 등장 배경회사 상사가 회원 가입 하는 시간을 측정하는 로그를 남겨 달라고 지시코드 수정 전public void join(JoinRequest joinRequest) { memberRepository.save(joinRequest.toMember());}코드 수정 후public void join(JoinRequest joinRequest) { long begin = Syst..
[Entity] 엔티티와 영속성 컨텍스트 엔티티(Entity)란?비즈니스 요구 사항을 모델링한 객체엔티티 설정의 필수 사항기본 생성자 필수@Entity 어노테이션 name의 속성(테이블명) 지정 가능기본값은 클래스 이름과 동일@Id 영속성 컨텍스트에서 엔티티를 관리할 때 구분하기 위해 사용(식별자 역할)@GeneratedValueJPA 기본키 생성 전략4가지 설정 존재GenerationType.AUTO hibernate.dialect에 설정된 DB 종류에 따라 하이버네이트가 자동으로 전략 선택단, 하이버네이트를 무조건 신뢰해서는 안 됨MySQL의 경우 AUTO 설정을 하면 당연히 Identity 전략을 취할 것이라 생각하고 생략하거나, 추후 DMBS 종류 변경을 고려하여 AUTO로 사용하는 경우가 있는데, 버전에 따라 선택되는 전략이 달라질 수..
[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..
[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..
[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..