springboot 26

20220722 TIL #리패키징 #전략패턴

계속 미루고 미루던 리패키징을 했다. 처음에 패키징 구조를 제대로 정하지 않고 시작하다 보니 패키지가 같은 뎁스에 계속 추가만 되고 있었다. 또 중간중간에 기획이 계속 바뀌다 보니 동일한 뎁스에 있어도 될 것 같은 패키지가 흩어져 있는 것도 있었다. 계층구조로 구분할 건 구분하고, 필요한 건 가까워질 수 있도록 수정하였다. 네이밍과 api 계층도 일부 수정했다. 당장 기능 구현해야되는 것도 있어서 다 수정하지는 못했지만, 크게 패키지 구조는 정리가 되서 틈틈히 더 수정하면 될 것 같다. 이와중에 main만 패키지 구조가 변경되고 test는 변경이 안되서...... 도와주는 플러그인이 있다고 하는데 왜 변경이 안됬을까?? 당연히 test도 변경이 됬다고 생각하고 확인을 안했는데 나중에 다시 살펴보니 하나도..

회고 2022.07.22

20220706 TIL #테스트코드 리펙토링 @DataJpaTest @SpringBootTest

프로젝트에서 추가되거나 변경된 기능이 많다보니 사용하지 않는 변수나 메소드, enum이 많아졌다. 아직 어떤 맥락인지 파악이 가능할 때 정리하는 게 좋을 것 같아서 틈틈히 수정하고 있다. 비즈니스 로직을 수정하다보면 테스트코드도 수정이 필요할 때가 있어서 같이 보게 되는데, 테스트코드에도 삭제하고 치워야 할 흔적들이 많이 남아있었다. 특히 테스트코드에서 TestBase 클래스를 만들어서 공통으로 사용하는 클래스를 주입하거나 설정들을 동일하게 사용하는 경우들이 있었는데, 계속 새로 추가되면서 비슷한 TestBase 클래스가 여러 개 생긴 것을 확인할 수 있었다. 현재 프로젝트에서 단위테스트와 통합테스트를 하고 있는데, 통합테스트의 경우에는 @DataJpaTest를 사용하는 경우도 있고, @SpringBoo..

회고 2022.07.08

20220228 개발일지 #실전프로젝트

정말 오랜만에 쓰는 개발일지이다. 실전프로젝트를 시작하고 며칠동안 정말 많은 일이 있었다. 마지막까지 고민하다가 다른 분들이 응원해주셔서 리더로 지원해볼 수 있었다. 같이 해보고 싶던 분들과 모두 한팀이 되서 너무 기쁘다. 아이디어도 금방 정하고, 중간에 피드백 받으면서 생각하지 못한 부분에서 지적받아 고민도 있었다. 아무래도 웹게임을 만들다보니 페이지 수가 적어서 디자이너 분들과도 협의가 필요했다. 매일매일 잘 하고 있는건지 고민이 많다. 기간은 한정되어 있는데 그 안에 어떻게 하면 더 잘 해낼 수 있을지, 당장 일은 어떻게 나누는게 좋을지, 무엇부터 시작해야 할지 등등!! 그래도 좋은 팀원들 만나서 서로 힘내서 할 수 있을 것 같다. 6주가 짧은 기간은 아니니, 페이스 조절을 잘 하면서 더 열심히 해..

20220221 개발일지 #주문조회하기

오늘은 추가로 다 구현하지 못한 기능들을 같이 완성했다. 프론트에서도 작업이 빨리 끝나서, 실질적으로 처음 잡은 기능들을 완성되었다. API 명세에는 없었지만, 주문 조회하기 기능도 만들어 놓으면 좋을 것 같아서 추가로 구현했다. responseDto를 새로 만들어서 기존의 Cart조회와 유사하게 리턴되게 하였다. @AllArgsConstructor @Getter public class OrderResponseDto { private Long orderId; private String createdAt; private List product; private Long totalPrice; private Long deliveryFee; private String state; } 처음에 구현한 뒤에 Produ..

20220217 #미니프로젝트2 마무리

오늘로 프론트와 처음 진행한 미니프로젝트가 마무리되었다. 전반적으로 백엔드 진행속도가 빨라서 추가로 틈틈히 공부할 수 있었다. JPA 책으로 공부를 시작했는데 책에 설명이 잘되어있어서 따라가기에 많이 어렵진 않았다. 사실 시간이 난 만큼 더 공부를 했으면 좋았을텐데, 너무 피곤해서 많이 공부하지는 못한 것 같아서 아쉽다. 한편으로는 항해 끝날때까지 컨디션 관리도 해야하는데 그 중간을 조절하기가 쉽지 않은 것 같다. 프론트와 처음 작업하면서 협업도 처음이었지만, 서로 기술적인 부분에서도 이해가 전혀 없어서 작업을 진행하는게 쉽지 않았다. 정말 작업하면서 리액트를 공부해야하나, 라는 생각도 들었다. 그래도 우리 팀원들이 다들 잘해줘서 무사히 잘 마칠 수 있었던 것 같다. 특히 로그인 부분을 급하게 수정했는데..

#CORS 설정하기

#SOP(Same-Origin Policy) 같은 Origin에만 요청을 보낼 수 있게 제한하는 보안 정책 Origin의 구성 URI Schema(ex. http, https) Hostname(ex. localhost, naver.com) Port(ex. 80, 8080) 이 중에 하나라도 구성이 다르면 SOP 정책에 걸림! #CORS(Cross-Origin Resource Sharing) 서로 다른 Origin끼리 요청을 주고 받을 수 있게 정해둔 표준 1. Annotation 이용하기 origins, methods, maxAge, allowedHeaders를 각각 지정할 수 있다. 메소드에도 지정가능. @GetMapping("/api/get") @CrossOrigin(origins = "*", all..

서버/Spring boot 2022.02.12

20220210 개발일지 #ErrorCode구현하기

오늘은 에러코드를 구현하였다. Spring security쪽 에러는 처리하지 못하고 그외 다른 exception으로 처리한 부분을 모두 ErrorCode로 정리해주었다. #ErrorCode 다음과 같이 각 에러마다 HttpStatus값을 지정하고 에러코드와 메세지를 입력하였다. @Getter public enum ErrorCode { // 400 Bad Request INVALID_MIN_ORDER_PRICE(HttpStatus.BAD_REQUEST, "400_1", "1,000원 ~ 100,000원 사이를 입력해주세요."), TYPE_ERROR_MIN_ORDER_PRICE(HttpStatus.BAD_REQUEST, "400_2", "100원 단위로 입력해주세요."), INVALID_DELIVERY_FE..

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

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

#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쪽이 주가 된다. ..