개발일지(주간) (30) 썸네일형 리스트형 29주차 개발일지 팀프로젝트가 끝나고 한주간 쉰 다음 모의면접을 보고, 프로젝트에 캐싱을 적용해 보았다. 모의면접을 봤을때 아쉬웠던 점은 평소에 알았다고 생각했던것들을 제대로 대답하지 못한 점이었다. 어떤 코드나 어떠한 기술을 왜 적용했는지 평소에 생각하고 쓰고 있다고 생각했는데, 아직 많이 부족하다고 느꼈다. 클러스터드 인덱스라는 것에 대해서는 아예 모르고 있던 것인데 찾아보니 면접 질문으로 많이 나오는 질문이라고 한다. 기술면접 대비를 좀 더 해야겠다는 생각이 들었다. 그리고 기존 프로젝트에 캐싱을 적용했다. 우리 프로젝트에서는 매 페이지마다 프로필을 로딩하고, 구조상 프로필을 로딩할때마다 쿼리를 두개씩 날리게 되는데, 한번 로그인하면, 그 정보를 캐싱해서 프로필을 로딩할때 날아가는 쿼리를 줄여 보았다. 실제 페이지에.. 28주차 개발일지 프로젝트 배포를 했다. 배포를 하면서 익숙한 문제와 익숙하지 않은 문제들을 만났다. 일단 집 유선인터넷으로 ssh port 22번으로 접속이 되지 않는 문제가 있었는데 ec2에서 다이렉트로 접속해서 ssh접속 포트를 바꿔줌으로써 해결했다. 그리고 프로젝트를 올려서 빌드를 시켰는데 properties에 있는 민감정보를 암호화시켜놨는데 이를 복호화 하지 못해서 빌드가 되지 않았다. 이 문제는 우분투 환경변수로 키를 줌으로써 해결했다. 세번째는 프론트는 https인데 백엔드 부분이 https가 아니라 생기는 mixed contents? 오류가 있었다. 백엔드 부분도 nginx를 사용해 https배포를 해 해결을 하였다. 네번째는 xss문제가 있었다. 정말 기초적인 xss공격인 같은 것도 못막고 스크립트가 포함.. 27주차 개발일지 이번주는 개발해놓았던 api들을 연결해 프론트 페이지를 만들고, 프론트 페이지를 좀 수정했다. 백엔드 부분은 비효율적으로 나가는 쿼리 정도만 정리 해 준것 같다. 개발 내내 내가 맡은 부분에 대해서는 쿼리가 어떻게 나가는지 신경쓰면서 만들고 있는데, 그래도 부족한 점이 많은 것 같다. 또한 주말동안에 배포를 어떻게 해야할지 생각하면서 배포의 개념에 대해서 조금 공부 했는데, aws ec2, s3, cloudfront, rds 정도를 활용해서 배포를 시도 해 볼 생각이다. 아직 자세히는 알지 못하고 이런게 있다 정도만 알아놓은 상태라 자세한 것은 직접 구현을 하며 알아봐야 할 것 같다. 그리고 ELK라는 것도 있는데 이에 대해서는 우선 배포를 하고 알아볼 생각이다. 다음주 내로 프론트는 완전히 마무리 짓고.. 26주차 개발일지 프로젝트 중간발표를 마무리하는 주였다. 어찌어찌 프론트 페이지까지 대충 만들어서 발표를 하긴 했는데, 다른 조에 비해서 준비가 많이 부족했던 것 같다. 프론트 페이지가 만들어진게 백엔드 기능에 비해서 많지 않기도 했고, 백엔드에서 만들어진 api가 하나씩 나사가 빠진 기능들이라 추가로 리팩토링 해야 할 것 들이 많은것 같다. 일단 주말에 쉬면서 간단하게 프론트에서 이메일 인증을 하던것을 서버에서 하게 만들었다. 기존에 팀원이 만들어놓은 이메일 인증이 서버에서 인증하게 하면 같은 인증번호만 계속 보내는 이슈 때문에 서버에서 인증을 하지 않고 프론트로 보내서 프론트쪽에서 비교하게 했는데, 문제는 페이로드로 인증 코드가 다 노출된다. 만약 실제 서비스였으면 콘솔만 열어도 다른사람의 이메일을 사용하여 가입 할수.. 25주차 개발일지 프로젝트 진행 2주차다. jpql로 써져있던 쿼리문을 쿼리 dsl을 사용하는 것으로 변경하고, 프론트 페이지를 만드는 등의 변경과 추가가 있었다. 이번주에는 프론트 페이지를 만드느라 정신이 없었던것 같은데, cors에 대한 개념과, 백엔드와 프론트 사이에 어떻게 값을 주고 받는지 더 자세히 알게 된 것 같다. 사실 오래되긴 했지만, 부트캠프 초기에 파이썬 flask와 js, 몽고db를 사용하여 간단한 웹페이지를 만든 적이 있는데, 프론트와 백엔드간의 흐름은 틀만 놓고 보자면 그때 했던것이랑 크게 다를 것은 없었던 것같다. 단지, 그때는 하라는대로 따라했고, 백엔드 개발자가 어떤 것을 해주어야 하는지 몰랐기 때문에, 감을 잘 잡지 못했다. 백엔드에 대한 지식이 조금 쌓인 지금에서야 그때 했던 것들이 왜 그.. 24주차 개발일지 이번주는 새로운 팀 프로젝트를 시작했다. 팀원 개개인의 수준이 다르기 때문에 어떻게 진행을 해야 할지 고민했는데, 일단 애자일 방법론의 스크럼 방식과 비슷하게 진행하기로 했다. 작업을 논의하며 우선순위를 정해 구현을 시작했고, 프로젝트의 처음부터 끝까지 모두 설계하지 않고 우선순위로 논의한 항목에 대해서만 설계해 작업을 시작했기때문에 일단 작업은 빠르게 진행되고있다. 이에 대해서 피드백 페이지에 질문을 했으나 아직 답변을 받지 못했다.. 이번에 협업을 어떻게 해야할지 고민하면서 깃허브 이슈로 작업을 관리하는 법과 pr템플릿이란것을 알게 되었다. 증간에 풀리퀘스트를 잘못 날려 깃허브를 한번 초기화하는 문제도 있었다. 정신없이 작업하다 실수를 했었는데 pr을 할때 신경을 좀 더 써야겠다는 생각이 들었다. 기.. 23주차 개발일지 jpa심화에 대해서 배우기 시작했다. spring data jpa 이전의 db작성법에 대해서도 배웠는데, spring data jpa가 나 대신 얼마나 많은 일을 해주는지 알게 되었다. 또한 QueryDSL에 대해서도 배웠는데, 아직도 개념이 헷갈려서 강의를 다시 보고 있다. QueryDSL을 사용하는 이유는 4가지가 있는데, 다음과 같다. 문자가 아닌 코드로 쿼리를 작성함으로써, 컴파일 시점에 문법 오류를 쉽게 확인할 수 있다. 자동 완성 등 IDE의 도움을 받을 수 있다. 동적인 쿼리 작성이 편리하다. 쿼리 작성 시 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다. QueryDSL과 JPAQueryFactory를 사용하면 직접 jpql을 써서 쿼리를 작성하는 것보다 더 직관적으로 작성할 수 있다.. 22주차 개발일지 프로젝트 발표를 마무리하고 테스트코드 작성, 프로젝트를 진행할때 해보지 못했던 웹소켓 적용을 해 보았다. 팀프로젝트를 하면서 미흡한 부분들이 많이 느껴져 다음 팀 프로젝트에는 미흡한 부분들에 대해서 더 생각해보면서 진행해볼 생각이다. 테스트코드는 기존에 사용하던 mockito의 @mock외에 @spy라는 것을 이용하기도 한다는 것을 배웠는데, @spy는 실제 기능을 그대로 사용하여 테스트 할때 사용한다. 아직은 잘 모르겠지만 몇번 적용을 하여 사용해보니 단위 테스트를 할때 @spy를 많이 쓸일은 없을듯 하다. 단위테스트에서 @spy를 써가면서 그 객체에 대한 테스트를 하기보다는 그 객체의 테스트코드를 따로 써서 확인하는게 옳은듯 하다는 생각이 들었다. 물론 어쩔수 없이 @spy를 써야하는 경우도 있겠지만.. 21주차 개발일지 이번주는 팀프로젝트를 진행했다. 팀프로젝트의 구현목표는 판매자와 구매자를 매칭하는 마켓으로 정했다. 각각 기능별로 서비스를 나눠서 각자 분업을 했는데, 처음에 계획한것과 많은 변경점이 생기게 되었다. 테스트 도중에 분명 맞는값을 넣어줬는데 동작하지 않아 살펴보니 정해진 대로 만들지 않아 생기는 오류였다. 협업을 하면서 계획을 한대로 구현하는 것이 얼마나 중요한지 알게 되었다. 관리자 기능과 페이징 처리를 구현했었는데, 페이징 처리된 리스트를 페이지로 반환해주는 이유를 알게 되었다. 페이지로 반환하면 반환데이터 안에 페이지의 정보가 있는데, 이 정보를 보고 프론트쪽에서 구현하도록 정보를 보내 주는 것이다. 그런데 페이지의 반환데이터가 제대로 들어가지 않아 고생을 했었는데, pageImpl로 반환할거면 pa.. 20주차 개발일지 이번주는 예외와 오류의 차이, sql에 대해서 배웠다. 그동안 예외와 오류의 차이를 이해하지 못하고 혼용해서 쓰고 있었는데, 이번기회에 확실히 알게 되었다. 그리고 예외에도 반드시 처리해주어야 하는 예외와 처리를 강제하지 않는 예외가 있다는 것을 알았다. 앞으로는 예외와 오류의 차이, 반드시 처리해주어야 하는 예외와 처리를 강제하지 않는 예외의 차이를 인지하며 처리를 해야겠다고 생각했다. sql은 기존에 배웠던걸 다시 배운다는 생각으로 배웠는데, 제약조건과 인덱스에 대해서 새로 배웠다. 그동안 jpa가 날리는 쿼리가 무슨 소리인지 이해하지 못했는데 제약조건과 인덱스를 배움으로써 이해할 수 있게 되었다. 주말동안에는 테스트 코드에 대해서 공부했다. 새로 프로젝트를 만들면서 테스트 코드도 써보면서 진행하기로.. 이전 1 2 3 다음