전체 글

전체 글

    [Web Service Project]13. 세션 저장소로 DB이용하기

    세션 관리 하기 현재 서비스에서는 어플리케이션을 재실행하면 로그인이 풀리게 된다. 이유는 세션이 내장 톰캣의 메모리에 저장되기 때문이다. 기본적으로 세션은 실행되는 WAS(Web Application Server)의 메모리에서 저장되고 호출된다. 메모리에 저장되다보니 내장 톰캣처럼 어플리케이션 실행 시 실행되는 구조에서 항상 초기화가 된다. 즉, 배포할 때마다 톰캣이 재시작된다. 만약 2대 이상의 서버에서 서비스하는 경우 톰캣마다 세션 동기화 설정을 해야 한다. 실제 현업에서 사용하는 3가지 세션 저장소 톰캣 세션 사용 일반적으로 별다른 설정을 하지 않을 때 기본적으로 선택되는 방식 톰캣(WAS)에 세션이 저장되기 때문에 2대 이상의 WAS가 구동되는 환경에서는 톰캣들 간의 세션 공유를 위한 추가 설정이..

    [Web Service Project]12. 어노테이션 기반 세션 처리 ArgumentResolver

    어노테이션 기반으로 개선하기 반복되는 같은 코드 해결하기 커스텀 어노테이션(@LoginUser) 만들기 ArgumentResolver 커스텀 어노테이션 생성 세션 처리를 위한 @LoginUser 어노테이션 생성 @Target(ElementType.PARAMETER) 어노테이션이 생성될 수 있는 위치를 지정 PARAMETER로 지정하므로써 메서드의 파라미터로 선언된 객체에서만 사용될 수 있다. 이 외에도 클래스 선언시 사용할 수 있는 TYPE 등이 있다. @Interface 해당 파일을 어노테이션 클래스로 지정 LoginUser라는 이름을 가진 어노테이션을 사용할 수 있다. @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public ..

    [Web Service Project]11. 로그인 & 포스팅 권한 테스트

    로그인 테스트 화면에 로그인 버튼 추가하기 & 로그인 성공 시 사용자명 나타내기 컨트롤러에서 사용자명 저장하여 화면으로 전달하기 DB 테이블 확인하기 글쓰기로 권한 관리 확인 FrontEnd index.mustache 로그인 버튼 {{#userName}} mustache는 다른 언어와 같은 if문을 제공하지 않는다. true / false 여부만 판단 mustache에 항상 최종 값을 넘겨줘야 한다. userName이 있다면 userName을 노출하도록 구성 a href="/logout" 스프링 시큐리티에서 기본적으 제공하는 로그아웃 URL 개발자가 별도로 URL에 해당하는 컨트롤러를 만들 필요가 없다. SecurityConfig 클래스에서 URL을 변경할 순 있지만 기본 URL을 사용해도 충분하다. {..

    [Web Service Project]10. OAuth2 Google Login

    OAuth2 Google Login 스프링 시큐리티 설정 build.gradle에 스프링 시큐리티 관련 의존성 추가 spring-boot-starter-oauth2-client 소셜 로그인 등 클라이언트 입장에서 소셜 기능 구현 시 필요한 의존성 spring-boot-oauth2-client와 spring-security-oauth2-jose를 기본으로 관리 dependencies { // ... compile('org.springframework.boot:spring-boot-starter-oauth2-client') // test } 사용자 관련 클래스 생성 Dto 분류 권한 사용자 정보 사용자 권한(User Authrization)을 위한 Role 클래스 생성 Role 클래스 각 사용자의 권한을 관..

    [Web Service Project]9.Spring Security & OAuth 2.0 로그인

    스프링 시큐리티 개념 SpringBoot 1.5와 2.0의 차이 구글 서비스 등록 스프링 시큐리티(Spring Security) 인증(Authentication)와 인가(Authorization) 기능을 가진 프레임워크 스프링 기반의 어플리케이션에서는 보안을 위한 표준 인터셉터, 필터 기반의 보안 기능을 구현하는 것보다 스프링 시큐리티를 통해 구현하는 것을 권장 스프링 시큐리티와 스프링 시큐리티 OAuth2 클라이언트 직접 구현하는 경우 개발해야할 기능 로그인 시 보안 비밀번호 찾기 비밀번호 변경 회원가입 시 이메일 혹은 전화번호 인증 회원정보 변경 OAuth 로그인 구현 시 위 목록들을 모두 구글, 페이스북, 네이버 등에 맡겨 서비스 개발에 집중 Spring Boot 2.0의 OAuth 2.0 설정 방..

    [Web Service Project]8. 게시글 삭제

    게시글 삭제 수정화면에 삭제 버튼 기능 추가 FrontEnd posts-update.mustache update btn-delete 삭제 버튼을 수정 완료 옆에 추가 id가 btn-delete인 버튼의 click 이벤트가 발생하는 경우 게시글 삭제 javaScript delete 함수 호출 {{>layout/header}} 게시글 수정 취소 수정 완료 삭제 {{>layout/footer}} index btn-delete 버튼 이벤트 등록 delete 함수 호출 시 /api/v1/posts/{id} URL 로 DELETE Method 방식으로 호출하여 게시글을 삭제 요청 var main = { init : function () { var _this = this; $('#btn-save').on('click..

    [Web Service Project]7. 게시글 수정

    게시글 수정 FrontEnd posts-udate.mustache 화면 개발 index.js 스크립트 내에 update 함수 추가 BackEnd IndexController 내에 update 메서드 추가 PostsAPIController내에 postsService의 update 메서드 호출하는 update 메서드 추가 FrontEnd index.mustache index 타이틀(title)에 a tag를 추가 타이틀을 클릭하면 개당 게시글의 수정 화면으로 이동 {{>layout/header}} 스프링 부트로 시작하는 웹 서비스 No. 3 글 등록 게시글번호 제목 작성자 최종수정일 {{#posts}} {{id}} {{title}} {{author}} {{modifiedDate}} {{/posts}} {{>..

    [Web Service Project]6. 게시글 전체 조회

    View template 수정 BackEnd Posts List Dto 생성 Controller, Service, Repository Query 생성 View Template 수정 Posts를 보여주기위한 table 구성 index.mustache Mustache 문법 {{#posts}} posts라는 List를 순회 Java의 for문과 동일하게 작동 {{id}}등의 {{변수명}} List에서 뽑아낸 객체의 필드를 사용 {{>layout/header}} 스프링 부트로 시작하는 웹 서비스 No. 3 글 등록 게시글번호 제목 작성자 최종수정일 {{#posts}} {{id}} {{title}} {{author}} {{modifiedDate}} {{/posts}} {{>layout/footer}} BackEn..

    [Web Service Project]5. 게시글 등록

    Mustache를 활용한 게시글 등록화면 만들기 HTML Layout 방식을 활용하여 공통 영역을 별도의 파일로 분리하여 필요한 곳에서 가져다 쓰는 방식 활용 footer, header 공통 영역을 분리 src/main/resources/templates 디렉토리에 layout 디렉토리를 추가로 생성하여 저장 CSS, JavaScript BootStrap, JQuery 등 프론트엔드 라이브러리를 사용 여기서는 외부 CDN을 사용하여 개발, 실제 서비스에서는 직접 라이브러리를 받아서 사용 페이지 로딩속도를 높이기 위해 css 태그는 header, js 태그는 footer에 위치 HTML은 인터프리터언어로 소스코드를 위에서 아래로 읽고 실행하기 때문에 css를 읽지않고는 깨진화면이 보여질 수 있다. Java..