Develope Story

2019-07-30 [Spring-study] DB없이 회원가입 및 목록 기능 구현

|

DB없이 회원가입 및 목록 기능 구현

공부한 내용

###template engine

  • html = 정적 <-> tepmplate engine = 동적

###Mustache

Ex)

Hello  You have just won  dollars!  Well,  dollars, after
taxes. 
{
  "name": "Chris",
  "value": 10000,
  "taxed_value": 10000 - (10000 * 0.4),
  "in_ca": true
}

Model

  • ModelAttribute(" ") => view 로 문자열을 전달해줌

###html 중복 제거

  • base.html

<h1>Title</h1>
   
<span>Powered by Handlebars.java</span>

  • Content.html

<p>Home page</p>
content 자리에 들어갈 내용~!~!~~ 
 

###WebMvcConfigurer

@Configuration
public class MvcConfig implements WebMvcConfigurer {

  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    registry.setOrder(Ordered.HIGHEST_PRECEDENCE);

    registry.addViewController("/user/form").setViewName("user/form");
    registry.addViewController("/user/login").setViewName("user/login");
    registry.addViewController("/").setViewName("main/index");
  }
}
  • url 를 함수로 일일히 구현 x 자동으로 연결시켜줌
  • templates에있는 이름.html 실행

###Service 참고 자료

image-20190730224651019

   
Controller Request를 어떻게 처리
Service Request를 어떤 처리
Dao Data access object
VO 값을 표현하는 객체

Client — Request —> Controller —> Service

Service —> Controller —> client

  • service
    • Interface 만들어서 class 구현

Restful Api 참고자료

REST 구성

  • 자원(Resource) - URI
  • 행위(Verb) - HTTP METHOD
  • 표현(Representations)

**Rest API 규칙 **

  1. URI는 정보의 자원을 표현해야함 ( 리소스명은 동사보다는 형용사 )

    GET /members/delete/1 => x delete와 같은 행위에 대한 표현이 들어가면 안됨.

  2. 자원에 대한 행위는 HTTP Method(Get, Post, Put, Delete 등)로 표현

  • 회원 정보를 가져오는 URI

    GET /members/show/1     (x)
    GET /members/1          (o)
    
  • 회원 정보를 추가할 때

     GET /members/insert/2 (x)  - GET 메서드는 리소스 생성에 맞지 않습니다.
     POST /members/2       (o)
    
Method 역할
POST 해당 URI를 요청하면 리소스를 생성합니다
GET 리소스를 조회합니다
PUT 리소스를 수정합니다
DELETE 리소스를 삭제합니다.

URI 설계 주의 사항

  1. / 는 계층 관계를 나타내는 데 사용
  2. 마지막에 / 를 포함하지 않는다.
  3. - (하이픈)을 통해 가독성 UP
  4. _(언더바)는 사용하지 않는다.
  5. URI 경로에는 소문자가 적합하다
  6. 파일 확장자 불포함

리소스 간의 관계 표현

  /리소스명/리소스 ID/관계가 있는 다른 리소스명
  ex)GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)
  	 GET : /users/{userid}/likes/devices (관계명이 애매하거나 구체적 표현이 필요할 때)

자원을 표현하는 Colllection과 Document

http:// restapi.example.com/sports/soccer/players/13 
  • ports, players 컬렉션과 soccer, 13(13번인 선수)를 의미하는 도큐먼트로 URI가 이루어지게 됩니다. 여기서 중요한 점은 컬렉션은 복수로 사용하고 있다는 점

궁금 궁금

Spring Framework 구조

image-20190730211448228

singletone을 권장하는 이유

  • 일반적인 구조는 스레드 수만큼 객체 생성 but 스프링은 xml에 bean으로 미리 정의해 놓고 각 스레드가 자원을 공유 하면서 실행.

왜 Dao, Service에서 Interface를 사용하는가?

  • 유지보수가 편한 코드를 작성하도록 유도
  • 굳이 안 써도 된다는 의견이 많음 : 안써도 잘돌아감, 프로젝트에 따라 다름…토의 내용

리뷰

  • 종근이형

    • 다형성에 대해 알아보고 다시 반영해봤으면 좋겠습니다.
      • 다형성 : 상속을 통해 기능을 확장하거나 변경 하는 것을 가능하게 해주고, 같은 클래스 내에 코드의 길이를 줄여줌.
      • 깜박함…
    • users를 전역변수로 선언한 특별한 이유가 있을까요?
      • 전역변수(?) 멤버변수 아닌가요? 멤버변수로 선언한 이유는 1. 자바지기가 시켜서 2. db가 없기 때문에 userController에 모두 접근 할 수 있는 곳
    • @RequestMapping에 대해 알아보고 중복을 줄여보세요
      • @RequestMapping(/url) -> /url + …
    • service 레이어에 대해 알아보고 controller에서 비즈니스 로직을 분리해보세요
      • controller, service, Dao, vo 로 분리해보겠습니다
  • 혁진이형

    • Restful 관련 공부 https://meetup.toast.com/posts/92
    • url 에서 create 동사 이용 x
      • get /users -> 유저 정보를 다 가져온다
      • get /users/1 -> 1번 유저정보를 가져온다
      • post /users -> 유저 정보를 브라우저에서 서버로 날린다.
      • put /users/1 -> 1번 유저 정보를 수정한다
    • @Repository 어노테이션 공부
      • @Repository = 해당 클래스가 데이터베이스에 접근하는 클래스임을 명시
    • static -> templates 로 옮기기
    • 자바 진영에서 패키지는 소문자로

후기

웹 프로젝트 때문에 js 만하다가 오랜만에 자바로 돌아왔다. 그래서 그런가 접근제한자나 다형성 부분에서 실수가 발생하였다. 스프링를 처음 접해보았는 데 코드 구현 보다는 이노테이션 같은 부분에서 공부가 많이 필요했다. 코드를 작성하다보니 왜 이걸 이렇게 작성하지.. 왜 사용 하는 지 의문이 들었고 그 것에 대해 구글링은 해보면 공부해야 할 것들이 산더미 같이 많았다. 음.. 첫 스프링은 만족했다. 하지만 아직까지 nodejs 보다는 불편 함이 많았고 더 어렵게 느껴졌다. 최근 kotlin 에 꽂혀서 빨리 스프링을 공부하고 kotlin 으로 스프링을 구현 해보고 싶다는 생각이 들었다.

Comments