분류 전체보기
[JPA] 프록시, 즉시 로딩, 지연 로딩
[JPA] 프록시, 즉시 로딩, 지연 로딩
2022.01.30프록시 연관된 객체를 자유롭게 탐색하기 위해 사용하는 기술입니다. 엔티티를 조회할 때 연관된 엔티티들이 항상 같이 조회되는 것은 아닙니다. 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 지연 로딩이라고 하는데 지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 그것을 프록시 객체라고 합니다. 프록시를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라 실제 사용하는 시점에서 데이터 베이스를 조회할 수 있습니다. ※ 공통 예제 코드 ※ @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; private String na..
[JPA] 단방향, 양방향, 연관관계 주인
[JPA] 단방향, 양방향, 연관관계 주인
2022.01.26단방향, 양방향 테이블은 외래키 하나로 양방향 쿼리가 가능해서 방향이라는 개념이 없습니다. 객체는 참조용 필드를 가지고 있는 객체만 연관된 객체를 조회할 수 있습니다. 단방향 : 객체 관계에서 한쪽만 참조하는 것을 말합니다. 양방향 : 객체 관계에서 양쪽이 서로 참조하는 것을 말합니다. 연관관계 주인 데이터베이스는 외래키 하나로 두 개의 테이블을 연관관계를 맺습니다. 데이터베이스는 연관관계를 관리하는 지점은 외래키 하나인 반면에 엔티티를 양방향으로 매핑하면 두 개의 객체는 서로 참조를 해서 객체의 연관관계를 관리하는 지점은 2개가 됩니다. 연관관계 주인은 두 객체의 연관관계 중 하나를 정해서 데이터베이스의 외래키를 관리하는 것입니다. 연관관계 주인은 @JoinColumn(name = "참조하는 테이블 기..
[JPA] 엔티티 매핑
[JPA] 엔티티 매핑
2022.01.25JPA에서 사용하는 엔티티 매핑에 대해 알아보겠습니다. 객체와 테이블 매핑 기본키 매핑 필드와 컬럼 매핑 객체와 테이블 매핑 @Entity @Table @Entity 테이블과 매핑할 클래스에 @Entity를 붙입니다. @Entity 속성 속성 기능 기본값 name JPA에서 사용할 엔티티 이름을 지정하고 같은 엔티티 클래스가 있다면 이름을 지정해서 충돌하지 않도록 해야합니다. 설정하지 않으면 클래스 이름 그대로 사용합니다. @Entity public class Jpa { } @Entity(name = "Member") public class Member{ } @Entity 적용 시 주의 사항 접근 지정자가 public 또는 protected인 기본 생성자가 필수입니다. final 클래스, enum, in..
[JPA]영속성 컨텍스트란?
[JPA]영속성 컨텍스트란?
2022.01.191. 영속성 컨텍스트란? 영속성 컨텍스트는 JPA에서 가장 중요한 용어입니다. 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻입니다. 엔티티 매니저 팩토리로 생성한 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리합니다. 2. EntityManagerFactory, EntityManager, EntityTransaction EntityManagerFactory 엔티티 매니저 팩토리는 이름 그대로 엔티티 매니저 공장을 뜻합니다. 엔티티 매니저 팩토리는 많이 생성하면 안 되고 애플리케이션 전체에서 공유하도록 설계되어야 합니다. 이유는 엔티티 매니저 팩토리는 생성하는데 비용이 매우 크기 때문에 많이 생성되면 안 됩니다. 여러 스레드가 동시에 접근해도 ..
[Spring] 예외처리와 오류 페이지
[Spring] 예외처리와 오류 페이지
2022.01.041. 서블릿 예외처리 서블릿은 2가지로 예외를 처리합니다. Exception response.sendError(Http 상태 코드, 오류 메시지) "정상적인 흐름" WAS -> 필터 - > 서블릿 -> 인터셉터 -> 컨트롤러 Exception "컨트롤러에서 예외가 발생한 경우" WAS 컨트롤러(예외 처리해주는 경로) 컨트롤러에서 발생한 예외가 WAS까지 전파가 됩니다. 서버 내부에서 처리할 수 없는 오류가 발생한 것으로 판단하여 HTTP 상태 코드를 500을 반환합니다. WAS에서 오류를 처리하는 페이지 경로로 다시 수행이 됩니다. WAS에서 오류를 처리하는 페이지 경로를 컨트롤러에서 호출을 하여 오류 페이지를 보여줍니다. Exception 오류 페이지 예 @Controller public class E..
[Spring] 서블릿 Filter와 스프링 Interceptor의 개념과 사용방법
[Spring] 서블릿 Filter와 스프링 Interceptor의 개념과 사용방법
2021.12.301. Filter와 Interceptor 개념 Filter와 Interceptor은 공통적인 관심 사항이 있을 때 사용합니다. 공통적인 관심 사항 : 여러 로직에서 공통으로 관심있는 관심사 Filter와 Interceptor는 HttpServletRequest를 제공합니다. 예) 로그인을 안하면 회원 수정, 삭제, 게시물 삭제, 등록 등을 보지를 못합니다. 여기서 공통으로 로그인에 대한 인증을 관심을 가지고 있습니다. 이 관심사를 Filter와 Interceptor로 해결할 수 있습니다. 2. 서블릿 Filter 필터의 흐름 적절한 요청이 왔을때 : Http 요청 -> 서버 -> 필터 -> 서블릿 -> 컨트롤러 적절하지 않은 요청이 왔을 때 : Http요청 -> 서버 -> 필터 -> X 적절한 요청이 왔..
[Spring] @ScriptAssert 오류내용 및 해결방법
[Spring] @ScriptAssert 오류내용 및 해결방법
2021.12.281. 오류 내용 및 원인 @ScriptAssert(lang="javascript" script="내용")을 적을 때 밑에와 같은 오류가 발생할 수 있습니다. org.hibernate.validator.spi.scripting.ScriptEvaluatorNotFoundException: HV000232: No JSR 223 script engine found for language "javascript". 이 오류가 발생하는 이유는 JDK 버전이 11버전이 아니기 때문입니다. 2. 해결방법 해결방법은 JDK버전을 변경해주면 됩니다. 인텔리제이에서 JDK 버전을 변경하는 방법은 [파일] -> [프로젝트 구조] -> 프로젝트 -> version 11를 하면 해결이 됩니다.
[Spring] 메시지, 국제화 개념 및 사용 방법
[Spring] 메시지, 국제화 개념 및 사용 방법
2021.12.26메시지와 국제화의 개념과 사용방법을 설명하기 전에 먼저 예시를 먼저 들어보겠습니다. 여기서 이름, 나이, 아이디, 비밀번호가 적힌 페이지수가 20개라고 예시를 들어보겠습니다. 근데 여기서 아이디와 비밀번호를 ID, Password로 변경을 하고 싶으면 20개의 페이지를 다 들어가서 하나씩 하나씩 변경을 해줘야 되는 됩니다. 이런 번거로운 일을 줄이기 위해 사용하는 것이 메시지 기능입니다. 1. 메시지란? 위에 예시처럼 여러 페이지에 있는 다양한 메시지를 한 곳에서 관리하는 기능입니다. 2. 국제화란? 메시지랑 비슷한 기능을 하는데 Accept-Lange에서 나라언어 우선순위에 따라 메시지를 해당하는 나라 언어로 변경해주는 기능입니다. 예를 들어보면 구글에서 영어로 된 부분을 한국어로 번역 이런 것을 본 ..
Thymeleaf 사용 방법 및 특징
Thymeleaf 사용 방법 및 특징
2021.12.241. 스프링 부트에서 Thymeleaf 사용법 2. Thymeleaf의 특징 1. Thymeleaf 사용법(인텔리제이) 프로젝트 생성할 때 패키지, 경로 등 다 설정을 하고 next(다음)을 누른다. 누르면 밑에 사진과 같이 나올 것이다. 그러면 검색 부분에 thymeleaf를 검색한다. 검색을 하면 아래와 같은 사진처럼 나오는데 체크박스를 체크를 해준다. 그 후 완료 버튼을 누르고 build.gradle를 확인하고 설정이 다 될 때까지 기다린다. *build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' } 이와 같이 되어있을 것이다. 만약 프로젝트 생성할 때 까먹고 thymelea..
[Spring]@RestController, @Controller 개념 및 예시
[Spring]@RestController, @Controller 개념 및 예시
2021.12.191.@RestController 2.@Controller 3.@RestController과 @Controller예시 1. @RestController @RestController을 확인해보면 @ResponseBody와 @Controller이 들어있다. @ResponseBody : 응답할 내용을 HTTP 메시지 바디에 담아서 응답한다. @ResponseBody로 인해서 return 되는 것들은 view 이름을 탐색하는 게 아니라 HTTP 메시지 바디에 담겨서 응답이 된다. 2. @Controller @RestControlle와 달리 @ResponseBody가 없다. @RestController과 @ResponseBody가 없고 그냥 @Controller인 상태에서 return을 하게 되면 view 이름을 ..
[Spring]프론트 컨트롤 개념 및 예제(단순하고 실용적인 컨트롤러)
[Spring]프론트 컨트롤 개념 및 예제(단순하고 실용적인 컨트롤러)
2021.12.18프론트 컨트롤 개념 및 예제(Model 추가) 이 부분은 잘 설계된 것이다. 그런데 조금 더 고치자면 ModelView를 항상 생성하고 반환해야 하는 것을 고칠 것이다. 프론트 컨트롤 실행 순서(단순하고 실용적인 컨트롤러) 클라이언트가 FrontController에 Http 요청을 한다. 요청을 받은 FrontController은 요청을 확인하고 컨트롤러를 조회를 한다 조회한 컨트롤러를 호출하고 viewName을 반환받는다 반환받은 viewName을 viewResolver를 호출하고 MyView를 반환받는다. 반환받고 render를 호출하고 응답을 해준다. public interface Controller{ String process(Map paramMap, Map model); } public clas..
[Linux]명령어 스케줄링
[Linux]명령어 스케줄링
2021.12.12cron 시스템 유닉의 명령어 시스템으로 crontab 파일에 명시된 대로 주기적으로 명령을 수행한다 crontab 파일 등록하는 방법 $ crontab 파일 파일을 cron 시스템에 등록한다 7개의 필드로 구성 => 분 시 일 월 요일 [사용자] 명령 crontab 옵션 $ crontab -l [사용자] 사용자가 등록된 crontab 파일 리스트를 보여줌 $ crontab -e [사용자] 사용자의 등록된 crontab파일을 수정 또는 생성 $ crontab -r [사용자] 사용자의 등록된 crontab파일을 삭제 crontab 사용 예 crontab.txt 분 시 일 월 요일 [사용자] 명령어 53 0 12 12 * echo hoestory blog >> hoestory.txt # cron시스템에 등록..