분류 전체보기 210

20220208 개발일지

코드잇에서 cs 듣던 부분을 모두 들었다. 강의가 세세하지는 않지만 큰 흐름을 잡기에 좋은 것 같다. 다른 강의들도 조금씩 들어야겠다. JAVA랑 Spring 공부하려고 산 책을 스캔했다. 세세하게는 못봐도 항해하면서 1회독 하는걸 목표로 해야겠다. Service부분을 추가적으로 리팩토링했다. 처음에는 혼자 리팩토링하는게 어려웠지만 매개변수와 return값만 잘 지정하고 나면 크게 어렵지 않았다. security 권한 부여는 @Secured를 사용했다. 그런데 프론트를 구현해놓지 않아서 ARC로는 테스트가 한계가 있었다. 기존에 테스트 코드도 기능들이 추가되면서 수정이 필요한 상황이었다. 처음에는 기존에 있는 코드에서 수정을 하려고 했는데, security 부분이 들어가서 쉽지 않았다. controlle..

20220207 개발일지 #기능일부 추가

오늘은 개인공부 위주로 하고 저녁에 과제 추가기능을 일부 구현하였다. 심화 5주차 강의를 다 듣고, 코드잇에 컴퓨터 아키텍처 강의가 있어서 cs 스터디 공부를 위해 들었다. 회로 부분은 여기에도 자세히 설명되어 있지 않아서 이해가 안가지만 CPU가 돌아가는 부분은 도움이 많이 됬다. 레지스터나 RAM 부분에서 어떻게 작동는지, 코드를 작성하면 이게 어떤 과정을 거쳐서 실행되는지 큰 틀은 조금 잡은 것 같다. 추가 기능은 배달 가능 음식점 조회하기, 배달비 추가 할증 부분을 구현하였고 스프링 시큐리티도 기본 회원가입/로그인 부분은 구현하였다. 처음에 시작하기 전에 어려워 보여서 엄청 겁을 먹었는데 배달 가능 지역은 거리 계산하는 방법을 해결한 뒤에는 어렵지 않게 구현할 수 있었다. 스프링 시큐리티도 지난주..

#에러처리

예측이 가능한 에러를 exception처리를 하고 나서 HTTP status와 errorMessage를 보내줄 수 있다. 예를 들어, 클라이언트에서 입력값과 관련된 에러는 500 Internel Server Error가 아니라 400 Bad Request + 에러메세지를 보내서 어떤 부분에서 에러가 난 것인지 알려줄 수 있다. 프론트에서는 이 메세지를 활용해 팝업 등으로 보여줄 수 있다. 스프링에서 제공하는 ResponseEntity를 사용하면 HTTP status Code, HTTP headers, HTTP body를 선언할 수 있다. 그리고 이 클래스를 이용하여 원하는 내용을 클라이언트로 보낼 수 있다. package com.sparta.week03project.exception; import lom..

서버/Spring boot 2022.02.07

#AOP

#AOP란? 각 API별 수행해야 할 비즈니스 로직인 핵심기능 외에 부가기능이 있을 수 있다(로그 기록, API 수행시간 저장 등) AOP(Aspect Oriented Programming)을 통해 부가기능을 모듈화 할 수 있다. 스프링에서 제공하는 AOP를 사용해 부가기능을 별도로 설계, 구현할 수 있다. #스프링 AOP 부가기능을 제공하는 annotation을 사용하면 포인트컷에 맞춰 핵심기능을 구현하기 전/후에 부가기능이 실행된다. DispatcherServlet에서는 이전과 동일하게 controller로 요청을 보내지만 중간에 AOP 프록시 객체가 중간에 삽입되어 부가기능이 실행된다. #스프링 AOP 어노테이션 @Aspect : 스프링 빈(Bean) 클래스에만 적용이 가능하다. @Aspect @C..

서버/Spring boot 2022.02.07

20220206 개발일지 #배달앱 기본 기능 구현

오늘은 어제 제대로 못한 order 기능을 구현하는 것이 목표였고, 테스트 에러 문제도 다른 팀원 분들의 도움을 받아서 해결하였다. 테스트 에러는 return값 id를 restaurant로 하니 해결됬다! 앞으로 테스트코드 볼 때는 리턴 값도 잘 확인해야 할 것 같다. 2번 food의 경우에는 return이 없어야 했고, 3번 order는 return 값에서 변수명을 잘못 지정해서 nullexception이 났다. 먼저 테이블을 다시 설계하였다. 관련 기능을 구현한 블로그를 보고 많이 참고하였다. id의 경우 중복값 오류가 나오는 거 같아서 각각 테이블 명_id로 하였다. Entity는 Food, Order, OrderFood, Restaurant이다. 모두 1:N 양방향 관계이고, N쪽이 주가 된다. ..

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와 어디서 비교를 해야할지 고민이 많았다..