1. 도커(Docker)란 ? Docker란 Go언어로 작성된 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼이다. 일단 컨테이너는 제껴두자. 오픈소스 가상화 플랫폼을 생각하면 떠오르는 것이 VMware이다. VMware안에 우분투를 설치해서 돌렸던 경험이 있지만, 왜 가상화 플랫폼을 사용하고 가상화가 작동하는 원리에 대해선 모르고 무작정 따라했었다. 그 때는 위 질문들을 답할 필요가 없었지만, 도커의 핵심인 컨테이너를 알기 위해선 가상플랫폼의 원리를 알아야 하고, 도커(Docker)가 과거보다 얼마나 편리하기에 많은 개발자들에게 사랑을 받는지 알려면 짚고 넘어가야 할 필요가 있을 것 같다. 2. 돈이 많으면 가상화를 몰라도 된다 ? 가상화란 전통적으로 하드웨어에 종속된 리소스를 사용해 유용한 IT..
api는 만들었는데 프런트가 없는 경우, 사이트프로젝트를 한 번 해봐야 하긴 하는데 프런트까지 신경쓰려면 공부할 양이 너무 많아져서 미루고 api만 잔뜩 만드는 경우, 어떻게 프런트 작업까지 완료를 했어도 api 끌어와서 퍼블리싱까지, 신경쓸 일이 너무 많다. 이러한 상황에 Thymeleaf를 적용하여 쉽게 뷰를 만들 수 있다. 맨날 Postman에서 확인하는 과정보다 훨씬 백엔드 api 개발에 재미를 붙일 수 있다. 이번 포스팅에서는 Thymeleaf를 적용하고 서버로 들어온 데이터를 화면에 출력해보자. 1. 작업 결과 미리보기 thymeleaf를 적용하여 간단하게 게시판을 구현해보았다. 디자인은 bootstrap을 가져왔다. 2. Thymeleaf 적용하기 Thymeleaf는 뷰 템플릿이기 때문에 의..
1. 사람들이 Optional 쓰는 방법 Optional이 나온 이유부터 알아보자. 이유를 모르고 쓰는 사람들은 이렇게 말한다. "null을 반환하면 그 무서운 NPE가 뜨기 때문에, Optional로 null을 가지는 변수, 또는 객체를 Optional로 묶어요. 그럼 NPE가 안떠요" 자바로 개발하면서 한 번이라도 NullPointerException을 겪은 사람은 손을 들어보자. NPE는 다양한 예외 중에서도 가장 악질로 유명한 예외이다. 그렇기에 NPE를 피하기 위해서 Optional을 사용하는 사람은 드물지 않을 것이다. 하지만 당연히 Optional이 나온 이유는 NPE를 피하기 위함이 아니다. 그럼 NPE가 얼마나 무섭길래 Optional을 쓰는 이유를 모르면서까지 Optional을 쓰며 피..
1. HTTP란 ? Hyper Text Transfer Protocol의 줄임말로 서버와 클라이언트 사이에서 데이터를 주고받는 프로토콜이다. 여기서 데이터라는 것은 이미지, 텍스트, 영상, JSON 등으로 거의 모든 데이터를 전송할 수 있다. 1-1. 만든 사람 HTTP는 월드 와이드 웹을 설계한 팀 버너스 리(Tim Berners Lee)에 의해 처음으로 설계되었다. HTTP는 www기반에서 세계적인 정보를 공유하는 데 큰 역할을 했다. 1-2 HTTP 구조 HTTP는 전송계층인 TCP 위에서 동작한다. 상태를 가지고 있지 않는 Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성된다. 1-2-1. Stateless 프로토콜 server는 cli..
유저 등록(완료) 유저 단건 조회(완료) 유저 모두 조회(완료) 유저 삭제(완료) 서비스 추상화(완료) JPA 사용(완료) Postman으로 확인(완료) H2 사용(완료) 엔티티 생성(완료) dto 생성(완료) REST API(완료) 리팩토링(진행중) 1. 컨트롤러에서 List로 응답하지 말자. findAll api를 보면 List로 응답한다. 이렇게 ArrayList형태로 나오게 된다. 즉, 배열로 나온다는 말인데 그러면 유연성이 확 떨어지게 된다. 그럼 Object형태로 나오게 바꾸자. 이렇게 result라는 필드를 만들고 이렇게 바꾸면 배열 형태가 아닌 오브젝트 형태로 감싸서 나오는 것을 확인할 수 있다. 자꾸 유연성이 떨어진다고 하는데 무슨 뜻일까 ? 좋은 에플리케이션은 좋은 기능을 구현했거나, ..
유저 등록(완료) 유저 단건 조회(완료) 유저 모두 조회(완료) 유저 삭제(완료) 서비스 추상화(완료) JPA 사용(완료) Postman으로 확인(진행중) H2 사용(완료) 엔티티 생성(완료) dto 생성(완료) REST API(진행중) 리팩토링 1. REST API 구현 2. Postman으로 확인 postman설치는 생략하도록 하겠다. postman에서 JSON으로 요청값을 보낸다. 리턴값을 Long으로 해서 1이 응답된 것을 볼 수 있다. 전체 조회를 해야하기 때문에 몇개 더 넣어보겠다. 이제 h2로 select쿼리문을 실행해보겠다. 주의: h2를 실행할 때 ./h2.sh로 하면 오류가 뜬다. ./h2.sh -webAllowOthers로 실행해주자. 이렇게 잘 들어간 것을 볼 수 있다. 그럼 전체 ..
유저 등록(진행중) 유저 단건 조회(진행중) 유저 모두 조회(진행중) 유저 삭제(진행중) 서비스 추상화(진행중) JPA 사용(진행중) Postman으로 api 확인 H2 사용(완료) 엔티티 생성(완료) dto 생성(완료) REST API 리팩토링 1. 레파지토리 구현 JPA를 사용하기 위해서 JpaRepository를 상속받는다. 안의 내용은 이다. 2. 서비스 구현 서비스를 구현해보자. 서비스 추상화를 사용할 것이기 때문에 분리해준다. Impl을 작성해보자. 리턴값은 모두 조회 로직 말고 전부 Long으로 했다. 메모를 생성하는 로직이다. 저장된 메모를 전체로 조회하는 로직이다. 메모를 단건으로 조회하는 로직이다. 메모를 수정하는 로직이다. (update메서드는 Memo 엔티티에서 확인할 수 있다.) ..
유저 등록 유저 단건 조회 유저 모두 조회 유저 삭제 서비스 추상화 JPA 사용 Postman으로 api 확인 H2 사용(진행중) 엔티티 생성 dto 생성 REST API 리팩토링 1. 프로젝트 생성 먼저 프로젝트를 생성하도록 하겠다. 사이트 spring initializr 사이트는 프로젝트를 원하는 의존성을 추가하여 생성할 수 있는 사이트이다. 아래는 4개의 의존성에 대한 설명이다. Spring Data JPA : JPA를 쓰기위함 Lombok : 반복적인 코드를 줄여줌 Web : HTTP클라이언트와 Spring의 원격 지원을 위함 H2 Database : h2를 쓰기 위함 그리고 GENERATE 를 눌러주자. Intellij를 열고 open -> generate한 폴더를 찾음 -> build.grad..
오늘은 curd를 구현해서 메모기능을 하는 간단한 서비스를 만들려고 한다. 이번 페이지에서는 프로젝트 설계를 하려고 한다. crud가 워낙 간단해서 "설계는 그냥 넘어가도 상관없지 않을까 ?" 싶지만 설계경험이 쌓이다 보면 나중에 문제가 생기더라도 쉽게 파악하여 해결할 수 있다. 1. REST API Operation HTTP method Create POST Read GET Update PUT Delete DELETE 2. URL @RequestMapping("/api/memo") CREATE: ("/create") READ: ("/findAll"), ("/find/{id}") UPDATE: ("/update/{id}") DELETE: ("/delete/{id}) 3. Data Transfer Obje..
- Total
- Today
- Yesterday