본문 바로가기

전체 글

(461)
회원 Repository 생성 및 Test 컨트롤러: 웹 MVC의 컨트롤러 역할 서비스: 핵심 비즈니스 로직 구현 회원은 중복가입이 안된다. 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인: 회원 주문 쿠폰 처럼 데이터베이스에서 저장되고 관리되는 비즈니스 도메인 객체임 Member doamin 설계 회원가입을 할 때 사용하는 회원에 대한 객체이다. 회원 id (내부용), 회원 이름에 대한 정보를 담고있다. 이 domain을 어떻게 사용할 지 추가적으로 확인해보자. package com.example.hellospring2.domain; public class Member { private Long id; private String name; public Long getId() { return id; } public v..
스프링 웹 개발 스프링을 이용해서 웹을 개발할 때 3가지 방법이 존재합니다. 정적 컨텐츠 MVC와 템플릿 엔진 API 이 3가지 방법이 어떤 것인지, 동작원리는 어떻게 되는지에 대해서 알아보도록 하겠습니다. 정적 컨텐츠 html 그 자체를 어떠한 조작없이 바로 보여주는 형태입니다. static 폴더에 html 파일을 두고 해당 주소로 접속을 하게 되면 우리가 작성한 html 그대로를 보여주는 형태입니다. 구현 static/hello-static.html 파일을 생성하고 아래의 내용을 복사 붙여넣기를 해 봅시다. 정적 컨텐츠 입니다. 스프링 서버를 구동 후 localhost:8080/hello-static.html 에 들어가보면 아래와 같은 화면을 볼 수 있을 것입니다. 정적 컨텐츠의 동작 순서 1. 웹 브라우저에서 lo..
프로젝트 생성 spring boot 프로젝트 생성 spring.io 에서 초기 세팅이 가능합니다. https://start.spring.io 위 사이트에 접속 후 아래와 같이 초기 세팅을 진행한 후에 다운로드를 받습니다. 다운로드 받은 파일 압축을 풀고 intellij 에서 builde.gradle 파일을 open 합니다. java 11 version 다운로드 - 프로젝트는 11 version으로 다운 받았고, 나는 java 8 version을 사용하고 있었기에 11 version으로 변경을 진행합니다. (다운로드 방법은 아래 참고1, 참고2를 확인 바람) 참고1 - java 11 다운로드 방법 https://studee.tistory.com/85 자바 설치 1. https://www.oracle.com/kr/java..
JpaRepository 대표 query를 알아보자. public interface ProductRepository extends JpaRepository { // (1) 회원 ID 로 등록된 상품들 조회 List findAllByUserId(Long userId); // (2) 상품명이 title 인 관심상품 1개 조회 Product findByTitle(String title); // (3) 상품명에 word 가 포함된 모든 상품들 조회 List findAllByTitleContaining(String word); // (4) 최저가가 fromPrice ~ toPrice 인 모든 상품들을 조회 List findAllByLpriceBetween(int fromPrice, int toPrice); // (5) createdAt을 기준으로 내림차순 조회 Li..
ORM, JPA 그리고 Hibernate ORM이란? ORM은 Object Relational Mapping 즉, 객체-관계 매핑의 줄임말입니다. 객체-관계 매핑을 풀어서 설명하자면 우리가 OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relational DataBase)에서 쓰이는 데이터인 테이블 자동으로 매핑(연결)하는 것을 의미합니다. 그러나 클래스와 테이블은 서로가 기존부터 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데, 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결합니다. 따라서 ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 됩니다. SQL이란? SQL은 St..
스프링 시큐리티를 이용하여 로그아웃 구현 참고 이 글은 '스프링 시큐리티를 이용하여 로그인 구현' 와 이어지는 내용입니다. 아래 내용은 '스프링 시큐리티를 이용하여 로그인 구현' 페이지에서 설정을 완료한 이후에 적용을 할 수 있습니다. "로그아웃" 버튼 클릭시 "POST /user/logout" 으로 처리할 예정입니다. CSRF protection이 기본적으로 enable 되어 있기 떄문입니다. CSRF protection을 disable 하면 GET /user/logout 으로도 사용이 가능하지만 여기서는 다루지 않을 예정입니다. HomeController "POST /user/logout" 요청이 왔을 시 logout 을 할 수 있도록 기능을 구현하는 부분입니다. '스프링 시큐리티를 이용하여 로그인 구현' 에서 UserDetailsImpl ..
스프링 시큐리티를 이용하여 로그인 구현 이 글은 '스프링 시큐리티를 이용하여 로그인 화면 띄워보자' 와 이어지는 내용입니다. 이해가 잘 안되신다면 '스프링 시큐리티를 이용하여 로그인 화면 띄워보자' 을 먼저 읽으면서 실습한 후 따라오시면 한 결 편하게 이해하실 수 있을 것입니다. 스프링 시큐리티 사용 전과 사용 후 과정을 비교해 보겠습니다. 기존에는 클라이언트가 요청을 보내면 컨트롤러로 바로 요청이 전달되었으나 이제는 스프링 시큐리티가 중간에서 검열을 하기 시작합니다. 보안 요원이 등장한 것이죠 1.Spring Security의 진행 과정을 살펴봅시다. 그렇다면 스프링 시큐리티는 어떤 역할을 어떻게 진행하고 있을까요? 아래 그림을 살펴보면서 이해해 보도록 하겠습니다. 우선 회원가입은 이미 완료된 상태라고 가정합니다. 1-1. 로그인시도 로그인..
비밀번호 암호화 회원 등록 시 '비밀번호'는 사용자가 입력한 문자 그대로 DB 에 안 된다는 사실!! '정보통신망법, 개인정보보호법' 에 의해 비밀번호는 암호화(Encryption)가 의무!! 예를 들어보겠습니다. 앨리스가 여러분의 사이트에 회원가입을 하며 아이디, 패스워드를 입력하였습니다. 아이디: alice 패스워드: nobodynobody 아무도 알 수 없기를 바라며 적은 패스워드를 아래와 같이 DB 에 평문 그대로 저장해 두었다고 해보죠. 만약 해커에 의해 회원정보가 갈취당한다면 앨리스의 패스워드는 모두가 알게 됩니다. 꼭 해커 뿐만 아니겠죠. DB 조회가 가능한 내부 관계자들도 앨리스의 패스워드를 보자마자 영원히 기억해 버릴지도 모릅니다. 그래서 아래와 같이 암호화 후 패스워드 저장이 필요 합니다. 평문 → (..