본문 바로가기

CS 잡지식

CQS(Command Query Separation) Policy Command : 상태(필드, 객체 등)를 [수정]하는 메서드 Query : 상태(필드,객체 등)를 반환하는 메서드 -> 즉 [수정] 메서드를 정의를 할 때를 Command라고 하며, [수정] 메서드가 아니더라도, 어떠한 메서드에 있어서 무언가를 반환하는 메서드를 Query라고 한다. - Command와 Query는 철저하게 분리시켜서 설계를 하자 - public void update(Long id, String name) { // [회원 수정] Rest API Member findMember = memberRepository.findOne(id); findMember.setName(name); // return member; } 위와 같은 Command가 있다고 하자. 근데 반환형을 void로 말고, .. 더보기
@AllArgsConstructor과 @RequiredConstructor의 차이 @AllArgsConstructor : 모든 [매개 변수의 경우의 수]에 대한 [모든] 생성자를 자동 생성. 모든 [매개 변수의 경우의 수]에 대한 [모든] 생성자를 자동 생성. @RequiredConstructor : @Data에도 포함이 돼 있으며, [final] 키워드가 붙은 매개변수에 대해서만 생성자를 자동 생성 공통점 : 둘다 jakarta.validation 패키키에서 제공하는 기능! 더보기
실무에서 API 개발 시, 주의 사항(Rest API는 절대 [도메인 엔티티]로 Json을 매핑 or 반환해서는 안된다) [Spring, JPA]를 이용한 API 개발 시에는, 그 만의 주의점이나 특징들이 잇다. 이 게시물에서는 [Spring, JPA]를 사용하기 때문에 생기는 특징들에 대해 주목해 보자. 1] JSP,ThymeLeaf 등의 템플릿 엔진을 이용해서 [html 페이지]를 전달하는 API Controoler 패키지와 2] JSON 등의 객체 메시지를 전달하는 API(Rest API) Controller의 패키지를 분리를 한다고 한다(PostMan을 적극 사용해 야 함. html 페이지가 전달되는 것이 아니기 때문에 브라우저로 API를 호출하고 하는 것보다는 POSTMAN을 사용하는 것이 더 좋 다) 이유 1] 페이지를 전달하는 API와 JSON 객체를 전달하는 API는 서로 적용해야 할 [공통 예외 처리]가 다.. 더보기
DB에 저장(save)를 하고 나면, 반드시 id값을 반환을 하자!! public Long join(Member member){ validateDuplicateMember(member); memberRepository.save(member); // DB에 Member 객체 저장. return member.getId(); // 저장된 Member 객체의 id값 반환 } 개발을 하다가 보면, DB에 [저장]하는 것이 아니다. DB로 부터 [조회/삭제/수정] 기능도 사용을 한다. 근데, DB로부터 데이터를 가지고 올 때, 어떤 방식으로 가져와야 하나?? JPA 입장에서는 저장된 해당 객체의 ID값으로 객체를 구별하여 , 그 구별된 객체를 [조회/삭제/수정]을 한다. 고로, 저장을 시킨 뒤에는 꼭 [식별자]인 ID값을 반환하여 가지고 있자. 더보기
스프링 부트 3.X.X 버전에 따른 설정 변경 1.[JAVA 17] 사용해야 한다. 2.[javax] 패키지 이름을 [jakarta]로 변경하기로 정함 -> 오라클과 자바 라이센스 문제로 모든 javax 패키지 이름을 jakarta로 변경하기로 했다고 한다. 3. H2 데이터베이스의 버전이, [2.1.214] 이상이여야 한다. 더보기
JPA [수정(update)]의 2가지 전략(feat. dirty checking, 병합(merge) ) JPA의 [준영속 엔티티]에 대한 [수정(update)] 전략은 2가지가 있다. (영속 엔티티라도 전략은 같음) 준영속 엔티티 : Context가 더 이상 관리하지 않는 엔티티. -> 아래의 코드에서 보듯이, 임의로 만든 엔티티여도 [기존 식별자]를 가지고 있으면, [준영속] 엔티티라고 볼 수가 있다. 특징은, Context에서 관리되었던 엔티티의 [식별자]를 가지고 있다는 것! 1] 변경 탐지(dirty checking) 2] 병합(merge) : 절대로 사용하면 안 됨(이유는 아래에서 천천히 설명을 함) -> JPA는 변경 탐지(Dirty Checking)을 [수정]의 전략으로 권장하는 [수정]의 Best Practice이며, 강사 왈 "병합(merge)는 실무에서 거의 사용하지 않는다" 라고 하심... 더보기
ThymeLeaf의 getter,setter 접근법(feat. *{객체의 속성}) @Getter@Setter public class MemberForm { @NotEmpty(message = "회원 이름은 필수입니다") // validation 라이브러리 추가해야 함! private String name; private String city; private String street; private String zipcode; } @Controller @RequiredArgsConstructor public class MemberController { // [회원 가입] 페이지를 위한 controller. //1] 회원 가입 페이지를 보여 주고, private final MemberService memberService; @GetMapping("/members/new") private .. 더보기
view resource 등록하는 법(feat. bootstrap,jumbotron-narrow.css) https://getbootstrap.com 위 사이트에서 view resource인 boot-strap을 다운 받아서, html에 css를 덧붙여서 view를 이쁘게 만들어 줄거다. 이용할 view Resource 1] 위 사이트에서 다운로드한 bootstrap-5.0.2 버전 2] 강의자료에 제공돼 있는, jumbotron-narrow.css(아래 부분에 css 코드 넣어 둠) 위 그림에서는 버전이 4.3.1이지만, 난 V5로 하였다. 다운로드한 것을 아래 그림에 나와 있듯이, resources/static에 복/붙을 해준다. 그러나 가끔가다가 복/붙을 하면 잘 적용이 되지 않을때가 있다. 그럴 떄는 아래와 같이, 다시 build를 하고 서버를 재시작 해보자. bootstrap을 적용을 해도, 뭔가 .. 더보기