스프링/스프링부트+JPA - 인스타
-
스프링부트+JPA - 인스타그램 클론 코딩 14 - OAuth2 (페이스북 로그인)스프링/스프링부트+JPA - 인스타 2021. 10. 20. 13:25
이지업 최주호 강사님 강의 참조 01 OAuth2 진행을 위한 세팅 OAuth2 메이븐 org.springframework.boot spring-boot-starter-oauth2-client → 혹은 처음 프로젝트 세팅시에 OAuth를 선택하면 된다. 페이스북 개발자 센터에서 API 받기 로그인 후 앱만들기 클릭 → 앱 유형 선택에서 없음 선택 → 앱 이름 설정후 다음 → 'Facebook 로그인 설정 클릭' 웹 선택 → 사이트 URL 설정 (http://localhost:8080) → 모두 다음 누른 후 왼쪽편에 설정 기본 설정 클릭 → 앱ID/시크릿 코드를 이용하여 스프링부트에 등록 (YML파일에 등록) 이렇게 등록을 하고나면 아래와 같은 오류가 뜨는데 시큐리티에서 설정을 좀 해줘야 한다 Secur..
-
스프링부트+JPA - 인스타그램 클론 코딩 13 - AOP 처리스프링/스프링부트+JPA - 인스타 2021. 10. 20. 10:50
이지업 최주호 강사님 강의 참조 01 AOP 개념 Aspect Oriented Program의 약자로 관점지향프로그래밍으로 불린다. 현재 모든 기능과 구현은 객체지향프로그램인데 여기서 관점지향프로그래밍으로 바꾸는것이 아닌 관점지향프로그래밍을 같이 쓴다는것으로 알면 된다. AOP는 주로 주기능이 아닌 모든기능에 공통적으로 들어가는 부가기능에 대한 설정이 많다. (예: 로그인이라던지 회원가입전에 해야하는 유효성검사/보안처리 등). 즉 전처리와 후처리가 AOP로 많이 세팅이 된다. 여기서 공통기능과 핵심기능으로 나누어서 핵심만 간단하게 컨트롤러/서비스/레파지토리에 깔끔하게 구현하고, 나머지 필요한 공통기능들은 따로만들어서 구현하고 핵심에서는 불러오기만 하면 된다. 02 AOP를 구현하기위한 기본 세팅 메이븐에..
-
스프링부트+JPA - 인스타그램 클론 코딩 12 - 1 - 댓글(삭제/유효성 검사)스프링/스프링부트+JPA - 인스타 2021. 10. 19. 19:39
이지업 최주호 강사님 강의 참조 01 댓글 삭제 글삭제, 댓글삭제, 어떠한 삭제등은 반드시 자기자신의것만 지울 수 있도록 해야한다. 즉 댓글쓴사람이 누구인지 아려면 principal의 id를 들고와야하는데 story.js에는 방법이 없다. header.jsp에서 받아야 한다. 헤더는 모든 페이지가 공통적으로 공유하기때문에 아래처럼 해놓으면 어디에서든지 꺼내 쓸 수 있다. 이제 삭제버튼을 아이디값과 맞추어서 자기것만 삭제 할 수 있도록 세팅 하자 이제 이벤트를 달아서 클릭시에 삭제가 되도록 처리만 하면 끝 CommentApiController 세팅 @DeleteMapping("/api/comment/{id}") public ResponseEntity deleteComment(@PathVariable int..
-
스프링부트+JPA - 인스타그램 클론 코딩 12 - 댓글(모델링/삽입)스프링/스프링부트+JPA - 인스타 2021. 10. 19. 13:34
이지업 최주호 강사님 강의 참조 01 댓글 모델링 @Builder @AllArgsConstructor @NoArgsConstructor @Data @Entity public class Comment { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(length = 100, nullable = false) private String contentString; @JoinColumn(name = "userId") @ManyToOne(fetch = FetchType.EAGER) private User user; @JoinColumn(name = "imageId") @ManyToOne(fetch = FetchType...
-
스프링부트+JPA - 인스타그램 클론 코딩 12 - 기타(인기페이지/좋아요카운트/프로필 유저 사진 변경)스프링/스프링부트+JPA - 인스타 2021. 10. 18. 19:27
이지업 최주호 강사님 강의 참조 01 인기페이지 구현(좋아요가 높은순으로 출력) 저 페이지를 호출하는 컨트롤러에서 데이터를 들고 호출해야한다. public class ImageController { ... @GetMapping("/image/popular") public String popular(Model model) { List images = imageService.popularPics(); model.addAttribute("images", images); return "image/popular"; } ... APIController에 안만드냐는 질문이 있을 수 있다. 모든 API 컨트롤러는 @RestController가 달려있고 데이터를 리턴하는 컨트롤러들을 구현해놓은 것이다. 보통 이 리턴받..
-
스프링부트+JPA - 인스타그램 클론 코딩 11 - 좋아요 (무한참조 버그 잡기)스프링/스프링부트+JPA - 인스타 2021. 10. 8. 18:29
이지업 최주호 강사님 강의 참조 01 무한참조를 알아내기위해서 먼저 모든 테이블들을 초기화 하자 Image테이블을 참조하여 Likes 테이블 만듬삭제시에 연관관계때문에 오류가 걸릴 수 있다. 연관되어있는 테이블을 선 삭제를 해줘야 한다. (예: User테이블을 참조하여 Likes 테이블을 만듬 / Image테이블을 참조하여 Likes를 테이블을 만듬) 아래의 순서대로 하나씩 삭제를 해주자 (오류일때만) DROP TABLE likes; DROP TABLE subscribe; DROP TABLE image; DROP TABLE user; 02 데이터 집어 넣기 회원가입 (ssar/cos/love) ssar로 로그인 후 이미지 하나 올리기 ssar이 2,3번 유저 cos/love 구독 cos로 로그인 후 이미..
-
스프링부트+JPA - 인스타그램 클론 코딩 10 - 좋아요 (API/렌더링/카운팅)스프링/스프링부트+JPA - 인스타 2021. 10. 8. 13:11
이지업 최주호 강사님 강의 참조 01 좋아요 모델 만들기 @Builder @AllArgsConstructor @NoArgsConstructor @Data @Entity @Table(uniqueConstraints = {@UniqueConstraint( name = "likes_uk", columnNames = {"imageId","userId"} )}) public class Likes { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @JoinColumn(name="imageId") @ManyToOne private Image image; //1개의 이미지는 여러번 좋아요를 받는다 @JoinColumn(name="user..
-
스프링부트+JPA - 인스타그램 클론 코딩 09 - 스토리 페이지(API/렌더링/페이징)스프링/스프링부트+JPA - 인스타 2021. 10. 8. 11:53
이지업 최주호 강사님 강의 참조 01 스토리 페이지 API 만들기 이미지와 유저정보를 들고 와서 1차로 뿌리자. 먼저 로그인된 유저정보와 이미지는 필요없다. 내가 로그인을 한것이기 때문에 내정보가아닌 내가 구독한 다른 사람의 유저정보와 이미지들이 들고 와져야 한다. 즉 2번이 로그인을 했다고 가정하고 1,3번의 스토리 페이지가 불러와져야 한다. 알맞은 유저정보와 이미지를 들고오는 쿼리는 다음과 같다 SELECT * FROM image WHERE userId IN (SELECT toUserId FROM subscribe WHERE fromUserId = 2); Image.java 클래스가 이미 이미지에대한 클래스이기 때문에 User.java에서 이미지를 들고 올 필요가 없고 Image만 사용해서 이미지 +..