본문 바로가기

Spring10

로그인 처리 (5) - JPA와 DB 생성 및 조회 DB는 각자가 편한 툴을 활용하면 된다 내장 DB를 사용해도 된다 (단, 프로젝트 종료 시 DB가 초기화됨) 여기서는 mariaDB를 이용한다 ClubMember 객체와 ClubMemberRole 객체를 각각 class, enum으로 생성한다 @Entity @Builder @AllArgsConstructor @NoArgsConstructor @Getter @ToString public class ClubMember extends BaseEntity { @Id private String email; private String password; private String name; private boolean fromSocial; @ElementCollection(fetch = FetchType.LAZY) .. 2022. 1. 22.
로그인 처리 (4) - 리소스별 Authorization Spring Security에서 특정 리소스에 Access Control 하는 방식은 크게 2가지이다 1. 설정을 통해 패턴 지정 2. 어노테이션을 이용하여 적용 먼저 1번 방법으로 리소스 인가를 해보자 SecurityConfigure 클래스에 아래 코드를 추가한다 @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeHttpRequests() .antMatchers("/sample/all").permitAll() .antMatchers("/sample/member").hasRole("USER"); // Authorization 실패 시 로그인 화면 http.formLogin(); // csrf 토큰 비.. 2022. 1. 20.
로그인 처리 (3) - PasswordEncoder 앞서 생성했던 SecurityConfig에서 override로 인증과 인가에 대한 처리를 할 수 있다 요소들에 대해서 알아보자 PasswordEncoder 이름 그대로 패스워드를 암호화하는 것이 주목적이다 Spring Boot 2.0부터 인증을 위한 필수 요소가 되었다 PasswordEncoder를 직접 구현하거나 구현된 클래스를 이용해야 하는데, Spring Security에는 여러 종류의 구현 클래스가 있다 그중에 가장 많이 사용되는 것이 BCryptPasswordEncoder이다 'bcrypt'라는 해시 함수를 이용하여 패스워드를 암호화하는데, 복호화가 불가능하고 매번 암호화된 결과가 다르다는 특징이 있다 (길이는 같음) 패스워드를 암호화하는 테스트 코드이다 @SpringBootTest public.. 2022. 1. 20.
로그인 처리 (2) - Spring Security 이해 기존에 Spring 만으로 프로젝트를 생성하는 경우 web.xml의 복잡한 설정을 직접 해주었어야 했지만, Spring Boot는 자동 설정 기능이 있어 기본적인 세팅이 자동으로 된다(앞 글에서 프로젝트 실행하여 확인했었음) 하지만 프로젝트 특성, 상황에 맞게 설정을 해주어야 하므로 SecurityConfig 클래스를 생성한다 Security 관련 기능을 쉽게 설정하기 위해 WebSecurityConfigurerAdapter 클래스를 상속받는다 해당 클래스는 method override를 통해 여러 설정을 하게 된다 간단한 테스트를 위해 Controller와 페이지를 만든다 프로젝트를 실행해서 /sample/all로 접근하면 /login 페이지로 리다이렉션 되며 처리 과정에서 WebAsyncManager.. 2022. 1. 19.
로그인 처리 (1) - 프로젝트 생성 도서 를 학습하면서 실습과 내용을 정리해보려고 한다 로그인 처리는 Spring Boot, Spring Security 환경을 이용할 예정 먼저 Spring 프로젝트를 생성. 아래 링크에서 생성해준다 https://start.spring.io/ 의존성과 환경설정은 아래와 같다 dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation .. 2022. 1. 18.
의존성 주입 - DI(Dependency Injection) 의존성이란? 먼저 의존성에 대해 알아보려고 한다. 프로그램에서 의존성은 크게 두 가지로 나누어 생각해야 한다. 정적인 클래스 의존성 Class의 import만 보고 의존성을 쉽게 판단할 수 있는 것. 즉, 애플리케이션이 실행되지 않아도, 구현체를 직접 확인하지 않아도 의존성 파악이 되는 것. 동적인 객체 인스턴스 의존성 Runtime에 결정되는 동적인 객체(인스턴스)에 따라 의존성이 부여되는 것. DI란? 애플리케이션 Runtime에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존성이 연결되는 것, 즉 IoC를 구현하는 것을 의존성 주입(DI) 이라고한다. 의존성 주입을 사용하면 클라이언트 코드를 변경하지 않고, 호출하는 객체의 타입 인스턴스 변경 가능. 또한 정적.. 2021. 10. 11.
제어의 역전 - IoC(Inversion of Control) 제어의 역전 - IoC 란? 제어의 역전은 객체의 컨트롤 또는 프로그램의 일부분을 프레임워크의 컨테이너에 전송하는 SW 엔지니어링 개념이다. 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성, 연결, 실행했다. ( Service class가 Repository class를 직접 생성하거나, instance를 가져와서 호출하는 등 ) 즉, 구현 객체가 프로그램의 제어 흐름을 스스로 컨트롤했다. 각 객체의 설정을 대신해주는 Config class를 둠으로써 각 객체는 본인의 역할만을 수행하도록 할 수 있다. 즉, 프로그램의 제어 흐름을 Config class가 컨트롤하는 것이다. 이렇듯 프로그램의 제어 흐름을 개발자가 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전이.. 2021. 10. 11.
JPA Entity 생성자 JPA 강의를 보면서 라이브 코딩하던 중 아래와 같은 에러가 발생했습니다 에러의 내용은 생성한 Entity의 인스턴스화에 문제가 있는데, 그 원인이 기본 생성자가 없다는 것입니다. 왜 굳이 기본 생성자가 필요한 것일까?라는 의문에 공식문서를 찾아보았습니다. 기본 생성자가 존재해야 persistent class에 대해 Constructor.newInstance()를 사용해 인스턴스화 할 수 있다고 합니다. 이때 기본 생성자는 public, protected 중 하나여야 합니다. 더 자세한 내용은 아래 링크를 참조하면 좋습니다. https://stackoverflow.com/questions/2935826/why-does-hibernate-require-no-argument-constructor 2021. 7. 20.
객체지향 설계원칙 SOLID Spring이 Java 진영에 환영받고 표준으로 자리잡을 수 있었던 가장 큰 이유는 좋은 객체지향 프로그래밍을 할 수 있기 때문입니다. 그렇다면 좋은 객체지향 프로그래밍이란 무엇일까요? 그것은 바로 SOLID 원칙을 잘 지키는 것입니다. SOLID SRP(Single Responsibility Principle) - 단일 책임 원칙 모든 클래스는 각각 하나의 책임(기능)만 가져야 한다. 따라서 클래스를 수정할 때 다른 기능에 영향이 없어야 한다. OCP(Open Closed Principle) - 개방/폐쇄 원칙 확장에는 열려있고 수정에는 닫혀있어야 한다. 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다. LSP(Liskov Substitution Principle) - 리스.. 2021. 6. 15.
Spring 이란? 추운 겨울이 지나고 개발자들에게 봄이 왔다. Spring은 로드 존슨에 의해 처음 제시되었고 유겐 휠러, 얀 카로프의 제안으로 오픈소스 프로젝트로 프레임워크 개발이 시작되었습니다. Spring에는 BeanFactory, ApplicationContext, POJO, IoC, DI 등 핵심 개념들이 있는데 나중에 자세히 정리해보겠습니다. Spring이 Java Web 진영의 사실상 표준이 되면서 보다 나은 개발환경을 제공하기 위해 Spring Boot, Security, Cloud 등 다양한 서브 프로젝트들이 추가되고 있습니다. Spring F/W의 기술 스펙 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트 웹 기술: Spring MVC, Spring WebFlux 데이터 접근 기술: transacti.. 2021. 6. 14.