Project
-
크리스마스 해커톤 후기Project 2021. 12. 28. 23:52
나는 어쩌다가 크리스마스에 해커톤을 하게되었는가 항해99에서 수료생들을 대상으로 크리스마스에 해커톤을 열었다. 해커톤, 단어는 많이 들어봤지만 참여해 볼 용기가 나질 않았는데 마침 약속도 없는 크리스마스이고 다른 수료생들을 함께 만나볼 수 있는 시간이 될 것 같아 참가하게되었다. 기대치않은 황금올리브치킨은 덤. 생각대로 크리스마스에 해커톤을 하겠다고 모인 인원이 많지 않았다. 새로운 만남을 원했지만 이미 아는 얼굴들과 해커톤을 하게되었다. 마침 모두가 입사한 지 얼마안된 따끈한 회사원들이라 머릿속에 기발한 주제같은게 떠오르지않았다. 품은 적게 들이면서 창대한것을 만들어내고싶었지만, 당장 일상에 가장 필요한 것을 만들기로 했다. 점심 추천 서비스 사내식당이 없는 회사에 다닌다는건.. 매일 점심을 고민해야한..
-
테스트코드 작성하기Project 2021. 8. 8. 04:55
그동안 미루고 미뤄왔던; 테스트코드를 작성했다. 나에게 엄청난 장벽이 느껴졌던 테스트코드인데, 직접 작성해보니 또 그렇게 엄청난!! 어려움을 가진 무언가는 아닌듯도 하고..?(경거망동) 또, 테스트코드는 내 코드의 결함을 보여준다는 의미라고하는데 사실 아직 무슨 말인지 잘 와닿지 않았었는데, 아니 이걸 보면 내 코드의 결함이 보인다고?..하는 의구심을 품었지만 역시 백문의불여일타라고, 직접 해보니까 알겠다. 내 코드의 이상한 부분을;; 테스트코드를 짜다보면 안보려고해도 ... 보일 것 같다. ((그리고 고치지 못해 괴로운 나.. 보인다..보여..)) 오늘은 auth-middleware에 대해서만 테스트코드를 작성했지만, 앞으로 점점 테스트코드를 많이 써보려고한다. 이전에 했던 프로젝트에 테스트코드를 덧입..
-
[리팩토링] socket.js 코드 분리하기Project 2021. 8. 5. 01:49
socket.js 코드 좀 깔끔하게 만들고싶은것이 내 숙원이었음.. 한 두달 전에 짜 놓은 코드는 socke.io 문서 읽어가며 어영부영 작동시키느라 바빴지만 이번엔 잘 이해해서 좀 읽기 좋게 만들어보고싶었다. 인강과 몇번의 뻘짓으로 드디어 끝냈다. 해냇따구? socket.js에 무더기로 쌓인 코드 처리하기 이전의 코드는 이런식으로 실행이 됐다. app.js에서 app object을 이용해 server listen 실행 server listen하는 코드는 ` server ` 라는 변수명에 저장 socket.io를 require하여 app.js 내에서 ` server `를 인자로 사용해서 실행 socket.js는 인자로 받은 server를 통해 동작 여기서 socket.js의 코드는, socket.io 실..
-
[리팩토링] 챗봇 추가하기Project 2021. 7. 25. 01:45
처음에 오쿠의 채팅방은 거래 성사 이후 생성이 되도록 하는것이 목표였다. 그러나 정작 채팅기능을 만들고나니 첫 화면에 모든 사람들과 채팅을 할 수 있는 방이 생겼다. 원인은, 채팅방(room)의 정의를 productId-userId-userId 로 하였는데, 세가지가 undefined인 경우에 대해 예외처리를 하지 않아서이다. 즉, 아래 채팅방에서 리스트의 목록을 누르지 않은채로 있으면 room은 undefined-undefined-undefined가 되어버리고, 그럴 경우 모든 유저들은 undefined 방에 접속되어 말 그대로 아무나 채팅이 되어버리는 것이었다. 그런대로 나쁘지않은 기능이었지만, 의도하지 않은 기능을 그냥 두는것은 뭔가 .. 휘뚜루 마뚜루 오 됐지 뭐~! 이런 느낌이어서 해당 기능에 ..
-
[리팩토링] 유저 가입 코드 수정Project 2021. 7. 15. 23:34
오쿠 프로젝트의 코드를 리팩토링 중이다. 자바스크립트도 공부하고, CS공부도 하고있는데 배운걸 진짜 그냥 코드에 한번 발라보고싶었다.. 배운건 짧아도 다 써먹어보고싶은것이 자연의 이치이다. 분명 내가 짰는데 동작을 헷갈려서 엉뚱한 코드를 짰다. .... 내가 나 자신에게 당하다니.. 똑같이 userEmail, userNickname의 중복 여부를 체크하는 코드였지만, 하나는 클라이언트쪽에서 입력받자마자 확인할 수 있는 api였고 나머지 하나는 회원가입하면서 밸리데이션하는 코드였다. 그런데 이름을 둘 다 checkEmail,checkNickname으로 해놔서.. 한 번 엉뚱하게 코드를 작성해서 시간 버리기..! 취미이자 특기이다. userController.js파일이 너무 방대해졌다. 그래서 클라이언트쪽에..
-
[OKU] 유효성 검사는 어디에서 발생하는가?Project 2021. 7. 2. 00:34
유효성검사 코드를 조금 수정해놓았다. 기존의 코드는 컨트롤러단에서 검사를 하고 있어서 코드를 보기 어렵다고 판단했다. 문득, 유효성검사 코드를 건드리면서 궁금한 점이 하나 생겼다. 유효성 검사는 어디에서 일어나는걸까. 1. 클라이언트 2. 비즈니스 로직 3. DB단 유효성 검사는 클라이언트, 비즈니스로직, 데이터베이스 등 애플리케이션 전체에 골고루 분포될 수 있다. 하지만 유효성 검사가 여기저기 분포될 수록 코드의 관리가 어려워진다. 검사 조건이 변경될 때 마다 찾아서 변경할 수도 없고, 클라이언트와 데이터베이스간의 유효성 검사 조건 맞추는 것도 일일이 비교대조 해야해서 시간이 꽤 걸렸다. 거기에 잘 작동하는지도 일일이 확인해야했다. 비즈니스 로직에서 추가적으로 유효성 검사를 하면 좀 더 튼튼한 웹사이트..
-
채팅 생성하기Project 2021. 5. 27. 18:36
거래가 성사되면, 사이트 내에서 유저들간에 소통을 할 수 있도록 채팅방을 제공했다. 개개인마다 채팅방 목록이 다 다를것이기때문에 어떻게 응답을 해줘야할 지가 참 고민이었고, 또, 어디서 어떻게 데이터를 가져와서 내려줘야할 지도 고민이었는데, 이 때 디비 수정이 용이한 몽고디비를 쓰고있어서 다행히 해결할 수 있었다. 처음에는 거래 성사 이후 낙찰정보에 대한 DB를 따로 생성해야되는것인가? 라고 생각했는데, 그렇게하면 제품명, 판매자 등 이미 오쿠 제품 DB에 있는 정보를 중복으로 저장한다는점을 알게됐다. 그래서 제품DB에 낙찰자 정보를 추가하고, 제품 기준으로 제품명, 판매자, 낙찰자 등의 정보를 이용해서 채팅방을 생성하도록하였다. 정확하게는 채팅 목록을 json 형식으로 응답해주었다.
-
오쿠 기술 소개Project 2021. 5. 26. 12:33
악의적 사용자가 즉시낙찰 기능을 사용할 경우, 제품의 판매상태가 바뀜 -> 즉시낙찰의 경우, 최고가 낙찰의 기능으로 바꿨다. -> 즉시낙찰가에 입찰 한 유저가 있을 경우, 거래대기중 상태로 변경되고 -> 판매자가 거래하기 버튼을 눌러야만 판매상태로 변경되도록 수정했다. 사이트 내 알림 시스템이 있으나, 이용자가 자주 확인하지 않음 -> 문의댓글이나, 거래가 성사될 경우 이용자에게 메일을 보내서 사이트에 자주 들어올 수 있도록하자 입/낙찰 -> 언제 실행시켜야 할 지, 어디서 실행시켜야 할 지 고민 -> MVP단계에선, 글쓰기를 할 때 node-schedule을 이용해서 마감시간이 되면 낙찰 로직을 실행 -> 글쓰기 자체의 로딩시간이 길어지고, 서버가 꺼졌다 켜지면 예약되었던 기능이 사라지는 등 (모듈 자..