지난번에 만든 회원가입에서는 데이터베이스에 비밀번호가 그대로 저장됐다. 이번에는 DB에 비밀번호를 더 안전하게 저장하기 위해 bscrypt 를 이용해 비밀번호를 암호화한 다음 DB에 저장해 보도록 한다. 🤍비밀번호 암호화하여 DB 저장하기 1. bscrypt 설치 npm install bscrypt --save 2. npm 사이트 참고하여 User.js에 코드 작성 user 모델을 저장하기 전에 암호화를 하겠다. 그런데 매번 암호화를 하는 것은 번거로우므로, 비밀번호 변경 시에만 암호화되고 email 변경 시에는 비밀번호 암호화가 반복되지 않도록 조건을 걸어준다. next라는 파라미터를 넣어주고 next 호출 사용자의 비밀번호가 변경되었을 때에만 salt를 생성시켜준다는 문법의 genSalt 사용하여 에..
🤍nodemon이란? node monitor의 약자 노드가 실행하는 파일이 속한 디렉터리를 감시하고 있다가 파일이 수정되면 자동으로 노드 애플리케이션을 재시작하는 확장 모듈임. 개발 중인 노드 애플리케이션 소스코드를 수정할 때마다 새로 시작할 필요가 없어져서 매우 편리하다. 🤍nodemon 설치 방법 npm install nodemon --save-dev dev를 붙이는 이유는 development는 로컬에서 그냥 테스트로서 사용하겠다는 의미. 🤍npm 개념 재확인하기 npm은 node.js에서 사용 가능한 모듈들을 패키지화시켜 모아놓은 것. npm = "Node Package Modules" 웹에서 필요로하는 특정 기능들을 일일이 개발하지 않아도 이미 누군가 만들어놓은 모듈을 다운받기만 하면 되므로 개..
🤍게시판 글 목록 조회 1. index.mustache UI 변경 {{#posts}} : posts라는 List를 순회하겠다, 자바의 for문과 동일함. {{id}} 등의 {{변수명}} : List에서 뽑아낸 객체의 필드를 사용하겠다. 2. PostsRepository 인터페이스에 쿼리 추가 SpringDataJpa에서 제공하지 않는 메소드는 @Query를 사용하여 작성 가능함, 기본 메소드만으로 해결이 가능하지만 @Query가 훨씬 가독성이 좋다. @Query : 타입 안정성이 보장됨 / 국내 많은 회사(쿠팡, 배민 등 JPA를 적극적으로 사용하는 회사)에서 사용 중 / 래퍼런스가 많음.(많은 회사, 개발자들이 사용하는 만큼 국내 자료가 많음.) @Query("SELECT p FROM Posts p O..
지난번 포스팅에서 머스테치를 사용하여 첫 페이지까지 만들었다. 이제 만들어둔 머스테치에 URL을 매핑해야 한다. 1. IndexController 클래스 작성 머스테치 스타터 덕분에 컨트로러에서 문자열 반환 시 앞의 경로와 뒤의 파일 확장자는 자동으로 지정됨. 앞의 경로는 src/main/resources/templates , 확장자는 .mustache 로 전환되어 View Resolver가 처리하게 됨. 2. IndexControllerTest 클래스 작성 테스트 통과 🤍게시판 글 등록 화면 만들기 :: 부트스트랩 활용 1.레이아웃 파일 만들기 header.mustache footer.mustache 페이지 로딩 속도를 높이기 위해 css는 header, js는 footer에 위치함. HTML은 위에서..
🤍서버 템플릿 엔진이란? 템플릿 엔진이란, 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어를 이야기함. JSP, Freemarker - 서버 템플릿 엔진 / 리액트, 뷰 - 클라이언트 템플릿 엔진 서버 템플릿 엔진은 서버에서 구동됨. 서버 템플릿 엔진을 이용한 화면 생성은 서버에서 Java 코드로 문자열을 만든 뒤 이 문자열을 HTML로 변환하여 브라우저로 전달함. 반대로 자바스크립트는 브라우저 위에서 작동하기 때문에 뷰,리액트를 이용한 SPA는 브라우저에서 화면을 생성함. 서버에서는 Json, Xml 형식의 데이터만 전달하고 클라이언트에서 조립합. 🤍머스테치란? 머스테치는 루비, 자바스크립트, 파이썬, PHP, 자바 등 현존하는 대부분 언어를 지원하는 가장 심플한 템플릿 엔진임..
보통 웹 개발을 할 때 해당 데이터의 생성 시간, 수정 시간을 포함한다. 이번 쇼핑몰 프로젝트를 진행할 때에도 상품 등록 날짜, 수정 날짜가 포함되어 있었다. 이처럼 언제 만들어졌고 언제 수정되었는지 등은 차후 유지 보수에 있어 굉장히 중요한 정보이기 때문이고 매번 DB에 삽입하기 전, 갱신하기 전에 날짜 데이터를 등록/수정하는 코드가 여기저기 들어가게 된다. Java8이 나오기 전에는 Data, Calendar 클래스를 사용했지만 몇 가지 문제점이 있었고, 이제는 Java8 이후부터 LocalDate, LocalDateTime을 사용할 수 있다. 🤍1. BaseTimeEntity 클래스 생성 모든 Entity의 상위 클래스가 되어 Entity들의 createdDate(생성 날짜), modifiedDat..
domain 패키지 : 도메인을 담을 패키지, 여기에서 도메인이란? 게시글, 댓글, 회원, 결제 등 소프트웨어에 대한 요구사항 혹은 문제 영역에 해당됨. 기존 MyBatis에서 dao 패키지 역할과 비슷함. 단, 기존에는 xml에 쿼리를 작성하고 클래스에서 쿼리의 결과를 담았다면 이제 모든 것이 도메인 패키지에서 해결됨. Web, Sercice, Repository, Dto, Domain 5가지 레이어 중 비지니스 처리를 담당할 곳이 바로 Domain. 기존에는 모든 로직이 서비스 클래스 내부에서 처리됐기 때문에 서비스 계층이 무의미했으나 도메인 모델에서 처리할 경우 각자 본인의 이벤츠 처리를 하며 서비스 메소드는 트랜잭션과 도메인 간의 순서만 보장해 준다. 테스트 코드 작성 패키지 구조 🤍1. Post..
12월 중순부터 2월말까지 열심히 학원 팀프로젝트를 진행했다. 진행하면서 느낀 점은 웹 개발과 DB가 정말 뗄레야 뗄 수 없는 관계구나...생각했다...ㅎㅎ 코드 한줄 한줄 짜는 것만큼 쿼리문 한줄 한줄 짜는 것도 정말 어렵고 복잡했는데 스프링부트에서는 JPA라는 새로운 데이터베이스 기술을 사용하고 있다고 한다. 쿠팡, 우아한형제들 등 자사 서비스를 개발하는 곳에서는 SpringBoot&JPA를 전사 표준으로 사용하고 있다고 한다. 🤍JPA란? 기존 데이터베이스 방식은 객체지향 프로그래밍에서 조금 벗어난, 데이터베이스 모델링에만 집중하는 방향이었다. JPA는 이런 문제점을 해결하기 위해 등장했다. 관계형 데이터베이스 - 객체지향 프로그래밍 언어 2개 영역을 중간에서 패러다임 일치를 시켜주기 위한 기술. ..