전체 글 61

Docker란?

도커(Docker)란? 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼 여기서 도커의 핵심개념은 바로 이미지와 컨테이너라는 개념이다. 하나의 컴퓨터에 설치된 리눅스 운영체제에서 완전히 분리된 별도의 리눅스 시스템을 운영할 수 있는 기술 CPU, 메모리, 네트워크를 분리하여서 마치 별도의 시스템처럼 사용할 수 있는 기술 그럼 우선 컨테이너에 대해 먼저 알아보자! 컨테이너란? 어떠한 어플리케이션을 작동시키기 위해 필요한 라이브러리나 의존성, 설정과 같은 것들을 하나로 모아서 별도의 서버인 것처럼 사용할 수 있게 만든 것을 의미 그렇다면 컨테이너와 VM의 차이는 무엇일까? 물론 둘 다 애플리케이션을 구동하는 데 필요한 것을 지니고 실행에 도움을 준다는 것을 알고 있다. VM(가상머신..

Cloud 2023.11.06

[HTTP] REST API란?

REST란? 분산 하이퍼미디어 시스템(ex: web)을 위한 아키텍처 스타일(제약조건의 집합) HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해 해당 리소스(URI)에 대한 CRUD Operation을 적용하는 것을 의미 REST의 구성요소 자원(Resource) : HTTP URI 자원에 대한 행위(Verb) : HTTP Method 자원에 대한 행위의 내용 (Representations) : HTTP Message Pay Load 그럼 우리가 사용하는 REST API라고 부르는 것들은 정말 REST를 잘 지키면서 사용하고 있는걸까? 물론 있기야 하겠지만 대부분은 지키지 않는다고 한다. 위의 정의를 보면 제약조건의 집합을 지킨 것이 REST라고 해놓았는데 대부분의 ..

HTTP 2023.10.21

JPA_DataSource

Connection Pool 싱글톤 패턴이라고도 할 수 있는데 Db Connection을 만들어놓고 해당 Connection을 사용할 수 있도록 관리하는 것 즉, 여러 개의 Db Connection을 생성하지 않아도 되기 때문에 성능 측면에서 효율적 DataSource DB와의 연결을 미리 생성하고, 그것을 관리하는 역할을 하는 객체 DB Connection을 관리하는 인터페이스 Connection을 획득하는 방법을 추상화한 인터페이스 Connection Pool을 사용하기 위한 인터페이스 getConnection()를 지원해서 DB연결하려는 객체에게 Connection을 주고 다 쓰면 반납함 public BoardResponseDto(JdbcTemplate template) { ///... } 위의 코..

JPA 2023.10.17

JAVA_단위 테스트&통합 테스트

모든 개발자들은 프로젝트를 할 때 테스트는 반드시 필요한 필수조건이다. 테스트종류에는 위의 사진과 같이 (아래서부터)단위 테스트, 서비스 테스트, 사용자 인터페이스 테스트 총 3가지가 있다. Unit Tests(단위 테스트) 작은 컴포넌트, 하나의 기능을 하는 함수처럼 잘개 쪼개어 테스트 하는 방식 @Test public void 게시글_저장_불러오기(){ //given String title="테스트 게시글"; String content="테스트 본문"; postsRepository.save(Posts.builder() .title(title) .content(content) .author("junseck") .build()); //when List postsList=postsRepository.fin..

JAVA 2023.10.16

JPA_값 타입

값 타입 분류 기본 값 타입 자바 기본 타입(int,double…) 래퍼(Wrapper)클래스(Integer,Long) String 임베디드 타입 컬렉션 값 타입 임베디트 타입 새로운 값 타입을 직접 정의할 수 있음 기본 값 타입을 모아서 만들어서 복합값 타입이라고 함 위의 사진에서 Member라는 엔티티 안에서 Period, Address라는 객체를 새로 만들어서 아래의 코드 처럼 객체 선언 public class Member{ ... //임베디드 타입 private Period workPeriod; private Address homeAddress; } 임베디드 타입 사용법 @Embeddable → 값 타입을 정의하는 곳에 표시 @Embeddable public class Period{ private..

JPA 2023.10.05

JPA_프록시와 연관관계관리

프록시와 연관관계 관리 📒 em.find() vs em.getReference() em.find() → DB를 통해서 실제 엔티티 객체 조회 em.getReference() → DB조회를 미루는 가짜(프록시) 엔티티 객체 조회 프록시란? 실제 클래스를 상속 받아서 만들어짐 실제 클래스와 겉 모양이 같음 개발자 입장에서는 진짜 객체인지 프록시 객체인지 구분X 프록시 객체는 실제 객체의 참조(target)을 보관 프록시 객체를 초기화하면 프록시 객체는 실제 객체의 메소드 호출 프록시 객체는 JPA성능 최적화를 위해 제공하는 기술 → 지연로딩 핵심 원리 📒 프록시 초기화란? 프록시가 실제 엔티티 객체를 불러오는 과정 Member refMember=em.getReference(Member.class,member..

JPA 2023.09.26

JPA_연관 관계 매핑

JPA에서 대부분의 엔티티가 서로 관계를 맺고 있는 걸 확인할 수 있다. 연관관계 매핑이란? 객체의 참조와 테이블의 외래키를 매핑하는 것을 의미 연관관계 매핑 시 고려사항 1. 연관관계의 주인 2. 단방향, 양방향 3. 다중성 우선 그 전에 연관관계 주인에 대해 알아야 양방향관계에 대해서도 알 수 있으니 먼저 설명하겠다. 연관관계의 주인 테이블은 외래키 하나로 두 테이블이 연관관계를 맺음 객체 양방향관계는 A → B, B → A처럼 참조가 2군데 있음, 사실상 단방항관계가 2개 있는거 객체 양방향 관계는 참조가 2군데 있는데, 둘 중 외래키를 관리할 테이블을 지정해야함 연관관계의 주인 → 외래키를 관리하는 참조(주로 Many쪽에 있음) 주인의 반대편 → 외래키에 영향을 주지 않음, 단순 조회만 가능 ma..

JPA 2023.09.23

JPA_영속성 컨텍스트 & 객체와 테이블

영속성 컨텍스트란? 엔티티를 영구 저장하는 환경 애플리케이션과 DB사이에서 객체를 보관하는 논리적 개념 영속성 컨텍스트 장점 1차 캐시 1차캐시는 처음에 persist(user1)로 데이터를 넣으면 DB에 바로 저장되는 것이 아니라 1차 캐시라는 곳에 들어가 있는데 이때 만약 다름 쿼리가 em.find(User.class,user1)인 경우 DB에서 조회를 할 필요없이 1차 캐시에서 발견하였기 때문에 빠르게 반환가능 동일성 보장 두 개의 엔티티가 서로 같은 엔티티인지 DB차원에서 할 필요없이 바로 애플리케이션 차원에서 확인이 가능 트랜잭션을 지원하는 쓰기 지연 만약 em.persist(user1); em.persist(user2); 를 하였을경우 각각 DB에 커밋을 하는 것이 아니라 쓰기 지연 저장소에 ..

JPA 2023.09.19

[Spring] 스프링 시큐리티(Security)

더보기 스프링 시큐리티(Security)란? 스프링(Spring) 기반의 웹애플리케이션의 인증(Authenticate)과 권한(Authorize)을 담당하는 스프링의 하위 프레임 워크 그럼 스프링 시큐리티의 작동 원리는 어떻게 될까? 그 전에 우선 스프링의 작동원리를 알아보자. 사용자로부터 web.xml을 통해 요청이 들어온다. 보통은 localhost:8080을 통해 사용자와 스프링서버와 연결을 한다. Dispatcher Servlet은 8080포트를 통해 들어온 요청을 받아 IoC컨테이너안에 있는 스프링 빈을 검사하여 함수를 제공한다. Controller라고 사용자의 요청을 url을 통해 받아서 Service에게 요청처리를 부탁한다. 사용자의 요청을 받은 서비스는 Repository라고 하는 DB와 ..

SpringBoot 2023.07.24

[Spring] 트랜잭션(Transaction) 이란?

트랜잭션(Transaction)이란? 여러 작업을 진행하다가 문제가 발생한 경우 문제가 발생하기 전의 상태로 롤백(RollBack)하기 위해 사용되는 것이다. 다른 말로 더 이상 쪼갤 수 없는 최소 작업 단위를 의미 트랜잭션의 작업에는 크게 2가지가 있다. 커밋(Commit) -> 작업이 마무리 된 것을 의미 롤백(RollBack) -> 작업을 진행 중 문제가 발생하여 작업중이던 작업을 취소하고 이전의 상태로 되돌리는 것을 의미 Spring에서는 트랜잭션과 관련해서 몇 가지 기술을 제공하고 있다. 트랜잭션 동기화 트랜잭션 추상화 AOP를 이용한 트랜잭션 분리(선언적 트랜잭션) 트랜잭션 동기화 개발자가 여러개의 작업을 하나의 트랜잭션으로 관리하려면 Connection객체를 공유해야하는 불필요한 작업이 생긴..

SpringBoot 2023.07.02