목록Spring Boot (37)
DevKim
🔗 @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..
1. 실무에서는 가급적 Getter은 열어두고, Setter은 닫아주자 - 실무에선 엔티티를 조회 할 일이 너무 많으므로, Getter의 경우엔 열어두는 것이 좋다. 단, Setter를 막 열어두면 나중에는 엔티티가 도대체 어디서 왜 변경되는지 추적하기가 힘들어진다. 그래서 엔티티를 변경할 때는 Setter 대신에 변경 지점이 명확하도록 변경을 위한 비즈니스 메서드를 별도로 제공해야한다. (유지 보수성이 올라감) 2. 실무에서 @ManyToMany는 '절대' 사용하지 말자. - 편리한 것 같지만, 중간 테이블에 컬럼을 추가할 수 없고, 세밀하게 쿼리를 실행하기 어렵기 때문에 실무에서 사용하기에는 한계가 있다. 일대다,다대일 매핑으로 풀어내서 사용하자 3. FK가 있는 곳을 연관관계의 주인으로 정해라 4...
Test code를 돌려 테스트를 해보던 중, 하나에서만 'JUnit Vintage'라는 오류가 발생했다. [ 해결 방법1 ] - 오류가 나는 해당 클래스의 public을 지워줬다. [ 해결 방법2 ] Test가 이렇게 import 되어있다면, import org.junit.Test; 으로 변경해주면 된다. 생했다
[01] 회원 엔티티 생성 [02] 회원 리포지토리 @PersisenceContext : Entity manager 주입 *** save 메소드에서 member를 반환하지 않고, 귀찮지만 id를 반환하는 이유 *** "command와 query를 분리하라" 원칙에 의해.. 이건 side effect를 일으키는 command성이기 때문에, return 값은 거의 만들지 않는 것이 좋다. 대신에 id 정도 있으면 다음에 다시 조회할 수 있으니까, 이렇게 id정도만 조회하는 것으로 영한님은 주로 설계하신다고 한다. CQRS 명령 - 질의 책임분리 CQRS는 Command and Query Responsibility Segregation(명령과 조회의 책임 분리)을 나타냅니다. 이름처럼 시스템에서 명령을 처리하..
만약.. 모든 메서드에 대해 시간을 측정하고자 한다면 ? [ 문제 ] - 회원가입,회원 조회 같은 비즈니스 로직은 "핵심 관심 사항"이다. - 그러나, 시간을 측정하는 로직은 "공통 관심 사항"이다. - 시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 유지보수가 어렵다. - 시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어렵다. (시작,끝 점에 모두 시간을 측정해야하므로) - 시간을 측정하는 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 한다 (분 단위로 보다가 초 단위로 변경하려면 모든 로직을 찾아서 일일이 찾아서 변경해야함) [ 해결 ] AOP : 공통 관심 사항(cross-cutting concern) 과 핵심 관심 사항(core concern) 분리 [ 시간 측정 AOP 등록 ..
[ 홈 화면 추가] [ 회원 등록 ] input 태그 안에 name이 서버로 넘어올 때의 key값이다. [실제 회원 등록 기능] 1. 등록 버튼 눌렀을 때 , 웹 화면에서 데이터를 전달 받을 폼 객체 ( 원래는 DTO로 받는다고 알고 있었는데, 일단 강사님은 기본적으로 이렇게 만드신 것 같다) 2. 실제로 회원을 등록하는 기능 "redirect:/" = 홈 화면으로 돌아가기 위해서 [ 회원 조회 ] member 리스트 자체를 model에 담아서 view template에 넘김 each="member : ${members}" 객체를 하나 가져와서 member에 담음 *자료 출처* 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한)
* 의존 관계가 있다는 것은? - 화면을 붙이고 싶은데, 그러려면 Controller와 view template이 필요하다 -> 그러려면 memberController를 만들어야함 -> memberService를 통해서 회원가입을 하고, data를 조회할 수 있어야함 -> 의존관계가 있다고 표현 [스프링 빈을 등록하는 2가지 방법] 1. 컴포넌트 스캔과 자동 의존관계 설정 2. 자바 코드로 직접 스프링 빈 등록하기 지금까지 1번만 사용했었는데, 영한님 말씀으론 둘다 알아야한다고 하신다. [ 컴포넌트 스캔과 자동 의존관계 설정] 1. 먼저 MemberController를 생성하고 의존관계를 추가해보았다. 생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. 이렇..