본문 바로가기

Spring

(16)
Bean 과 DI Bean Bean은 스프링 IOC 컨테이너가 관리하는 객체다. 빈을 등록하는 방법에는 2가지가 있다. 1. Component Scanning 2. XML 이나 자바 설정 파일에 직접 등록 Component Scanning @SpringBootApplication안에는 @SpringBootConfiguration, @ComponetScan, @EnableAutoConfiguration이 있다. 여기서 @ComponetScan은 대부분 모든 클래스들과 모든 패키지에 @Component가 붙어있는 클래스들을 찾아서 Bean으로 등록을 해준다. @Component @Repository @Service @Controller 주의할 점은 해당 최상위 패키지부터 스캔을 하기 때문에 다른 패키지를 스캔을 안한다. 직접..
IOC Inversion Of Control의 약자로 제어의 역전이라는 뜻이다. 원래 의존성에 대한 제어권은 본인에게 있다. Class OwnerController { private OwnerRepository ownerRepository = new OwnerRepository(); } IOC는 의존성을 내가 관리하지 않고 나 외의 누군가가 밖에서 의존성을 주입해주는 형태다. Class OwnerController { private OwnerRepository ownerRepository; public OwnerController(OwnerRepository ownerRepository) { this.ownerRepository = ownerRepository; } } IOC Container 스프링 프레임웤은..
@Setter VO (Value Object) - 데이터 그 자체로 의미 있는 것을 담아 두는 객체 DTO (Data Transfer Object) - 전송되는 데이터 객체 빌더패턴 : 객체의 생성을 쉽게 한다. @Setter를 사용하면 객체를 언제든지 변경할 수 있는 상태가 되어서 객체 안정성을 보장받기 힘들다. 즉, 무분별하게 사용하면 객체의 상태가 어디서 바뀌는지 모르는 문제가 발생한다. 이 문제의 해결방법으로는 Value Object로 만들어서 객체를 Value처럼 사용한다. 즉, 새로운 객체를 만드는 방법이 있다. 그래서 JPA에서 Update 작업시, 엔티티에서 @Setter를 사용하지 않고 빌더패턴으로(일부만 변경해서 새로운 객체를 생성하는 작업)을 사용했다. 즉, setter를 빌더패턴으로 대체했다. 하..
토비의 스프링3.1 - 템플릿 메소드 패턴, 팩토리 메소드 패턴 Date - 2019. 03. 03 템플릿 메소드 패턴(Template method pattern) - 상속을 통해 부모클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법이다. - 변하지 않는 기능은 부모클래스에 만들어주고 자주 변경되며 확장할 기능은 자식클래스에서 만들도록 한다.- 부모 클래스에는 기본적인 로직과 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 메소드 등으로 만든다. - 자식 클래스에는 부모 클래스에서 만든 그 메소드를 필요에 맞게 구현한다.- 훅 메소드 : 선택적 오버라이드할 수 있도록 만들어둔 메소드 팩토리 메소드 패턴(Factory method pattern) - 객체 생성을 직접하지 않고, 하위 클래스가 어떤 객체를 생성할지 결정하도록 위임하는 디자인 패턴이다.- 즉, 오..
Spring Security + Spring MVC JPA Entity Class# User.java import lombok.Data; import javax.persistence.*;@Data @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) int id; @Column(name = "userId") String loginId; String password; String name; String email; boolean enabled; String userType; @ManyToOne @JoinColumn(name = "departmentId") Department department; } Repository Class# UserRepository.ja..
Spring Security 보안 관련 3요소접근 주체(Principal) : 보호된 대상에 접근하는 사용자인증(authentication) : 사용자의 신원을 식별하는 기능. ex) 로그인 기능인가(authorization) : 권한 관리 기능. ex) role # 인증(authentication) 방식 1. credential 기반 인증 : 사용자명과 비밀번호를 이용. 2. 이중 인증 : 사용자가 입력한 개인정보를 인증 후, 다른 인증 체계를 이용하여 두가지의 조합으로 인증. 3. 하드웨어 인증 : 자동차 키와 같은 방식. 이 중 Spring Security는 credential 기반의 인증을 취한다. principal : 아이디 / credential : 비밀번호 Spring Security 구조Spring Security :..
spring core(핵심) 기능 1) Dependency Injection (DI) 기능 사용할 객체를 소스코드에서 직접 생성하지 않는다. 직접 생성의 예) StudentService studentService = new StudentService(); 스프링 엔진이 생성하여 넣어 준다(inject). 예) @Autowired StudentService studentService; 이 기능이 좋은(핵심인) 이유. 프로젝트가 커지면, 수정할(유지보수할)일이 점점 많아진다. 처음에는 StudentService 클래스를 구현해서 잘 사용했는데, 요구사항이 변해서, StudentService 클래스를 상속해서, StudentService2 클래스를 새로 구현하였다. 예) class StudentService2 extends StudentSer..
ModelAttribute model attribute //Get @RequestMapping(value="register", method=RequestMethod.GET) public String register(Model model, UserRegistrationModel userModel) { model.addAttribute("departments", departmentService.findAll()); return "user/register"; } //Post @RequestMapping(value="register", method=RequestMethod.POST) public String register(@Valid UserRegistrationModel userModel, BindingResult bindingRes..