목록전체 글 (547)
똑같은 삽질은 2번 하지 말자
지정된 값 이외의 값이 들어왔을때, 지정된 값이 들어오지 않았을 때 @Test public void createEvent_is_BadRequest() throws Exception { Event event = Event.builder() .id(100) // 들어오면 안되는 값 .name("Spring") .description("REST API") .beginEnrollmentDateTime(LocalDateTime.of(2020,6,28,14,11)) .closeEnrollmentDateTime(LocalDateTime.of(2020,6,29,14,11)) .beginEventDateTime(LocalDateTime.of(2020,6,30,14,11)) .endEventDateTime(LocalDat..
도메인 구현 @Builder @AllArgsConstructor @NoArgsConstructor // public default 생성자 @Getter @Setter // @Data에는 EqualsAndHashCode가 기본적으로 정의되어있어서 겹침 @EqualsAndHashCode(of = "id") // 기본적으로 객체의 모든 필드로 Equals, HashCode를 비교하는데 그럼 // 나중에 연관관계에서 (상호참조하는) StackOverFlow가 발생할 수 있으므로 ID로만 비교한다. public class Event { private Integer id; private String name; private String description; private LocalDateTime beginEnro..
https://www.youtube.com/watch?v=RP_f5dMoHFc 영상의 내용을 간략히 하면 현재 REST API라고 주장하는 REST API들은 조건들을 만족하지 않는다. 이다. 그럼 어떤 조건들을 만족하지 않는가? 1. Self-Describtive Message 2. HATEOAS(Hypermedia as the engine of application state) 이 두가지를 모두 만족하는 REST API는 드물다고 하신다. Self-descriptive message 메시지 스스로 메시지에 대한 설명이 가능해야 한다. 서버가 변해서 메시지가 변해도 클라이언트는 그 메시지를 보고 해석이 가능하다. 확장확장 가능한 가능한 커뮤니케이션 커뮤니케이션 HATEOAS 하이퍼미디어(링크)를 통해 ..
Vuex 란? 무수히 많은 컴포넌트의 데이터를 관리하기 위한 상태 관리 패턴이자 라이브러리 React의 Flux 패턴에서 기인함 Vuex 라이브러리의 등장 배경인 Flux패턴? Vuex가 왜 필요할까? 복잡한 애플리케이션에서 컴포넌트의 개수가 많아지면 컴포넌트 간에 데이터 전달이 어려워진다. Vuex로 해결할 수 있는 문제 1. MVC 패턴에서 발생하는 구조적 오류 2. 컴포넌트 간 데이터 전달 명시(각각의 컴포넌트에 따라 전달해오는 데이터를 한눈에 파악가능) 3. 여러 개의 컴포넌트에서 같은 데이터를 업데이트 할 때 동기화 문제
광고차단기에 차단되는게 많아서 꺼보았는데, 영상 재생이 되네요...음?
post로 온 데이터를 파싱할때, bodyParser var bodyParser = require('body-parser'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended:true})); app.post('/email_post', function(req,res){ console.log(req.body.email); }); json -> json 데이터를 받을 수 파싱할 수 있게됨 urlencoded -> 클라이언트에서 인코딩된 데이터를 파싱할 수 있게됨. 순수 자바스크립트로 짠 ajax 처음 봐서 스샷첨부 응답 메소드 다음 표에 표시된 응답 오브젝트에 대한 메소드(res)는 응답을 클라이언트로 전송하고 요청-응답 주기를 종료할 ..
$ npm install nodemon -g 코드 변경을 자동으로 감지해서 서버를 올렸다 내렸다하는 플러그인 -g : 내 pc의 어느 디렉토리에서든지 사용한다는 말 사용법 $ nodemon app.js $ nodemon app.js localhost 3000 $ nodemon --debug app.js 80 Routing 처리 app.get('/', function(req,res){ res.sendFile(__dirname + "/public/index.html"); }); __dirname : node에서 현재 파일의 경로를 제공해주는 변수 static 디렉토리 설정 (해당 디렉토리 안에 있는 파일들이 자동으로 등록) app.use(express.static('public'));
select * from board SELECT P.* FROM (SELECT * FROM BOARD WHERE B_TITLE LIKE CONCAT('%',#{searchKeyword},'%') ORDER BY B_CODE ASC) AS P LIMIT #{perPageNum} OFFSET #{pageStart} select count(*) from board INSERT INTO BOARD(b_title,b_content,b_writer,b_kind) VALUES( #{b_title}, #{b_content}, #{b_writer}, #{b_kind, typeHandler = org.apache.ibatis.type.EnumOrdinalTypeHandler} ) DELETE FROM BOARD WHERE..
잘 정리된 PDF파일이 있어서 작성 안할려고 했는데, 뭔가 문서화를 내 손으로 안하면 찜찜해서 조금이라도 적어보려고 한다. 이번 강의에서는 REST API를 개발할 때, 성능최적화를 하는 방법들에 대해서 인데, 제일 중요한건 엔티티를 웹에 노출해서는 안된다! 솔직히 이 한마디로 이번 강의 전체가 들어 있다고 보면 될꺼같다.. 그럼 어떻게 해야하나? 간단하다. 별도의 DTO를 만들어서 거기서 조회한 엔티티를 넣어서 반환해 주면 된다. ex) // 조회 API @GetMapping("/api/v2/members") public Result membersV2() { ListfindMembers = memberService.findMembers(); Listcollect = findMembers.stream()..
주로 Rest API를 처리할 때, 많이 쓰이고 밑의 코드와 같이 구분자로 구별한다. 최근 동향은 죄다 API API이니깐 잘 알아두고 써먹자! 참고로, Spring에서는 이러한 전달인자를 처리하는데 두 가지 방법을 제공하는데, 또 다른 방법으로는 @RequestParam 이 있다는거~ @PutMapping("/api/v2/members/{id}") public UpdateMemberResponse updateMemberV2(@PathVariable("id") Long id, @RequestBody @Valid UpdateMemberRequest request) { memberService.update(id,request.getName()); Member findMember = memberService...