김영한 선생님 인강 들으면서 노트적는 글.. generate 하게되면 zip 파일 생성된다. 생성된 파일을 IntelliJ에서 Open Project 로 열어준다. (build.grale 클릭 ) 요새는 test코드가 중요하다. 그래서 main폴더와 test 폴더가 나
고전방식, 그대로 전해주는거 스프링부트는 정적 컨텐츠 기능을 기본 제공한다. (spring docs 페이지에서도 확인가능)static 폴더에 아무 (hello-static.html)파일 만들고웹 브라우저에서 localhost:8080/hello-static.html 로
김영한 선생님 인강들으면서 정리중,, 컴포넌트 스캔과 자동 의존관계 설정 자바 코드로 직접 스프링 빈 등록하기
김영한 선생님 인강들으면서 정리중,, 비즈니스 요구사항 정리 데이터 : 회원id, 이름만 가지는 단순한 시나리오 가상시나리오로 아직 데이터 저장소 선정 안됐다고 가정(nosql할지 관계형할지 등) 일반적인 웹 애플리케이션 계층 구조는 컨트롤러 - 서비스 - 리포지토
김영한 선생님 인강들으면서 정리중,,@GetMapping("/") 은 그냥 도메인 첫번째 localhost:8080 하면 home.html호출된다. 실행하면 welcome 페이지 안가는 이유는 우선순위 있기 때문이다. 요청이 오면 관련 컨테이너 찾고 없으면 static
https://www.h2database.com/html/main.html 에서 다운로드 windows 버전으로 했더니 가 떠서 그냥 all Platform으로 다운로드 함. 압축풀고 h2>bin에 실행파일 찾고 거기서 cmd 띄워서 h2.bat 실행 설정
아까 한 jdbc 설정이랑 동일한 환경설정 스프링 JdbcTemplate과 MyBatis 같은 라이브러리는 JDBC API에서 본 반복 코드를 대부분제거해줌. 하지만 SQL은 직접 작성해야함.반복코드만 제거해줘도 행복~ JDBCTemplate은 실무에서도 많이 씀 re
킹영한 선생님.. 열심히 할게요.. 상황 : 모든 메소드의 호출 시간을 측정하고 싶다면?MemberService 회원 조회 시간 측정 추가로직이 끝날 때 시간을 찍는다 공통 관심 사항과 핵심관심 사항을 나눠서(분리) 이해 메소드에 다 붙이는게 아니라 원하는 곳에 공통
프로젝트 build.gradle에 implementation 'org.springframework.boot:spring-boot-devtools' 추가하게 되면 기존의 html코드 변경시 서버를 다시 restart 할 필요 없이 Build메뉴> Recompile을
강의 따라 진행 중 import org.junit.runner.RunWith; 관련해서 import 가 안되고 있는 에러 junit 버전이 junit5로 올라가서 발생한 문제, build.gralde의 스프링 부트 버전을 낮춰주었음 .id 'org.springfram
강의를 따라하던 중 Junit5을 사용하게 되면 만나는 에러들 중 .. 기존의 Assertions.assertThat이 안먹힐 때 Assertions.assertThat(findMember.getId()).isEqualTo(member.getId()); 기존코드에서 i
유지보수가 어렵기 때문에 조회할 시 로딩하는 시점에 다른 엔티티에 있는 필요한 부분을 같이 로딩하는 거 -> 즉시로딩 즉시로딩은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 실무에서 모든 연관관계는 지연로딩( LAZY )으로 꼭 꼭 설정! 즉시는 절대로 쓰
회원 repository 개발 -class MemberRepository @PersistenceUnit : 엔티티 메니터 팩토리( EntityManagerFactory ) 직접 주입 받을 수있음 . 그러나 @PersistenceContext : 엔티티 메니저( Ent
스프링 인강 따라하는 도중 java.lang.IllegalStateException: Failed to load ApplicationContext 를 만났다. 원래 쓰던 컴퓨터가 아니라 github에 올려둔 코드를 가지고 다른 컴퓨터에서 실습하던 참이었다. H2 db를
테스트는 케이스 격리된 환경에서 실행하고, 끝나면 데이터를 초기화하는 것이좋음. 그런 면에서 메모리 DB를 사용하는 것이 가장 이상적test 폴더 하위에 resources 폴더 만들고 application.yml 복사해서 붙여넣기 URL에 메모리모드로 동작하도록 시행
편의를 위해 setter있는데, 이거로 넣는게 아니라 stockQuantity를 변경할 일이 있으면 바깥에서 바꾸는게 아니라 이 안에서 핵심 비즈니스 로직을 통해서 변경해야함. addStock, removeStock 메소드를 통해서 이 안에서 필요한 validatio
생성지점이 되면 이 메소드만 바꾸면 돼서 중요하다. 이 메소드에서 주문에 대한 완성을 시킨다. (set set 하는게 아니라) //한번 주문할 때 상품 두개 주문할수있음, 취소할때 각각에 cancel날림 for(OrderItem orderItem : orderItem
홈 화면과 레이아웃 lombok의 @Slf4j로 import org.slf4j.LoggerFactory; 와 같이 로그 찍을 수 있음 HomeController로 클래스에서 home 호출하므로 resources>templates>에 home.html생성 home.h
상품 등록 상품 목록 상품 수정
JPA에서 변경 감지와 병합차이가 중요하다. 준영속 엔티티 = JPA 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말함직전의 상품수정할 때 처럼 한번 db에 들어갔다와서 식별자가 db에 있으면 준영속 객체라 함. JPA식별 가능한 id가짐 Book 객체는 이미 DB
API 툴 - POSTMAN 설치 패키지 분리 api >MemberApiController생성 @Controller @ResponseBody 합친 @RestController 사용 엔티티 받고 api통신 json으로 온 데이터를 멤버로 바로 바꿔준다. Mapping P
등록이랑 수정은 성능 문제가 거의 발생하지 않는다. 단순한 조회이기 때문에문제는 조회가 문제이다. 조회용 샘플 데이터 입력을 하고 서버 내렸다 올려도 남아있도록 한다 총 두건의 주문을 넣는것임 @Component로 스프링이 Component스캔대상으로 만들고 스프링빈
주문 + 배송정보 + 회원을 조회하는 API 지연로딩으로 발생하는 문제 해결을 위한 것 api폴더에 OrderSimpleApiController클래스 생성 객체를 무한루프 돌면서 뽑아나기 떄문에 계속 돌아간다 양방향 관계 문제 발생 -> @JsonIgnore 양방향 걸
3까지는 엔티티를 조회해서, 엔티티를 dto로 변환했고, 이번에는 바로 dto로 조회 v4의 결과는 v3와 동일하지만 select 쿼리를 보면 v3보다 원하는 결과에 맞는 것만 select 되어서 나온다.직접 쿼리를 짰기 때문이다.v3은 페치 조인이어서 select를
엔티티 조회해서 그대로 반환하는 v1 방식은 큰일난다 ->안돼! 엔티티 스펙 변하면 api 스펙 자체가 변하기 때문에 사용하면 안된다. 엔티티 조회한 후에는 dto 변환해서 api스펙 딱 맞게 반환하는 것을 권장한다. 엔티티 조회 후 DTO로 변환은 적절한 위치에서 하