ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [패스트캠퍼스 학습1지] 올인원 패키지 : Java 웹 개발 마스터 - 5주 차
    카테고리 없음 2020. 3. 5. 05:00

    Java웹 개발 전문 의사-퍼스트 캠퍼스 학습밖에에서 5주 차 ​-5주째 메모-03. 스프링 부 프로젝트(관리 페이지 만들기)04.POSTHTTP-POST Method-주소 란에, 파라미터가 노출되지 않았다. - 주소창에 사용자 요구사항이 노출되지 않음 - Get 방식으로는 주소 길이 제한이 있지만, POST는 그보다 오래 사용 가능(제한 존재) - 브라우저가 주소 캐시를 할 수 없는 특성이 있다. ​@RequestMapping("/api")//메소드의 매핑의 주소가 같으면 실행할 수 없지만, 반, 매핑, 주소가 같은 것은 실행이 된다.?​ POST-HTML

    , ajax의 검색 등 사용-그래서@RequestBody SearchParam searchParam처럼 객체를 주로 밧소리-http post body->data-json, xml, multipart-form/text-plain​ ​ 크롬 확장 프로그램 rest client검색하고 게재도 많이 다운 받은 Talend API Tester-Free Edition(제공자:Talend)아서...!(이름은 다른 경우가 있는 소리. 강의와 다름) → request, response의 주고받는 확인을 지원하는 툴 Talend APITester에 들어가서 만든 클래스 run 시키고 주소를 입력하면 get, post 메서드, 모두 자주 주고받는 소리와 같은 소리. 전달되는 content-type가 application/json인 것이 기본값인가-!! @PostMapping(value="/postMethod")@PostMapping(value="/postMethod", produces={"application-json"})​ json-이런 형식을 스토리함{"account":"aaaa","email":"ppppp@gamail","page":50}​ ​ HTTP-PUT/PATCH Method-POST와 같이 BODY에 데이터가 들어 있으며 주로 업데이트에 사용한다. HTTP - DELETE Method - Get와 마찬가지로 주소에 파라미터가 들어간다.덧붙여 데이터를 삭제할 경우에 사용한다. REST 개념 HTTP 프로토콜에 있는 Method를 활용한 아키텍처 스타 중 하나입니다. - HTTP Method를 통해 Resource를 처리한다. CRUD에 의한 Resource 조작을 할 때 사용한다. HTTP Method - 동작 - URL 형태 GET - 조회 (SELECT * READ) - /user/{id} POST - 발생 (CREAT)E) -- / user PUT / PATCH - 수정 (UPDATE) / CREATE - / user DELETE - 삭제 (DELETE) - / user / {하나}


    >


    05.springboot와 rest apiSpring-자바 웹 개발을 편하게 대해 주신 오픈 소스 프레이이다 워크-예전에는 라이브러리를 설정했어야 했는데 버전 충돌이 1오나오료우오쯔 sound.-그런데 스프링 부는 사용하는 라이브러리를 사전에 내장되고 있어 쉽게 어노테이션에 개발할 수 있는 경량 프레이이다 워크-스프링은 이런 스프링 부트와 톰캣을 포함하고 있는 sound. ​


    >


    06.Lombokintellij파일->설정->plugin 들어 설치하는[Lombok]-기본 생성자와 겟셋메사ー도까지 모드 만들어 주는 어노테이션을 사용할 수 있는 것~!!(코드도 생략되고 쉽게 된 것)​@Data public class SearchParam{private String account;private String email;private int page;}​ 07.JPAJPA-ORM(Object Relational Mapping)에서 RDB데이터베이스의 정보를 객체 지향적이고 손쉽게 활용할 수 있도록 도움을 준 도구입니다. -Object(Java개체)과 Relation(관계형 데이터베이스)의 2개의 매핑을 통과 하고 더 쉽게 적용할 수 있는 기술을 공급한다. 역시 쿼리에 집중하기보다는 오브젝트에 집중함으로써 보다 프로그래밍적으로 많이 활용할 수 있다.08.Entity의 생성과 RepositoryEntity Camel Case:단어 표기 첫 글자가 소문자로 시작하며 띄어쓰기의 대신(대문자)에 단어를 구분-Java의 변수를 선언할 때 camelCase에 선언합니다. ex) phone Number, created At, updated At Snake Case: 단어를 표기할 때 모드 소문자로 표기하고 띄어쓰기 대신 (_)으로 표기 DB 칼럼에 사용되는 ex) phone_number, created_at, updated_at API를 정의하기 때문에 다르지만 주로 API 통신 규격에는 구간에서는 Snake Case를 많이 사용합니다. Entity: JPA에서는 테이블을 자동으로 생성해 주는 기능 존재DB Table==JPA Entity​ Annotation-용도@Entity-해당 Class가 Entity입니다.을 명시@Table-실제 DB, 테이블의 이름을 명시@Id-Index primary key를 명시@Column-실제 DB Column의 이름을 명시@GeneratedValue-Primary key식뵤루키의 전략 설정 ​ ​@Entity//==table//@Table(name="user")//클래스 이름이 동일하면 안 써도 된다(자동 매칭)public class User{//JPA에서 자동으로 변수 이름 매칭 시키는//phone_number(db)->phoneNumber(JPA)}Jpa의 Entity및 column은 자동적으로 camelcase -> DB의 snake_case에 매칭 한다. ​@Data@AllArgsConstructor@Entity public class User{@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private LONG id;private String account;private String email;private String phoneNumber;private LocalDateTime createAt;private String createBy;private LocalDateTime updateAt;private String updateBy;}​ ​ ​ Repository-따로 크오림은를 작성하지 않고도 기본적인[CREATE:생성, READ:독서(SELECT), UPDATE:업데이트, DELETE:삭제]이 가능함과 사용법:@Repository를 달고 JpaRepository<>을 상속 받으면 된다. ​ package com.example.study.repository;​ import com.example.study.model.User;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.stereotype.Repository;​@Repository public interface UserRepository extends JpaRepository{}​ 09.JPA을 통한 CRUD학습·하나_한@Autowired//Dependency Injection(DI)//기본적으로 싱글 튼//Repository작라고 쓸 때 객체, 모두 자신 느타 숨 ​ ​ LocalDateTime.now():현재의 시간 ​@Test 한다면 그 부분만 run하고 확인할 수 있다는 것 ​ resource->application.properties에 spring.jpa.show-sql=true(원래 기본 값은 false)출력과 sql문의 동작까지 다 볼 수 것 ​ 하나 0.JPA을 통한 CRUD학습·하나_2repository의 findById()는 Optional< 받은 것 Optional는 있을지도 모르고, 없는 가능성도 있음. 그러니까 어떤 때만 출력한다.if Present를 쓰는 user.if Present(select User->{ System.out.println('user:'+select User);}); 하나하나.JPA을 통한 CRUD를 배우-2면 후와크히 값이 진정하지 않으면 안 될 때 Assert.assertTrue(user.isPresent()//true의 경우만 통과면 후와크히 값이 거짓이 아니면 안 될 때 Assert.assertFalse(deleteUser.isPresent()//false의 경우만 통과->통과 못하면 오류 발발 ​@Test@Transactional하면 테스트 실행 결과를 다시 Rolled back 하고 줌//delete시험할 때 유용 ​ 하나 2.JPA관련 관계 설정 JPA관련 관계 Annotation@OneToOne:일대일@OneToMany:한쌍 다@ManyToOne:다데일@ManyToMany: 크다 mysql이 DatabaseReverse Engineer를 눌러 설정하면 workbench에서 ERD(Entity Relations)hip Diagram)를 설정할 수 솔기에챠은이 쟈싱 타남, 반대로 Database->Foward Engineer선택하여 설정하면 ERD를 테이블에 가능한 것 ​ 하나 4.JPA관련 관계 설정을 배우-코딩하는 것-2관련 관계 설정 시에는 객체의 이름을 적어 줘야 할 User(Entity)orderDetailList와 OrderDetail(Entity)의 user연결시키는 것 ​//N:하나@ManyToOne private User user;//orderDetail의 user_id를 찾은 것 ​//하나:N@OneToMany(fetch=FetchType.LAZY, mappedBy="user")private ListorderDetailList;​ ​ 관계 변수에 관해서는 빼는 게 좋은 일(충돌할 수 있음)@ToString(exclude={"user","item"})​ ​ 이렇게~sql크오림은이 없는 JPA관련 관계를 통하여 객체를 가져올 수 있다.​ 하나 5.JPA관련 관계 설정을 배우-QueryMethodJPA QueryMethod-예)OptionalfindById(String id)->select*from user where id=?-예 2)OptionalfindByAccountAndEmail(String ac, String e)->select*from user where account=?and email=?​ 변수 이름은 차례로 매칭이므로 Account ac함께 반드시 이름이 같지 않으면 신, 기본적으로는 변수 이름과 칼럼 이름을 같은 이름으로 쓰고 권 햄 ​ ​는 패치 타입(LAZY=지연 로드, EAGER=즉시 로드)fetch=FetchType.LAZY//LAZY=별로 메솟드로 호출하지 않는 한 호출하지 않는 // SELECT*FROMitem where id=? fetch=FetchType.EAGER//EAGER=연관 관계가 설정된 모든 테이블에 대해서 Join이 일어난 것//성능 저하, 호출 실패 우려//item_id=order_detail.item_id//user_id=order_detail.user_id//where item.id=?​. 연관 관계 쓸 때는(@OneToMany@ManyToMany)LAZY를 사용하고 장려하고 EAGER는 하나:하나@OneToOne의 경우, 예를 들어@ManyToOne할 때 사용하고 바라​ ​ 하나. ERD설계 2.Table생성 3.Entity생성 4.Repository생성 5.Repository시험 6. 관계 설정 7. 필요한 Query Method생성 ​ ​


    >


    16. 기획자로 하겠다는 비법 기획자가 한개 1. 서비스 기획 2. 사용자의 Flow및 전체적인 서비스의 안내 3.DB ERD기초 설계, 서비스의 방향 4)내부 Flow및 서비스의 필수 기능 정의 5. 관리 설계 ​ 기획자의 flowchart를 보고db ERD를 만들 수 있어야 함(즉, 흐름도 읽을 수 있어야 합니다.)​ 19.Entity와 Repository설정-2mysql이다.IDENTITY@GeneratedValue(Strategy=GenerationType.IDENTITY)​ 20.category user테이블 테스트.find First By Phone Number Order By Id Desc("");Id의 내림차순 정렬에서 "의 폰 번호 값을 검색하는 것에 하나 이상의 파 하나 찾으면 최상위 결과를 찾는다. ​ 24. 관계 설정-1User Entity에 user1은 n의 ordergroup을 가질 수 있으므로@OneToMany(fetch=FetchType.LAZY, mapped By="user")private Listorder Group List; 만들자~!! ​ User클래스의 상단에@ToString(exclude={"orderGroup"}도 하기 ​ 반대로 OrderGroup Entity에는 n:1user이라@ManyToOneprivate Long user;추가. OrderGroup클래스의 상단에도@ToString(exclude={"user"}도 하고 주는 곳에서 한쪽만 걸어 줘도 상관 없도록(안정성에 두는 것)​ ​ Optional<>을 사용하면 nullPoint을 방지할 수 있는지 소리 ​ ​ 26.JPA의 추가 기능@Configuration@EnableJpaAuditing public class jpaConfig{}클래스와@Component public class LoginUserAuditorAware implements AuditorAware{//getCurrentAuditor()오보 라이디은}클래스 만들기 ​ AdminUser클래스의 상단에는@EntityListeners(AuditingEntityListener.class)​ 자동 생일@CreateDate@CreateBy자동 업데이트@LastModifiedDate@LastModifiedBy​ ​ lombok을 이용한 생성자 확인 ​ User클래스에는@Builder추가 userRepositoryTest)User u=User.builder().password(password)."status(status)""email(email)". build();​ User클래스에@Accessors(chain=ture)을 붙이면 user.setEmail(""). setPhonNumber("").setStatus("";나이는 Useru= 새로운 User.setEmail(')).setAccount(').setPassword(' ); 등이 가능


    7-1 Front-end개발자와 일하는 방법 파라미터 json형식으로 통지 반환 ​ request, response대표의 정리+sample7-2 CRUD인터페이스 정의와 ResponseBody콤통브 작성 api통신 가끔은 string을 쓰​@JsonProperty에 이름 지오쥬루스잇 소리 ​는데 논문을 쓰는 것 많으면 application.properties에 가서 string.jackson.property.naming.strategy=SNAKE_CASE​ 9-01.JPA Enum형태의 가격 관리-1코드리 팩터링은 외부 기능은 동일하게 작동하지만 내부적으로 좀 더 확실하는 방법-null point가 나쁘지 않는 아지 없이 그림과 같이 지원-외부 동작을 바꾸지 않고 내부 구조를 개선하는 방법 대표적인 status//registered/unregistered/waiting을 enum 클래스로 할 수 있기 때문에. ​@Getter@AllargsConstructor public enum UserStatus{REGISTERED(0,"등록","사용자 등록 상태"), UNREGISTERED(1,"해약","사용자 헤육지테"):private Integer id;private String title;private String description;}​ ​ 서비스에 적용하는 법@Enumerated(EnumType.(STRING)private UserStatus status;//registered/unregistered/waiting"REGISTERED"가 아니라 UserStatus.REGISTERED에서 사용치가 정해지고 있는 String변수는 enum클래스를 사용하면 이렇게 쓰면 오자 등 오류를 막을 수 있다. ​ 9-02.JPA Enum형태의 가격 관리-2 원하지 않는 값, 예상 못한 값이 들어오는 것을 막잇소리 ​ 9-03.Controller추상화의 적용하는 선조들 클래스를 만들어 인터페이스 메서드를 재정의 public abstract class CrudControllerimplements CrudInterface{}각각의 앱으로 일일이 controller를 쓰지 않고 조상 반에서 controller클래스를 따로 만들어 컨트롤 클래스에 요청 응답 하는 베이스 서비스를 섞어 만든다는 것인가?​ 베이스 서비스는 각 하위 클래스에서 앱의 서비스를 상속하고 연결시키고사용 ​ 10. 샘플 데이터 생성하는 sql문 truncate table테이 불면;-데이터 초기화 ​ sql dump파일에서 데이터 import할 수 잇 소리 ​ 11. 페이징 처리-1sql페이징 처리 select*from study.user where 1=1 limit 0,10;​#limit몇번째 인덱스에서 몇개까지;#0~->1 button(0)#10~->2 button(1)#20~->3 button(2)​#id내림차순 페이징 select*from study.user where 1=1 order by id desc limit 0,10;​ 스프링에 Pageable개체가 잇소리@PageableDefault사용하고 세부 설 정헐스잇 소리


    >


    12. 스프링 부 프로젝트를 마치고 우리가 공부한 부분 1.spring MVC 2.MySQL테이블 설계 3.Work Bench 4.JPA​ 추가로 알면 좋은 부분 1.Spring Security 2.MyBatis 3.Front-End​


    댓글

Designed by Tistory.