분류 전체보기 83

[JPA] 엔티티 설계시 주의점

엔티티 설계시 주의점 1. 엔티티에는 가급적 Setter를 사용하지 말자 Setter가 모두 열려있다 -> 변경 포인트가 너무 많아서 유지보수가 어렵다 2. 모든 연관관계는 지연로딩(fetch = FetchType.LAZY)으로 설정하자 즉시로딩은 특정 엔티티를 조회할 때(로딩될 떄) 연관된 모든 엔티티를 조회한다. 기본적으로 전부 지연로딩(LAZY)로 셋팅을 하고 필요에 따라 연관된 원하는 엔티티를 같이 조회할 경우 fetch join 또는 엔티티티 그래프로 최적화를 하는 것이 좋다 즉시로딩(EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다 특히 JPQL을 실행할 떄 N+1 문제가 자주 발생한다 실무에서는 모든 연관관계는 지연로딩(LAZY)로 설정해야 한다 연관된 엔티티를 함께 DB..

JPA 2021.11.26

[HTTP] HTTP 상태코드

HTTP 상태코드 - 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 1xx (Informational) : 요청이 수신되어 처리중 2xx (Successful) : 요청을 정상적으로 처리함 3xx (Redirection) : 요청을 완료하려면 추가 행동이 필요함 4xx (Client Error) : 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음 5xx (Server Error) : 서버 오류, 서버가 정상적으로 요청을 처리하지 못함 - 만약 모르는 상태 코드가 나타나면? - 클라이언트가 인식할 수 없는 상태코드를 서버가 반환하면? 해결방법 : 클라이언트는 상위 상태코드로 해석해서 해결하면 된다 예) 299 ??? -> 2xx (Successful) 451 ??? -> 4..

HTTP 2021.11.22

[MySQL] SQL Error (1038): Out of sort memory, consider increasing server sort buffer

웹상에서 크롤링한 데이터를 DB에 넣어주고 저장된 결과를 조회하기 위해 쿼리를 실행 하였더니 발생하였다. MySQL/MariaDB에서는 데이터를 정렬하기 위해 별도의 메모리 공간을 할당하는데 이때 사용되는 메모리가 "Sort buffer"이라 하는데 쿼리 실행 후 반납된다고 합니다. mysql 설정파일에서 sort_buffer_size 크기를 증가시켜주면 된다고합니다. sort_buffer_size가 선언되어 있지 않다면 새로 추가해 주시고 존재할 경우 크기만 수정합니다. 그리고 나서 저장한 후 서비스를 재기동 해주시면 됩니다. * MySQL의 설정파일의 경로는 서버마다 다르니 직접 찾아보시기 바랍니다. * 윈도우 파일 경로 : C:\ProgramData\MySQL\MySQL Server 8.0\my.i..

카테고리 없음 2021.11.16

[Git] git pull 에러 "your local changes to the following files would be overwritten by merge"

얼마 전 서버 내에서 java application.properties에 직접 접근하여 IP를 잠시 수정했다가 돌려놓았던 일이 있었는데 그로인해 수정사항이 생기는 바람에 .add 하지 않을 경우 실패되는 상황이 발생했다. 에러내용) error: Your local changes to the following files would be overwritten by merge: src/main/resources/application.properties Please commit your changes or stash them before you merge. 번역내용은 아래와 같습니다. 오류: 다음 파일에 대한 로컬 변경 사항은 병합에 의해 덮어쓰여집니다. src/main/resources/application...

Git 2021.11.16

[Thymeleaf] 타임리프로 화면단에서 사용자 시큐리티 정보 가져오기

스프링 시큐리티 인증을 받은 로그인 한 사용자의 정보를 타임리프에서 사용하고 싶을 때 사용합니다. .gradle 설정 implementation 'org.springframework.boot:spring-boot-starter-security' // 타임리프에서 스프링시큐리티의 문법이나 형식을 지원하는 확장팩 라이브러리 implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5' 우선 네임스페이스를 등록합니다. 사용 예시 출력 결과 1. 사용자 이름 2. 사용자 권한 3. 사용자 인증여부 추가로 아래는 조건의 결과를 true, false로 if와 같은 기능으로 사용 가능합니다. 참조. Thymeleaf + Spring Security in..

Thymeleaf 2021.11.10

[JPA] Pageable 사용 시 Page<Entity>를 Page<DTO>로 변환하기(Builder, 람다식 사용)

각 레이어간의 역할을 확실히 분리하기 위해서 클라이언트에 전달 할 객체는 항시 DTO로 변환해서 전달 합니다. 이떄 Spring Data Jpa 에서 제공하는 Pageable을 사용할 경우 반환받은 Page를 Page로 변환하는 상황이 생겨서 기록하였습니다. 1. Repository public interface BoardRepository extends JpaRepository { // Containing : like와 비슷한 문법 Page findByTitleContainingOrContentContaining(String title, String content, Pageable pageable); } 'title'과 'content'를 인자값으로 전달받아 where 검색결과를 return하도록 설정..

JPA 2021.10.26

[Spring] ModelMapper 대신 Mapstruct 사용하기

Entity와 DTO간의 객체 매핑시 사용하는 라이브러리로 ModelMapper와 Mapstruct가 있습니다. 기존에는 ModelMapper를 사용하고 있었지만 Mapstruct가 속도와 성능, 기능면에서 더 우수하다는 글을 보고 구글링하면서 리팩토링을 진행하게 되었습니다. 직접 사용한 부분만 정리하여서 부족한 내용이 많이 있습니다. Mapstuct의 특징 컴파일 시 오류를 확인할 수 있다. 리플렉션(Reflction)을 사용하지 않기 때문에 매핑 속도가 빠르다. (ModelMapper는 런타임 시점에 매핑을 시도합니다.) 디버깅이 쉽다. 생성된 매핑 코드를 눈으로 직접 확인할 수 있다. (생성된 구현체로 직접 접근하여 확인할 수 잇습니다.) 참조) Java - Model(Object) mapping을..

Spring 2021.10.17

[Security] Remember Me 인증 필터 (RememberMeAuthenticationFilter)

rememberMe기능을 활성화하여 로그인할 경우 사용자는 인증 객체를 담은 session과 함께 remember-me 쿠키를 받아 자원에 접근하게 된다. * rememberMe의 다양한 설정의 api들은 차후에 다뤄보자. 이후로 사용자의 세션이 만료되거나 사용자 브라우저 종료로 인하여 세션이 끊긴 경우 즉, 세션이 활성화되지 않아 인증 객체를 SecurityContext에서 찾지 못하는 경우 자동적으로 사용자의 인증을 유지하기 위하여 RememberMeAuthenticationFilter가 실행된다. 즉, 정리해보면 다음과 같이 2가지 조건이 충족해야 RememberMeAuthenticationFilter가 실행된다. * 필터가 작동하는 경우 1. Authentication 객체가 null일 경우. (..

Spring Security 2021.10.05

[Security] Logout 처리 필터 (LogoutFilter)

원칙적으로 로그아웃 시 스프링 시큐리티에서는 post 요청을 처리한다. logout을 실행하면 logout 처리와 logout과 관련된 요청을 처리하는 필터가 LogoutFilter이다. 전체적인 로그아웃 처리의 흐름을 살펴보자. 사용자가 로그아웃을하면 post방식으로 요청을 하고 LogoutFilter가 요청을 받는다. AntPathRequestMatcher(/logout)에서 해당 경로로 요청한 것이 맞는지 매칭을 한다. 매칭 실패 시 chain.doFilter을 호출하게 되고 (Default는 "/logout" 이다.) 매칭 성공시 인증 객체를 담고 있는 SecurityContext에서 인증 객체를 꺼내 SecurityContextLogoutHandler 로 전달한다. SecurityContextL..

Spring Security 2021.10.04