🔻Back-End/Spring

JPA를 통해 Repository를 만들 땐 한 엔티티 당 하나의 리포지토리를 만들었어야 한다 하지만 이 방법은 여러 테이블을 조인하여 결과를 가질 때 불편하기 때문에 네이티브 쿼리를 이용한다! (JPA 네이티브 쿼리 + 인터페이스 기반 Projections 활용) 유저가 좋아요를 누른 책의 정보를 담아둔 liked_book 테이블엔 user_idx와 book_idx가 있고, 해당 쿼리를 통해 userIdx를 입력받고 유저가 좋아요 누른 책의 제목을 조회하는 쿼리를 작성하고자 한다 ❗interface 구현 유저의 아이디와 책의 이름을 조회할 것이고 이 조회한 내용을 UserLikedBook이라는 인터페이스에 매핑해줄 수 있다 이 인터페이스 안에는 조회하는 항목의 getter를 같이 정의해준다 ❗쿼리 작성..
프로젝트를 실행하려고 하니 오류가 발생했다!
JPA의 일대다, 다대일 양방향 관계를 사용하던 중에 요류가 발생했다 ❗초기 상태 public class Team implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToMany(mappedBy = "team", fetch = FetchType.EAGER) private List members = new ArrayList(); } public class Member implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id..
프로젝트에서 JPA를 사용할 때 application.yml파일에 이에 대한 설정을 해줄 수 있다 spring: jpa: hibernate: ddl-auto: [옵션] show-sql: true properties: hibernate: format_sql: true ❗ddl-auto create: 서버 시작 후에 기존테이블 삭제하고 다시 생성 create-drop: 서버 시작 후에 테이블을 생성하고 서버 종료 시 테이블 삭제 update: 변경 부분만 추가 validate: 엔티티와 테이블이 정상 매핑되었는지만 확인 none: 사용하지 않음
application.yml 파일에 spring: h2: console: enabled: true path: /h2-console datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testdb username: sa password: 이와 같이 연결하고 http://localhost:8080/h2-console로 접속한 후
❗ 프로젝트 빌드 파일 생성
데이터의 상태를 알 수 있는 status 컬럼을 선언하고 not null과 default 값까지 설정을 해주었었다 `status` VARCHAR(1) NOT NULL DEFAULT 'A' COMMENT 'A: Active(활성상태), D: Delete(삭제, 탈퇴한 상태), B: Black(블랙 유저)', 하지만 Column 'status' cannot be null 오류가 간간히 계속 나타났고 이를 해결하는 방법을 적으려 한다! 1. not null, default 이 상태였을 때 오류가 발생했었다 2. null로 변경 not null을 지운 후 다시 테이블을 만든 다음 데이터를 넣으면 default값이 들어갈 것이라고 생각하면서 작업을 했더니 A가 아니라 이라고 표시되었다 3. not null, de..
@Value를 통해 yml파일에 있는 값을 불러오려 했는데 Cannot find method 'value'오류가 났다!ㅣ 아래의 것으로 import해주어야 제대로 실행될 수 있다! import org.springframework.beans.factory.annotation.Value;
swagger를 사용하기 위해서 설정을 추가하고 서버를 실행하니 발생한 오류이다! Spring boot 2.6버전 이후에 spring.mvc.pathmatch.matching-strategy 값이 ant_apth_matcher에서 path_pattern_parser로 변경되면서 몇몇 라이브러리에서 오류가 발생한다고 한다. application.yml에 아래의 설정을 추가해주면 해결된다! spring: mvc: pathmatch: matching-strategy: ant_path_matcher
DB가 연결되지 않은 상태로 서버를 실행하면 발생하는 오류 중 하나이다 당장 DB 서버가 구축되지 않았다면 h2를 연결해주면 해결된다! spring: h2: console: enabled: true path: /h2-console datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testdb username: sa password:
페이징 처리를 하기 위해 JPA와 Pagable을 이용해보았다 -BoardRepository -BoardService boardService에서 전체 리스트를 불러오는 함수에 파라미터로 Pageable을 넣어주고 boardList를 boardRepository에서 findAll함수에 pageable을 파라미터로 넣어주고 해당 반환값을 리스트화시켜 준다 -BoardController 파라미터로 쿼리스트링의 디폴트값을 지정해주고(page와 size, sort는 쿼리스트링으로 입력해서 변경 가능) @PageableDefault(page = 0, size = 5, sort = "boardId", direction = Sort.Direction.DESC) Pageable pageable boardService에 ..
해당 오류가 나왔을 때 오류가 발생하는 DTO(req)에 @NoArgsConstructor를 붙여주면 오류없이 실행된다!
빌드 명령어를 실행했지만 권한 문제로 오류 발생 gradlew의 모드 변경 후 다시 빌드 chmod +x gradlew 빌드할 때 10분이 지나도 움직이지 않는다면 서버가 다운된 것이라 EC2 인스턴스를 중지 후 재실행
터미널에서 프로젝트 폴더로 이동 후 빌드해보려고 한다 ❗빌드 ./gradlew clean build ❗서버 중지 ctrl + z를 누르게 되면 정지가 된다 하지만 이 상태는 계속해서 포트를 사용하고 있다고 뜨기 때문에 다른 작업을 할 수 없다 ❗서버 종료 서버를 종료하기 위해선 ctrl + c를 누르거나 변경사항을 받아오기 위해 pull 명령어를 실행하면 자동으로 kill된다 ❗다시 빌드 변경사항이 반영된 채로 다시 빌드를 실행하면 로컬에서 작업한 것이 EC2 서버에서도 작동하게 된다
❗@RequestBody http요청의 body 부분을 java 객체로 받을 수 있게 해주는 어노테이션으로 주로 json을 받을 때 활용 @PostMapping("/board/write") public Board boardWrite(@RequestBody Board board){ Board newBoard = board; boardService.boardWrite(newBoard); return newBoard; } 해당 API에서는 Board가 많은 정보를 담고 있기 때문에 query string이나 path variable로 각각의 값을 하나씩 받아오는 것은 번거로운 작업이다. 이럴 때 @RequestBody로 JSON객체로 정보를 받고 그 정보를 매개변수로 받아서 사용해줄 수 있다 Body에 JSO..
❗Query String /users?id=111 API 뒤에 있는 id = 111 부분을 Query String이라고 한다 id라는 변수에 111이라는 값을 담아 백엔드로 보내는 역할을 한다 @GetMapping("/board/delete") public Board boardDelete(@RequestParam("id") int id){ Board deleteBoard = boardService.searchBoardById(id); boardService.boardDelete(id); return deleteBoard; } Query String을 사용하고 싶다면 어떤 변수명으로 값을 받아올 것인지를 명시하기 위해 그 값을 받을 매개변수 앞에 @RequestParam("변수명")을 붙여준다 Query ..
해당 오류가 발생했을 때 아래의 경우를 확인해야 한다 1. Controller, DAO(Repository), Service에서 각각에 넘겨주는 쿼리값의 주입이 됐는지 확인 2. DB가 run 중인지 확인 1. Controller, DAO(Repository), Service에서 각각에 넘겨주는 쿼리값의 주입이 됐는지 확인 2. DB가 run 중인지 확인
board라는 엔티티에 id, title, content라는 컬럼을 설정해주었다 작성 버튼을 누르면 DB에 해당 내용들이 저장되어야 하는데 오류가 발생했다 이 오류를 해결하기 위해 not null인 컬럼에 @Column(nullable = false) 어노테이션을 붙여주었다 또한 auto_increment는 자료형이 int나 float일 때만 가능하므로 id의 자료형을 INTEGER에서 int로 변경해주었다
DB를 연결하지 않고 서버를 실행하면 DB를 연결해주라는 오류 문구가 나오게 된다 application.properties(application.yml)에서 설정을 통해 DB를 연결할 수 있다 spring.datasource.driver-class-name=org.mariadb.jdbc.Driver spring.datasource.username=root spring.datasource.password=비밀번호 spring.datasource.url=jdbc:mariadb://localhost:3307/[스키마(데이터베이스)이름]?characterEncoding=UTF-8&serverTimezone=UTC spring.datasource.driver-class-name=com.mysql.cj.jdbc.D..
"getMapping sayHello Method run" 이란 문자열을 Get방식을 통해 브라우저에 바로 출력하고자 한다 그냥 @Controller는 객체 정보를 바로 출력해 주는 것이 아니라 view(html이나 thymeleaf)를 반환하기 때문에 객체 정보가 나오지 않았다 이를 해결하기 위해서는 해당 컨트롤러 클래스의 어노테이션을 @RestController로 변경 @RestController = @Controller + @ResponseBody @ResponseBody는 객체 정보를 출력해줄 수 있는 어노테이션(view가 아니라 data) ✏️String 리턴 ✏️instance 리턴
_니지
'🔻Back-End/Spring' 카테고리의 글 목록