분류 전체보기

개발/모던 자바 인 액션

2. 동작 파라미터화 코드 전달하기

동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드블럭을 의미한다.동작 파라미터화를 사용하며 자주 바뀌는 요구사항에 효과적으로 대응할 수 있다.2.1 변화하는 요구사항에 대응하기녹색 사과 필터링하기public static List filterGreenApples(List inventory) { List result = new ArrayList(); for (Apple apple: inventory) { if (Color.GREEN.equals(apple.getColor())) { result.add(apple); } } return result; }여기서 빨간색 사과도 필터링하고 싶으면, 전체 코드를 복사-붙혀넣기 해서 수정해야한다. 이렇게 단순 복-붙을 하면 코드 동작을 바꾸고 싶을 때 ..

개발/모던 자바 인 액션

1. 자바 8, 9, 10, 11: 무슨 일이 일어나고 있는가?

1.1 역사의 흐름은 무엇인가?Java8에서 가장 큰 변화가 생김. ⇒ 간결한 코드, 멀티프로세서의 쉬운 활용Java5에서는 스레드풀, 병렬 실행 컬렉션(concurrent collection)을 도입Java7에서는 포크/조인 프레임워크 도입Java8에서는 이전과 다른 새로운 방식(함수형 프로그래밍)으로 병렬실행을 지원함. ⇒ 제대로 사용하려면 여러가지 규칙을 지켜야함.Java9에서는 리액티브 프로그래밍이라는 병렬 실행 기법을 지원하게 됨 1.2 왜 아직도 자바는 변화하는가?수많은 프로그래밍언어사이에서 살아남기 위해 변화한다.이제는 빅데이터에 직면하면서 멀티코어, 컴퓨터 클러스터를 이용해서 효율적으로 처리하는 요구사항이 생겼다. 즉, 병렬 프로세싱의 요구사항이 생겼다.따라서 Java8에는 기존의 객체지향..

개발/스프링

SpringSecurity 항상 403에러가 뜨는 이유

문제 발생SpringBoot Validation 패키지를 추가한 뒤 Validation을 테스트하던 중 이상한 문제가 발생했다.400 Bad Request가 떠야하는 부분에서 403 Forbidden이 뜨는 것이었다.단순하게 403만 뜨는게 아니라 body가 완전히 비어져있으며, Spring의 로그에 관련한 어떠한 에러도 뜨지 않는다.분명 Spring 로그를 보면 validation에 성공했고, 400을 내려야할 것 같은데 왜 다른 에러도 없이 403이 내려갈까?? Spring의 에러처리와 Tomcat에러 발생Validation쪽이든 어디서든, 에러가 발생하면 DefaultHandlerExceptionResolver로 넘어가서 처리하게 된다.@Nullable protected ModelAndView ha..

개발/스프링

SpringSecurity로 JWT 인증 구현

구현JwtAuthenticationFilterSpringSecurityFilter에 등록할 필터 중 하나로, 요청에 token이 포함되어 있는지, 포함되어 있다면 유효한지,유효하다면 DB에 조회하여 Authentication객체를 만들고, SecurityContextHolder를 통해서 저장하는 역할을 한다.@Slf4j @Component @RequiredArgsConstructor public class JwtAuthenticationFilter extends OncePerRequestFilter { private final JwtUtilities jwtUtilities; @Override protected void doFilterInternal( HttpServletRequest request, Ht..

개발/스프링

SpringSecurity 구조

Tomcat의 구조요청이 들어오면 여러가지 Filter들을 통해서 연쇄적으로 동작이 수행된다.DispatcherServlet을 통해서 어떤 Controller로 들어오는 요청인지 확인하고 해당 Controller를 통해 요청을 처리한다. SpringSecurity 추가시SpringSecurity를 추가하게 되면 내장된 Filter가 등록되고, 이를 SecurityFilter라 부른다. 💡더 정확히는 Tomcat의 filter중 Spring에서 작성된 DelegatingFilterProxy를 filter로 등록한다. 이 DelegatingFilterProxy는 내부적으로 스프링의 Bean인 FilterChainProxy를 사용하는데, 이는 SecurityFilterChain을 사용해서 SecurityFil..

개발/Realworld프로젝트

[23.06.14] 엔티티 작성

클래스 다이어그램 엔티티 다이어그램 ER 다이어그램 Uploaded by N2T(23.06.13 21:40)에 작성된 글 입니다.

개발/스프링

@MappedSuperclass VS @Embedded

의문Realworld 프로젝트를 시작하면서 엔티티 정의와 매핑을 하기 시작했다.모든 테이블에 공통적으로 들어갈 (Id, createdAt, updatedAt)속성은 강의에서 배운대로 BaseEntity로 뽑아내었고 개발 편의성이나 개념적으로도 타당하다고 생각했다.그런데, 프로젝트 API Response format Users와 Profile을 보면 상당부분이 비슷함을 알 수 있다.반환할 때 DTO를 반환할 것이기 때문에 크게 상관이 없긴 하지만, 문제는 엔티티 매핑할 때 발생한다.단위가 더 큰 User클래스를 엔티티로 만들고 사용하려 했지만, 다른 API들에서는 대부분 Profile을 내려주고 있다. 이럴 때는 Profile에 해당하는 클래스를 그냥 하나 만들어주고 User쪽에서 @Embedded로 받는..

김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편

16. 객체지향 쿼리 언어 - 2

경로 표현식.(점)을 찍어서 객체 그래프를 탐색하는 것상태 필드(state field): 단순히 값을 저장하기 위한 필드(ex: m.username)연관 필드: 연관관계를 위한 필드단일 값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티(ex: m.team)컬렉션 값 연관 필드: @OneToMany, @ManyToMany, 대상이 컬렉션(ex: m.orders) 특징상태 필드: 경로의 탐색이 끝이난다. 더 이상 탐색 불가능단일 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색 가능컬렉션 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색 불가능FROM 절에서 명시적 조인을 통해서 별칭을 얻으면 별칭을 통해서 탐색이 가능함. 상대 필드 경로 탐색JPQL..

김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편

15. 객체지향 쿼리 언어 - 1

객체지향 쿼리 언어 소개JPA의 여러 쿼리 방법JPQLJPA CriteriaQueryDSL네이티브 SQLJDBC API 직접 사용(Mybatis, SpringJdbcTemplate) JPQL등장 배경가장 단순한 조회 방법EntityManager.find()객체 그래프 탐색(a.getB().getC())근데, 만약에 나이가 18세 이상인 회원을 모두 검색하고 싶으면..?검색 쿼리를 짜야하는데, 테이블 대상이 아니라 엔티티 객체를 대상으로 검색하는게 객체지향적으로 올바르다. 소개SQL을 추상화하여 JPQL이라는 객체 지향 쿼리 언어를 제공한다.SQL과 문법이 유사(SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원)List result = em.createQuery("sele..

김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편

14. 실전예제6 - 값 타입 매핑

코드@Embeddable public class Address { private String city; private String street; private String zipcode; public Address() { } public Address(String city, String street, String zipcode) { this.city = city; this.street = street; this.zipcode = zipcode; } public String getCity() { return city; } public String getStreet() { return street; } public String getZipcode() { return zipcode; } @Override pu..

피곤한투티
'분류 전체보기' 카테고리의 글 목록 (2 Page)