본문 바로가기

분류 전체보기

[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 리눅스는 몇 초 정도면 바로 사용.. 더보기
[WINDOW] 탐색기에서 폴더 구조만 복사하기(파일 제외) 1. 바탕화면에 임의의 새 폴더 생성(어디에 폴더를 만들던 상관없음. 폴더명 test로 하나 만듬.) 2. 해당 폴더를 열고 경로창에 cmd 입력후 엔터 3. 복사하고자 하는 폴더를 탐색기로 열고 경로를 복사한다 4. CMD 명령창에 밑의 명령어 타입 후 엔터 CD "복사될 폴더의 위치" XCOPY "복사를 실행할 폴더경로" . /T /E 5.결과 바로 하위의 폴더 뿐만이 아니라 그 내부의 폴더들까지 전부 복사된 것을 확인할 수 있다(파일은 제외) 더보기
[백엔드온라인TIL] java 학습 44일차 - 영속성 jpa 개념 복습 영속성 컨텍스트 JPA를 공부할 때 가장 중요한게 객체와 관계형 데이터베이스를 매핑하는 것(Object Relational Mapping) 과 영속성 컨텍스트를 이해하는 것 이다. 두가지 개념은 꼭 알고 JPA를 활용하자. 엔티티 매니저 팩토리와 엔티티 매니저 JPA는 스레드가 하나 생성될 때 마다(매 요청마다) EntityManagerFactory에서 EntityManager를 생성한다. EntityManager는 내부적으로 DB 커넥션 풀을 사용해서 DB에 붙는다. 영속성 컨텍스트 영속성 컨텍스트는 JPA를 이해하는데 가장 중요한 용어이다. "엔티티를 영구 저장하는 환경"이라는 뜻 EntityManager.persist(entity); 앞의 예제에서 persist()로 d.. 더보기