본문 바로가기
웹 어플리케이션 서블릿 @WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response){ //애플리케이션 로직 } } • urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행 • HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest • HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse WAS는 Request, Response 객체를 새로 만들어서 서블릿 객.. 2023. 11. 15.
영속성 관리 • 영속성 컨텍스트 : 엔티티를 영구 저장하는 환경 EntitiyManager.persisrt(entity); 위 코드를 사용하면 영속성 컨텍스트에 저장한다 영속성 컨텍스트에 넣어서 관리가 된 상태가 되야 쿼리문이 작동한다 상태 4가지 비영속,영속,준영속,삭제 // 객체를 생성한 상태, 여기까진 비영속 Member member = new Member(); member.setId(100L); member.setName("HelloJPA"); //여기서부터 영속 상태 em.persist(member); //회원 엔티티를 영속성 컨텍스트에서 분리한 준영속 상태 em.detach(member); //객체를 삭제한 상타 em.remove(member); • 영속성 컨텍스트의 장점 1차 캐시에서 조회 멤버 객체를 .. 2023. 11. 7.
JPA 어플리케이션 개발 jpa 구동 방식 persistance에서 생성하고 entitymanagerfactory 에서 entitymanager를 찍어내서 돌린다 public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager entityManager = emf.createEntityManager(); // 실제 동작 코드를 작성하는 부분 entityManager.close(); emf.close(); } } h2에 테이블 생성 create table Member ( id bigint not null, name varch.. 2023. 10. 29.
JPA 프로젝트 생성 h2 1.4.200 으로 시작 이상태로 시작하기 인텔리제이 new project - maven으로 새 프로젝트를 만들고 porm.xml 4.0.0 jpa-basic ex1-hello-jpa 1.0.0 org.apache.maven.plugins maven-compiler-plugin 3.8.1 8 8 org.hibernate hibernate-core 5.4.29.Final javax.xml.bind jaxb-api 2.3.1 com.h2database h2 1.4.200 ch.qos.logback logback-classic 1.2.3 persistance.xml jpa는 특정 데이터베이스에 종속 되지 않고 hibernate.dialect 속성에 지정해주면 그 db에 맞게 바뀐다 • H2 : org.h.. 2023. 10. 29.
도메인 분석 설계 요구사항 분석 @기능 목록 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 수정 상품 조회 주문 기능 상품 주문 주문 내역 조회 주문 취소 기타 요구사항 상품은 재고 관리가 필요하다. 상품의 종류는 도서, 음반, 영화가 있다. 상품을 카테고리로 구분할 수 있다. 상품 주문시 배송 정보를 입력할 수 있다. 주문과 상품 테이블이 바로 연결되는 다대다 관계는 지양해야한다, 그러므로 주문상품 엔티티를 추가해서 다대다 관계를 일대다 다대일 관계로 풀었다 엔티티 FK를 가지는 쪽이 연관관계의 주인으로 설계하는 게 좋다 2023. 10. 13.
프로젝트 환경설정 프로젝트 설정 스프링 부트로 시작 정적 컨텐트는 static 폴더에 넣어두고 동적 컨텐츠는 templates 폴더에 들어간다 h2 데이터베이스 사용하기 위해 설치한 후 localhost:8082/login.do?jsessionid=eafc3b7d5a6fd1333bdfaf075ebae18d 형태로 맨 앞에 localhost를 추가하고 JDBC URL을 jdbc:h2:~/jpashop 으로 최소 한번은 해줘야한다 이후부터는 jdbc:h2:tcp://localhost/~/jpashop 으로 접속 JPA, DB 설정 동작확인 application.yml로 설정 파일을 관리한다 spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop; username : sa pa.. 2023. 10. 11.
의존관계 자동 주입 •의존관계 자동 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 생성자를 호출할때 의존관계를 주입하는 방식(OrderServiceImpl의 생성자에 @AutoWired를 붙인 방식) 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수(final을 사용해서 널을 허용하지 않은?)적인 의존관계에 사용 *단일 생성자일때는 @AutoWired를 생략해도 자동으로 주입 된다 수정자 주입 setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법 OrderServiceImpl 클래스를 수정해서 필드의 MemberRepository와 DiscountPolicy에 set~~ 형태의 수정자로 필드값을 수정해주는 방식 선택, 변.. 2023. 10. 3.
게시판 클론코딩 CRUD 까지 application.properties 설정 # 서버 포트 설정 server.port=8082 # database 연동 설정 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/board?serverTimezone=Asia/Seoul&characterEncoding=UTF-8 spring.datasource.username=board spring.datasource.password=1111 spring.thymeleaf.cache=false # spring data jpa 설정 spring.jpa.database-platform=org.hibernate.di.. 2023. 10. 3.
컴포넌트 스캔 • 컴포넌트 스캔과 의존관계 자동 주입 시작하기 지금까지는 @Bean으로 직접 빈을 등록해줬지만 등록할 빈이 많아지면 이 방법에는 한계가 있다.. 스프링에는 자동으로 빈을 등록하는 컴포넌트 스캔 기능이 있다! 또 의존관계도 자동으로 주입하는 `@Autowired` 라는 기능도 제공한다. AutoAppConfig클래스를 만들어서 자동으로 빈 등록하는 걸 해보자 컴포넌트 스캔을 사용하면 `@Configuration` 이 붙은 설정 정보도 자동으로 등록되기 때문에, AppConfig, TestConfig 등 앞서 만들어두었던 설정 정보도 함께 등록되고, 실행되어 버린다. 그래서 `excludeFilters` 를 이용해서 설정정보는 컴포넌트 스캔 대상에서 제외했다. 컴포넌트 스캔의 대상이 될 클래스에 @Comp.. 2023. 9. 20.
싱글톤 컨테이너 • 웹 어플리케이션과 싱글톤 싱글톤으로 객체의 인스턴스를 단 하나만 만들고 공유하는 방식이 아닌 호출할때마다 새 객체를 만드는 방식을 사용하면 많이 비효율적이다. 일단 비효율적인 DI 컨테이너를 만들고 개선해보자 public class SingletonTest { @Test @DisplayName("스프링 없는 순수 DI 컨테이너") void pureContainer(){ AppConfig appConfig = new AppConfig(); //1. 조회 MemberService memberService1 = appConfig.memberService(); MemberService memberService2 = appConfig.memberService(); System.out.println("membe.. 2023. 9. 18.
스프링 빈과 스프링 컨테이너 • 스프링 컨테이너 생성 `ApplicationContext` 는 스프링 컨테이너, 인터페이스다 memberApp이나 orderApp에서 만든 `new AnnotationConfigApplicationContext(AppConfig.class);`는 ApplicationContext인터페이스의 구현체이다 스프링 컨테이너는 넘어온 클래스 정보를 사용해서 빈을 등록한다, 빈의 이름은 중복되지 않게 하자! • 스프링 빈 조회 ac.getBean(빈이름, 타입) ac.getBean(타입) 조회하려는 빈이 없으면 오류가 생긴다 • 애플리케이션 빈과 전체 빈 조회 test 폴더에 ApplicationContextInfoTest를 생성하고 테스트 ac.getBeanDefinitionNames(); 메서드로 빈들을 가.. 2023. 9. 13.
자바로 만들기 단축키 - 설정 keymap에서 볼수 있음 alt + insert로 generate 해서 생성자,get,set 등 쉽게 만들 수 있음 ctrl + alt + v - 타입?을 알아서 만들어줌 psvm - public static void main메인 함수 만들때 psvm 치고 엔터누르면 바로 생성 ctrl + shift + t dip 위반 이렇게 기능을 확장해서 변경하면 클라이언트 코드에도 영향을 준다 -> ocp 위반 문제 해결하기 dip 위반하는걸 추상(인터페이스)에만 의존하게 의존관계를 변경하면 된다 private DiscountPolicy discountPolicy; 2023. 8. 31.