본문 바로가기

Study

[백엔드온라인TIL] Spring MockMVC 테스트 방법(51일차) 1. @SpringBootTest와 @AutoConfigureMockMvc 스프링부트에서는 Test 클래스를 만들면 @SpringBootTest 어노테이션만 붙어 있습니다. MockMvc로 테스트를 하기 위해서는 @AutoConfigureMockMvc를 추가적으로 붙여야 합니다. 주의할 점은 Test 클래스에서는 MockMvc를 스프링 컨테이너로부터 주입받을 때 생성자, Setter 방식으로 주입이 불가능합니다. 따라서 필드에 @Autowired를 붙여서 사용해야만 합니다. 2. @WebMvcTest 웹 환경의 테스트를 경량화해서 진행할 수 있는 어노테이션입니다. @WebMvcTest 아래처럼 적용할 컨트롤러 클래스를 명시해줘야 동작합니다. @WebMvcTest(UserController.class) 사.. 더보기
[백엔드온라인TIL] 깃허브 구조 및 명령어 정리 (50일차) 깃허브 시작하기 깃허브 계정을 만든다. 깃허브에서 repository를 생성한다.(public = 전체공개 / private = 개인용) 커밋할 폴더에 들어가서 git init shell에 깃 설치 = brew install git (Mac OS) 토큰이나 ssh로 인증 branch 📍 새 브랜치 만들기 $ git branch (브랜치명) // 브랜치만 생성 $ git checkout (브랜치명) // 해당 브랜치로 이동 $ git checkout -b (브랜치명) // 현재 커밋에서 브랜치 생성하고 이동 $ git checkout (커밋아이디) -b (브랜치명) //해당 커밋으로 이동 후 브랜치 생성 📍 마스터 브랜치로 돌아가기 $ git checkout master 📍 브랜치 목록 보기 $ git b.. 더보기
[spring프로젝트] 협업 룰에 대한 고찰 ☆ rest Api 설계 ☆ git 을 통한 협업 ★ rest Api 설계 1. RESTful API 란 Rest : Representational State Tranfer의 약자로 웹을 이용할때 제약조건들을 정의하는 소프트웨어 아키텍처 스타일. HTTP URL 을 통해서 자원(Resource)을 명시하고 HTTP Method(GET, POST, PUT, DELETE)를 통해 해당 자원(URL)에 대한 CRUD를 적용하는 것을 의미한다. 한마디로 HTTP의 장점을 살리고자 하는 통신규약 2. REST 특징 인터페이스 일관성 : 일관적인 인터페이스로 분리되어야 한다. 무상태 : 각 요청간 클라이언트의 context, 세션과 같은 상태 정보를 서버에 저장하지 않는다. 캐시 처리 기능 : 클라이언트는 응답을 .. 더보기
[백엔드온라인TIL] JPA 변경 감지 (50일차) JPA 변경 감지Dirty Checking JPA는 엔티티 매니저Entity Manager가 엔티티를 조회/저장/삭제/수정한다. 엔티티 매니저의 API를 살펴보면 조회(find), 저장(persist), 삭제(remove)는 제공하지만 이상하게도 수정 API는 찾아볼 수 없다. 그 이유는 엔티티 매니저가 엔티티가 변경이 일어나면 이를 자동 감지하여 데이터베이스에 반영하기 때문인데 이것을 변경 감지라고 한다. 간단한 JPA 코드로 확인해 보자. 1 2 3 4 5 6 7 8 9 10 EntityManager entityManager = entityManagerFactory.createEntityManager(); EntityTransaction transaction = entityManager.getTran.. 더보기
[백엔드온라인TIL] @RequiredArgsConstructor 를 사용할때 고려할점 (49일차) 스프링부트를 사용하여 개발할때 우리는 의존성 주입을 위해 @RequiredArgsConstructor를 사용합니다. 이때 굉장히 반드시 알고 가야될 개념이 있습니다. 바로 final키워드를 사용한 인스턴스들만 Bean 객체로 등록을 한다는 것 입니다. final 키워드를 사용하지 않고 사용하면 NullPointerException 이 발생합니다. (이점을 반드시 알아두고 기억하시길 바라고 다음 내용으로 넘어가겠습니다) 추가로 더 알아보면 @RequiredArgsConstructor를 왜 사용하는 것일까요???? 우린 의존성 주입(Dependency Injection) 을 사용해서 Bean 객체로 등록된 아이들에게 제어의 역전(Inversion of control) 을 수행하게 됩니다. 의존성 주입에는 크.. 더보기
[백엔드온라인TIL] JPA 학습 체크리스트(JPA vs Hibernate) (48일차) 이번 프로젝트에서 Spring boot + JPA + Gradle 을 적용하면서 헷갈렸던 부분, 알게 된 부분에 대해서 적기 위해 작성했습니다. JPA 강의를 듣고 적용하는 과정에서 Maven말고 Gradle로 프로젝트를 진행했는데, 다른 점이 있다보니 조금 헤맸습니다. 👀 의문점 발생. JPA 강의에서 persistence.xml을 작성하고 Entity Manager를 생성한다음 JPA 작성을 하는데, Gradle은 xml을 쓰지 않는 것을 장점으로 알고있다. (pom.xml대신 build.gradle를 작성한다) Gradle로 작성할 때 application.properties에 JPA 속성을 작성했기 때문에 persistence.xml을 작성하면 중복 작성이 된다. Gradle + JPA을 검색해보.. 더보기
[백엔드온라인TIL] JPA 학습 체크리스트 (47일차) 영속성(Persistence) 1. 데이터를 생성한 프로그램이 종료되더라도 사리지지 않는 데이터의 특성을 말한다. 2. 영속성을 갖지 않는 데이터는 단지 메모리에서만 존재하기 때문에 프로그램이 종료되면 모두 잃어버리게 된다. 때문에 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 데이터를 영구적으로 저장하여 영속성을 부여한다. 1. JDBC 와 Persistence Framework 의 차이점 SQL Mapper와 ORM Persistence Framework는 SQL Mapper 와 ORM으로 나뉜다. 1. ORM은 데이터베이스 객체를 자바 객체로 매핑함으로써 객체 간의 관계를 바탕으로 SQL을 자동으로 생성해주지만, SQL Mapper는 SQL을 명시해줘야 한다. 2. ORM은.. 더보기
[백엔드온라인TIL] java 학습 46일차 JPA를 사용하다 보면 바로 N+1의 문제에 마주치고 바로 Fetch Join을 접하게 됩니다. 처음 Fetch Join을 접했을 때 왜 일반 Join으로 해결하면 안되는지에 대해 명확히 정리가 안된 채로 Fetch Join을 사용했습니다. Join, Fetch Join 차이점 요약 일반 Join Fetch Join과 달리 연관 Entity에 Join을 걸어도 실제 쿼리에서 SELECT 하는 Entity는 오직 JPQL에서 조회하는 주체가 되는 Entity만 조회하여 영속화 조회의 주체가 되는 Entity만 SELECT 해서 영속화하기 때문에 데이터는 필요하지 않지만 연관 Entity가 검색조건에는 필요한 경우에 주로 사용됨 Fetch Join 조회의 주체가 되는 Entity 이외에 Fetch Join이.. 더보기
[백엔드스터디WIL]9주차 학습일지 - 학습한 내용 - @Transactional - @MappedSuperClass - queryDsl 개념 @Transactional 1. 트랜잭션의 성질 (ACID) 원자성 : 한 트랜잭션 내에서 실행한 작업들은 하나로 간주한다. 즉, 모두 성공 또는 모두 실패 일관성 : 트랜잭션은 일관성 있는 데이터베이스 상태를 유지한다. 격리성 : 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야한다. 지속성 : 트랜잭션을 성공적으로 마치면 결과가 항상 저장되어야 한다. 2. 스프링에서 트랜잭션 처리 방법 스프링에서 트랜잭션 처리를 지원하는데 그 중 어노테이션 방식으로 @Transactional을 선언하여 사용하는 방법이 일반적이며, 선언적 트랜잭션이라 부른다. 클래스, 메서드 위에 @Transact.. 더보기
[백엔드온라인TIL] java 학습 45일차 docker 터미널에서 컨테이너 생성 docker run -p 5432:5432 -e POSTGRES_PASSWORD=pass -e POSTGRES_USER=rose -e POSTGRES_DB=messenger --name postgres_spr -d postgres Windows Subsystem for Linux의 동작 원리 가상머신을 사용하지 않고도, 윈도우에서 리눅스가 네이티브하게 동작한다니 신기하지 않나요? WSL은 윈도우의 가상화 기술을 Hyper-V 아키텍처를 기반으로 동작합니다. 하지만 이 구조는 윈도우 내부에 잘 감춰져있고 윈도우와 통합도 잘 되어있기 때문에, 가상 머신을 사용하는 느낌은 받을 수 없습니다. 가상머신 부팅이 몇 분 정도가 걸린다면, WSL 리눅스는 몇 초 정도면 바로 사용.. 더보기