일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- SpringBoot
- springdatajpa
- Thymeleaf
- transaction
- 스프링 핵심 원리
- 김영한
- 자바
- Android
- 알고리즘
- Spring Boot
- 백준
- Greedy
- http
- java
- QueryDSL
- Exception
- pointcut
- 스프링 핵심 기능
- Servlet
- jpa
- kotlin
- 스프링
- JPQL
- JDBC
- db
- AOP
- Proxy
- 인프런
- 그리디
- spring
- Today
- Total
목록Project/블로그 게시판 만들기 (46)
개발자되기 프로젝트
MockMVC를 활용하여 controller의 슬라이스 테스트를 진행하자. 1. MockMVC?? Web Application을 서버에 배포하지 않고 Spring MVC 동작을 재현할 수 있는 클래스. 2. 사용 방법 build.gradle에 의존성 추가. testImplementation 'org.springframework.boot:spring-boot-starter-test' 3. JPA metamodel must not be empty! 몇가지 세팅 후 바로 실행에 봤는데 에러가발생..... JPA는 Audting 기능이 있다. Auditing을 사용하기 위해 @SpringBootApplication 클래스에 @EnabeJpaAuditing을 등록해 두었다. 이렇게 @EnableJpaAuditin..
늦게나마 테스트를 열심히 해보자.. 현재 Session을 생성/조회/삭제는 테스트가 구현되어 있지 않다. 1.MockHttpServletResponse/Request MockHttpServletResponse/Request을 사용하면 Http요청/응답을 흉내낼 수 있다. 2. Test SessionManger는 세 가지 기능을 제공한다. 세션 생성, 세션 조회, 세션 만료. 각 경우에 대해 테스트를 진행. class SessionManagerTest { SessionManager sessionManager = new SessionManager(); @Test void testCreateAndGetSession(){ //응답으로 세션 생성하기 MockHttpServletResponse response = ..
1. 현상 로그인 후 글을 수정하려고 시도하면 에러가 발생한다. This application has no explicit mapping for /error, so you are seeing this as a fallback. 2. 원인, 결과 이유는 간단했다. url을 변경하면서 안바꿔준 부분이 있었다... url을 수정후 해당 에러가 해결되었다. 3. 추가 에러 발생, 현상 그런데 해결 후 submit을 누르면 NullPointerException이 발했다... DBUG를 해보니 아래 로직 중 loginMember의 id와 post작성자의 id를 비교하는 로직에서 예외가 발생. private boolean hasNoAuthority(MemberDto loginMemberDto, PostDto post..
이전에는 Repository에서 모든 메서드를 Optional로 반환하였다. 따라서 Service에서는 Optional로 받고 null이 반환된 경우는 NoResultException을 던졌다. 앞서 테스트를 진행하면서 Optional을 너무 무지성으로 사용하는게 아닌가 라는 생각이 들었다. Optional를 다시 한번 이해할 필요가 있다. Java Optional 바르게 쓰기 Java Optional 바르게 쓰기Brian Goetz는 스택오버플로우에서 Optional을 만든 의도에 대해 다음과 같이 말했다. … it was not to be a general purpose Maybe type, as much as many people would have liked us to do so. Our inte..
1. 검색 기능 테스트 제목 검색을 사용할 때 아래 메서드를 호출하게 된다. Repository에서 Optional로 반환하고, null인 경우에 NoresultException을 반환한다. @Override public Optional findByTitleContains(String keyword) { String query = "%"+keyword+"%"; log.info("query: {}", query); return Optional.ofNullable( em.createQuery("select p from Post p where p.title like :keyword", Post.class) .setParameter("keyword", query) .getResultList()); } @Over..
현재 비 로그인 유저의 권한이 없는 페이지 접근을 막기 위해 controller각 메서드에 검증 로직이 추가되어 있다. 사실 controller의 대부분 메서드는 비 로그인 유저가 호출할 권한이 없어야 한다. 이는 공통적인 부분으로 일일히 각 메서드에 추가해주기는.. 번거롭다. Spring Interceptor는 이와 같이 Web에서 공통적인 관심사를 처리하는데 용이하다. [로그인] 스프링 인터셉터 스프링 인터셉터는 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술 해당 기능을 Servlet이 제공하면 ServletFilter, Spring MVC가 제공하는 것은 Spring Iterceptor 웹과 관 bsh-developer.tistory.com 1. LoginChec..
1. 관리자 권한 관리자는 모든 권한을 가지고 있다. 모든 글/댓글에 대한 수정&삭제 권한이 있음. 2. 권한 level 설정 본격적인 코드 작성에 앞서서 권한의 level을 다음과 같이 수직적(?)으로 수정했다. admin : 모든 글/댓글에 대한 수정/삭제 권한 normal : 본인이 작성한 글에 대해 수정/삭제 권한. 본인이 작성한 댓글에 대한 삭제 권한 commentOnly : 해당 글에 대해 댓글만 작성 가능. 본인이 작성한 댓글에 대한 삭제 권한. guest : 조회만 가능. 수정/삭제에 대한 모든 권한 없음. public interface Authority { String admin = "admin"; //모든 권한 String normal = "normal"; //해당 글 + 본인 댓글에 ..
1. 요구사항 본인이 작성한 글만 수정, 삭제가 가능해야 한다. 본인이 작성한 댓글만 삭제가 가능해야 한다. 2. 로직 컨셉. 버튼을 통해 접속하는 경우 차단 해당 글에 대한 수정/삭제 권한이 없는 경우 => post.member.id가 member.id 와 다른 경우 memberDto.authority에 "nonAuthorized"추가. 각 뷰에서 권한 판단이 필요할 경우 ${member.authority}를 사용하여 수정/삭제 버튼을 비활성화 시킴. url을 통한 직접 접속 Session에서 로그인 정보를 가져왔을 때 session에 로그인 유저의 정보가 없거나, 유저의 authority가 nonAuthorized인 경우 목록으로 redirect시켜버림. 3. PostController loginMe..