springboot 26

20220204 개발일지

오늘은 주특기 3주차가 시작하는 날이다. 주특기 3주차 쯤 되면 그래도 Spring에 대해 많이 익숙해졌겠지 생각했는데, 전혀 아닌 것 같다. 어떻게 어떻게 한 주씩 과제를 마무리를 하고는 있는데, 잘 하고 있는 건지는 잘 모르겠다. 지난주 과제가 어려워서 이번주도 걱정이 많았다. 심화 4주차 강의를 듣고 있어서 일단 다 듣고 과제를 시작할까 했는데, 막상 과제를 받으니까 또 걱정이 되서 우선 과제부터 시작했다. 기본 과제는 배달 앱 서버를 구현하는 것으로, 식당과 메뉴 등록, 주문 등록까지 해야한다. 추가로 나온 과제에서 엔티티 간의 관계를 설정하는 부분이 있어서 4주차 강의를 모두 들었다. 강의노트+이론 부분만 들으려고 했는데, 실제로 어떻게 구현하는지 잘 모르겠어서 기능 구현하는 부분까지 모두 들었..

#ORM, JPA, Spring data JPA, SQL

#SQL(Structured Query Language) 관계형 데이터베이스 관리시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었다. 데이터 정의 언어(DDL: Data Definition Language) 데이터 조작 언어(DML : Data Manipulation Language) 데이터 제어 언어(DCL: Data Control Language) #ORM 객체(Object)라는 개념을 구현한 클래스와 관계형(Relational) 데이터베이스에서 쓰이는 데이터인 테이블을 자동으로 연결(Mapping)하는 것을 의미한다. 클래스와 테이블은 서로 호환가능성을 두고 만들어..

서버/Spring boot 2022.02.05

20220203 개발일지 #개인과제 정리

어제 새벽에 테스트 코드 구현은 했지만 테스트 코드로서의 기능은 제대로 못하는 것 같다. 오전에 username 중복 검사 부분을 프론트에서 넘겨주는 부분과 별개로 회원가입 서비스부분에 따로 구현을 해주고 다시 테스트 코드를 완성하였다. 오후에 심화 4주차 강의를 시작했고 팀과제를 마무리하였다. 이번주에는 자바나 알고리즘의 거의 손을 못댔는데, 앞으로도 틈틈히 잘 볼 수 있을지 걱정이 된다. 심화 강의에 디버깅을 하는 부분이 있었는데 앞으로 코드를 짤 때 중간중간 확인하면서 작업하기 좋을 것 같다. 개인과제 프로젝트 : 로그인 기능이 포함된 게시판 구현하기 github: https://github.com/paran22/springprac2 전체적으로 구현해야할 기능이 많았다. 기능 구현하면서 회원가입 유..

20220202 개발일지

오늘은 회원가입 유효성 검사 부분을 진행하고 테스트 코드를 작성하였다. 다른 분들과 과제 한 내용을 얘기하면서 다른 방식으로 수정하기도 하고, 이 방법이 좋은 방법인지에 대해서도 더 생각해보게 되었다. 1. 회원가입 유효성 회원가입 유효성은 validation을 이용하여 스프링 서버 자체에서 검사를 하는 것으로 작성을 했었는데, 회원가입 데이터를 굳이 서버에 넘겨서 다 유효성 검사를 해야되는지 고민이 되었다. 프론트에서 일단 유효성검사를 마친 데이터만 서버로 보내주고 싶어서 서버에 있는 부분을 지우고 프론트에서 유효성 검사를 하는 코드를 작성하였다. 기존에 회원가입이 form action으로 들어가 있었는데 ajax로 변경하니 계속 에러가 났다. 해당 컨트롤러에 return값이 redirect:/user..

20220131 개발일지 #@Valid

오늘도 개인 과제를 위주로 하였다. 우선 로그인 여부에 따라서 프론트에서 보이는 버튼을 다르게 설정하였다. 타임리프에 security와 관련해서 사용할 수 있는 문법이 있어 간단하게 구현할 수 있었다. 각 페이지별로 필요한 버튼들을 인증 여부에 따라 설정하였다. 로그인 회원가입 글쓰기 로그아웃 그리고 댓글을 작성자 본인만 수정, 삭제할 수 있도록 구현하였다. 로그인 여부가 아니라 작성자 본인으로 권한을 설정해야해서 어려웠다. detail 페이지에서 로그인한 작성자의 id를 불러와서 댓글에 저장한 userId와 동일한 경우에만 수정, 삭제 버튼이 보이게 하였다. html 페이지에서 로그인 정보를 어떻게 확인해야 하는지, 그리고 이 정보를 ajax로 불러온 userId와 어디서 비교를 해야할지 고민이 많았다..

20220129 개발일지

오늘은 개인과제의 페이지들은 모두 구현하는 것으로 목표를 정했다. 게시판 글쓰기(/write)를 다른 페이지로 분리하고, detail페이지를 완성하였다. 첫날 진행하면서 페이지 구현방식에 고민이 있었는데, 페이지 로드는 기본적으로 타임리프를 사용하여 controller에서 해당 html을 return해주는 식으로 했고, 그 다음에 ajax를 통해 필요한 데이터들을 restcontroller 방식으로 불러왔다. 게시글 상세보기같은 경우에는 게시글 박스에 링크를 걸어서 누르면 /detail로 이동하게 하였고, 조회할 게시글 id값도 보내주었다. 다음과 같이 url로 하면 해당 url에 접속했을 때 detail.html이 return되도록 controller에 작성해주어야 한다. 혹은 detail.html을 ..

20220128 개발일지

주특기 2주차가 시작되었다. 이번 주의 개인과제는 첫주와 유사한 게시판이지만 여기에 로그인 등 Spring security 기능을 추가하는 것이었다. 심화 2주차 강의 중 소셜로그인(카카오로그인) 구현 전까지 강의를 들으면서 개인 과제의 로그인 기능을 먼저 구현했다. 그리고 주특기 1주차에 작업한 내용을 바탕으로 기본 페이지를 구현하였다. 이번에는 개인과제 샘플이 있어서 어떤 식으로 구현해야할 지 방향 잡기가 쉬웠다. 개인과제에서 구현해야 할 기능들과 조건이 많아서 쉽지 않아보인다. 크게 고민되는 부분은 다음과 같다. 1. 페이지 구현방식 : 타임리프? json? 먼저 고민했던 부분은 페이지 구현방식이었다. 타임리프를 쓸 것인지가 가장 고민이 되는 부분이었다. 심화강의에서는 페이지 이동은 타임리프를 사용..

20220127 개발일지 #원페이지 게시판 controller/service 분리

오늘은 3주차 마지막날이다. 개인과제는 이미 제출했고, 팀과제는 수정/추가했다. 알고리즘 문제를 몇 문제 풀고, 어제부터 보기 시작한 Spring 심화편 강의를 이어들었다. 심화편 강의에서 이번에 Spring 시작하면서 느꼈던 의문들이 거의 해소되었다. 내용도 많고 복잡하지만, 왜 Spring을 사용해야 하는지에 대해 Spring을 안쓰는 것부터 시작하는게 좋았다. controller나 service, repo의 경우에도 먼저 안써보고 쓸 경우 어떻게 바꿀 수 있는지, 스프링의 중요 개념인 DI를 쓰면 어떻게 코드가 변하고 장점은 무엇인지 비교해주어서 좋았다. 1주차 강의를 오늘까지 듣고 마무리하고, 배운 내용을 바탕으로 추가로 만든 원페이지 게시판 코드를 일부 수정했다. 처음에 멀티페이지로 만들면서 좋..

20220126 개발일지 #게시판 만들기(원페이지)

다른 분들의 도움으로 원페이지 게시판 만들기도 성공했다. 게시글 1개 조회하기가 구현이 잘 안되서 계속 문제였는데, 우선 어제 팀원분이 모달로 띄우셨다고 해서 참고해서 만들었다. 게시글 목록을 불러오는 fuction 안에 모달을 포함해서 모달 실행 시 상세페이지가 모달로 보이는 형태다. 이렇게 하면 controller에서 게시글 1개를 불러오기 위한 GetMapping을 별도로 만들지 않아도 되고, html에서도 목록 불러오기 function 하나로 해결할 수 있다. 그런데 모달의 특성인지, 이렇게 하면 게시글의 제목, 작성자, 작성일이 테이블안에 제대로 들어가지 않았다. 오늘 스터디하고나서 show/hide로 하신 분의 코드를 보았다. 처음에 내가 생각했던 것처럼 목록 불러오기에서 onclick(혹은 ..