프로젝트[종료] 17

17. Spring Boot 오류 처리하기

웹개발을 하다보면 정말 많은수의 에러페이지와 마주한다. 현재 잘 운영중인 사이트도 억지로 파라미터를 변조하거나, PostMan따위로 허위값을 보내면 에러페이지를 확인할 수 있다. 아래 두가지 에러페이지를 비교해보자. 엄청깔끔할것 같아서 네이버를 선택했는데 네이버도 그렇게 깔끔한 에러페이지는 아닌것같다. 여하튼, 위와같이 에러가 발생했을시, 사용자가 마주하는 에러페이지가 내 포탈과 같다면, 사용자의 신뢰도는 매우 떨어지게 될것이다. 그렇다면 HTTP에러가 발생했을시에, 특정 화면을 렌더링함으로써 사용자에게 신뢰를 주는 에러페이지를 만들어보자. 1.WAS에서 설정하는법 - Tomcat에서, ~{CATALINA_HOME}/conf/web.xml에 아래와 같이 에러와, 해당 에러가 발생했을시 보낼 페이지를 ma..

16. ArgumentResolver사용하기, 로그아웃 기능 추가

ArgumentResolver란? 특정 요청이 Controller로 들어왔을때, 넘어온 값을 미리 가공하여 넘겨주는 작업을 해주는것. Controller단에서 중복되는 작업을 방지할 수 있다. ex)@Sign Annotation으로 User객체가 넘어온다면 세션에서 읽어서 가져오는 작업. 나는 ArgumentResolver를 사용해서, Home화면에 갔을때 로그인한 사용자라면 로그인전용 Home화면을, 로그인하지 않은 사용자라면 기본Home화면으로 보낼 생각이다. 순서는 다음과 같다. 1.@Sign Annotation 생성 경로(\src\main\java\com\project\domain\sign\Sign.java) package com.project.domain.sign; import java.lang..

15. Spring Interceptor 적용하기

저번에는 사용자가 Servlet이 제공하는 Filter를 사용하여 웹을 관리했다. 지금부터는 Spring이 제공하는 Interceptor에 대해서 알아보고, 적용해보겠다. Interceptor 스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술이다. 서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 둘다 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다르다. public interface HandlerInterceptor { default boolean preHandle(HttpServletRequest request, HttpServletResponse response,..

14. Servlet Filter 적용하기

저번에는 사용자가 로그인 한 다음에 특정 값을 Session에 저장하여 로그인상태를 유지했다. 지금부터는 Servlet이 제공하는 Filter, Spring이 제공하는 Interceptor에 대해서 알아보고, 적용해보겠다. Filter Servlet이 제공하는 기능으로, WAS와 Servlet사이에서 공통관심사를 처리하기 위한 기능이다. Chain으로 구성되며, 중간에 필터를 자유롭게 추가할 수 있다. 필터 인터페이스를 구현하고 등록하면 서블릿 컨테이너가 필터를 싱글톤 객체로 생성하고, 관리한다 public interface Filter { public default void init(FilterConfig filterConfig) throws ServletException{} public void do..

13. 로그인 사용자 Session 처리하기

이전까지 간단한 회원가입기능을 만들었다.(아직 할게 많이 남음) 부가적인 기능은 추후로 미루고, 로그인과 관련된 다음 기능을 새로 추가하려고한다. 로그인기능(패스워드를 검증하고 로그인처리) 세션관리(로그인한 사용자를 세션에 담아 관리 일단 처음부터 시작을 해보자면,, login관련 HTML과 Controller, Service를 만들어야한다! 1.로그인 화면 HTML을 만든다. html소스는 다음과 같다. 로그인 글로벌 오류 메시지 로그인 회원가입 2.이 외에 추가로 회원가입을 위한 Form을 따로 만들었듯이, 로그인을 위한 Form을 따로 만들었다. package com.project.domain.sign; import jakarta.validation.constraints.NotBlank; impor..

12.회원가입 기능 만들기(2)

이전게시글에서는 HTML까지 다 만들었다. 이제 가장 중요한 Validation을 적용할 차례이다. 내가 검증할 사항은 다음과 같다. 이미 가입된 아이디로는 가입하지 못한다. 모든 필드는 필수입력이다. Email은 형식에 따라 작성한다. 크게는 이렇게 세가지인데, lombok이 제공하는 Bean Validation을 사용하여 아래와 같이 손 쉽게 검증이 가능하다. package com.project.domain.signup; import com.project.domain.user.SexType; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; import jakarta.validation.constraints.Emai..

11.회원가입 기능 만들기(1)

회원가입 기능을 추가하려고 한다!!!! Spring Boot와 ThymeLeaf, JPA이 세가지를 동시에 사용해서 만드는 회원가입은 처음이라 서툴지만,, 열심히 해봐야지 1.오른쪽 상단에 두 버튼을 달았다. 둘다 Modal로 만들 생각이었지만 스타일의 충돌 및 기타 사유로 취소. 2. 로그인버튼에 thymeleaf를 활용하여 onclick시 location.href를 지정해준다. Sign Up 3.회원가입전용 SignUpController를 만들어 /signUp 요청이 왔을시에 회원가입 html파일로 이동시킨다 package com.project.domain.login; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; i..

10. JpaRepository<T, Id>인터페이스 상속받기

저번에는 MariaDB를 연동하고, @Entity어노테이션을 사용하여 ORM을 처음 사용해봤다. 로그인 기능을 사용하기 위해간단하게 두가지 기능이 필요하다. 회원가입 로그인을하기위한 사용자 조회 이뿐만 아니더라도 다양한 쿼리가 필요할것으로 예상된다. 다른테이블에서도 중복되는 쿼리들이 매우 많은데. 해당 작업은 반복적이고 실수를 유발한다. 이를 위해 스프링부트에서는 JpaRepository인터페이스를 제공한다. 단순히 JpaRepository를 상속받음으로 아래와 같은 기능을 사용할 수 있다. method 기능 save() 저장(INSERT, UPDATE) findOne() PK로 하나의 레코드 찾기 findAll() 전체 가져오기(정렬, 페이징)가능 count() 갯수 delete() 삭제 물론 복잡한 ..

9. JPA를 사용하여 SpringBoot와 MariaDB연동하기

myBatis를 주로 사용했지만, JPA(Java Persistent API)를구현한 ORM(Object Relcational Mapping)을 사용하여 객체와 DB테이블을 매핑하려고 한다. ORM의 종류는 크게 세가지가 있는데, Hibernate EclipseLink DataNucleus 가장 많이쓰이고 정보도 많은게 Hibernate이기때문에,, 해당 기술을 사용해보려고 한다. 1.build.gradle에 dependencies를 추가한다. 2.application.properties에 jpa및 jdbc관련 설정을 추가해준다. 3.서버를 재부팅한다. 이렇게되면 JPA와 JDBC를 통한 MariaDB연동이 끝났다. 지금부터는 Entity클래스를 만들어 새로운 테이블을 만들어보자 1.Entity클래스 생..

8. ThymeLeaf의 fragment기능 이용하기

현재 사이트는 html이 총 세개가 존재한다. 세개면 많은 수는 아니지만 html내에서 공통되는 영역이 상당하기 때문에 해당 영역을 수정하기위해서는 많은 공수가 들어간다. html개수가 많아질수록 일이 늘어나기때문에 ThymeLeaf가 제공하는 fragment 기술을 사용하여 공통영역을 따로 관리하자. index.html, generic.html, elements.html에는 총 다섯가지의 공통영역이 존재한다. 페이지의 메타정보, css를 나타내기위한 header 로고와 메뉴버튼을 그리기 위한 header 메뉴목록을 그리기 위한 nav contact me를 위한 footer script를 include하기위한 footer -> javascript를 footer에 위치하면 html렌더링이 더 빠르다고 한다..