항해99 62

20220303 개발일지 #socket.io

nodeJS로 socket.io를 구현하기 위해 먼저 노마드코더에서 무료로 제공하는 줌 클론코딩 강의를 듣고 해당 코드를 가지고 서버에 올려서 프론트와 연결해보기로 했다. 강의 듣기 전에 node에 대해서 너무 모르는 상태라서 코드잇에 있는 강의를 앞부분만 들었다. 비동기 개념이 너무 신기했고, 서버를 정말 간단하게 구현할 수 있다는 것이 놀라웠다...! 아직 스프링도 잘 이해한 상태가 아니라서 제대로 비교하기는 그렇지만 확실히 다른 타입인 것 같다. 또, 자바와 스프링을 조금 하고 공부를 시작하니 라이브러리를 인포트에서 쓴다던지, 필요한 객체를 선언하는 거라든지 클라이언트와 서버에 대한 기본적인 관계는 이해가 되어 있어서 가볍게 지나갈 수 있었다. 하나를 잘 해놓으면 다른 언어나 프레임워크를 배우기 수..

20220302 개발일지 #유저 이름 랜덤으로 구현하기

socket.io는 별도로 구현하기 때문에 이것과 상관없이 spring은 계획한대로 진행하기로 했다. API 명세 중 우선 방 만들기와 방 참여하기 부분을 구현했다. 로그인이 없이 게임을 참여할 때만 유저를 임시로 만들기로 했기 때문에 이 부분을 어떻게 처리해야 할지 고민이 많았다. 우선은 유저의 nickName을 임의로 주기로 했는데, 로직을 어떻게할지 고민이 많았다. 처음 생각했던 것은 별도의 엔티티를 생성해서 거기서 가져와 쓰는 것이었는데 이렇게 하면 유저가 추가될 때마다 DB가 조회되고, 유저샘플로 저장할 데이터가 많은 것도 아니라 그냥 방을 생성할 때 배열을 만들고 거기서 닉네임을 랜덤으로 꺼내오는 메소드를 만들었다. private String getNickName() { // User에 nic..

20220301 개발일지 #webRTC!!??

큰 이슈가 있었다. 우리가 구현하고자 하는 서비스는 최대 4명까지 보이스 채팅이 가능한 게임방을 만드는 것인데 spring으로 구현한 signalling 서버로는 1:1 P2P 연결만 구현할 수 있었다. P2P로 다중 연결도 가능은 하나 서버에 부하가 올 수 있고, 무엇보다 참고자료를 거의 찾을 수 없었다. spring으로 WebRTC를 구현한 케이스도 몇 개 없었는데 구글에 검색했을 때 뜨는 게 없었다. 그래서 몇 가지 안을 놓고 팀 안에서도 회의를 하고, 매니저님께도 의견을 구했다. 기능을 구현하지 못해 서비스를 축소하거나 다른 서비스를 도입하는 것은 프로젝트라는 측면에서 좋은 선택지는 아니라고 생각했고, spring으로 구현하는 것은 자료가 거의 없어서 난이도가 너무 높았다. 마지막으로 고민한 건 ..

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

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

20220223 개발일지

오늘은 추가 기능인 댓글 작성, 삭제, 조회하기를 팀원들과 함께 구현하였다. 추가기능이 많지 않아서 역할을 분담하기 어려웠다. 오늘 오후부터 시작했기 때문에 앞에 먼저 하신 진행상황을 보고 추가로 필요한 부분을 덧붙였다. 이미지를 S3에 저장하는 과정에서 application.properties에 서버 정보가 노출되는 문제가 있었다. properties를 하나 더 만들어 여기에는 공유되면 안되는 정보들을 넣고, 이 값을 .gitigore에 포함하여 깃허브에는 업로드 하지 않았다. 이런식으로 추가되는 파일을 원래 application.properties에 작성해주면 된다. spring.profiles.include=aws 프론트에서 S3에 완성된 코드를 올리고 테스트를 하는 과정에서 security에서 허..

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..

20220219 #주문하기 구현하기 + fetchType??

스프링 시큐리티는 지난번에 사용한 코드를 거의 그대로 가져와서 금방끝났다. 프론트에서 로그인하시는 분이 지난주에는 노드랑 하셔서 방식이 조금 달랐던 것 같은데, 다행히 다른 프론트 분이 도와주셔서 크게 어려움없이 금방 끝낼 수 있었다. #주문하기 주문하기 부분을 하고 있어서 구현을 했는데, 아직 장바구니 부분이 완료되지 않아서 TestData를 넣고 했다. 이 부분을 하다보니 생성자 메소드를 새로 만들어야 했다. 그리고 ProductInCart를 주문하기로 넘기면서 기존에 있던 Cart와의 연결관계를 끊는 메소드도 추가하였다. public class ProductInCart { ... //연관관계 편의 메소드 public void setCart(Cart cart) { this.cart = cart; ca..

20220218 개발일지 #클론코딩 엔티티 설계하기

오늘부터 새로운 프로젝트를 시작한다. 처음에 cgv 예매를 하려고 했는데 엔티티를 설계하는데 복잡해져서 주제를 바꾸기로 했다. 몇 개가 후보로 나와서 사다리를 돌렸고, 마켓컬리를 하기로 했다. 메인페이지와 상세페이지, 장바구니 페이지를 만들고 상품을 장바구니에 담고 주문하기 버튼을 누르면 주문하기 테이블에 담는 것 까지 하기로 했다. 추가로 가능하다면 포토리뷰를 작성하는 것을 하기로 했다. 먼저 설계한 엔티티 구조는 다음과 같다. 처음에 ProductInCart와 ProductInOrder을 따로 만들었는데 내용이 거의 똑같아서 고민이 있었다. 저녁에 ERD 세션이 있었는데, 질문에서 좋은 팁을 얻을 수 있었다. ProductInCart에 state라는 Column을 추가해서 장바구니에 담긴 상태에서는 ..

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

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

20220216 개발일지 #JWT 구현 정리

프론트에서 로그인 작업을 빨리 끝내주셔서 금방 회원가입/로그인을 테스트해볼 수 있었다. 다행히 큰 이슈 없이 잘 작동하는 것을 확인할 수 있었다. 헤더에 보낸 토큰이 프론트에서 안보이는 문제가 있었는데, cors를 수정해서 해결했다. 특히 exposeHeaders("Authorization")은 반드시 포함해야한다. @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("") .allowedMethods("GET", "POST", "PUT", "DEL..