본문 바로가기

개발/Spring

(25)
[JPA] 연관관계 매핑 연관관계 매핑이란? JPA를 통해 객체의 참조와 테이블의 외래 키를 매핑 용어 이해 방향: 단방향, 양방향 다중성: 다대일, 일대다, 일대일, 다대다 연관관계의 주인: 객체 양방향 연관관계는 주인이 필요(이게 제일 어려움) 간단한 예시와 함께 알아 보겠다. 위와 같은 시나리오에서, 테이블 간에 관계를 먼저 생각해야 한다. 팀과 회원 간에 관계를 생각했을 때, 팀(1):회원(N)으로 이루어질 것이다. 이것을 객체가 테이블에 맞추어 모델링 한다면 이러한 구조로 만들어 질 것이다. 이러한 테이블이 있다는 가정하에, insert를 한다면 Team을 만들고, 멤버를 만든다. 그리고 이 멤버에는 Team의 Id값을 저장하여 insert한다. + 근데 궁금한 점이,, 만약 저렇게 create하면, 디비에도 테이블이 ..
[JPA] 영속성 컨텍스트 앞에서 JPA란 무엇인지, JPA안에서 영속성 컨텍스트가 어떤 역할을 하는지 등을 살펴보았다. 그럼 영속성 컨텍스트와 관련해서 엔티티의 생명주기를 살펴보겠다. 엔티티의 생명주기 영속성 컨텍스트는 기본적으로 위와 같은 생명주기를 가지게 된다. 각각을 살펴보면, 비영속 상태 비영속 상태는 말 그대로 영속성 컨텍스트와 전혀 관계가 없는 엔티티의 상태를 말한다. 가령 Entity를 생성을 한 상태에서 persist와 같이 영속화 시켜주지 않았다면, 비영속 상태이다. 영속 상태 영속 상태는 생성된 Entity를 persist와 같이 영속화 시켜준 상태를 말하고, 해당 상태에서는 영속성 컨텍스트가 해당 Entity를 관리한다. 준영속 상태 영속성 컨텍스트에 저장되었다가 분리된 상태를 말한다. em.ditached와..
JPA란 JPA(Java Persistence API)는 자바의 ORM 기술 표준이다. ORM(Object-Relational Mapping) 객체와 관계형 DB를 매핑하는 것이다. 즉, 개발자가 직접 SQL을 작성하지 않고, 객체를 자동으로 Mapping하여 DB에 전달한다. JPA의 구동 방식 그림과 같이 JPA는 Persistence로 EntityManagerFactory를 생성한 후, 요청에 따라 EntityManager를 생성하여 Transaction 단위를 처리한다. + JPA는 트랜잭션 단위 안에서 작업을 해줘야 한다. (이 부분이 왜 그런지 알아보자) 이러한 과정을 코드로 간단히 구현한 부분이다. persistence를 통해 EntityManagerFactory를 생성하고, EntityManager..
[Spring] MockMvc MockMvc란 실제 객체와 비슷하지만, 테스트에 필요한 기능만 가지는 가짜 객체를 만들고, 서버에 배포하지 않고 재현할 수 있는 클래스를 의미한다. -> 예를 들어, 구현한 코드를 테스트 해보기 위해서는 서버를 띄우고 Postman과 같은 툴로 확인을 했었지만, MockMvc로 인해, 이러한 과정 없이 바로 테스트를 해볼 수 있다. MockMvc를 검색하면, 대부분의 블로그에서 사용법을 위주로 설명하신다. 이미 이러한 사용법에 대해서는 많이 나와있으니, 내가 궁금했던 것들을 기록하자. TestCode를 생성할 때, JUnit4인지 JUnit5인지 선택하게 된다. 이 둘의 차이는 무엇일까? JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage JUnit P..
[프로그래머스] Level2_오픈채팅방 정답 코드 def solution(record): dic = {} result = [] for com in record: if com.split(" ")[0] == "Enter" or com.split(" ")[0] == "Change": dic[com.split(" ")[1]] = com.split(" ")[2] for com in record: if com.split(" ")[0] == "Enter": result.append("{}님이 들어왔습니다.".format(dic[com.split(" ")[1]])) elif com.split(" ")[0] == "Leave": result.append("{}님이 나갔습니다.".format(dic[com.split(" ")[1]])) return result..
[Spring] Spring MVC 전체 구조 Spring 구조를 보기에 앞서, Servlet에 대한 포스팅을 먼저 참고하면 좋을 것 같다. https://ttungbab.tistory.com/148 (Servlet 관한 포스팅) Spring MVC 전체 구조 Spring MVC는 Dispatcher Servlet을 Front로 두고, 컨트롤러들을 어댑터를 통해 관리한다. + 이 Dispatcher Servlet은 자바 웹 MVC에서 FrontController와 동일한 역할이다. https://github.com/freev5/TeamProject/blob/c57dffea24/src/com/tp/controller/FrontController.java (실제 JSP Servlet으로 FrontController를 구현한 코드이다. 참고해도 괜찮겠다)..
[Spring] 빈 생명주기, 빈 스코프 Bean 생명주기란? 스프링 컨테이너는 Bean을 주입하는 것 이외에 생성과 소멸과 같은 생명 주기를 관리한다. 빈 생명주기 스프링 빈은 객체 생성 후, 의존관계 주입이 다 끝난 후에 필요한 데이터를 사용할 수 있는 준비가 완료된다. -> 여기서 사용할 수 있는 준비라는 것은 빈이 생성되는 것을 말하는 건가? 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에야 호출한다. 의존관계 주입이 완료되면, 스프링 빈에게 콜백 메소드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 스프링 빈의 이벤트 라이프사이클 스프링 컨테이너 생성-> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 스프링 종..
[Spring] 컴포넌트 스캔, 의존 관계 자동 주입 ComponentScan이란? 설정된 시작 지점부터 Component 클래스를 스캔하여 Bean으로 등록해주는 역할을 한다. @Component를 가지고 있는 클래스들이 Scan되어, Bean으로 등록된다. 대표적인 컴포넌트 @Component: 컴포넌트 스캔 @Controller: Web MVC 코드에 사용되는 어노테이션이다. @RequestMapping, @GetMapping 등을 @Controller 에서만 사용할 수 있다. @Repository: 스프링 비즈니스 로직 @Service: @Component에 추가된 기능은 없다. 보통 웹에서 구성하는 서비스의 단위를 말하고, @Transactional어노테이션과 함께 쓰인다. @Configuration: 스프링 빈 설정 ComponentScan의 동..