JPA

JPA

OSIV(Open Session In View)

프로젝트 성능개선, 안티패턴 개선을 하면서 한 가지 의문이 들었다. 우선 현재 로직을 간단하게 설명하자면, @JwtLogin이 붙여져 있는 곳은 HandlerMethodArgumentResolver를 구현하여 헤더의 정보를 읽어 로그인한 멤버의 정보를 넘기는 방식이다. 코드의 흐름은 아래와 같다. Controller @PostMapping public ResponseEntity create(@JwtLogin final Member member, @RequestBody @Valid final BoardRequest boardRequest) { Board board = boardService.create(boardRequest, member); return ResponseEntity.status(HttpSt..

프로젝트/커뮤니티

[프로젝트] 커뮤니티 REST API 서버만들기 #8 어드민 페이지 만들기

이번에는 어드민 페이지를 추가하였다. 우선 정지에 관련해서 처리할 수 있는 기능을 추가하였는데, 더 세부적인 기능은 추후 추가할 예정이다. 오늘은 유저, 게시판, 댓글에 대해 정지목록을 조회할 수 있고, 정지를 풀어주거나, 삭제할 수 있다. 각각 정지가 당하면, 유저는 권한이 바뀌어서 다른 곳에 접속을 못하게 되고, 게시판이나 댓글의 경우 조회가 안되도록 설정하였다. 그 외에는 3개다 비슷한 로직이기 때문에, 유저에 관해 설명하겠다. Member @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Member extends BaseEntity { @Id @GeneratedValue(strategy = Generat..

프로젝트/커뮤니티

[프로젝트] 커뮤니티 REST API 서버만들기 #7 Report API 만들기

이번에는 신고기능을 추가하였다. 유저 신고, 게시판 신고, 댓글 신고 총 3가지를 추가하였고, 누적신고가 일정수치를 넘을 시 해당 엔티티에 신고상태를 활성화시켜 주었다. 자세한 건 아래 코드를 보며 자세히 알아보자. 유저신고, 게시판 신고, 댓글 신고 모두 매우 유사한 형태이므로, 유저 신고를 중점으로 설명하겠다. 자세한 건 맨 아래 깃허브를 통해 코드를 확인할 수 있다. MemberReport @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity public class MemberReport extends BaseEntity { @Id @GeneratedValue(strategy = Generation..

프로젝트/커뮤니티

[프로젝트] 커뮤니티 REST API 서버만들기 #6 Comment API만들기

이번에는 댓글기능을 추가하였다. 단순하게 CRUD 기능을 추가하였기에 크게 어렵지 않은 내용이다. 우선 시큐리티 접근 권한 설정을 추가하였다. SecurityConfig .antMatchers(HttpMethod.GET, "/api/comments").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN") .antMatchers(HttpMethod.POST, "/api/comments").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN") .antMatchers(HttpMethod.DELETE, "/api/comments/{id}").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN") .antMatchers(HttpMethod.PUT..

프로젝트/커뮤니티

[프로젝트] 커뮤니티 REST API 서버만들기 #5 게시판 부가기능 추가

오늘은 게시판에 추가적인 작업을 할 것이다. 좋아요, 즐겨찾기, 조회수 기능을 추가하였다. 바뀐 코드와 중요한 부분을 위주로 자세히 알아보자. SecurityConfig @EnableWebSecurity @Configuration @RequiredArgsConstructor public class SecurityConfig { private final TokenProvider tokenProvider; private final CorsFilter corsFilter; private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; private final JwtAccessDeniedHandler jwtAccessDeniedHandler; @B..

프로젝트/커뮤니티

[프로젝트] 커뮤니티 REST API 서버만들기 #3 - Message API 만들기

이번에는 Message API를 추가하였다. 쪽지기능은 회원과 회원 사이에 주고받는 쪽지를 의미한다. 우선 달라진 코드와 중요한 포인트에 대해 알아보자. SecurityConfig @EnableWebSecurity @Configuration @RequiredArgsConstructor public class SecurityConfig { private final TokenProvider tokenProvider; private final CorsFilter corsFilter; private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; private final JwtAccessDeniedHandler jwtAccessDeniedHandl..

프로젝트/커뮤니티

[프로젝트]커뮤니티 REST API 서버만들기 #2 - Member API 만들기

이번에는 Member API가 추가되었다. 회원 전체조회, 회원단건조회, 회원 정보 수정, 회원탈퇴 기능이 추가되었다. 저번 포스팅에서 바뀐 점과 중요한 점 위주로 설명할 것이다. SecurityConfig @EnableWebSecurity @Configuration @RequiredArgsConstructor public class SecurityConfig { private final TokenProvider tokenProvider; private final CorsFilter corsFilter; private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; private final JwtAccessDeniedHandler jwtAc..

JPA

페치 조인

페치 조인(fetch join) 페치 조인이란 SQL 조인의 종류가 아니며, JPQL에서 성능 최적화를 위해서 제공해주는 기능이다. 페치 조인은 엔티티를 조회할 때 연관된 엔티티나 컬렉션을 한 번의 SQL로 함께 조회하는 기능을 제공함으로써 N+1문제를 해결할 수 있게 도와준다. 일반 조인은 실행 시 연관된 엔티티를 함께 조회하지 않는다. 단지 데이터베이스 상에서 테이블간의 탐색을 위해 사용되는 것이다. 아래와 같은 코드가 있다고 하자. @Entity @Data public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private int age; ..

JPA

JPA란 무엇인가?

JPA란? Java persistence API이다 persistence : Persistence(영속성) : 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미, 영속성은 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 구현 자바에 있는 데이터를 영구히 기록할 수 있는 환경(스토리지 내 DBMS)에 영구히 저장할 수 있도록 하는 환경을 제공하는 API라고 할 수 있음 API (Application Programming Interface) : 프로그램 사이 데이터 통신 규칙(상하관계가 존재) ↔ Protocol Protocol은 서로 동일시하여 규칙을 서로 합의하에 정함 JPA는 ORM 기술이다. ORM(Object Relation Mapping) :..

CS

5주차 CS 스터디 Operating System&Spring

5주 차에서 다룰 내용은 다음과 같다. 1. Operating System 운영체제란? 프로세스 vs 스레드 프로세스 주소 공간 Interrupt 2. Spring Test Code(JUnit5) JPA JPA 더티 체킹 Spring Security - 인증 및 권한 부여 Operating System 운영체제란? 운영 체제는 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 시스템 소프트웨어이다. 운영체제의 역할 1. 프로세스 관리 운영체제에서 작동하는 응용 프로그램을 관리하는 기능이다. 현재 CPU를 점유해야 할 프로세스를 결정하고, 실제로 CPU를 프로세스에 할당하며, 이 프로세스 간 공유 자원 접근과 통신 등을 관리하게 된다. 2. 저장장치 관리 1차 저장장치에 해당하는 메인..

javajoha
'JPA' 태그의 글 목록