목록분류 전체보기 (153)
늘
가장 큰 차이로는, JPA에 의해 처리되느냐, DDL에 의해 cascade가 걸린 테이블이 생겨 DB단에서 처리되느냐 이다. 전자의 방식을 취할 경우, JPA에 의해 외래 키를 찾아가며 참조하는 레코드를 제거해주게 됩니다. 따라서, JPA 상에서는 참조하고 있는 레코드의 개수만큼 delete 쿼리가 생성됩니다. 후자의 방식을 취할 경우, 데이터베이스 자체에서 on delete cascade 제약조건이 걸리게 됩니다. 이를 통해 참조하는 레코드가 모두 제거되는 것입니다. cascade = CASCADE.REMOVE JPA 레벨에서 작동한다. 외래 키를 찾아 참조하는 레코드를 제거해준다. 참조하고 있는 레코드 수 만큼 delete쿼리가 나간다. 부모 테이블의 자식 컬럼에 걸어여하므로(일반적으로 @OneToM..
스프링과 JPA로 애플리케이션을 개발하다 보면 프록시에 대해서 많이 만나게 된다. 이와 관련되어 구글링을 해보면 게시글들마다 다른 말을 해서 직접 정리해보려고 한다. - 총정리 스프링 AOP는 [런타임에 프록시 인스턴스가 동적으로 변경되는] 다이나믹 프록시 기법으로 구현되어있다 인터페이스의 유무에 따라 다음과 같이 나뉜다. 1. JDK 다이나믹 프록시 2. CGLIB JDK Dynamic Proxy JDK에서 지원하는 프록시 생성 방법 Invocation Handler를 재정의한 invoke를 구현하여 부가기능 수행 Reflection API 사용 인터페이스를 통해서만 프록시 생성 가능 CodeGenratorLibrary(CGLIB) 상속을 기반으로 프록시 생성 final이 붙으면 오버라이딩이 불가능하므..
hibernate.ddl-auto 옵션은 Entity객체를 참고하여 애플리케이션 실행 시점에 하이버네이트에서 자동으로 DDL을 만들어주는 옵션이다. JPA 테스트 도중 fk 제약조건이 걸린 엔티티를 생성할 때, 아래 설정처럼 create를 하니 에러가 발생했다. ddl-auto 옵션 create: 기존테이블 삭제 후 다시 생성 + 닫을 때 삭제하지 않는다. create-drop: create와 같으나 종료시점에 테이블 DROP update: 하이버네이트는 주어진 엔티티 구조에 따라서 데이터베이스를 변경한다. validate: 엔티티와 테이블이 정상 매핑되었는지만 확인 none: 어떠한 변화도 주지 않는다.mysql에서 default이다. ddl-auto의 옵션의 시작은 create or update로 시..
@WebMvcTest를 붙이고 테스트를 돌리니 JPA metamodel must not be empty! 와 같은 에러가 발생했다. 이유를 찾아보니 테스트를 돌릴때는 기본적으로 XApplication이 돌면서 작동한다. 따라서 @EnableJpaAuditing을 Application위에 올리면 Jpa관련된 빈들이 올라오기를 요구한다. 이때, mockMvc를 사용한 테스트는 mvc와 관련한 빈들만 찾아서 올리므로 JPA관련 빈을 찾지 못해서 JPA metamodel must not be empty 에러가 발생한다. 해결방법 1. @Configuration 분리 JpaAuditingConfig.java @EnableJpaAuditing @Configuration public class JpaAuditingC..
제이슨의 JPA수업 도중 application.properties의 설정에서 아래와 같은 h2 설정이 있었다. spring.datasource.url=jdbc:h2:~/test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE h2설정할 때, 어쩔때는 h2:mem, h2:tcp였고 이번에는 그냥 h2:~였다. 또한 DB_CLOSE~라는 새로운 이름도 보여서 h2에 대해서 조금 공부해보려고 한다. Connection Modes Embedded mode (local connections using JDBC) Server mode (remote connections using JDBC or ODBC over TCP/IP) Mixed mode (local and remote connect..
제목에 대한 질문에 답을 하지 못했다.이 질문에 대해서 정리를 해보고자 한다. 그전에 트랜잭션이 무엇인지 정리하고 시작하려고 한다. 트랜잭션이란? 데이터베이스에 작용하는 여러 읽기와 쓰기를 수행하는 하나의 작업 단위 트랜잭션 범위 트랜잭션의 범위는 커넥션을 기준으로 한다. 커넥션이 다르다면 6에서 롤백이 일어나면, 3번과 5번에 해당한 쿼리만 롤백이 된다. 즉, 4번에서 쿼리들은 롤백되지 않고 반영이 된다. 다른 말로, 여러 메서드에서 하나의 트랜잭션을 갖고 싶다면 이 여러 메서드들을 하나의 커넥션을 사용하도록 하는 방법이 필요하다. -> 이러한 방법이 트랜잭션 전파를 사용한다. 트랜잭션 전파 보통 스프링에선 @Transactional을 통해 해당 어노테이션이 선언된 내부 메서드들도 한 커넥션에 묶인다...
2022.06.29 우아한테크코스에서 UX 워크샵을 진행했다. 평소 UX에 대한 관심은 있었지만 접해볼 경험이 없었는데 이러한 경험을 하게 되어서 좋았다. 강의형식이 아니라 직접 아이디어를 도출하고 구체화하고 평가하면서 어떻게 하면 user들의 입장에서 생각해 볼수있을지 경험해봤다. 위 사진은 아이디어를 도출하고 어떤 아이디어가 좋은지?평가 하는 방식이라고 한다. wow영역으로 갈수록 좋은 아이디어라고 한다. 참고로 한국인의 경우는 북미쪽 사람들과 경향이 비슷해서 제품의 사용 설명서(튜토리얼) 보다는 직접 사용하면서 경험해보는 성격이 강하다고 한다. 반면에 일본이나 중국은 튜토리얼을 진행하는 이용자가 많으므로 설명서등이 잘 명시되어져 있다고 한다. 1. 고객이 원하는 것에 초점을 맞추자 고객이 싫어하는 ..
1. static vs bean utils와 관련되면 static을 사용할 것이다. 어디서든 재사용 가능하고 도메인 로직에 포함이 되지 않는 기능, 상태를 갖지 않는 클래스 ex) 날짜를 스트링포멧으로 변경 즉, 상태를 갖지않고, 외부 자원에 의존하지 않고 단순히 변환하는 일만을 담당하면 bean으로 등록할 필요가 없다. 의존성관계가 맺어지고 의존성이 필요하다면 bean static 함수 모음 클래스의 모든 함수는 인자가 동일할 경우 항상 동일한 결과를 리턴해야 한다. 이 규칙을 지킬 수 없으면 POJO Bean으로 만들라. 이것이 이뤄지려면 함수 안에서는 외부 자원(Resource)에 대해 하나도 의존하면 안된다는 선결 조건을 충족해야 한다. 싱글톤과 정적 클래스 차이 싱글톤은 인터페이스를 만들수 있어..
1. RestDocs vs swagger 스웨거와는 다르게 프로덕션 코드에 어노테이션을 붙이지 않아서 좋다! 스웨거를 사용하면 뭔가 프로덕션 코드에서 테스트를 위한 코드가 짜여진 느낌?이 든다. 레퍼런스가 많다! - 여러 레퍼런스들을 참고했었는데 자료들이 많아서 쉽게 적용할 수 있다! 운영 코드를 퓨어하게 가져가고 싶다면 레스트 독스를 사용하고 이를 포기하더라도 테스트 코드를 짜고 관리하는 비용을 지불할 경우에는 스웨거를 사용하는 느낌이죠. 2. 잦은 api요청의 영향 API 요청 하나도 내부 서버에서 무거운 로직을 실행하거나 DB를 오래 조회하는 쿼리를 날린다면 성능에 무리가 될 수 있어요. 또한 사용자도 기다리는 시간이 늘어나서 좋지 않은 경험을 하겠죠. 물론 요청의 개수도 성능에 영향을 미쳐요. D..
인텔리제이에서 지원하는 .http라는 파일을 만들면 포스트맨을 대체하여 매우 편리했던 경험이 있었다. 이러한 경험을 글로 정리해서 공유해보려고 한다. 장점 포스트맨을 사용했을 때는 매번 테스트 해볼때마다 복붙을 했었지만, .http라는 파일로 관리하여 저장할 수 있다. Code highlighting이 가능해서 더욱 직관적이다. 코드 자동 완성의 기능들이 있다. 단점 음..굳이 뽑자면 파일이기 때문에 관리를 해야 한다? 인 것 같다. POST 요청 위 처럼 POST로 요청을 보낼 때, Content-Type을 명시해주고 한 칸 띄우고 json형식으로 입력해주면, 테스트용 디비에 아래처럼 잘 들어간 것을 확인할 수 있다. 그리고 로그인에 성공을 하면, accessToken도 잘 나오는 것을 확인할 수 있다..