프로젝트/게시판 프로젝트
-
Spring Data JPA에서 페이징 구현하기프로젝트/게시판 프로젝트 2022. 7. 1. 13:27
Spring Data JPA를 활용하여 간편하게 페이징을 구현하여 보겠습니다. 페이징이란 블로그 서비스나 게시글 서비스에서 흔히 볼 수 있습니다. 게시글이 1000개라면 모든 글들이 한 페이지에 보이는 것이 아니라 1번, 2번.... N번으로 별도의 페이지에 10개씩 들어가는 등 페이징을 통해 사용자에게 보이게 됩니다. 1. 우선 PagingAndSortingRepository를 사용해야 합니다. 하지만 기존에 JPARepository를 안으로 타고 들어가면 PagingAndSortingRepository를 구현하고 있습니다. public interface JpaRepository extends PagingAndSortingRepository, QueryByExampleExecutor { PagingAn..
-
@Transactional은 auto_increment를 초기화 하지 못한다프로젝트/게시판 프로젝트 2022. 6. 30. 02:21
프로젝트의 테스트를 작성하던 도중 Unique 한 PK값이 존재하지 않아 auto_increment 되는 값을 통해 조회해야 하는 일이 발생하였습니다. 저는 @BeforeEach 어노테이션이 매번 호출되도록 설정하여 repository를 새로 초기화했으며 @Transcational 어노테이션이 @DataJpaTest 안에 들어있어 1개의 데이터를 넣어주면 1L을 조회하면 될 것이라고 생각하였습니다. @BeforeEach void setUp() { boardService = new BoardServiceImpl(boardRepository); } 하지만 @Transactional 어노테이션은 테이블에 대한 롤백은 시켜주나, auto-increment에 대한 롤백은 되지 않았습니다. 즉, auto-incre..
-
인터셉터를 활용한 인증/인가 공통처리프로젝트/게시판 프로젝트 2022. 6. 29. 02:40
로그인을 할 때 사용자에게 "access-token"을 제공합니다. 게시글 작성을 위해서는 클라이언트의 HTTP 헤더의 "access-token"에서 token값을 가져와서 검증하고 토큰이 유효하다면 게시글을 작성하는 로직입니다. 코드로 보면 다음과 같습니다. @PostMapping public ResponseEntity posting(@Valid @RequestBody BoardRequestDTO boardRequestDTO, HttpServletRequest request) { String token = request.getHeader("access-token"); if (!jwtService.isUsable(token)) { return ResponseEntity.status(HttpStatus.U..
-
JPA 게시판 엔티티 만들기프로젝트/게시판 프로젝트 2022. 6. 23. 16:19
목표 회원이 작성하는 게시글의 Entity를 만들자 회원과 게시글의 연관관계 회원은 게시글을 여러 개 쓸 수 있습니다. 이에 따라 회원과 게시글의 관계는 1 : N으로 볼 수 있습니다. 회원 1명은 게시글 N개를 가질 수 있음 "JPA 1:N 연관관계" 키워드에 대해 검색해보겠습니다. 1:N 연관관계에 대해서 알아보기 전에 JPA의 연관관계에 대해서 먼저 학습하겠습니다. JPA 연관관계 매핑 정리 엔티티는 다른 엔티티의 참조를 가지면서 서로 관계를 맺게 됩니다. 회원이 게시글을 작성하는 경우 게시글 엔티티는 회원 엔티티 필드를 가지면서 서로 연관관계를 맺어 해당 게시글을 작성한 회원을 조회할 수 있습니다. 또한 서로 연관관계를 맺으면 회원이 어떤 게시글들을 작성했는지를 알 수 있습니다. 객체와 DB의 방..
-
Jackson ObjectMapper의 동작과정프로젝트/게시판 프로젝트 2022. 6. 20. 11:07
이 글은 아래의 정보들을 다루었습니다. ObjectMapper란? ObjectMapper를 사용하던 중 발생한 에러 발생과 해결방법 ObjectMapper의 동작과정(리플랙션과 기본생성자, Getter/Setter) Object Mapper란? Object Mapper는 데이터의 형식을 변환해줍니다. 아래 예시와 같이 데이터의 형식을 변환할 수 있습니다. Text(Json) -> Object Object -> Text(Json) 보통 Spring에서 api를 개발하다 보면 @ResetController를 많이 사용합니다. 이때 request와 response에서 json -> 객체, 객체 -> json의 과정은 MessageConverter에 의해 처리됩니다. MessageConverter가 json 변..
-
AWS EC2 build 무한로딩 에러(EC2 메모리 부족 현상 대처)프로젝트/게시판 프로젝트 2022. 6. 16. 02:43
문제가 발생한 상황 문서화 작업을 추가하여 githun에 push 하고 AWS EC2로 접속하여 git pull을 받아 새롭게 REST API 서버를 띄우려고 했습니다. ./gradlew build 명령어를 수행하던 중 테스트 부분에서 더 이상 퍼센티지가 올라가지 않으며 시간만 지나가는 상황이 발생하였습니다. 처음에는 당황하여 SSH를 그냥 닫아버리자 한동안 연결이 되지 않기도 하였습니다. 이후에 상황을 재구성 하였을 때 똑같은 상황이 발생했고 Ctrl + Z를 사용하여 해당 쉘 스크립트로부터 빠져나오고 그 뒤로부터는 EC2 환경에 엄청나게 버벅거리기 시작합니다. 이후에 sar 명령어를 사용하여 시스템 자원을 얼마나 사용하고 있는지 확인하고자 하였는데 메모리 사용량이 95%에 육박한 것 같았습니다. 저와..
-
AWS EC2에 스프링부트 프로젝트 배포하기프로젝트/게시판 프로젝트 2022. 6. 14. 02:38
AWS 가입 및 EC2 인스턴스 생성(1) EC2 자바 11 설치 및 타임존 설정(2) AWS RDS 구축하기(3) AWS EC2에 스프링부트 프로젝트 배포하기(4) 현재 RDS와 EC2를 모두 구축해 놓은 상황입니다. 깃허브에서 코드를 받아올 수 있게 EC2에 Git을 설치합니다. 1. putty를 통해 EC2에 접속하여 git --version 명령어를 입력합니다. 현재 git이 설치되어 있지 않습니다. 2. sudo yum install git 명령어로 git 설치 이제 git이 설치되었습니다. 3. git clone으로 프로젝트를 저장할 디렉터리 생성 mkdir ~/app && mkdir ~/app/step1 ls 명령어로 디렉토리가 잘 생성되었는지 확인할 수 있습니다. 만약 잘못 생성해서 다시 ..
-
AWS RDS 구축하기프로젝트/게시판 프로젝트 2022. 6. 11. 00:01
AWS 가입 및 EC2 인스턴스 생성(1) EC2 자바 11 설치 및 타임존 설정(2) AWS RDS 구축하기(3) AWS EC2에 스프링부트 프로젝트 배포하기(4) "AWS RDS 사용하기" 시작하겠습니다 RDS란? AWS에 데이터베이스를 직접 설치하게 되면 모니터링, 알람, 백업 , HA 구성등을 모두 직접 하게 됩니다. 이러한 작업들이 번거롭기 때문에 AWS에서는 위에 언급한 작업들을 모두 지원하는 Relational Database Service를 제공합니다. RDS는 AWS에서 지원하는 클라우드 기반 관계형 데이터베이스입니다. 데이터베이스를 다룰 때 RDS VS EC2에 대해 조금 더 자세하게 알고 싶으시다면 다음 글을 참고하시면 좋을 것 같습니다. https://junuuu.tistory.co..