2019-07-30 [Spring-study] DB없이 회원가입 및 목록 기능 구현
30 Jul 2019 | java springDB없이 회원가입 및 목록 기능 구현
공부한 내용
###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
}
- ``
~
or~
-
}
-> html 를 string으로 출력 ~
~
-> for 문- …mustache 공식문서 http://mustache.github.io/mustache.5.html
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 참고 자료
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 규칙 **
-
URI는 정보의 자원을 표현해야함 ( 리소스명은 동사보다는 형용사 )
GET /members/delete/1
=> x delete와 같은 행위에 대한 표현이 들어가면 안됨. -
자원에 대한 행위는 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 설계 주의 사항
/
는 계층 관계를 나타내는 데 사용- 마지막에
/
를 포함하지 않는다. -
(하이픈)을 통해 가독성 UP_
(언더바)는 사용하지 않는다.- URI 경로에는 소문자가 적합하다
- 파일 확장자 불포함
리소스 간의 관계 표현
/리소스명/리소스 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 구조
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