목록분류 전체보기 (229)
DevKim
🏃 구현 기능🏃 1.상품 등록 2. 상품 목록 조회 3. 상품 수정 [ 상품 엔티티에 비즈니스 로직 추가 ] - 상품 엔티티에 주문에 따른, 재고 수량을 늘리고 줄여보고 예외처리를 발생 도메인 주도 설계시, 엔티티 자체에서 해결할 수 있는 것들은 엔티티 안에 비즈니스 로직을 넣는게 더 좋고, 응집도가 있고 객체지향적이다. 📌1. 재고 수량 추가 📌2. 재고 수량 감소 ( 수량이 0보다 작을 시, 오류가 발생해야한다 ) @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "dtype") @Getter @Setter public class Item { ... /** * todo : 비즈니스 로직 * ..
본 포스팅엔 '김영한님의 실전 스프링 부트와 JPA 활용 1편'의 내용이 포함되어있습니다. 이번 실습은 연관관계의 모든 매핑관계를 다뤄보고, Data JPA를 사용하지 않고 JPA를 사용하여 원리를 이해하고 간단한 기능을 최적화하는데에 맞춰져있다. 요구사항을 보고 스스로 엔티티와 테이블 설계를 하고 난 후, 영한님이 구현하신 자료들을 보고 비교해나가는 방식으로 학습을 진행 할 예정이다. 개발 순서는 다음과 같다. Entity 설계 - Entity 개발 - Service,Repository 개발 - Test code 작성을 통한 검증 - 웹 계층에 적용 도메인 주도 개발(DDD)방식 사용 [ Entity & Table 설계 ] diagram 생성 툴은 아래의 사이트를 이용했고, 실습 진행을 위해 테이블명이..
[ Transaction remind ] username과 id만 가지고 있는, 단순한 Member 객체를 만들고 Test code를 생성하여 돌려보았을 때 에러가 터졌다. 왜일까? @RunWith(SpringRunner.class) @SpringBootTest class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test public void testMember() throws Exception{ //given Member member= new Member(); member.setUsername("memberA"); //when Long saveId = memberRepository.save(member); Member ..
🔗 @RequestParam @RequestParam("id") Long id http://주소값?index=1&page=2 해당 Request에 대한 파라미터들을 자동으로 binding한다. 한개의 HTTP 파라미터를 얻기 위해서 주로 사용됨 ** 주의 할 점 ** 단일 값만 binding 가능하며, 만약 List 형태로 복수의 파라미터를 Request하면 첫번째 Data값만 binding된다. @ReqeustParam HashMap params //{id=gil, name=gillog} MultiValueMap을 이용하여 List 형태의 값들을 value로 binding 할 수 있음 @ReqeustParam MultiValueMap multiParams //{id=[gil], name=[gillog,..
인텔리제이에서 갑자기 프로젝트 로딩 시 lombok이 인식이 안되는 경우가 있다. lombok 설치, enable annotation processing 물론 모두 설정이 완료된 상태이어야하고 그래도 인식을 갑자기 못한다면, Lombok dependency(의존성)을 추가할 때 최신 버전을 명시하여 내려 받아 주면된다. 인텔리제이 최신 버전에서 주입받는 Lombok 보다 낮은 버전을 사용할 경우 발생할 때가 있다고 한다. 버전은 Maven Repository에 들어가서 사람들이 가장 많이 사용하고 있는 버전을 사용하는게 제일 좋은 것 같다. https://mvnrepository.com/ // https://mvnrepository.com/artifact/org.projectlombok/lombok co..
https://www.acmicpc.net/problem/21610 21610번: 마법사 상어와 비바라기 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그 마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기 www.acmicpc.net [ 알고리즘 ] 단순구현 [ 접근 방법 ] 역시 삼성 문제는 문제 이해가 최우선이다. 조건이 복잡하고 길고 조건이 왔다갔다해서 조건 하나라도 빼먹으면 무한 디버깅에 빠지게 된다 (=나^^) 이 문제는 이동하는걸 어렵게 생각해서 시간을 많이 잡아먹었다. (x,y) 라고 놓고 생각하면 x가 음수방향으로 움직일 때, 양수방향일 때.. 생각으로 빠지게된다. 각 행과 열을 연결했으므로 동그랗게 연결..
[ 벌크성 수정 쿼리 ] - 모든 멤버의 나이를 1씩 증가시켜줘 ! 할때 쿼리 한번으로 쭉 1씩 더해주는게 효율적일 때 벌크연산을 한다. ※ 주의 ※ 벌크성 수정,삭제 쿼리는 @Modifying 어노테이션을 꼭 넣어주어야하고, 만약 벌크 쿼리를 날린 후, 다시 조회해야한다면 꼭!! 영속성 컨텍스트를 초기화 해주어야한다. ** 벌크 연산은 영속성 컨텍스트를 무시하고 직빵으로 DB에 반영하기 때문에, 영속성 컨텍스트에 있는 엔티티의 상태와 DB에 있는 엔티티의 상태가 달라질 수 있다. ** ※ 권장 방안 ※ 1. 영속성 컨텍스트를 clear해준 후 엔티티가 없는 상태에서 벌크 연산을 먼저 수행한다. 2. 부득이하게 영속성 컨텍스트에 엔티티가 있으면, 벌크 연산 직후 영속성 컨텍스트를 초기화한다. -> @Mo..
실무에선, Total Count 쿼리 때문에 성능이 안나오는 경우도 있기 때문에,Page 쓰는걸 고려해봐야한다고 한다. 성능 테스트해보고 성능 안나오면 count 쿼리를 분리해보자! total count 쿼리는 어쨌든 DB에 있는 모든 데이터를 카운트해야하므로 매우 무겁다. member와 team이 양방향 연관관계가 걸려있는 상황일 때, member를 가져올 때, 어쨌든 데이터를 쿼리하는건 team을 같이 조인해서 가져와야한다. @Query(value = "select m from Member m left join m.team t") Page findPageByAge(int age,Pageable pageable); 다음을 실행시키면 이런 쿼리로그를 볼 수 있다. select 쿼리에서 jo..