Java

    SpringBoot 테스트 코드 SpringSecurity @WithMockUser 사용하기

    1. build.gradle에 spring-security-test 추가 testImplementation으로 추가해야 한다. testImplementation 'org.springframework.security:spring-security-test' 2. 테스트 코드 @BeforeEach에서 MockMvcBuilders에 springSecurity()를 추가한다. private MockMvc mockMvc; @Autowired private WebApplicationContext context; @BeforeEach public void setUp() throws Exception { this.mockMvc = MockMvcBuilders .webAppContextSetup(context) .appl..

    @RunWith, @DataJpaTest, @SpringBootTest, @ExtendWith

    @RunWith, @DataJpaTest, @SpringBootTest, @ExtendWith

    1. @RunWith와 @SpringBootTest의 차이점 @SpringBootTest는 통합테스트로 이를 사용하면 모든 application context를 다 로딩한다. - 실제 운영 환경에서 사용될 클래스들을 통합하여 테스트한다. - 단위 테스트와 같이 기능 검증을 위한 것이 아니라 spring framework에서 전체적인 플로우가 제대로 동작하는지 검증하기 위해 사용한다. - 애플리케이션의 설정, 모든 Bean을 모두 로드하기 때문에 운영환경과 가장 유사한 테스트가 가능 - 전체적인 Flow를 쉽게 테스트 - 이 때문에 시간이 오래걸리고 디버깅이 어려운 단점이 있다. - 단위테스트에는 알맞지 않다. @RunWith(SpringRunner.class)를 사용한다면 @Autowire, @MockB..

    [JPA] 연관관계 매핑 기초

    [JPA] 연관관계 매핑 기초

    해당 내용은 자바 ORM 표준 JPA 프로그래밍 책을 보고 정리한 내용입니다. 05. 연관관계 매핑 기초 🚩 목표 : 객체의 참조와 테이블의 외래 키를 매핑하는 것 연관관계 매핑을 이해하기 위한 핵심 키워드 방향 | 객체관계에만 존재. 테이블 관계는 항상 양방향이다. 단방향 : 회원 -> 팀 OR 팀 -> 회원 양방향 : 회원 -> 팀 AND 팀 -> 회원 다중성 다대일 (N:1) 일대다 (1:N) 일대일 (1:1) 다대다 (N:N) 연관관계의 주인 객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야 한다. 5.1 단방향 연관관계 회원과 팀의 관계로 알아보는 다대일 단방향 관계 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계다. 객체 연관관계 회원 객체는 Memb..

    assertThat, is 오류시

    assertThat(result.size(), is(1)); assertThat(result.get(0).getAddress(), is(address)); 위와 같이 assertThat 사용시 import를 다 해봐도 오류가 나는 경우가 있다. import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.assertThat; 그럴땐 수동으로 import 구문 추가해주면된다. assertThat은 할때마다 오류가 난다; 참고 https://itmemo.tistory.com/132

    [Gradle] apply plugin, plugins 차이

    스프링 부트와 AWS로 혼자 구현하는 웹 서비스 책으로 실습 후 개인적으로 인텔리제이를 이용하여 스프링부트 프로젝트를 만들었는데 책에서 실습했던 build.gradle파일과 새로 만들어진 build.gradle 파일의 차이가 생겨서 어떻게 달라진 건지 궁금해서 찾아보게 되었다. 기존에는 buildscript { ext { springBootVersion = '2.1.7.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: 'java' apply plugin: 'eclipse..

    [Gradle] compile과 implementation의 차이

    build.gradle을 작성하면서 compile과 implementation의 차이가 궁금해져서 찾아보았다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' compile('org.projectlombok:lombok') testImplementation 'org.springframework.boot:spring-boot-starter-test' } compile The dependencies required to compile the production source of the project which are part of the API exposed by the project. For examp..

    [JPA] 엔티티 매핑

    👉 @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 합니다. @Entity 속성 속성 기능 기본값 name JPA에서 사용할 엔티티 이름을 지정. 보통 기본값인 클래스 이름을 사용함. 만약 다른 패키지에 이름이 같은 엔티티 클래스가 있다면 이름을 지정해서 충돌하지 않도록 한다. 클래스 이름 (예: Member) @Entity 적용 시 주의사항 기본 생성자는 필수다 final 클래스, enum, interface, inner 클래스에서는 사용할 수 없음 저장할 필드에 final을 사용하면 안된다. 👉 @Table - @Table은 엔티티와 매핑할 테이블을 지정한다. - 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용한다. 속성 기능 기본값 name 매핑..

    [JPA] 영속성 관리

    영속성 관리 ✨ 영속성 컨텍스트(persistence context) 엔티티를 영구 저장하는 환경 em.persist(member); persist() 메소드는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다. ✨ 엔티티 생명주기 1. 비영속 (new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 상태 - 엔티티 객체를 생성한 상태이며 em.persist() 호출 전 상태이다. - 영속성 컨텍스트나 데이터베이스와는 전혀 관련이 없다. //객체를 생성한 상태 (비영속) Member member = new Member(); member.setId("member1); member.setUsername("회원1); 2. 영속 (managed) : 영속성 컨텍스트에 저장된 상태 - ..