이 글은 모던 자바 인 액션 책을 읽고 정리한 내용입니다. http://www.yes24.com/Product/Goods/77125987 모던 자바 인 액션 - 예스24 자바 1.0이 나온 이후 18년을 통틀어 가장 큰 변화가 자바 8 이후 이어지고 있다. 자바 8 이후 모던 자바를 이용하면 기존의 자바 코드 모두 그대로 쓸 수 있으며, 새로운 기능과 문법, 디자인 패턴 www.yes24.com 필터링 프레디케이트로 필터링 스트림 인터페이스는 filter 메서드를 지원한다. filter메서드는 프레디케이트를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다. List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) .co..
주입 방법 1. 생성자 주입 생성자 주입은 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. 주로 불변, 필수 의존 관계에서 사용한다. 만약, 생성자가 1개인 스프링 빈이면? @Autowired를 생략해도 자동으로 주입된다. @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this...
GDSC 활동을 하면서 여러 백엔드 분들이 시큐리티에 대해 많이 어려워하시는 것 같아 정리한 내용들을 공유해보려고 합니다. 스프링 시큐리티란 ? 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. 스프링 시큐리티에 대해 정리하기 전에 헷갈릴 수 있는 단어들을 먼저 알고 가자. 보안 용어 정리 인증(Authenticate) : 유저가 누구인지 확인하는 절차 인가(Authorization) : 인증된 사용자에 대해 권한을 확인하고 허락하는 것 접근 주체(Principal) : 보호된 대상에 접근하는 유저 비밀번호(Credential) : 대상에 접근하는 유저의 비밀번호 스프링 시큐리티 특징과 구조 보안과 관련하여 체계적으로 많은 옵션을 제공하여 편리하게 사용할 ..
지금까지 만든 Appconfig를 보면 @Bean 어노테이션을 붙여서 직접 설정정보에 스프링 빈을 나열하는 형식이었다. 그런데, 내가 만들어야할 스프링 빈이 수백개가 된다면 ? → @ComponentScan을 사용 ! 동작 과정 1. @ComponentScan @Component 어노테이션이 붙은 모든 클래스를 자동으로 스프링 빈에 등록해준다. 이때, 스프링 빈의 기본 이름 : 클래스명 사용, 앞글자만 소문자를 사용한다. MemberServiceImpl 클래스 → Bean 이름 : memberServiceImpl 만약, 클래스에 @Component(“service”)처럼 속성을 설정하면? → service 라는 이름으로 등록된다. 2. @Autowired 의존 관계 자동 주입 생성자에 @Autowired..
이 글은 모던 자바 인 액션 책을 읽고 정리한 내용입니다. http://www.yes24.com/Product/Goods/77125987 모던 자바 인 액션 - 예스24 자바 1.0이 나온 이후 18년을 통틀어 가장 큰 변화가 자바 8 이후 이어지고 있다. 자바 8 이후 모던 자바를 이용하면 기존의 자바 코드 모두 그대로 쓸 수 있으며, 새로운 기능과 문법, 디자인 패턴 www.yes24.com 스트림이란? 자바 8 API에 새로 추가된 기능 선언형으로 컬렉션 데이터를 처리할 수 있음 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리 가능 이번 예제는 저칼로리의 요리명을 반환하고, 칼로리를 기준으로 요리를 정렬하는 자바 7 코드다. 이 코드를 자바 8의 스트림으로 다시 구현해보자. List..
싱글톤 패턴 싱글톤 패턴이란? 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 싱글톤 패턴을 적용하면 고객의 요청이 올 때 마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적으로 사용할 수 있다. 하지만 싱글톤 패턴은 다음과 같은 수 많은 문제점들을 가지고 있다. 싱글톤 패턴 문제점 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다. → DIP를 위반 자연스럽게 OCP 원칙을 위반할 가능성이 높다. 테스트하기 어렵다. 내부 속성을 변경하거나 초기화 하기 어렵다. private 생성자로 자식 클래스를 만들기 어렵다. 결론적으로 유연성이 떨어진다. 안티패턴으로 불리기도 한다. 싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패턴..
경로 표현식 .을 찍어 객체 그래프를 탐색하는 것을 경로 표현식이라고 한다. select m.username //상태 필드 from Member m join m.team t //단일 값 연관 필드 join m.orders o //컬렉션 값 연관 필드 where t.name = '팀A' 경로 표현식 용어 정리 상태 필드 : 단순히 값을 저장하기 위한 필드 (ex : m.username) 연관 필드 : 연관관계를 위한 필드 (단일 값, 컬렉션 값) 단일 값 연관 필드 : @ManyToOne, @OneToOne, 대상이 엔티티 (ex: m.team) 컬렉션 값 연관 필드 : @OneToMany, @ManyToMany, 대상이 컬렉션 (ex: m.orders) 경로 표현식 특징 상태 필드 경로 탐색의 끝으로 탐..
JPQL 소개 JPQL은 객체지향 쿼리 언어다. → 테이블을 대상으로 쿼리하는 것이 아닌, 엔티티 객체를 대상으로 쿼리 한다. 예시 비교 모델 Member 엔티티 @Entity public class Member { @Id @GeneratedValue private Long id; private String userName; private int age; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; } Team 엔티티 @Entity public class Team { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "team") private..